From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7862) id 691933857C43; Fri, 11 Nov 2022 09:17:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 691933857C43 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1668158237; bh=E8oeNBFaiYpwOq0ZNPvVOAKpYEw68pvlYuory4kWsSo=; h=From:To:Subject:Date:From; b=T/3ryCYVqVw+/l5NvMNHk9CyddTqPq1pijUKwcG0NIKJycS2F7i9m5PGVrlZcm5rq NOjUdqhViTD+KAABAQTfl0lCRqHEuf6vobxzPsZgQMv9xclGE/qQl737iTciw57N1D KtTvjvXhjkZNwv3xmzcAvahTmXeEBPgDAyuhiuPI= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Bruno Larsen To: gdb-cvs@sourceware.org Subject: [binutils-gdb] gdb/testsuite: account for clang's nested destructor calls on gdb.cp/mb-ctor.exp X-Act-Checkin: binutils-gdb X-Git-Author: Bruno Larsen X-Git-Refname: refs/heads/master X-Git-Oldrev: 729421925aee0e5b0954e062d757ad917fc02838 X-Git-Newrev: 3180839c4bee41b8dea76f1e2d19203cd76c0fa0 Message-Id: <20221111091717.691933857C43@sourceware.org> Date: Fri, 11 Nov 2022 09:17:17 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D3180839c4bee= 41b8dea76f1e2d19203cd76c0fa0 commit 3180839c4bee41b8dea76f1e2d19203cd76c0fa0 Author: Bruno Larsen Date: Wed Sep 7 17:45:09 2022 +0200 gdb/testsuite: account for clang's nested destructor calls on gdb.cp/mb= -ctor.exp =20 When compiling virtual classes's destructors, two versions are compiled, one with a single parameter (this) and the other with 2 parameters (this and vtt). =20 GCC's compilation makes it so either the version with 1 parameter or the one with 2 parameters is called, depending on whether the destructor is being called by the class itself or by an inherited class. On the test gdb.cp/mb-ctor.exp, this means that the breakpoint set at the destructor will be hit 4 times. =20 Clang, on the other hand, makes the single-parameter version call the 2 parameter version, probably in an attempt to reduce the size of the resulting executable. This means that the gdb.cp/mb-ctor.exp will hit 6 breakpoints before finishing, and is the reason why this test was failing. To make this test stop failing, a compiler check is added and another "continue" instruction is issued to account for this difference. =20 Approved-by: Tom Tromey Diff: --- gdb/testsuite/gdb.cp/mb-ctor.exp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gdb/testsuite/gdb.cp/mb-ctor.exp b/gdb/testsuite/gdb.cp/mb-cto= r.exp index 5a3c0a4a90f..05dbf507e90 100644 --- a/gdb/testsuite/gdb.cp/mb-ctor.exp +++ b/gdb/testsuite/gdb.cp/mb-ctor.exp @@ -25,6 +25,12 @@ if {[prepare_for_testing "failed to prepare" $testfile $= srcfile {debug c++}]} { return -1 } =20 +if {[test_compiler_info {clang-*-*} c++]} { + set using_clang true +} else { + set using_clang false +} + if ![runto_main] then { perror "couldn't run to breakpoint" return @@ -71,6 +77,13 @@ gdb_continue_to_breakpoint "set breakpoint here, second = dynamic time"\ =20 gdb_test "continue" ".*Breakpoint.*~Derived.*" "Run to dynamic destructor = v1" =20 +# Clang makes Derived::~Derived(this) call Derived::~Derives(this, vtt) +# whereas gcc puts all the logic necessary on both functions. +if {$using_clang} { + gdb_test "continue" ".*Breakpoint.*~Derived.*"\ + "clang's nested dynamic destructor call" +} + gdb_test "continue" ".*Breakpoint.*~Derived.*" "Run to dynamic destructor = v2" =20 gdb_test "continue" \ @@ -81,6 +94,11 @@ gdb_test "continue" \ ".*Breakpoint.*~Derived.*" \ "run to breakpoint 3 v2" =20 +if {$using_clang} { + gdb_test "continue" ".*Breakpoint.*~Derived.*"\ + "clang's nested destructor call" +} + gdb_test "continue" \ ".*exited normally.*" \ "run to exit"