Error about alias attribute with body definition (PR c/87483).
authorMartin Liska <mliska@suse.cz>
Thu, 4 Oct 2018 14:44:53 +0000 (16:44 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Thu, 4 Oct 2018 14:44:53 +0000 (14:44 +0000)
2018-10-04  Martin Liska  <mliska@suse.cz>

PR c/87483
* cgraphunit.c (process_function_and_variable_attributes):
Warn about a function with alias attribute and a body.
2018-10-04  Martin Liska  <mliska@suse.cz>

PR c/87483
* gcc.dg/pr87483.c: New test.

From-SVN: r264846

gcc/ChangeLog
gcc/cgraphunit.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr87483.c [new file with mode: 0644]

index f7a15e34646d46aae622a0f97b350f370177e426..0340fa32e55e957c2fb98178a342f020ac74d310 100644 (file)
@@ -1,3 +1,9 @@
+2018-10-04  Martin Liska  <mliska@suse.cz>
+
+       PR c/87483
+       * cgraphunit.c (process_function_and_variable_attributes):
+       Warn about a function with alias attribute and a body.
+
 2018-10-04  Martin Liska  <mliska@suse.cz>
 
        PR ipa/82625
index c0baaeaefa4ee2a5699e3e402c6d74ff5118e51f..146855fa8044123ad2ae04eb444720ae58fc7d1b 100644 (file)
@@ -784,6 +784,12 @@ process_function_and_variable_attributes (cgraph_node *first,
          DECL_ATTRIBUTES (decl) = remove_attribute ("weakref",
                                                     DECL_ATTRIBUTES (decl));
        }
+      else if (lookup_attribute ("alias", DECL_ATTRIBUTES (decl))
+         && node->definition
+         && !node->alias)
+       warning_at (DECL_SOURCE_LOCATION (node->decl), OPT_Wattributes,
+                   "%<alias%> attribute ignored"
+                   " because function is defined");
 
       if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (decl))
          && !DECL_DECLARED_INLINE_P (decl)
index ee8a184c26af186aeb350ed8d8f2ca872f3da41f..7da77d1d4c4f446382afaebba123f028d86b9dd9 100644 (file)
@@ -1,3 +1,8 @@
+2018-10-04  Martin Liska  <mliska@suse.cz>
+
+       PR c/87483
+       * gcc.dg/pr87483.c: New test.
+
 2018-10-04  Martin Liska  <mliska@suse.cz>
 
        PR ipa/82625
diff --git a/gcc/testsuite/gcc.dg/pr87483.c b/gcc/testsuite/gcc.dg/pr87483.c
new file mode 100644 (file)
index 0000000..d3af8df
--- /dev/null
@@ -0,0 +1,16 @@
+/* PR c/87483 */
+/* { dg-require-alias "" } */
+
+int f (void) { return 0; }
+__attribute__ ((alias ("f"))) int g () { return 1; } /* { dg-warning "attribute ignored because function is defined" } */
+__attribute__ ((alias ("f"))) int g2 ();
+
+int h (void)
+{
+  return g2 ();
+}
+
+int main()
+{
+  return h();
+}