mirror of git://gcc.gnu.org/git/gcc.git
re PR c++/43116 (ICE when using attributes in a function alias declaration)
PR c++/43116 * attribs.c (decl_attributes): When rebuilding a function pointer type use the same qualifiers as the original pointer type. testsuite/ * g++.dg/other/pr43116.C: New testcase. From-SVN: r157578
This commit is contained in:
parent
3795eae664
commit
f9ceed32dc
|
@ -1,3 +1,9 @@
|
||||||
|
2010-03-19 Michael Matz <matz@suse.de>
|
||||||
|
|
||||||
|
PR c++/43116
|
||||||
|
* attribs.c (decl_attributes): When rebuilding a function pointer
|
||||||
|
type use the same qualifiers as the original pointer type.
|
||||||
|
|
||||||
2010-03-19 Martin Jambor <mjambor@suse.cz>
|
2010-03-19 Martin Jambor <mjambor@suse.cz>
|
||||||
|
|
||||||
* doc/gimple.texi (Logical Operators): Describe is_gimple_ip_invariant
|
* doc/gimple.texi (Logical Operators): Describe is_gimple_ip_invariant
|
||||||
|
|
|
@ -286,6 +286,7 @@ decl_attributes (tree *node, tree attributes, int flags)
|
||||||
tree *anode = node;
|
tree *anode = node;
|
||||||
const struct attribute_spec *spec = lookup_attribute_spec (name);
|
const struct attribute_spec *spec = lookup_attribute_spec (name);
|
||||||
bool no_add_attrs = 0;
|
bool no_add_attrs = 0;
|
||||||
|
int fn_ptr_quals = 0;
|
||||||
tree fn_ptr_tmp = NULL_TREE;
|
tree fn_ptr_tmp = NULL_TREE;
|
||||||
|
|
||||||
if (spec == NULL)
|
if (spec == NULL)
|
||||||
|
@ -353,6 +354,7 @@ decl_attributes (tree *node, tree attributes, int flags)
|
||||||
This would all be simpler if attributes were part of the
|
This would all be simpler if attributes were part of the
|
||||||
declarator, grumble grumble. */
|
declarator, grumble grumble. */
|
||||||
fn_ptr_tmp = TREE_TYPE (*anode);
|
fn_ptr_tmp = TREE_TYPE (*anode);
|
||||||
|
fn_ptr_quals = TYPE_QUALS (*anode);
|
||||||
anode = &fn_ptr_tmp;
|
anode = &fn_ptr_tmp;
|
||||||
flags &= ~(int) ATTR_FLAG_TYPE_IN_PLACE;
|
flags &= ~(int) ATTR_FLAG_TYPE_IN_PLACE;
|
||||||
}
|
}
|
||||||
|
@ -449,6 +451,8 @@ decl_attributes (tree *node, tree attributes, int flags)
|
||||||
/* Rebuild the function pointer type and put it in the
|
/* Rebuild the function pointer type and put it in the
|
||||||
appropriate place. */
|
appropriate place. */
|
||||||
fn_ptr_tmp = build_pointer_type (fn_ptr_tmp);
|
fn_ptr_tmp = build_pointer_type (fn_ptr_tmp);
|
||||||
|
if (fn_ptr_quals)
|
||||||
|
fn_ptr_tmp = build_qualified_type (fn_ptr_tmp, fn_ptr_quals);
|
||||||
if (DECL_P (*node))
|
if (DECL_P (*node))
|
||||||
TREE_TYPE (*node) = fn_ptr_tmp;
|
TREE_TYPE (*node) = fn_ptr_tmp;
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2010-03-19 Michael Matz <matz@suse.de>
|
||||||
|
|
||||||
|
PR c++/43116
|
||||||
|
* g++.dg/other/pr43116.C: New testcase.
|
||||||
|
|
||||||
2010-03-19 Michael Matz <matz@suse.de>
|
2010-03-19 Michael Matz <matz@suse.de>
|
||||||
|
|
||||||
PR target/43305
|
PR target/43305
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
/* { dg-do compile } */
|
||||||
|
extern "C" int rpl_open (const char *filename, int flags, ...) __attribute__
|
||||||
|
((__nonnull__ (1)));
|
||||||
|
|
||||||
|
namespace gnulib
|
||||||
|
{
|
||||||
|
int (*const open) (const char *filename, int flags, ...) __attribute__
|
||||||
|
((__nonnull__ (1))) = rpl_open;
|
||||||
|
}
|
Loading…
Reference in New Issue