attribs: Don't canonicalize lookup_scoped_attribute_spec argument [PR113674]
The C and C++ FEs when parsing attributes already canonicalize them (i.e. if they start with __ and end with __ substrings, we remove those). lookup_attribute already verifies in gcc_assert that the first character of name is not an underscore, and even lookup_scoped_attribute_spec doesn't attempt to canonicalize the namespace it is passed. But for some historic reason it was canonicalizing the name argument, which misbehaves when an attribute starts with ____ and ends with ____. I believe it is just wrong to try to canonicalize lookup_scope_attribute_spec name attribute, it should have been canonicalized already, in other spots where it is called it is already canonicalized before. 2024-02-12 Jakub Jelinek <jakub@redhat.com> PR c++/113674 * attribs.cc (extract_attribute_substring): Remove. (lookup_scoped_attribute_spec): Don't call it. * c-c++-common/Wattributes-3.c: New test.
This commit is contained in:
parent
f3306a9455
commit
b42e978f29
2 changed files with 13 additions and 10 deletions
|
@ -116,15 +116,6 @@ get_gnu_namespace ()
|
|||
return gnu_namespace_cache;
|
||||
}
|
||||
|
||||
/* Return base name of the attribute. Ie '__attr__' is turned into 'attr'.
|
||||
To avoid need for copying, we simply return length of the string. */
|
||||
|
||||
static void
|
||||
extract_attribute_substring (struct substring *str)
|
||||
{
|
||||
canonicalize_attr_name (str->str, str->length);
|
||||
}
|
||||
|
||||
/* Insert SPECS into its namespace. IGNORED_P is true iff all unknown
|
||||
attributes in this namespace should be ignored for the purposes of
|
||||
-Wattributes. The function returns the namespace into which the
|
||||
|
@ -398,7 +389,6 @@ lookup_scoped_attribute_spec (const_tree ns, const_tree name)
|
|||
|
||||
attr.str = IDENTIFIER_POINTER (name);
|
||||
attr.length = IDENTIFIER_LENGTH (name);
|
||||
extract_attribute_substring (&attr);
|
||||
return attrs->attribute_hash->find_with_hash (&attr,
|
||||
substring_hash (attr.str,
|
||||
attr.length));
|
||||
|
|
13
gcc/testsuite/c-c++-common/Wattributes-3.c
Normal file
13
gcc/testsuite/c-c++-common/Wattributes-3.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* PR c++/113674 */
|
||||
/* { dg-do compile { target { c || c++11 } } } */
|
||||
/* { dg-options "" } */
|
||||
|
||||
[[____noreturn____]] int foo (int i) /* { dg-warning "'__noreturn__' attribute (directive )?ignored" } */
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
[[____maybe_unused____]] int bar (int i) /* { dg-warning "'__maybe_unused__' attribute (directive )?ignored" } */
|
||||
{
|
||||
return i;
|
||||
}
|
Loading…
Add table
Reference in a new issue