From: Jakub Jelinek Date: Fri, 15 Feb 2019 07:38:09 +0000 (+0100) Subject: re PR c/89340 (ICE in function_and_variable_visibility, at ipa-visibility.c:707) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5f88ba10e017ec213b0fc4e1b0cd63f3dfcb6660;p=gcc.git re PR c/89340 (ICE in function_and_variable_visibility, at ipa-visibility.c:707) PR c/89340 * c-decl.c (start_function): Clear TREE_PUBLIC on nested functions before c_decl_attributes rather than after it. * gcc.dg/pr89340.c: New test. * gcc.dg/torture/pr57036-2.c (jpgDecode_convert): Expect a warning that leaf attribute on nested function is useless. From-SVN: r268926 --- diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index ebe944a57cb..1def92af99a 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,9 @@ +2019-02-15 Jakub Jelinek + + PR c/89340 + * c-decl.c (start_function): Clear TREE_PUBLIC on nested functions + before c_decl_attributes rather than after it. + 2019-02-06 Jakub Jelinek PR c/89211 diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c index b658eb155bf..69c04d54de9 100644 --- a/gcc/c/c-decl.c +++ b/gcc/c/c-decl.c @@ -8904,6 +8904,10 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, loc = DECL_SOURCE_LOCATION (decl1); + /* A nested function is not global. */ + if (current_function_decl != NULL_TREE) + TREE_PUBLIC (decl1) = 0; + c_decl_attributes (&decl1, attributes, 0); if (DECL_DECLARED_INLINE_P (decl1) @@ -8945,10 +8949,6 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, error_mark_node is replaced below (in pop_scope) with the BLOCK. */ DECL_INITIAL (decl1) = error_mark_node; - /* A nested function is not global. */ - if (current_function_decl != NULL_TREE) - TREE_PUBLIC (decl1) = 0; - /* If this definition isn't a prototype and we had a prototype declaration before, copy the arg type info from that prototype. */ old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f122cd78037..582d28deb44 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2019-02-15 Jakub Jelinek + PR c/89340 + * gcc.dg/pr89340.c: New test. + * gcc.dg/torture/pr57036-2.c (jpgDecode_convert): Expect a warning + that leaf attribute on nested function is useless. + PR other/89342 * gcc.dg/pr89342.c: New test. diff --git a/gcc/testsuite/gcc.dg/pr89340.c b/gcc/testsuite/gcc.dg/pr89340.c new file mode 100644 index 00000000000..8636d2218be --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr89340.c @@ -0,0 +1,9 @@ +/* PR c/89340 */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +void bar (void) +{ + __attribute__((weak)) void foo () {} /* { dg-error "weak declaration of 'foo' must be public" } */ + foo (); +} diff --git a/gcc/testsuite/gcc.dg/torture/pr57036-2.c b/gcc/testsuite/gcc.dg/torture/pr57036-2.c index 6e70d3bf79a..972cc3559c6 100644 --- a/gcc/testsuite/gcc.dg/torture/pr57036-2.c +++ b/gcc/testsuite/gcc.dg/torture/pr57036-2.c @@ -9,7 +9,7 @@ int jpgDecode_convert (unsigned i) int j; inline void __attribute__((always_inline,leaf)) f(void) - { + { /* { dg-warning "'leaf' attribute has no effect" } */ g(); }