diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-07-10 10:04:14 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-07-10 10:04:14 +0200 |
commit | f1bc6caec5fdc1affd2047d518137f7de32cd5d6 (patch) | |
tree | 904c3855dc1228a36524cd48b32036d50eb601e2 | |
parent | 100291de48d70d56f8ec31e8ba8d9edd1ee95b45 (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/cp-gimplify.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ubsan/pr86406.C | 33 |
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); + ; +} |