+2011-03-11 Jason Merrill <jason@redhat.com>
+
+ PR c++/46803
+ * c-common.c (attribute_takes_identifier_p): Assume that an
+ unknown attribute takes an identifier.
+
2011-03-07 Nathan Froyd <froydnj@codesourcery.com>
PR c/47786
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);
2011-03-11 Jason Merrill <jason@redhat.com>
+ * g++.dg/ext/attrib40.C: New.
+
* g++.dg/cpp0x/regress/array1.C: New.
2011-03-11 Richard Guenther <rguenther@suse.de>
--- /dev/null
+// PR c++/46803
+
+int strftime(char *, int, const char *, const struct tm *)
+ __attribute__ ((__bounded__(__string__,1,2))); // { dg-warning "ignored" }