2015-02-26 19:53 GMT+01:00 Marek Polacek <pola...@redhat.com>: > On Thu, Feb 26, 2015 at 07:28:02PM +0100, Kai Tietz wrote: >> Hi, >> >> This patch addresses the reported ICE about #pragma weak used on >> declarations not var or function. >> >> ChangeLog >> >> 2015-02-26 Kai Tietz <kti...@redhat.com> >> >> * c-pragma.c (handle_pragma_weak): Do not try to creat > > "create" > >> weak/alias of declarations >> not being function, or variable declarations. > > "functions" > >> --- c-pragma.c (Revision 221019) >> +++ c-pragma.c (Arbeitskopie) >> @@ -392,6 +392,11 @@ handle_pragma_weak (cpp_reader * ARG_UNUSED (dummy >> decl = identifier_global_value (name); >> if (decl && DECL_P (decl)) >> { >> + if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL) > > Use !VAR_OR_FUNCTION_DECL_P.
ah, wasn't aware about this macro. thanks for point me to it. >> + { >> + error ("weak declaration of %q+D not allowed", decl); >> + return; >> + } > > I think that shouldn't be an error, merely a warning. Thus, use > > GCC_BAD2 ("..., ignored", decl); > > instead? Ok, I am fine to make it a warning. > Also please add a testcase. > > Marek Well, testcase for the pragma ... ChangeLog testsuite/ 2015-02-26 Kai Tietz <kti...@redhat.com> * gcc.dg/weak/weak-17.c: New file weak-17.c: /* { dg-do compile } */ /* { dg-require-weak "" } */ #pragma weak int = foo /* { dg-warning "weak declaration" "weak" { target *-*-* } 0 } */ --- end of weak-17.c Updated patch (regression-tested): Index: c-pragma.c =================================================================== --- c-pragma.c (Revision 221019) +++ c-pragma.c (Arbeitskopie) @@ -392,6 +392,8 @@ handle_pragma_weak (cpp_reader * ARG_UNUSED (dummy decl = identifier_global_value (name); if (decl && DECL_P (decl)) { + if (!VAR_OR_FUNCTION_DECL_P (decl)) + GCC_BAD2 ("weak declaration of %q+D not allowed, ignored", decl); apply_pragma_weak (decl, value); if (value) {