aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/fold-const.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ubsan/null-7.C24
4 files changed, 39 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b98598f..a6b6804 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+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-04-29 Andrew Burgess <andrew.burgess@embecosm.com>
* config/arc/arc.md (*loadqi_update): Replace use of 'rI'
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 69749a8..4aa2412 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -13534,6 +13534,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 7dfa23d..93e89d9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-04-29 Marek Polacek <polacek@redhat.com>
+
+ PR sanitizer/70342
+ * g++.dg/ubsan/null-7.C: New test.
+
2016-04-29 Dominik Vogt <vogt@linux.vnet.ibm.com>
PR/69089
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 0000000..8284bc7
--- /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();
+}