re PR sanitizer/88215 (UBSAN: Internal compiler error with attribute(unused))
authorJakub Jelinek <jakub@redhat.com>
Wed, 28 Nov 2018 08:49:08 +0000 (09:49 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 28 Nov 2018 08:49:08 +0000 (09:49 +0100)
PR c++/88215
* c-ubsan.c: Include langhooks.h.
(ubsan_instrument_division): Change gcc_assert that main variants
of op0 and op1 types are equal to gcc_checking_assert that the
main variants are compatible types.

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

From-SVN: r266546

gcc/c-family/ChangeLog
gcc/c-family/c-ubsan.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/ubsan/pr88215.c [new file with mode: 0644]

index d99396719fbf40f55e78630a48e73f8703e27497..bc85a93447b5eb25f4d8b33133b8e88145313c4d 100644 (file)
@@ -1,3 +1,11 @@
+2018-11-28  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/88215
+       * c-ubsan.c: Include langhooks.h.
+       (ubsan_instrument_division): Change gcc_assert that main variants
+       of op0 and op1 types are equal to gcc_checking_assert that the
+       main variants are compatible types.
+
 2018-11-27  Eric Botcazou  <ebotcazou@adacore.com>
 
        * c-ada-spec.c: Include stringpool.h.
index 4ef2bd80cfedc952382186f3e4b699b3a4ffeb13..7b8a7ebec8829444f720c21f4cb7825d351d74d1 100644 (file)
@@ -31,6 +31,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "stringpool.h"
 #include "attribs.h"
 #include "asan.h"
+#include "langhooks.h"
 
 /* Instrument division by zero and INT_MIN / -1.  If not instrumenting,
    return NULL_TREE.  */
@@ -44,8 +45,9 @@ ubsan_instrument_division (location_t loc, tree op0, tree op1)
   /* At this point both operands should have the same type,
      because they are already converted to RESULT_TYPE.
      Use TYPE_MAIN_VARIANT since typedefs can confuse us.  */
-  gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (op0))
-             == TYPE_MAIN_VARIANT (TREE_TYPE (op1)));
+  tree top0 = TYPE_MAIN_VARIANT (type);
+  tree top1 = TYPE_MAIN_VARIANT (TREE_TYPE (op1));
+  gcc_checking_assert (lang_hooks.types_compatible_p (top0, top1));
 
   op0 = unshare_expr (op0);
   op1 = unshare_expr (op1);
index 920885b6aa703335eea316a2be7d378af9329782..411a3c8c778598e7cf29e2adf70632155d48ab7b 100644 (file)
@@ -1,3 +1,8 @@
+2018-11-28  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/88215
+       * c-c++-common/ubsan/pr88215.c: New test.
+
 2018-10-19  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/88182
diff --git a/gcc/testsuite/c-c++-common/ubsan/pr88215.c b/gcc/testsuite/c-c++-common/ubsan/pr88215.c
new file mode 100644 (file)
index 0000000..5db1664
--- /dev/null
@@ -0,0 +1,11 @@
+/* PR c++/88215 */
+/* { dg-do compile } */
+/* { dg-options "-fsanitize=integer-divide-by-zero" } */
+
+int
+foo (void)
+{
+  int a = 2, __attribute__ ((__unused__)) b = 1;
+  int f = a / b;
+  return f;
+}