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
This commit is contained in:
parent
f521d9d8ad
commit
5f88ba10e0
5 changed files with 25 additions and 5 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
2019-02-15 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
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.
|
||||
|
||||
|
|
9
gcc/testsuite/gcc.dg/pr89340.c
Normal file
9
gcc/testsuite/gcc.dg/pr89340.c
Normal file
|
@ -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 ();
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue