aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@gcc.gnu.org>2018-03-23 09:55:53 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2018-03-23 09:55:53 +0100
commitee3a999fe7dfddb2531b045738ff2c0c40e6eb4c (patch)
tree2e79f430a07b923b744e3898689ee65e1e67c75d /gcc
parent631270a5cedfad8267a5e7b94901035212713b61 (diff)
downloadgcc-ee3a999fe7dfddb2531b045738ff2c0c40e6eb4c.zip
gcc-ee3a999fe7dfddb2531b045738ff2c0c40e6eb4c.tar.gz
gcc-ee3a999fe7dfddb2531b045738ff2c0c40e6eb4c.tar.bz2
re PR sanitizer/85029 (-fsanitize=undefined internal compiler error: in maybe_optimize_ubsan_ptr_ifn, at sanopt.c:493)
PR sanitizer/85029 * sanopt.c (maybe_optimize_ubsan_ptr_ifn): If DECL_REGISTER (base), just don't try to optimize it rather than assert it never happens. * g++.dg/ubsan/pr85029.C: New test. From-SVN: r258794
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/sanopt.c2
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/ubsan/pr85029.C15
4 files changed, 28 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c6cdf21..9b22865 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-03-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/85029
+ * sanopt.c (maybe_optimize_ubsan_ptr_ifn): If DECL_REGISTER (base),
+ just don't try to optimize it rather than assert it never happens.
+
2018-03-22 Kelvin Nilsen <kelvin@gcc.gnu.org>
* config/rs6000/rs6000-builtin.def: Remove various BU_ALTIVEC_X
diff --git a/gcc/sanopt.c b/gcc/sanopt.c
index 116bc38..223c06a 100644
--- a/gcc/sanopt.c
+++ b/gcc/sanopt.c
@@ -488,9 +488,9 @@ maybe_optimize_ubsan_ptr_ifn (sanopt_ctx *ctx, gimple *stmt)
&unsignedp, &reversep, &volatilep);
if ((offset == NULL_TREE || TREE_CODE (offset) == INTEGER_CST)
&& DECL_P (base)
+ && !DECL_REGISTER (base)
&& pbitpos.is_constant (&bitpos))
{
- gcc_assert (!DECL_REGISTER (base));
offset_int expr_offset;
if (offset)
expr_offset = wi::to_offset (offset) + bitpos / BITS_PER_UNIT;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 560e6d3..87c8970 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-03-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/85029
+ * g++.dg/ubsan/pr85029.C: New test.
+
2018-03-23 Alexandre Oliva <aoliva@redhat.com>
PR c++/71251
@@ -15,7 +20,7 @@
* g++.old-deja/g++.robertl/eb58.C: Likewise.
* g++.old-deja/g++.robertl/eb63.C: Likewise.
-2018-03-22 Steven G. Kargl <kargl@gcc.gnu.org
+2018-03-22 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/84922
* gfortran.dg/interface_42.f90: New test.
diff --git a/gcc/testsuite/g++.dg/ubsan/pr85029.C b/gcc/testsuite/g++.dg/ubsan/pr85029.C
new file mode 100644
index 0000000..07472af
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/pr85029.C
@@ -0,0 +1,15 @@
+// PR sanitizer/85029
+// { dg-do compile }
+// { dg-skip-if "" { *-*-* } { "-flto -fno-fat-lto-objects" } }
+// { dg-options "-fsanitize=undefined" }
+
+struct B {
+ virtual B bar ();
+ int e;
+} register a; // { dg-error "register name not specified for 'a'" }
+
+int
+foo (...)
+{
+ return foo (a);
+}