Commit 5f88ba10 by Jakub Jelinek Committed by Jakub Jelinek

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
parent f521d9d8
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);
......
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.
......
/* 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();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment