mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-13 05:43:45 +08:00
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>
|
||||
|
||||
* 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;
|
||||
const struct attribute_spec *spec = lookup_attribute_spec (name);
|
||||
bool no_add_attrs = 0;
|
||||
int fn_ptr_quals = 0;
|
||||
tree fn_ptr_tmp = NULL_TREE;
|
||||
|
||||
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
|
||||
declarator, grumble grumble. */
|
||||
fn_ptr_tmp = TREE_TYPE (*anode);
|
||||
fn_ptr_quals = TYPE_QUALS (*anode);
|
||||
anode = &fn_ptr_tmp;
|
||||
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
|
||||
appropriate place. */
|
||||
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))
|
||||
TREE_TYPE (*node) = fn_ptr_tmp;
|
||||
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>
|
||||
|
||||
PR target/43305
|
||||
|
9
gcc/testsuite/g++.dg/other/pr43116.C
Normal file
9
gcc/testsuite/g++.dg/other/pr43116.C
Normal file
@ -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
Block a user