re PR c/89340 (ICE in function_and_variable_visibility, at ipa-visibility.c:707)
authorJakub Jelinek <jakub@redhat.com>
Fri, 15 Feb 2019 07:38:09 +0000 (08:38 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 15 Feb 2019 07:38:09 +0000 (08:38 +0100)
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

gcc/c/ChangeLog
gcc/c/c-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr89340.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr57036-2.c

index ebe944a57cb2e55da190eff8533f074f0c7e86e2..1def92af99a0937718fe79251256002932f9de8d 100644 (file)
@@ -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
index b658eb155bf1eb6b50ddf9b5b41d18a6d29279a1..69c04d54de98e666ca3593466ef6556c13b545ad 100644 (file)
@@ -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);
index f122cd78037af7f3a9ebff91e5369adfe55c858f..582d28deb44ff8b257a03ed7c8d1437158648421 100644 (file)
@@ -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.
 
diff --git a/gcc/testsuite/gcc.dg/pr89340.c b/gcc/testsuite/gcc.dg/pr89340.c
new file mode 100644 (file)
index 0000000..8636d22
--- /dev/null
@@ -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 ();
+}
index 6e70d3bf79a77806bc0a4571e4fbbcc29bdfa835..972cc3559c6932cdbaccd68bb9324a3176ed61b4 100644 (file)
@@ -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();
     }