diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-10-13 22:19:17 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-10-13 22:19:17 +0200 |
commit | 8afb6a2cd6ec5e96306ff308f83247ddb1b68a9e (patch) | |
tree | 94d62c69ce985f85a16400a64b8f849b469d408d | |
parent | 39382c092ee9bb5c0033018acee7f09dc82638e0 (diff) | |
download | gcc-8afb6a2cd6ec5e96306ff308f83247ddb1b68a9e.zip gcc-8afb6a2cd6ec5e96306ff308f83247ddb1b68a9e.tar.gz gcc-8afb6a2cd6ec5e96306ff308f83247ddb1b68a9e.tar.bz2 |
re PR sanitizer/82353 (runtime ubsan crash)
PR sanitizer/82353
* g++.dg/ubsan/pr82353-2.C: New test.
* g++.dg/ubsan/pr82353-2-aux.cc: New file.
* g++.dg/ubsan/pr82353-2.h: New file.
From-SVN: r253744
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ubsan/pr82353-2-aux.cc | 32 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ubsan/pr82353-2.C | 20 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ubsan/pr82353-2.h | 31 |
4 files changed, 90 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1a6ad0d..c6419c7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2017-10-13 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/82353 + * g++.dg/ubsan/pr82353-2.C: New test. + * g++.dg/ubsan/pr82353-2-aux.cc: New file. + * g++.dg/ubsan/pr82353-2.h: New file. + 2017-10-13 Paul Thomas <pault@gcc.gnu.org> PR fortran/81048 diff --git a/gcc/testsuite/g++.dg/ubsan/pr82353-2-aux.cc b/gcc/testsuite/g++.dg/ubsan/pr82353-2-aux.cc new file mode 100644 index 0000000..75d466b --- /dev/null +++ b/gcc/testsuite/g++.dg/ubsan/pr82353-2-aux.cc @@ -0,0 +1,32 @@ +// PR sanitizer/82353 + +#include "pr82353-2.h" + +B a; +E b; +B C::c0; +unsigned D::d0; + +void +foo () +{ + a.b1 = p.f2.e2.b1 = 5; +} + +void +bar () +{ + int c = p.f2.e4.d1.a0 - -~p.f4 * 89; + q.c0.b0 = i > g * a.b0 * h - k % a.b1; + if ((~(m * j) && -~p.f4 * 90284000534361) % ~m * j) + b.e2.b0 << l << f; + o = -~p.f4 * 89; + int d = p.f4; + if (b.e2.b0) + b.e2.b1 = c; + bool e = ~-~p.f4; + a.b1 % e; + if (k / p.f2.e2.b1) + b.e4.d0 = g * a.b0 * h; + n = j; +} diff --git a/gcc/testsuite/g++.dg/ubsan/pr82353-2.C b/gcc/testsuite/g++.dg/ubsan/pr82353-2.C new file mode 100644 index 0000000..31a35ac --- /dev/null +++ b/gcc/testsuite/g++.dg/ubsan/pr82353-2.C @@ -0,0 +1,20 @@ +// PR sanitizer/82353 +// { dg-do run } +// { dg-options "-fsanitize=undefined -fno-sanitize-recover=undefined -std=c++11 -O2 -w" } +// { dg-additional-sources "pr82353-2-aux.cc" } + +#include "pr82353-2.h" + +unsigned long f, g; +bool h, k, j, i; +unsigned char l, m; +short n; +unsigned o; +F p; + +int +main () +{ + foo (); + bar (); +} diff --git a/gcc/testsuite/g++.dg/ubsan/pr82353-2.h b/gcc/testsuite/g++.dg/ubsan/pr82353-2.h new file mode 100644 index 0000000..4693d22 --- /dev/null +++ b/gcc/testsuite/g++.dg/ubsan/pr82353-2.h @@ -0,0 +1,31 @@ +extern unsigned long f, g; +extern bool h, i, j, k; +extern unsigned char l, m; +extern short n; +extern unsigned o; +struct B { + short b0 : 27; + long b1 : 10; +}; +struct A { + int a0 : 5; +}; +struct C { + static B c0; +}; +struct D { + static unsigned d0; + A d1; +}; +struct E { + B e2; + D e4; +}; +struct F { + E f2; + short f4; +}; +extern F p; +extern C q; +void foo (); +void bar (); |