aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormpolacek <mpolacek@138bc75d-0d04-0410-961f-82ee72b054a4>2016-05-06 10:50:03 +0000
committermpolacek <mpolacek@138bc75d-0d04-0410-961f-82ee72b054a4>2016-05-06 10:50:03 +0000
commita68f5eaa87625184cde2fa2e76ccbfcafb1c64aa (patch)
tree2d77ded57f772d24314b928b1908a20b650b2935
parent35ae8f39d3b1a241fe457b930711589c9768f70c (diff)
PR sanitizer/70342
* fold-const.c (tree_single_nonzero_warnv_p): For TARGET_EXPR, use TARGET_EXPR_SLOT as a base. * g++.dg/ubsan/null-7.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-6-branch@235958 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/fold-const.c3
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/g++.dg/ubsan/null-7.C24
4 files changed, 45 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index deebffdcc7b..e0c4793a53f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2016-05-06 Marek Polacek <polacek@redhat.com>
+
+ Backported from mainline
+ 2016-04-29 Marek Polacek <polacek@redhat.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/70342
+ * fold-const.c (tree_single_nonzero_warnv_p): For TARGET_EXPR, use
+ TARGET_EXPR_SLOT as a base.
+
2016-05-04 Eric Botcazou <ebotcazou@adacore.com>
* tree-ssa-coalesce.c (gimple_can_coalesce_p): Fix reference in head
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 9514c71c629..bb4a556d3d5 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -13549,6 +13549,9 @@ tree_single_nonzero_warnv_p (tree t, bool *strict_overflow_p)
if (!DECL_P (base))
base = get_base_address (base);
+ if (base && TREE_CODE (base) == TARGET_EXPR)
+ base = TARGET_EXPR_SLOT (base);
+
if (!base)
return false;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index df8b56000f4..7c9ba68ad59 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2016-05-06 Marek Polacek <polacek@redhat.com>
+
+ Backported from mainline
+ 2016-04-29 Marek Polacek <polacek@redhat.com>
+
+ PR sanitizer/70342
+ * g++.dg/ubsan/null-7.C: New test.
+
2016-05-03 Pierre-Marie de Rodat <derodat@adacore.com>
* gnat.dg/debug5.adb: New testcase.
diff --git a/gcc/testsuite/g++.dg/ubsan/null-7.C b/gcc/testsuite/g++.dg/ubsan/null-7.C
new file mode 100644
index 00000000000..8284bc7ddfa
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/null-7.C
@@ -0,0 +1,24 @@
+// PR sanitizer/70342
+// { dg-do compile }
+// { dg-options "-fsanitize=null" }
+
+class A {};
+class B {
+public:
+ B(A);
+};
+class C {
+public:
+ C operator<<(B);
+};
+class D {
+ D(const int &);
+ C m_blackList;
+};
+D::D(const int &) {
+ m_blackList << A() << A() << A() << A() << A() << A() << A() << A() << A()
+ << A() << A() << A() << A() << A() << A() << A() << A() << A()
+ << A() << A() << A() << A() << A() << A() << A() << A() << A()
+ << A() << A() << A() << A() << A() << A() << A() << A() << A()
+ << A() << A() << A() << A() << A() << A() << A() << A() << A();
+}