From 1b9b91a68bbabc72c0329b39a6f91f27f9b831d0 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 11 Mar 2011 16:36:02 -0500 Subject: re PR c++/46803 (libstdc++ build errors on invalid OpenBSD system header attributes) PR c++/46803 * c-common.c (attribute_takes_identifier_p): Assume that an unknown attribute takes an identifier. From-SVN: r170885 --- gcc/c-family/ChangeLog | 6 ++++++ gcc/c-family/c-common.c | 11 ++++++++--- gcc/testsuite/ChangeLog | 2 ++ gcc/testsuite/g++.dg/ext/attrib40.C | 4 ++++ 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ext/attrib40.C (limited to 'gcc') diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 60fc08f..35ca9a3 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2011-03-11 Jason Merrill + + PR c++/46803 + * c-common.c (attribute_takes_identifier_p): Assume that an + unknown attribute takes an identifier. + 2011-03-07 Nathan Froyd PR c/47786 diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index f029661..32b9a70 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -5665,9 +5665,14 @@ c_init_attributes (void) bool attribute_takes_identifier_p (const_tree attr_id) { - if (is_attribute_p ("mode", attr_id) - || is_attribute_p ("format", attr_id) - || is_attribute_p ("cleanup", attr_id)) + struct attribute_spec *spec = lookup_attribute_spec (attr_id); + if (spec == NULL) + /* Unknown attribute that we'll end up ignoring, return true so we + don't complain about an identifier argument. */ + return true; + else if (!strcmp ("mode", spec->name) + || !strcmp ("format", spec->name) + || !strcmp ("cleanup", spec->name)) return true; else return targetm.attribute_takes_identifier_p (attr_id); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cf7d6d8..6734535 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2011-03-11 Jason Merrill + * g++.dg/ext/attrib40.C: New. + * g++.dg/cpp0x/regress/array1.C: New. 2011-03-11 Richard Guenther diff --git a/gcc/testsuite/g++.dg/ext/attrib40.C b/gcc/testsuite/g++.dg/ext/attrib40.C new file mode 100644 index 0000000..9c3f761 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/attrib40.C @@ -0,0 +1,4 @@ +// PR c++/46803 + +int strftime(char *, int, const char *, const struct tm *) + __attribute__ ((__bounded__(__string__,1,2))); // { dg-warning "ignored" } -- cgit v1.1