diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-02-15 08:38:09 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-02-15 08:38:09 +0100 |
commit | 5f88ba10e017ec213b0fc4e1b0cd63f3dfcb6660 (patch) | |
tree | c20914b1d6a929372243af28a01055edaba9e6ec /gcc/c | |
parent | f521d9d8ad83137bd2965556f2395a264efa80d7 (diff) | |
download | gcc-5f88ba10e017ec213b0fc4e1b0cd63f3dfcb6660.zip gcc-5f88ba10e017ec213b0fc4e1b0cd63f3dfcb6660.tar.gz gcc-5f88ba10e017ec213b0fc4e1b0cd63f3dfcb6660.tar.bz2 |
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
Diffstat (limited to 'gcc/c')
-rw-r--r-- | gcc/c/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c/c-decl.c | 8 |
2 files changed, 10 insertions, 4 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index ebe944a..1def92a 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,9 @@ +2019-02-15 Jakub Jelinek <jakub@redhat.com> + + 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 <jakub@redhat.com> PR c/89211 diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c index b658eb1..69c04d5 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); |