From c8aa1929d5590eb141207914ec47c073f1d95932 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 10 Feb 2015 23:00:11 +0100 Subject: [PATCH] re PR sanitizer/65004 (Compare debug failure with -fno-sanitize-recover -fsanitize=address -fsanitize=undefined) PR sanitizer/65004 * ubsan.c (ubsan_expand_vptr_ifn): Always return true. * g++.dg/asan/pr65004.C: New test. From-SVN: r220596 --- gcc/ChangeLog | 5 ++++ gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/g++.dg/asan/pr65004.C | 48 +++++++++++++++++++++++++++++++++++++ gcc/ubsan.c | 2 +- 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/asan/pr65004.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6be8626..ab9233f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-02-10 Jakub Jelinek + + PR sanitizer/65004 + * ubsan.c (ubsan_expand_vptr_ifn): Always return true. + 2015-02-10 Oleg Endo PR target/64661 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d7881d5..01dd398 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-02-10 Jakub Jelinek + + PR sanitizer/65004 + * g++.dg/asan/pr65004.C: New test. + 2015-02-10 Oleg Endo PR target/64661 diff --git a/gcc/testsuite/g++.dg/asan/pr65004.C b/gcc/testsuite/g++.dg/asan/pr65004.C new file mode 100644 index 0000000..78cb204 --- /dev/null +++ b/gcc/testsuite/g++.dg/asan/pr65004.C @@ -0,0 +1,48 @@ +// PR sanitizer/65004 +// { dg-do compile } +// { dg-options "-fcompare-debug -fsanitize=address -fsanitize=undefined -fno-sanitize-recover=all" } + +namespace N { + template struct function; + namespace detail { + namespace function { + struct vtable_base { }; + } + } + struct function_base { + detail::function::vtable_base * vtable; + }; + template struct function1 : public function_base { }; + template struct function : public function1 { }; +} +namespace Bar { + typedef N::function WarningHandler; +} +namespace Foo { + struct FooRecord { + virtual ~FooRecord (); + }; + struct TestRecord : public FooRecord { + long x; + }; +} +namespace Foo { + using Bar::WarningHandler; + struct FooScanner { + WarningHandler warnHandler; + int readByte (); + long readSignedInteger (); + }; + struct FooRecordReader { + FooScanner & scanner; + long readSInt (); + void readTestRecord (TestRecord * recp); + }; + inline long FooRecordReader::readSInt () { + return scanner.readSignedInteger (); + } + void FooRecordReader::readTestRecord (TestRecord * recp) { + int infoByte = scanner.readByte (); + recp->x = readSInt (); + } +} diff --git a/gcc/ubsan.c b/gcc/ubsan.c index 036e67e..2c1030c 100644 --- a/gcc/ubsan.c +++ b/gcc/ubsan.c @@ -1148,7 +1148,7 @@ ubsan_expand_vptr_ifn (gimple_stmt_iterator *gsip) /* Get rid of the UBSAN_VPTR call from the IR. */ unlink_stmt_vdef (stmt); gsi_remove (&gsi, true); - return gsi_end_p (*gsip); + return true; } /* Instrument a memory reference. BASE is the base of MEM, IS_LHS says -- 2.7.4