aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-07-10 10:04:14 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-07-10 10:04:14 +0200
commitf1bc6caec5fdc1affd2047d518137f7de32cd5d6 (patch)
tree904c3855dc1228a36524cd48b32036d50eb601e2
parent100291de48d70d56f8ec31e8ba8d9edd1ee95b45 (diff)
downloadgcc-f1bc6caec5fdc1affd2047d518137f7de32cd5d6.zip
gcc-f1bc6caec5fdc1affd2047d518137f7de32cd5d6.tar.gz
gcc-f1bc6caec5fdc1affd2047d518137f7de32cd5d6.tar.bz2
re PR sanitizer/86406 ([UBSAN] -fcompare-debug failure with -fsanitize=undefined)
PR sanitizer/86406 * cp-gimplify.c (cp_maybe_instrument_return): Skip trailing DEBUG_BEGIN_STMTs. * g++.dg/ubsan/pr86406.C: New test. From-SVN: r262536
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/cp-gimplify.c7
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/ubsan/pr86406.C33
4 files changed, 47 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 86d4a34..5fc7f05 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2018-07-10 Jakub Jelinek <jakub@redhat.com>
+ PR sanitizer/86406
+ * cp-gimplify.c (cp_maybe_instrument_return): Skip trailing
+ DEBUG_BEGIN_STMTs.
+
PR c++/86443
* semantics.c (handle_omp_for_class_iterator): Remove lastp argument,
instead of setting *lastp turn orig_declv elt into a TREE_LIST.
diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c
index 16831fc..145af26 100644
--- a/gcc/cp/cp-gimplify.c
+++ b/gcc/cp/cp-gimplify.c
@@ -1621,6 +1621,13 @@ cp_maybe_instrument_return (tree fndecl)
case STATEMENT_LIST:
{
tree_stmt_iterator i = tsi_last (t);
+ while (!tsi_end_p (i))
+ {
+ tree p = tsi_stmt (i);
+ if (TREE_CODE (p) != DEBUG_BEGIN_STMT)
+ break;
+ tsi_prev (&i);
+ }
if (!tsi_end_p (i))
{
t = tsi_stmt (i);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e2bc00d..da079ab 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2018-07-10 Jakub Jelinek <jakub@redhat.com>
+ PR sanitizer/86406
+ * g++.dg/ubsan/pr86406.C: New test.
+
PR fortran/86421
* gfortran.dg/vect/pr86421.f90: New test.
diff --git a/gcc/testsuite/g++.dg/ubsan/pr86406.C b/gcc/testsuite/g++.dg/ubsan/pr86406.C
new file mode 100644
index 0000000..1a0f478
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/pr86406.C
@@ -0,0 +1,33 @@
+// PR sanitizer/86406
+// { dg-do compile }
+// { dg-options "-fcompare-debug -fsanitize=undefined -g -O1" }
+
+typedef enum { } cmd_status;
+class ECell;
+class ECell_const_ptr { };
+class ECell_ptr
+{
+ ECell *mp_element;
+ ECell *getPointer () const { return mp_element; }
+public:
+ operator ECell_const_ptr () const { return ECell_const_ptr(); }
+};
+
+extern ECell_ptr NULL_CELL;
+class VwUI_2DCellLayerView;
+class view_cell_layoutImpl
+{
+ cmd_status handleChangeFlags (VwUI_2DCellLayerView *
+ p_ui_celllayerview,
+ ECell_const_ptr p_peekCell);
+ cmd_status openCellLayoutView ();
+};
+
+cmd_status
+view_cell_layoutImpl::openCellLayoutView ()
+{
+ ECell_const_ptr pcell = NULL_CELL;
+ VwUI_2DCellLayerView *p_user_interface;
+ return handleChangeFlags (p_user_interface, pcell);
+ ;
+}