re PR target/80310 (Bogus -Wpsabi warning with -fsanitize=signed-integer-overflow)
authorJakub Jelinek <jakub@redhat.com>
Wed, 5 Apr 2017 05:25:18 +0000 (07:25 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 5 Apr 2017 05:25:18 +0000 (07:25 +0200)
PR target/80310
* tree-nvr.c: Include internal-fn.h.
(pass_return_slot::execute): Ignore internal calls without
direct optab.

* c-c++-common/ubsan/pr80310.c: New test.

From-SVN: r246699

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/ubsan/pr80310.c [new file with mode: 0644]
gcc/tree-nrv.c

index ac9ab8ad96014dde23fc7460e8fb099841f1f4a9..3e1e0701e441d697a95f9fd1cba79dbec2e69c3c 100644 (file)
@@ -1,3 +1,10 @@
+2017-04-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/80310
+       * tree-nvr.c: Include internal-fn.h.
+       (pass_return_slot::execute): Ignore internal calls without
+       direct optab.
+
 2017-04-04  Jakub Jelinek  <jakub@redhat.com>
            Richard Biener  <rguenther@suse.de>
 
index bdb1c01c6e6459ca7b8c61b20f6ccd79911940cc..b030d22daf0b3013ebdef516805710f9081f9cec 100644 (file)
@@ -1,3 +1,8 @@
+2017-04-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/80310
+       * c-c++-common/ubsan/pr80310.c: New test.
+
 2017-04-04  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/80297
diff --git a/gcc/testsuite/c-c++-common/ubsan/pr80310.c b/gcc/testsuite/c-c++-common/ubsan/pr80310.c
new file mode 100644 (file)
index 0000000..529f32a
--- /dev/null
@@ -0,0 +1,12 @@
+/* PR target/80310 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fsanitize=signed-integer-overflow" } */
+/* { dg-additional-options "-mno-avx" { target i?86-*-* x86_64-*-* } } */
+
+typedef int V __attribute__((vector_size (32)));
+
+void
+foo (V *a, V *b, V *c)
+{
+  *a = *b + *c;                /* { dg-bogus "AVX vector return without AVX enabled changes the ABI" "" { target i?86-*-* x86_64-*-* } } */
+}
index 78b6c0e2c25292f2dba5872e44c977f22b4a5f16..953135b037525538fee5b13847c9cd6120577624 100644 (file)
@@ -28,6 +28,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-pretty-print.h"
 #include "gimple-iterator.h"
 #include "gimple-walk.h"
+#include "internal-fn.h"
 
 /* This file implements return value optimizations for functions which
    return aggregate types.
@@ -377,6 +378,12 @@ pass_return_slot::execute (function *fun)
          if (stmt
              && gimple_call_lhs (stmt)
              && !gimple_call_return_slot_opt_p (stmt)
+             /* Ignore internal functions without direct optabs,
+                those are expanded specially and aggregate_value_p
+                on their result might result in undesirable warnings
+                with some backends.  */
+             && (!gimple_call_internal_p (stmt)
+                 || direct_internal_fn_p (gimple_call_internal_fn (stmt)))
              && aggregate_value_p (TREE_TYPE (gimple_call_lhs (stmt)),
                                    gimple_call_fndecl (stmt)))
            {