On 10/5/22 14:01, Jakub Jelinek wrote: > On Wed, Oct 05, 2022 at 01:49:40PM +0200, Martin Liška wrote: >> PR c/107156 >> >> gcc/ChangeLog: >> >> * attribs.h (lookup_attribute_by_prefix): Support attributes >> starting with underscore (like _noreturn, or __Noreturn). > > There are no _noreturn or __Noreturn attributes, there is just > _Noreturn. > And, the assert is useful to catch that non-canonicalized attributes > don't make it into the attribute lists. > Now that we have the first attribute that starts with an underscore > in canonicalized form (do we accept ___Noreturn__ attribute too, perhaps > we shouldn't?), I'd say instead of removing the assert it should verify > gcc_checking_assert (attr_len == 0 || p[0] != '_' > || (ident_len > 1 && p[1] != '_'));
Works for me, I'm going to install the following patch. Martin > ? >> --- >> gcc/attribs.h | 2 -- >> 1 file changed, 2 deletions(-) >> >> diff --git a/gcc/attribs.h b/gcc/attribs.h >> index b2836560fc2..706d35e63d8 100644 >> --- a/gcc/attribs.h >> +++ b/gcc/attribs.h >> @@ -274,8 +274,6 @@ lookup_attribute_by_prefix (const char *attr_name, tree >> list) >> } >> >> const char *p = IDENTIFIER_POINTER (name); >> - gcc_checking_assert (attr_len == 0 || p[0] != '_'); >> - >> if (strncmp (attr_name, p, attr_len) == 0) >> break; >> >> -- >> 2.37.3 > > Jakub >
From b7eb1e7a0e887849470ec96c5f31422b2224c461 Mon Sep 17 00:00:00 2001 From: Martin Liska <mli...@suse.cz> Date: Wed, 5 Oct 2022 12:34:30 +0200 Subject: [PATCH] c: support the attribute starting with '_' PR c/107156 gcc/ChangeLog: * attribs.h (lookup_attribute_by_prefix): Support the attribute starting with underscore (_Noreturn). --- gcc/attribs.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/attribs.h b/gcc/attribs.h index b2836560fc2..121b9ebbc39 100644 --- a/gcc/attribs.h +++ b/gcc/attribs.h @@ -274,8 +274,8 @@ lookup_attribute_by_prefix (const char *attr_name, tree list) } const char *p = IDENTIFIER_POINTER (name); - gcc_checking_assert (attr_len == 0 || p[0] != '_'); - + gcc_checking_assert (attr_len == 0 || p[0] != '_' + || (ident_len > 1 && p[1] != '_')); if (strncmp (attr_name, p, attr_len) == 0) break; -- 2.37.3