public inbox for libstdc++@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH 0/4] c++: Small tweaks to contracts
@ 2022-12-10  9:42 Arsen Arsenović
  2022-12-10  9:43 ` [PATCH 1/4] contracts: Lowercase {MAYBE,NEVER}_CONTINUE Arsen Arsenović
                   ` (3 more replies)
  0 siblings, 4 replies; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-10  9:42 UTC (permalink / raw)
  To: gcc-patches; +Cc: jason, jwakely, libstdc++, Arsen Arsenović

Hi,

This patchset includes minor tweaks to contracts, namely, lowercasing
the continuation mode constants to align better with the rest of the
standard, and updating the testsuite to match Jonathans new default
contract violation handler (that patch is also included).

Tested on x86_64-pc-linux-gnu --disable-sanitizers, via check-g++.

Arsen Arsenović (3):
  contracts: Lowercase {MAYBE,NEVER}_CONTINUE
  contracts: Update testsuite against new default viol. handler format
  contrib: Add dg-out-generator.pl

Jonathan Wakely (1):
  libstdc++: Improve output of default contract violation handler
    [PR107792]

 contrib/dg-out-generator.pl                   |  67 +++++++
 gcc/cp/contracts.cc                           |   4 +-
 .../g++.dg/contracts/contracts-access1.C      |  36 ++--
 .../g++.dg/contracts/contracts-config1.C      |  20 +--
 .../g++.dg/contracts/contracts-constexpr1.C   |  16 +-
 .../g++.dg/contracts/contracts-ctor-dtor1.C   |  96 +++++-----
 .../g++.dg/contracts/contracts-deduced2.C     |  20 +--
 .../g++.dg/contracts/contracts-friend1.C      |  10 +-
 .../g++.dg/contracts/contracts-multiline1.C   |   2 +-
 .../g++.dg/contracts/contracts-post3.C        |   2 +-
 .../g++.dg/contracts/contracts-pre10.C        | 120 ++++++++-----
 .../g++.dg/contracts/contracts-pre2.C         |  36 ++--
 .../g++.dg/contracts/contracts-pre2a2.C       |   6 +-
 .../g++.dg/contracts/contracts-pre3.C         | 156 ++++++++---------
 .../g++.dg/contracts/contracts-pre4.C         |  12 +-
 .../g++.dg/contracts/contracts-pre5.C         |  24 +--
 .../g++.dg/contracts/contracts-pre7.C         |  24 +--
 .../g++.dg/contracts/contracts-pre9.C         |  24 +--
 .../g++.dg/contracts/contracts-redecl3.C      |  36 ++--
 .../g++.dg/contracts/contracts-redecl4.C      |  24 +--
 .../g++.dg/contracts/contracts-redecl6.C      |  36 ++--
 .../g++.dg/contracts/contracts-redecl7.C      |  18 +-
 .../g++.dg/contracts/contracts-tmpl-spec1.C   |  26 +--
 .../g++.dg/contracts/contracts-tmpl-spec2.C   | 164 ++++++++++++------
 .../g++.dg/contracts/contracts-tmpl-spec3.C   |  19 +-
 gcc/testsuite/g++.dg/contracts/contracts10.C  |  16 +-
 gcc/testsuite/g++.dg/contracts/contracts19.C  |   4 +-
 gcc/testsuite/g++.dg/contracts/contracts25.C  |   8 +-
 gcc/testsuite/g++.dg/contracts/contracts3.C   |   2 +-
 gcc/testsuite/g++.dg/contracts/contracts35.C  |  16 +-
 gcc/testsuite/g++.dg/contracts/contracts5.C   |   2 +-
 gcc/testsuite/g++.dg/contracts/contracts7.C   |   2 +-
 gcc/testsuite/g++.dg/contracts/contracts9.C   |  24 ++-
 libstdc++-v3/include/experimental/contract    |   2 +-
 libstdc++-v3/src/experimental/contract.cc     |  23 +--
 35 files changed, 629 insertions(+), 468 deletions(-)
 create mode 100755 contrib/dg-out-generator.pl

-- 
2.38.1


^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 1/4] contracts: Lowercase {MAYBE,NEVER}_CONTINUE
  2022-12-10  9:42 [PATCH 0/4] c++: Small tweaks to contracts Arsen Arsenović
@ 2022-12-10  9:43 ` Arsen Arsenović
  2022-12-10 11:15   ` Jonathan Wakely
  2022-12-15 16:25   ` Jason Merrill
  2022-12-10  9:43 ` [PATCH 2/4] libstdc++: Improve output of default contract violation handler [PR107792] Arsen Arsenović
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-10  9:43 UTC (permalink / raw)
  To: gcc-patches; +Cc: jason, jwakely, libstdc++, Arsen Arsenović

The lowercase constants are more consistent with the standard, and it is
unlikely that the uppercase versions would've been accepted.

gcc/cp/ChangeLog:

	* contracts.cc: Rename references to
	contract_violation_continuation_mode constants to be lowercase.

libstdc++-v3/ChangeLog:

	* include/experimental/contract: Lowercase the constants in
	contract_violation_continuation_mode.
---
 gcc/cp/contracts.cc                        | 4 ++--
 libstdc++-v3/include/experimental/contract | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/gcc/cp/contracts.cc b/gcc/cp/contracts.cc
index 45f52b20392..26316372389 100644
--- a/gcc/cp/contracts.cc
+++ b/gcc/cp/contracts.cc
@@ -41,9 +41,9 @@ along with GCC; see the file COPYING3.  If not see
 	 "v > 0", // comment,
 	 "default", // assertion_level,
 	 "default", // assertion_role,
-	 MAYBE_CONTINUE, // continuation_mode
+	 maybe_continue, // continuation_mode
        });
-       terminate (); // if NEVER_CONTINUE
+       terminate (); // if never_continue
      }
 
    We use an internal type with the same layout as contract_violation rather
diff --git a/libstdc++-v3/include/experimental/contract b/libstdc++-v3/include/experimental/contract
index cf655023da7..a2babed6301 100644
--- a/libstdc++-v3/include/experimental/contract
+++ b/libstdc++-v3/include/experimental/contract
@@ -45,7 +45,7 @@ namespace experimental
 {
   // From P1332
   enum class contract_violation_continuation_mode {
-    NEVER_CONTINUE, MAYBE_CONTINUE
+    never_continue, maybe_continue
   };
 
   class contract_violation {
-- 
2.38.1


^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 2/4] libstdc++: Improve output of default contract violation handler [PR107792]
  2022-12-10  9:42 [PATCH 0/4] c++: Small tweaks to contracts Arsen Arsenović
  2022-12-10  9:43 ` [PATCH 1/4] contracts: Lowercase {MAYBE,NEVER}_CONTINUE Arsen Arsenović
@ 2022-12-10  9:43 ` Arsen Arsenović
  2022-12-15 16:28   ` Jason Merrill
  2022-12-10  9:43 ` [PATCH 3/4] contracts: Update testsuite against new default viol. handler format Arsen Arsenović
  2022-12-10  9:43 ` [PATCH 4/4] contrib: Add dg-out-generator.pl Arsen Arsenović
  3 siblings, 1 reply; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-10  9:43 UTC (permalink / raw)
  To: gcc-patches; +Cc: jason, jwakely, libstdc++

From: Jonathan Wakely <jwakely@redhat.com>

Make the output more readable. Don't output anything unless verbose
termination is enabled at configure-time.

libstdc++-v3/ChangeLog:

	PR libstdc++/107792
	PR libstdc++/107778
	* src/experimental/contract.cc (handle_contract_violation): Make
	output more readable.
---
 libstdc++-v3/src/experimental/contract.cc | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/libstdc++-v3/src/experimental/contract.cc b/libstdc++-v3/src/experimental/contract.cc
index c8d2697eddc..6a7f064d35e 100644
--- a/libstdc++-v3/src/experimental/contract.cc
+++ b/libstdc++-v3/src/experimental/contract.cc
@@ -1,4 +1,5 @@
 // -*- C++ -*- std::experimental::contract_violation and friends
+
 // Copyright (C) 2019-2022 Free Software Foundation, Inc.
 //
 // This file is part of GCC.
@@ -23,19 +24,21 @@
 // <http://www.gnu.org/licenses/>.
 
 #include <experimental/contract>
-#include <iostream>
+#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
+# include <iostream>
+#endif
 
 __attribute__ ((weak)) void
 handle_contract_violation (const std::experimental::contract_violation &violation)
 {
-  std::cerr << "default std::handle_contract_violation called: \n"
-    << " " << violation.file_name()
-    << " " << violation.line_number()
-    << " " << violation.function_name()
-    << " " << violation.comment()
-    << " " << violation.assertion_level()
-    << " " << violation.assertion_role()
-    << " " << (int)violation.continuation_mode()
+#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
+  const char* modes[]{ "never", "maybe" }; // Must match enumerators in header.
+  std::cerr << "contract violation in function " << violation.function_name()
+    << " at " << violation.file_name() << ':' << violation.line_number()
+    << ": " << violation.comment()
+    << "\n[level:" << violation.assertion_level()
+    << ", role:" << violation.assertion_role() << ", continuation mode:"
+    << modes[(int)violation.continuation_mode()] << ']'
     << std::endl;
+#endif
 }
-
-- 
2.38.1


^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 3/4] contracts: Update testsuite against new default viol. handler format
  2022-12-10  9:42 [PATCH 0/4] c++: Small tweaks to contracts Arsen Arsenović
  2022-12-10  9:43 ` [PATCH 1/4] contracts: Lowercase {MAYBE,NEVER}_CONTINUE Arsen Arsenović
  2022-12-10  9:43 ` [PATCH 2/4] libstdc++: Improve output of default contract violation handler [PR107792] Arsen Arsenović
@ 2022-12-10  9:43 ` Arsen Arsenović
  2022-12-10  9:43 ` [PATCH 4/4] contrib: Add dg-out-generator.pl Arsen Arsenović
  3 siblings, 0 replies; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-10  9:43 UTC (permalink / raw)
  To: gcc-patches; +Cc: jason, jwakely, libstdc++, Arsen Arsenović

This change was almost entirely mechanical.  Save for two files which had very
short matches, these changes were produced by two seds and a Perl script, for
the more involved cases.  The latter will be added in a subsequent commit.  The
former are as follows:

    sed -E -i "/dg-output/s/default std::handle_contract_violation called: \
    (\S+) (\S+) (\S+(<[A-Za-z0-9, ]*)?>?)\
    /contract violation in function \3 at \1:\2: /" *.C
    sed -i '/dg-output/s/  */ /g'

Whichever files remained failing after the above changes were checked-out,
re-ran, with output extracted, and ran through dg-out-generator.pl.

gcc/testsuite/ChangeLog:

	* g++.dg/contracts/contracts-access1.C: Convert to new default
	violation handler.
	* g++.dg/contracts/contracts-config1.C: Ditto.
	* g++.dg/contracts/contracts-constexpr1.C: Ditto.
	* g++.dg/contracts/contracts-ctor-dtor1.C: Ditto.
	* g++.dg/contracts/contracts-deduced2.C: Ditto.
	* g++.dg/contracts/contracts-friend1.C: Ditto.
	* g++.dg/contracts/contracts-multiline1.C: Ditto.
	* g++.dg/contracts/contracts-post3.C: Ditto.
	* g++.dg/contracts/contracts-pre10.C: Ditto.
	* g++.dg/contracts/contracts-pre2.C: Ditto.
	* g++.dg/contracts/contracts-pre2a2.C: Ditto.
	* g++.dg/contracts/contracts-pre3.C: Ditto.
	* g++.dg/contracts/contracts-pre4.C: Ditto.
	* g++.dg/contracts/contracts-pre5.C: Ditto.
	* g++.dg/contracts/contracts-pre7.C: Ditto.
	* g++.dg/contracts/contracts-pre9.C: Ditto.
	* g++.dg/contracts/contracts-redecl3.C: Ditto.
	* g++.dg/contracts/contracts-redecl4.C: Ditto.
	* g++.dg/contracts/contracts-redecl6.C: Ditto.
	* g++.dg/contracts/contracts-redecl7.C: Ditto.
	* g++.dg/contracts/contracts-tmpl-spec1.C: Ditto.
	* g++.dg/contracts/contracts-tmpl-spec2.C: Ditto.
	* g++.dg/contracts/contracts-tmpl-spec3.C: Ditto.
	* g++.dg/contracts/contracts10.C: Ditto.
	* g++.dg/contracts/contracts19.C: Ditto.
	* g++.dg/contracts/contracts25.C: Ditto.
	* g++.dg/contracts/contracts3.C: Ditto.
	* g++.dg/contracts/contracts35.C: Ditto.
	* g++.dg/contracts/contracts5.C: Ditto.
	* g++.dg/contracts/contracts7.C: Ditto.
	* g++.dg/contracts/contracts9.C: Ditto.
---
Files in which matches were completely regenerated are (via
dg-output-generator.pl):
- contracts9.C
- contracts-pre10.C
- contracts-tmpl-spec2.C
- contracts-tmpl-spec3.C

Ones that were manually edited are:
- contracts-post3.C
- contracts3.C
- contracts5.C
- contracts7.C
- contracts-pre2a2.C

Ones that were edited with a complex set of macros that I've since lost:
- contracts-config1.C

The rest was covered by the seds in the commit message, since their
fields were trivial enough to rearrange so that they could just be
shuffled around a bit, and extracted trivially.

 .../g++.dg/contracts/contracts-access1.C      |  36 ++--
 .../g++.dg/contracts/contracts-config1.C      |  20 +--
 .../g++.dg/contracts/contracts-constexpr1.C   |  16 +-
 .../g++.dg/contracts/contracts-ctor-dtor1.C   |  96 +++++-----
 .../g++.dg/contracts/contracts-deduced2.C     |  20 +--
 .../g++.dg/contracts/contracts-friend1.C      |  10 +-
 .../g++.dg/contracts/contracts-multiline1.C   |   2 +-
 .../g++.dg/contracts/contracts-post3.C        |   2 +-
 .../g++.dg/contracts/contracts-pre10.C        | 120 ++++++++-----
 .../g++.dg/contracts/contracts-pre2.C         |  36 ++--
 .../g++.dg/contracts/contracts-pre2a2.C       |   6 +-
 .../g++.dg/contracts/contracts-pre3.C         | 156 ++++++++---------
 .../g++.dg/contracts/contracts-pre4.C         |  12 +-
 .../g++.dg/contracts/contracts-pre5.C         |  24 +--
 .../g++.dg/contracts/contracts-pre7.C         |  24 +--
 .../g++.dg/contracts/contracts-pre9.C         |  24 +--
 .../g++.dg/contracts/contracts-redecl3.C      |  36 ++--
 .../g++.dg/contracts/contracts-redecl4.C      |  24 +--
 .../g++.dg/contracts/contracts-redecl6.C      |  36 ++--
 .../g++.dg/contracts/contracts-redecl7.C      |  18 +-
 .../g++.dg/contracts/contracts-tmpl-spec1.C   |  26 +--
 .../g++.dg/contracts/contracts-tmpl-spec2.C   | 164 ++++++++++++------
 .../g++.dg/contracts/contracts-tmpl-spec3.C   |  19 +-
 gcc/testsuite/g++.dg/contracts/contracts10.C  |  16 +-
 gcc/testsuite/g++.dg/contracts/contracts19.C  |   4 +-
 gcc/testsuite/g++.dg/contracts/contracts25.C  |   8 +-
 gcc/testsuite/g++.dg/contracts/contracts3.C   |   2 +-
 gcc/testsuite/g++.dg/contracts/contracts35.C  |  16 +-
 gcc/testsuite/g++.dg/contracts/contracts5.C   |   2 +-
 gcc/testsuite/g++.dg/contracts/contracts7.C   |   2 +-
 gcc/testsuite/g++.dg/contracts/contracts9.C   |  24 ++-
 31 files changed, 546 insertions(+), 455 deletions(-)

diff --git a/gcc/testsuite/g++.dg/contracts/contracts-access1.C b/gcc/testsuite/g++.dg/contracts/contracts-access1.C
index a3a29821017..414b29a1613 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-access1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-access1.C
@@ -107,22 +107,22 @@ int main()
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 11 Base::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 Base::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 13 Base::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 Child::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 27 Child::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 Child::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 37 VChild::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 VChild::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 VChild::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 49 TChild<Base>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 50 TChild<Base>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 51 TChild<Base>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 67 PubChild::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 PubChild::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 69 PubChild::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 79 TPubChild<PubBase>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 80 TPubChild<PubBase>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 81 TPubChild<PubBase>::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::b at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::b at .*.C:12: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::b at .*.C:13: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child::fun at .*.C:26: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child::fun at .*.C:27: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child::fun at .*.C:28: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function VChild::b at .*.C:37: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function VChild::b at .*.C:38: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function VChild::b at .*.C:39: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TChild<Base>::fun at .*.C:49: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TChild<Base>::fun at .*.C:50: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TChild<Base>::fun at .*.C:51: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function PubChild::fun at .*.C:67: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function PubChild::fun at .*.C:68: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function PubChild::fun at .*.C:69: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TPubChild<PubBase>::fun at .*.C:79: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TPubChild<PubBase>::fun at .*.C:80: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TPubChild<PubBase>::fun at .*.C:81: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-config1.C b/gcc/testsuite/g++.dg/contracts/contracts-config1.C
index 9e32bac535d..4ea67dd65bf 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-config1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-config1.C
@@ -24,13 +24,13 @@ int main(int, char **)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*main false default default 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false default default 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false audit default 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false default new_role 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false default new_role 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false audit new_role 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false   1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false default default 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false audit default 1.*(\n|\r\n|\r)*" }
-
+// { dg-output "contract violation in function main at .*C:14: false(\n|\r\n|\r)*\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*C:15: false(\n|\r\n|\r)*\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*C:16: false(\n|\r\n|\r)*\\\[level:audit, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*C:17: false(\n|\r\n|\r)*\\\[level:default, role:new_role, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*C:18: false(\n|\r\n|\r)*\\\[level:default, role:new_role, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*C:19: false(\n|\r\n|\r)*\\\[level:audit, role:new_role, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*C:20: false(\n|\r\n|\r)*\\\[level:, role:, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*C:21: false(\n|\r\n|\r)*\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*C:22: false(\n|\r\n|\r)*\\\[level:audit, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function fun at .*C:7: r > 0(\n|\r\n|\r)*\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-constexpr1.C b/gcc/testsuite/g++.dg/contracts/contracts-constexpr1.C
index 4c111358d9b..dc2a3854901 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-constexpr1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-constexpr1.C
@@ -63,12 +63,12 @@ int main(int, char **) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 14 ffun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 15 ffun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 ftfun<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 ftfun<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 explicitfn .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 explicitfn .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 ftfun<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 ftfun<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ffun at .*.C:14: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ffun at .*.C:15: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<int> at .*.C:38: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<int> at .*.C:39: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function explicitfn at .*.C:46: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function explicitfn at .*.C:48: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<double> at .*.C:38: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<double> at .*.C:39: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-ctor-dtor1.C b/gcc/testsuite/g++.dg/contracts/contracts-ctor-dtor1.C
index bcd6096b5a7..618a7efb07b 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-ctor-dtor1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-ctor-dtor1.C
@@ -124,54 +124,54 @@ int main(int, char**)
 };
 
 // test0
-// { dg-output "default std::handle_contract_violation called: .*.C 11 S::S .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 S::S .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 SInline::SInline .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 SInline::SInline .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 SDelegate0::SDelegate0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 SDelegate0::SDelegate0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 34 SDelegate1::SDelegate1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 34 SDelegate1::SDelegate1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 SDelegate2::SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 SDelegate2::SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 SDelegate2::SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 SDelegate2::SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 SDelegate3::SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 47 SDelegate3::SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 47 SDelegate3::SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 SDelegate3::SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 S1<int>::S1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 S1<int>::S1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 S1<double>::S1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 S1<double>::S1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 S2::S2<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 S2::S2<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 S2::S2<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 S2::S2<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<int>::S3<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<int>::S3<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<int>::S3<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<int>::S3<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<double>::S3<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<double>::S3<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<double>::S3<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<double>::S3<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 49 SDelegate3::~SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 49 SDelegate3::~SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 42 SDelegate2::~SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 42 SDelegate2::~SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 35 SDelegate1::~SDelegate1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 35 SDelegate1::~SDelegate1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 SDelegate0::~SDelegate0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 SDelegate0::~SDelegate0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 SInline::~SInline .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 SInline::~SInline .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 S::~S .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 S::~S .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S at .*.C:11 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S at .*.C:11 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SInline::SInline at .*.C:20 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SInline::SInline at .*.C:20 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate0::SDelegate0 at .*.C:26 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate0::SDelegate0 at .*.C:26 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate1::SDelegate1 at .*.C:34 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate1::SDelegate1 at .*.C:34 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::SDelegate2 at .*.C:41 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::SDelegate2 at .*.C:40 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::SDelegate2 at .*.C:40 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::SDelegate2 at .*.C:41 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::SDelegate3 at .*.C:48 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::SDelegate3 at .*.C:47 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::SDelegate3 at .*.C:47 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::SDelegate3 at .*.C:48 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1<int>::S1 at .*.C:55 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1<int>::S1 at .*.C:55 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1<double>::S1 at .*.C:55 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1<double>::S1 at .*.C:55 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S2::S2<int> at .*.C:61 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S2::S2<int> at .*.C:61 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S2::S2<double> at .*.C:61 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S2::S2<double> at .*.C:61 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<int>::S3<int> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<int>::S3<int> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<int>::S3<double> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<int>::S3<double> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<double>::S3<int> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<double>::S3<int> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<double>::S3<double> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<double>::S3<double> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::~SDelegate3 at .*.C:49 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::~SDelegate3 at .*.C:49 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::~SDelegate2 at .*.C:42 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::~SDelegate2 at .*.C:42 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate1::~SDelegate1 at .*.C:35 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate1::~SDelegate1 at .*.C:35 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate0::~SDelegate0 at .*.C:28 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate0::~SDelegate0 at .*.C:28 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SInline::~SInline at .*.C:21 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SInline::~SInline at .*.C:21 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::~S at .*.C:12 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::~S at .*.C:12 .*(\n|\r\n|\r)*" }
 
 // test1
-// { dg-output "default std::handle_contract_violation called: .*.C 73 G0::G0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 80 G1::G1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 81 G1::~G1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 74 G0::~G0 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G0::G0 at .*.C:73 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G1::G1 at .*.C:80 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G1::~G1 at .*.C:81 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G0::~G0 at .*.C:74 .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-deduced2.C b/gcc/testsuite/g++.dg/contracts/contracts-deduced2.C
index da9c019f10a..fd43166e7b0 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-deduced2.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-deduced2.C
@@ -71,14 +71,14 @@ int main(int, char**) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 5 g0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 5 g0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 g1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 23 g3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 g4 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 37 g5 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 g6<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 g6<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 g7<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 g7<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g0 at .*.C:5: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g0 at .*.C:5: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g1 at .*.C:12: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g3 at .*.C:23: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g4 at .*.C:30: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g5 at .*.C:37: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g6<int> at .*.C:46: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g6<double> at .*.C:46: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g7<int> at .*.C:55: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g7<double> at .*.C:55: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-friend1.C b/gcc/testsuite/g++.dg/contracts/contracts-friend1.C
index 0ccfbe2c7c3..5eec11ffb26 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-friend1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-friend1.C
@@ -33,8 +33,8 @@ int main(int, char**) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 6 fn0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 19 fn2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 9 X::fns0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 X::fns1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 X::fns2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function fn0 at .*.C:6: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function fn2 at .*.C:19: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function X::fns0 at .*.C:9: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function X::fns1 at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function X::fns2 at .*.C:21: .*(\n|\r\n|\r)*" }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-multiline1.C b/gcc/testsuite/g++.dg/contracts/contracts-multiline1.C
index 8145c61e827..6ddae0f5b31 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-multiline1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-multiline1.C
@@ -16,4 +16,4 @@ int main(int, char **)
   ]];
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 8 main x < 10 && y > 123.*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:8: x < 10 && y > 123.*(\n|\r\n|\r)*" }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-post3.C b/gcc/testsuite/g++.dg/contracts/contracts-post3.C
index 9f1dffd8f6a..12923282796 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-post3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-post3.C
@@ -1,7 +1,7 @@
 // { dg-do run }
 // { dg-options "-std=c++2a -fcontracts" }
 // { dg-shouldfail "assert violation" }
-// { dg-output "default std::handle_contract_violation called" }
+// { dg-output "contract violation in function f1" }
 
 int f1(int n)
   [[post r: r > n]]
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre10.C b/gcc/testsuite/g++.dg/contracts/contracts-pre10.C
index 877e9ada404..6a27688a5ca 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre10.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre10.C
@@ -141,50 +141,76 @@ int main(int, char**)
 }
 
 // { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 M::f<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f<int>.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 M::f<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f<double>.-11.5.: 11(\n|\r\n|\r)*" }
-// { dg-output "m.f<int>.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.f<double>.11.5.: -11(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 M::g<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g<int>.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 M::g<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g<double>.-11.5.: 11(\n|\r\n|\r)*" }
-// { dg-output "m.g<int>.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.g<double>.11.5.: -11(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 M::f_arg<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f_arg.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 M::f_arg<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f_arg.-11.5.: 11(\n|\r\n|\r)*" }
-// { dg-output "m.f_arg.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.f_arg.11.5.: -11(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 19 M::g_arg<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g_arg.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 19 M::g_arg<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g_arg.-11.5.: 11(\n|\r\n|\r)*" }
-// { dg-output "m.g_arg.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.g_arg.11.5.: -11(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 25 M::f_ret<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f_ret<int>.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 25 M::f_ret<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f_ret<double>.-11.5.: 16.500000(\n|\r\n|\r)*" }
-// { dg-output "m.f_ret<int>.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.f_ret<double>.11.5.: -16.500000(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 M::g_ret<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g_ret<int>.-10.: 15(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 M::g_ret<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g_ret<double>.-11.5.: 16.500000(\n|\r\n|\r)*" }
-// { dg-output "m.g_ret<int>.10.: -15(\n|\r\n|\r)*" }
-// { dg-output "m.g_ret<double>.11.5.: -16.500000(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 59 S<int>::g<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 59 S<int>::g<double> .*(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 59 S<double>::g<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 59 S<double>::g<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function M::f<int> at .*\.C:7: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "m.f<int>\\(-10\\): 10(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function M::f<double> at .*\.C:7: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "m.f<double>\\(-11.5\\): 11(\n|\r\n|\r)*" }
+// { dg-output "m.f<int>\\(10\\): -10(\n|\r\n|\r)*" }
+// { dg-output "m.f<double>\\(11.5\\): -11(\n|\r\n|\r)*" }
+// { dg-output "=================================(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function M::g<int> at .*\.C:10: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "m.g<int>\\(-10\\): 10(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function M::g<double> at .*\.C:10: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "m.g<double>\\(-11.5\\): 11(\n|\r\n|\r)*" }
+// { dg-output "m.g<int>\\(10\\): -10(\n|\r\n|\r)*" }
+// { dg-output "m.g<double>\\(11.5\\): -11(\n|\r\n|\r)*" }
+// { dg-output "=================================(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function M::f_arg<int> at .*\.C:16: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "m.f_arg\\(-10\\): 10(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function M::f_arg<double> at .*\.C:16: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "m.f_arg\\(-11.5\\): 11(\n|\r\n|\r)*" }
+// { dg-output "m.f_arg\\(10\\): -10(\n|\r\n|\r)*" }
+// { dg-output "m.f_arg\\(11.5\\): -11(\n|\r\n|\r)*" }
+// { dg-output "=================================(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function M::g_arg<int> at .*\.C:19: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "m.g_arg\\(-10\\): 10(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function M::g_arg<double> at .*\.C:19: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "m.g_arg\\(-11.5\\): 11(\n|\r\n|\r)*" }
+// { dg-output "m.g_arg\\(10\\): -10(\n|\r\n|\r)*" }
+// { dg-output "m.g_arg\\(11.5\\): -11(\n|\r\n|\r)*" }
+// { dg-output "=================================(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function M::f_ret<int> at .*\.C:25: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "m.f_ret<int>\\(-10\\): 10(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function M::f_ret<double> at .*\.C:25: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "m.f_ret<double>\\(-11.5\\): 16.500000(\n|\r\n|\r)*" }
+// { dg-output "m.f_ret<int>\\(10\\): -10(\n|\r\n|\r)*" }
+// { dg-output "m.f_ret<double>\\(11.5\\): -16.500000(\n|\r\n|\r)*" }
+// { dg-output "=================================(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function M::g_ret<int> at .*\.C:28: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "m.g_ret<int>\\(-10\\): 15(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function M::g_ret<double> at .*\.C:28: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "m.g_ret<double>\\(-11.5\\): 16.500000(\n|\r\n|\r)*" }
+// { dg-output "m.g_ret<int>\\(10\\): -15(\n|\r\n|\r)*" }
+// { dg-output "m.g_ret<double>\\(11.5\\): -16.500000(\n|\r\n|\r)*" }
+// { dg-output "=================================(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<int>::f<int> at .*\.C:56: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<int>::f<double> at .*\.C:56: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "=================================(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<int>::g<int> at .*\.C:59: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<int>::g<double> at .*\.C:59: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "=================================(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<double>::f<int> at .*\.C:56: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<double>::f<double> at .*\.C:56: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "=================================(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<double>::g<int> at .*\.C:59: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<double>::g<double> at .*\.C:59: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre2.C b/gcc/testsuite/g++.dg/contracts/contracts-pre2.C
index 4fe2f9d0192..4012c4d89ac 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre2.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre2.C
@@ -174,39 +174,39 @@ namespace nonnullary
   }
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 12 nullary::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nullary::fun at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 18 nullary::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 19 nullary::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nullary::fun2 at .*.C:18: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nullary::fun2 at .*.C:19: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 146 nullary::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nullary::funend at .*.C:146: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 nonvoid::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::vfun at .*.C:39: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 45 nonvoid::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::fun at .*.C:45: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 nonvoid::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 nonvoid::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::fun2 at .*.C:52: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::fun2 at .*.C:53: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 155 nonvoid::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::funend at .*.C:155: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 74 nonnullary::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 nonnullary::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::vfun at .*.C:74: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::vfun at .*.C:75: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 81 nonnullary::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun at .*.C:81: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 88 nonnullary::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 89 nonnullary::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 90 nonnullary::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 91 nonnullary::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun2 at .*.C:88: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun2 at .*.C:89: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun2 at .*.C:90: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun2 at .*.C:91: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 167 nonnullary::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 168 nonnullary::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::funend at .*.C:167: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::funend at .*.C:168: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre2a2.C b/gcc/testsuite/g++.dg/contracts/contracts-pre2a2.C
index db9a0c37aa0..288952bbd05 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre2a2.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre2a2.C
@@ -16,7 +16,7 @@ int main()
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 6 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 9 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*\\.C:6: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*\\.C:9: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*\\.C:7: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre3.C b/gcc/testsuite/g++.dg/contracts/contracts-pre3.C
index 1c4e3a98e63..4d45533106d 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre3.C
@@ -403,123 +403,123 @@ member::S member::T1::funend(int m, double n)
   return s;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 37 member::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 member::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::vfun at .*.C:37:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::vfun at .*.C:38:  .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 45 member::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun at .*.C:45:  .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 member::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 member::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 54 member::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 member::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun2 at .*.C:52:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun2 at .*.C:53:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun2 at .*.C:54:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun2 at .*.C:55:  .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 397 member::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 398 member::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::funend at .*.C:397:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::funend at .*.C:398:  .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 85 special::T1::T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 86 special::T1::T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 99 special::T1::operator- .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 100 special::T1::operator- .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 92 special::T1::operator. .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 93 special::T1::operator. .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:85:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:86:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::operator- at .*.C:99:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::operator- at .*.C:100:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::operator. at .*.C:92:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::operator. at .*.C:93:  .*(\n|\r\n|\r)*" }
 // { dg-output "==========(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 113 special::T2::T2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 114 special::T2::T2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 127 special::T2::operator- .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 128 special::T2::operator- .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 120 special::T2::operator. .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 121 special::T2::operator. .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::T2 at .*.C:113:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::T2 at .*.C:114:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::operator- at .*.C:127:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::operator- at .*.C:128:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::operator. at .*.C:120:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::operator. at .*.C:121:  .*(\n|\r\n|\r)*" }
 // { dg-output "==========(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 144 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 145 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 85 special::T1::T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 86 special::T1::T1 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:144:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:145:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:85:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:86:  .*(\n|\r\n|\r)*" }
 // { dg-output "==========(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 156 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 144 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 145 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 85 special::T1::T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 86 special::T1::T1 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:156:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:144:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:145:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:85:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:86:  .*(\n|\r\n|\r)*" }
 // { dg-output "==========(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 151 special::TC::~TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 106 special::T1::~T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 151 special::TC::~TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 106 special::T1::~T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 134 special::T2::~T2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 106 special::T1::~T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 196 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 197 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 198 virt::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::~TC at .*.C:151:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::~T1 at .*.C:106:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::~TC at .*.C:151:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::~T1 at .*.C:106:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::~T2 at .*.C:134:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::~T1 at .*.C:106:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:196:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:197:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:198:  .*(\n|\r\n|\r)*" }
 // { dg-output "T1::fun::m: -10, T1::fun::n: -20, T1::v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 196 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 197 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 198 virt::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:196:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:197:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:198:  .*(\n|\r\n|\r)*" }
 // { dg-output "T1::fun::m: -10, T1::fun::n: -20, T1::v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 211 virt::T3::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 212 virt::T3::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 213 virt::T3::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:211:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:212:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:213:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3::fun::m: -10, T3::fun::n: -20, T3::v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 247 virt::T3b::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 248 virt::T3b::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 249 virt::T3b::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:247:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:248:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:249:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::fun::m: -10, T3b::fun::n: -20, T3b::v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 288 virt::T3c::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 289 virt::T3c::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 290 virt::T3c::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:288:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:289:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:290:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::fun::m: -10, T3c::fun::n: -20, T3c::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T1:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 196 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 197 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 198 virt::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:196:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:197:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:198:  .*(\n|\r\n|\r)*" }
 // { dg-output "T1::fun::m: -1, T1::fun::n: -2, T1::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T2:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 196 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 197 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 198 virt::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:196:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:197:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:198:  .*(\n|\r\n|\r)*" }
 // { dg-output "T1::fun::m: -1, T1::fun::n: -2, T1::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T3:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 211 virt::T3::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 212 virt::T3::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 213 virt::T3::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:211:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:212:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:213:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3::fun::m: -1, T3::fun::n: -2, T3::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T3b:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 247 virt::T3b::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 248 virt::T3b::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 249 virt::T3b::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:247:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:248:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:249:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::fun::m: -1, T3b::fun::n: -2, T3b::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T3c:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 288 virt::T3c::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 289 virt::T3c::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 290 virt::T3c::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:288:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:289:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:290:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::fun::m: -1, T3c::fun::n: -2, T3c::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=============(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 256 virt::T3b::p .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 257 virt::T3b::p .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::p at .*.C:256:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::p at .*.C:257:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::p: a: -3, v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 264 virt::T3b::u .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 265 virt::T3b::u .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::u at .*.C:264:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::u at .*.C:265:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::u: a: -3, z: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 272 virt::T3b::n .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::n at .*.C:272:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::n: a: -3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 279 virt::T3b::Sn .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::Sn at .*.C:279:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::Sn: a: -3(\n|\r\n|\r)*" }
 // { dg-output "=============(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 297 virt::T3c::p .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 298 virt::T3c::p .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::p at .*.C:297:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::p at .*.C:298:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::p: a: -3, v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 305 virt::T3c::u .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 306 virt::T3c::u .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::u at .*.C:305:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::u at .*.C:306:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::u: a: -3, z: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 313 virt::T3c::n .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::n at .*.C:313:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::n: a: -3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 320 virt::T3c::Sn .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::Sn at .*.C:320:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::Sn: a: -3(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre4.C b/gcc/testsuite/g++.dg/contracts/contracts-pre4.C
index 16189cdce9d..1049a5be483 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre4.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre4.C
@@ -77,16 +77,16 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Base::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Base: 0(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Base::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child0: 0(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Child1::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child1::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child1: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Child2::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child2::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child2: 20(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Child3::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child3::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child3: 30(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Child4::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child4::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child4: 40(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre5.C b/gcc/testsuite/g++.dg/contracts/contracts-pre5.C
index 278a545055f..b9f855b616d 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre5.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre5.C
@@ -56,26 +56,26 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 8 body<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function body<int> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "-2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 8 body<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function body<double> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "-5(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 none<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function none<int> at .*.C:16: .*(\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 none<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function none<double> at .*.C:16: .*(\n|\r\n|\r)*" }
 // { dg-output "2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 23 arg0<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg0<int> at .*.C:23: .*(\n|\r\n|\r)*" }
 // { dg-output "-9(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 23 arg0<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg0<double> at .*.C:23: .*(\n|\r\n|\r)*" }
 // { dg-output "-7(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 arg1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 31 arg1<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<int> at .*.C:30: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<int> at .*.C:31: .*(\n|\r\n|\r)*" }
 // { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 arg1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 31 arg1<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<double> at .*.C:30: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<double> at .*.C:31: .*(\n|\r\n|\r)*" }
 // { dg-output "-11(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 ret<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<int> at .*.C:38: .*(\n|\r\n|\r)*" }
 // { dg-output "3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 ret<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<double> at .*.C:38: .*(\n|\r\n|\r)*" }
 // { dg-output "4(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre7.C b/gcc/testsuite/g++.dg/contracts/contracts-pre7.C
index aeb8fc042e6..dbf60fb53e3 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre7.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre7.C
@@ -108,27 +108,27 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 13 ns0::f<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::f<int> at .*.C:13: .*(\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 ns0::ns1::f<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::f<int> at .*.C:28: .*(\n|\r\n|\r)*" }
 // { dg-output "2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 ns0::ns1::f2<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::f2<int> at .*.C:46: .*(\n|\r\n|\r)*" }
 // { dg-output "3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 ns0::ns1::ns2::f<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::ns2::f<int> at .*.C:53: .*(\n|\r\n|\r)*" }
 // { dg-output "4(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 ns0::S<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::S<int>::f at .*.C:76: .*(\n|\r\n|\r)*" }
 // { dg-output "5(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 82 ns0::ns1::S2<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::S2<int>::f at .*.C:82: .*(\n|\r\n|\r)*" }
 // { dg-output "6(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 13 ns0::f<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::f<double> at .*.C:13: .*(\n|\r\n|\r)*" }
 // { dg-output "7(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 ns0::ns1::f<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::f<double> at .*.C:28: .*(\n|\r\n|\r)*" }
 // { dg-output "8(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 ns0::ns1::f2<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::f2<double> at .*.C:46: .*(\n|\r\n|\r)*" }
 // { dg-output "9(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 ns0::ns1::ns2::f<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::ns2::f<double> at .*.C:53: .*(\n|\r\n|\r)*" }
 // { dg-output "10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 ns0::S<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::S<double>::f at .*.C:76: .*(\n|\r\n|\r)*" }
 // { dg-output "11(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 82 ns0::ns1::S2<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::S2<double>::f at .*.C:82: .*(\n|\r\n|\r)*" }
 // { dg-output "12(\n|\r\n|\r)*" }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre9.C b/gcc/testsuite/g++.dg/contracts/contracts-pre9.C
index 64c0cfa36df..f1a8b9ce555 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre9.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre9.C
@@ -108,39 +108,39 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 14 S<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<int>::f at .*.C:14: .*(\n|\r\n|\r)*" }
 // { dg-output "s_int.f.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 S<int>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<int>::g at .*.C:10: .*(\n|\r\n|\r)*" }
 // { dg-output "s_int.g.-10.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_int.f.10.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_int.g.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 14 S<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<double>::f at .*.C:14: .*(\n|\r\n|\r)*" }
 // { dg-output "s_double.f.-10.5.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 S<double>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<double>::g at .*.C:10: .*(\n|\r\n|\r)*" }
 // { dg-output "s_double.g.-10.5.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_double.f.10.5.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_double.g.10.5.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 33 S_arg<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_arg<int>::f at .*.C:33: .*(\n|\r\n|\r)*" }
 // { dg-output "s_arg_int.f.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 29 S_arg<int>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_arg<int>::g at .*.C:29: .*(\n|\r\n|\r)*" }
 // { dg-output "s_arg_int.g.-10.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_arg_int.f.10.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_arg_int.g.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 33 S_arg<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_arg<double>::f at .*.C:33: .*(\n|\r\n|\r)*" }
 // { dg-output "s_arg_double.f.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 29 S_arg<double>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_arg<double>::g at .*.C:29: .*(\n|\r\n|\r)*" }
 // { dg-output "s_arg_double.g.-10.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_arg_double.f.10.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_arg_double.g.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 S_ret<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_ret<int>::f at .*.C:52: .*(\n|\r\n|\r)*" }
 // { dg-output "s_ret_int.f.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 S_ret<int>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_ret<int>::g at .*.C:48: .*(\n|\r\n|\r)*" }
 // { dg-output "s_ret_int.g.-10.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_ret_int.f.10.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_ret_int.g.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 S_ret<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_ret<double>::f at .*.C:52: .*(\n|\r\n|\r)*" }
 // { dg-output "s_ret_double.f.-10.: 10.000000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 S_ret<double>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_ret<double>::g at .*.C:48: .*(\n|\r\n|\r)*" }
 // { dg-output "s_ret_double.g.-10.: 10.000000(\n|\r\n|\r)*" }
 // { dg-output "s_ret_double.f.10.: -10.000000(\n|\r\n|\r)*" }
 // { dg-output "s_ret_double.g.10.: -10.000000(\n|\r\n|\r)*" }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-redecl3.C b/gcc/testsuite/g++.dg/contracts/contracts-redecl3.C
index fdfca3a65ff..a3d42e5daa4 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-redecl3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-redecl3.C
@@ -160,36 +160,36 @@ namespace nondefining
   }
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 25 defining::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 defining::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::vfun at .*.C:25: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::vfun at .*.C:26: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 32 defining::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun at .*.C:32: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 42 defining::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:39: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:40: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:41: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:42: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 138 defining::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 139 defining::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::funend at .*.C:138: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::funend at .*.C:139: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 nondefining::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 69 nondefining::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::vfun at .*.C:68: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::vfun at .*.C:69: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 71 nondefining::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun at .*.C:71: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 73 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 74 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:73: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:74: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:75: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:76: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 151 nondefining::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 152 nondefining::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::funend at .*.C:151: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::funend at .*.C:152: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-redecl4.C b/gcc/testsuite/g++.dg/contracts/contracts-redecl4.C
index c1e234226b6..3fbf222b243 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-redecl4.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-redecl4.C
@@ -33,24 +33,24 @@ int main(int, char **)
   printf("=====\n");
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 10 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "f: a: 1, b: 1, c: 1(\n|\r\n|\r)*" }
 // { dg-output "=====(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "f: a: 1, b: 1, c: 10(\n|\r\n|\r)*" }
 // { dg-output "=====(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "f: a: 1, b: 11, c: 10(\n|\r\n|\r)*" }
 // { dg-output "=====(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "f: a: 12, b: 11, c: 10(\n|\r\n|\r)*" }
 // { dg-output "=====(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-redecl6.C b/gcc/testsuite/g++.dg/contracts/contracts-redecl6.C
index e79a5aa38ef..c7d12b32a48 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-redecl6.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-redecl6.C
@@ -160,36 +160,36 @@ namespace nondefining
   }
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 25 defining::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 defining::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::vfun at .*.C:25: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::vfun at .*.C:26: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 32 defining::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun at .*.C:32: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 42 defining::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:39: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:40: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:41: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:42: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 138 defining::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 139 defining::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::funend at .*.C:138: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::funend at .*.C:139: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 nondefining::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 69 nondefining::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::vfun at .*.C:68: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::vfun at .*.C:69: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 71 nondefining::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun at .*.C:71: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 73 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 74 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:73: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:74: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:75: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:76: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 151 nondefining::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 152 nondefining::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::funend at .*.C:151: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::funend at .*.C:152: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-redecl7.C b/gcc/testsuite/g++.dg/contracts/contracts-redecl7.C
index e3a57eea632..7503a4195f7 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-redecl7.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-redecl7.C
@@ -77,19 +77,19 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 9 S::now .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::now at .*.C:9: .*(\n|\r\n|\r)*" }
 // { dg-output "S::now: a: -10, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 15 now .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function now at .*.C:15: .*(\n|\r\n|\r)*" }
 // { dg-output "now: a: -20, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 22 later .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 22 later .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function later at .*.C:22: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function later at .*.C:22: .*(\n|\r\n|\r)*" }
 // { dg-output "later: a: -21, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 27 both .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function both at .*.C:27: .*(\n|\r\n|\r)*" }
 // { dg-output "both: a: -22, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 36 hidden .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 36 hidden .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function hidden at .*.C:36: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function hidden at .*.C:36: .*(\n|\r\n|\r)*" }
 // { dg-output "hidden: a: -23, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 hidden2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 hidden2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function hidden2 at .*.C:41: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function hidden2 at .*.C:41: .*(\n|\r\n|\r)*" }
 // { dg-output "hidden2: a: -24, t->pri: -10(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec1.C b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec1.C
index 57ba7653543..546c0db2f04 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec1.C
@@ -94,28 +94,28 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 8 body<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function body<int> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "-2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 body<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function body<double> at .*.C:16: .*(\n|\r\n|\r)*" }
 // { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 24 none<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function none<int> at .*.C:24: .*(\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 31 none<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function none<double> at .*.C:31: .*(\n|\r\n|\r)*" }
 // { dg-output "-101(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 arg0<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg0<int> at .*.C:38: .*(\n|\r\n|\r)*" }
 // { dg-output "-9(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 45 arg0<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg0<double> at .*.C:45: .*(\n|\r\n|\r)*" }
 // { dg-output "11(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 arg1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 arg1<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<int> at .*.C:52: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<int> at .*.C:53: .*(\n|\r\n|\r)*" }
 // { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 60 arg1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 arg1<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<double> at .*.C:60: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<double> at .*.C:61: .*(\n|\r\n|\r)*" }
 // { dg-output "14(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 ret<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<int> at .*.C:68: .*(\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 ret<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<double> at .*.C:75: .*(\n|\r\n|\r)*" }
 // { dg-output "3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 ret<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<double> at .*.C:75: .*(\n|\r\n|\r)*" }
 // { dg-output "3.300000(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec2.C b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec2.C
index 25982dfc826..0db4effe071 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec2.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec2.C
@@ -304,92 +304,144 @@ int main(int, char**)
   return 0;
 }
 
-
-// { dg-output "default std::handle_contract_violation called: .*.C 9 body<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function body<int> at .*:9: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "-2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 17 body<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function body<double> at .*:17: a > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 25 none<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function none<int> at .*:25: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 32 none<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function none<double> at .*:32: a > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "-101(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 arg0<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg0<int> at .*:39: t > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "-9(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 arg0<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg0<double> at .*:46: t > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "11(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 arg1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 54 arg1<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<int> at .*:53: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<int> at .*:54: t > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 arg1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 62 arg1<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<double> at .*:61: a > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<double> at .*:62: t > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "14(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 69 ret<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<int> at .*:69: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 ret<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<double> at .*:76: a > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 ret<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<double> at .*:76: a > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "3.300000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 83 g1<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g1<int> at .*:83: t > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "-1(\n|\r\n|\r)*" }
 // { dg-output "-1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 97 g2<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g2<int> at .*:97: t > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "-1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 107 g2<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g2<double> at .*:107: t < 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 114 g2<char> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g2<char> at .*:114: t < 'c'(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "100(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 124 G3<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 125 G3<double, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G3<double, double>::f at .*:124: t > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G3<double, double>::f at .*:125: s > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G3 general T S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 139 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 140 G3<int, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G3<int, int>::f at .*:139: t > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G3<int, int>::f at .*:140: s > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G3 partial int S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 147 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 148 G3<int, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G3<int, double>::f at .*:147: t > 2(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G3<int, double>::f at .*:148: s > 2(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G3 full int double(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 124 G3<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 125 G3<char, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G3<char, char>::f at .*:124: t > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G3<char, char>::f at .*:125: s > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G3 general T S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 139 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 140 G3<int, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G3<int, char>::f at .*:139: t > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G3<int, char>::f at .*:140: s > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G3 partial int S(\n|\r\n|\r)*" }
 // { dg-output "G3 full int C(\n|\r\n|\r)*" }
 // { dg-output "G3 full int C(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 173 G4<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 174 G4<int, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G4<int, int>::G4 at .*:173: t > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G4<int, int>::G4 at .*:174: s > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G4 general T S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 175 G4<int, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G4<int, int>::G4 at .*:175: x > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G4 full double double(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 206 G4<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 207 G4<double, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G4<double, char>::G4 at .*:206: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G4<double, char>::G4 at .*:207: b > 'b'(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G4 full double char(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 208 G4<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 187 G4<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 188 G4<char, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G4<double, char>::G4 at .*:208: x > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G4<char, int>::G4 at .*:187: t > 'c'(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G4<char, int>::G4 at .*:188: s > 3(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G4 partial char S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 189 G4<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 220 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 221 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 222 G5<int, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G4<char, int>::G4 at .*:189: x2 > 3(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<int, int>::f<int> at .*:220: t > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<int, int>::f<int> at .*:221: s > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<int, int>::f<int> at .*:222: r > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G5 gen T S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 220 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 221 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 222 G5<int, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<int, int>::f<double> at .*:220: t > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<int, int>::f<double> at .*:221: s > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<int, int>::f<double> at .*:222: r > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G5 gen T S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 233 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 234 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 235 G5<char, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<char, int>::f<int> at .*:233: x > 'z'(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<char, int>::f<int> at .*:234: y > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<char, int>::f<int> at .*:235: z > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G5 partial char S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 233 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 234 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 235 G5<char, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<char, int>::f<double> at .*:233: x > 'z'(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<char, int>::f<double> at .*:234: y > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<char, int>::f<double> at .*:235: z > 1(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G5 partial char S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 244 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 245 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 246 G5<double, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<double, double>::f<int> at .*:244: a > 2(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<double, double>::f<int> at .*:245: b > 2(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<double, double>::f<int> at .*:246: c > 2(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G5 full double double, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 244 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 245 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 246 G5<double, .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<double, double>::f<double> at .*:244: a > 2(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<double, double>::f<double> at .*:245: b > 2(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<double, double>::f<double> at .*:246: c > 2(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G5 full double double, f gen R(\n|\r\n|\r)*" }
-
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec3.C b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec3.C
index 44725893061..4286e24cd9b 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec3.C
@@ -34,12 +34,17 @@ int main(int, char**) {
 
 // { dg-output "G5 full double double, f gen R(\n|\r\n|\r)*" }
 // { dg-output "G5 full double double, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* t > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* s > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* r > 0 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<int, double>::f<int> at g\\+\\+.dg/contracts/contracts-tmpl-spec3.C:10: t > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<int, double>::f<int> at g\\+\\+.dg/contracts/contracts-tmpl-spec3.C:10: s > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<int, double>::f<int> at g\\+\\+.dg/contracts/contracts-tmpl-spec3.C:10: r > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G5 gen T S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* t > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* s > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* r > 0 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<int, double>::f<double> at g\\+\\+.dg/contracts/contracts-tmpl-spec3.C:10: t > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<int, double>::f<double> at g\\+\\+.dg/contracts/contracts-tmpl-spec3.C:10: s > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G5<int, double>::f<double> at g\\+\\+.dg/contracts/contracts-tmpl-spec3.C:10: r > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
 // { dg-output "G5 gen T S, f gen R(\n|\r\n|\r)*" }
-
diff --git a/gcc/testsuite/g++.dg/contracts/contracts10.C b/gcc/testsuite/g++.dg/contracts/contracts10.C
index ce0723c3db4..9ed86312b40 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts10.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts10.C
@@ -62,12 +62,12 @@ int main()
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 47 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 49 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 100 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 13 tns::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 33 tns::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 tns::TestType::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 24 tns::TestType::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:47: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:48: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:49: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:100: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function tns::fun at .*.C:13: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function tns::fun2 at .*.C:33: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function tns::TestType::fun at .*.C:40: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function tns::TestType::fun2 at .*.C:24: .*(\n|\r\n|\r)*" }
  
diff --git a/gcc/testsuite/g++.dg/contracts/contracts19.C b/gcc/testsuite/g++.dg/contracts/contracts19.C
index 4a8b43a3186..2f7dc3aeefc 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts19.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts19.C
@@ -14,6 +14,6 @@ int main()
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 11 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 main .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:12: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts25.C b/gcc/testsuite/g++.dg/contracts/contracts25.C
index 01217807bc1..8758dd58bcf 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts25.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts25.C
@@ -50,8 +50,8 @@ int main(int, char **) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 12 ffun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 ftfun<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 36 explicitfn .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 ftfun<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ffun at .*.C:12: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<int> at .*.C:30: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function explicitfn at .*.C:36: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<double> at .*.C:30: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts3.C b/gcc/testsuite/g++.dg/contracts/contracts3.C
index ecb9fdb1e65..73dc7a15544 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts3.C
@@ -3,7 +3,7 @@
 // { dg-do run }
 // { dg-options "-std=c++2a -fcontracts" }
 // { dg-shouldfail "assert violation" }
-// { dg-output "default std::handle_contract_violation called" }
+// { dg-output "contract violation in function main" }
 
 int main()
 {
diff --git a/gcc/testsuite/g++.dg/contracts/contracts35.C b/gcc/testsuite/g++.dg/contracts/contracts35.C
index ddd80025afc..dc675d13578 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts35.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts35.C
@@ -32,16 +32,16 @@ int main(int, char **) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S<int> at .*.C:8: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S<int> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "S::S.T.: -1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S<double> at .*.C:8: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S<double> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "S::S.T.: -2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1::S1<int> at .*.C:20: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1::S1<int> at .*.C:20: .*(\n|\r\n|\r)*" }
 // { dg-output "S1::S1.T.: -3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1::S1<double> at .*.C:20: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1::S1<double> at .*.C:20: .*(\n|\r\n|\r)*" }
 // { dg-output "S1::S1.T.: -4(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts5.C b/gcc/testsuite/g++.dg/contracts/contracts5.C
index 0fa0ec83be5..3c591833bf1 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts5.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts5.C
@@ -3,7 +3,7 @@
 // { dg-do run }
 // { dg-options "-std=c++2a -fcontracts -fcontract-build-level=audit" }
 // { dg-shouldfail "assert violation" }
-// { dg-output "default std::handle_contract_violation called" }
+// { dg-output "contract violation in function main" }
 
 int main()
 {
diff --git a/gcc/testsuite/g++.dg/contracts/contracts7.C b/gcc/testsuite/g++.dg/contracts/contracts7.C
index eaad8f0fc9d..9e7cae9433e 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts7.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts7.C
@@ -4,7 +4,7 @@
 // contract failure is switched on
 // { dg-do run }
 // { dg-options "-std=c++2a -fcontracts -fcontract-continuation-mode=on" }
-// { dg-output "default std::handle_contract_violation called" }
+// { dg-output "contract violation in function main" }
 
 int main()
 {
diff --git a/gcc/testsuite/g++.dg/contracts/contracts9.C b/gcc/testsuite/g++.dg/contracts/contracts9.C
index f566628ec44..5bc76c2ca53 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts9.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts9.C
@@ -35,11 +35,19 @@ int main()
   // return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 12 fun1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 fun1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 fun1<const char.> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 fun1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 fun1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 32 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 test<int>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 test<double>::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function fun1<int> at .*:12: \\(long long\\)b > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function fun1<double> at .*:11: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function fun1<const char\\*> at .*:11: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function fun1<int> at .*:11: a > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function fun1<int> at .*:12: \\(long long\\)b > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*:32: fun1\\(-1, -5\\)(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function test<int>::fun at .*:21: b > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
+// { dg-output "contract violation in function test<double>::fun at .*:21: b > 0(\n|\r\n|\r)*" }
+// { dg-output "\\\[level:default, role:default, continuation mode:maybe\\\](\n|\r\n|\r)*" }
-- 
2.38.1


^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 4/4] contrib: Add dg-out-generator.pl
  2022-12-10  9:42 [PATCH 0/4] c++: Small tweaks to contracts Arsen Arsenović
                   ` (2 preceding siblings ...)
  2022-12-10  9:43 ` [PATCH 3/4] contracts: Update testsuite against new default viol. handler format Arsen Arsenović
@ 2022-12-10  9:43 ` Arsen Arsenović
  2022-12-15 16:30   ` Jason Merrill
  3 siblings, 1 reply; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-10  9:43 UTC (permalink / raw)
  To: gcc-patches; +Cc: jason, jwakely, libstdc++, Arsen Arsenović

This script is a helper used to generate dg-output lines from an existing
program output conveniently.  It takes care of escaping Tcl and ARE stuff.

contrib/ChangeLog:

	* dg-out-generator.pl: New file.
---
 contrib/dg-out-generator.pl | 67 +++++++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)
 create mode 100755 contrib/dg-out-generator.pl

diff --git a/contrib/dg-out-generator.pl b/contrib/dg-out-generator.pl
new file mode 100755
index 00000000000..38aed2aa38d
--- /dev/null
+++ b/contrib/dg-out-generator.pl
@@ -0,0 +1,67 @@
+#!/usr/bin/env perl
+#
+# Copyright (C) 2022 GCC Contributors.
+# Contributed by Arsen Arsenović.
+#
+# This script is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+
+# This script reads program output on STDIN, and out of it produces a block of
+# dg-output lines that can be yanked at the end of a file.  It will escape
+# special ARE and Tcl constructs automatically.
+#
+# Each argument passed on the standard input is treated as a string to be
+# replaced by ``.*'' in the final result.  This is intended to mask out build
+# paths, filenames, etc.
+#
+# Usage example:
+
+# $ g++-13 -fcontracts -o test \
+#  'g++.dg/contracts/contracts-access1.C' && \
+#   ./test |& dg-out-generator.pl 'g++.dg/contracts/contracts-access1.C'
+# // { dg-output "contract violation in function Base::b at .*:11: pub > 0(\n|\r\n|\r)*" }
+# // { dg-output "\\\[level:default, role:default, continuation mode:never\\\](\n|\r\n|\r)*" }
+# // { dg-output "terminate called without an active exception(\n|\r\n|\r)*" }
+# You can now freely dump the above into your testcase.
+
+use strict;
+use warnings;
+use POSIX 'floor';
+
+my $escapees = '(' . join ('|', map { quotemeta } @ARGV) . ')';
+
+sub gboundary($)
+{
+  my $str = shift;
+  my $sz = 10.0;
+  for (;;)
+    {
+      my $bnd = join '', (map chr 64 + rand 27, 1 .. floor $sz);
+      return $bnd unless index ($str, $bnd) >= 0;
+      $sz += 0.1;
+    }
+}
+
+while (<STDIN>)
+  {
+    # Escape our escapees.
+    my $boundary = gboundary $_;
+    s/$escapees/$boundary/;
+
+    # Quote stuff special in Tcl ARE.
+    s/([[\]*+?{}()\\])/\\$1/g;
+
+    # Then, special stuff in TCL itself.
+    s/([\][\\])/\\$1/g;
+
+    # Newlines should be more tolerant.
+    s/\n$/(\\n|\\r\\n|\\r)*/;
+
+    # Then split out the boundary, replacing it with .*.
+    s/$boundary/.*/;
+
+    # Then, let's print it in a dg-output block.
+    print "// { dg-output \"$_\" }\n";
+  }
-- 
2.38.1


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 1/4] contracts: Lowercase {MAYBE,NEVER}_CONTINUE
  2022-12-10  9:43 ` [PATCH 1/4] contracts: Lowercase {MAYBE,NEVER}_CONTINUE Arsen Arsenović
@ 2022-12-10 11:15   ` Jonathan Wakely
  2022-12-15 16:25   ` Jason Merrill
  1 sibling, 0 replies; 27+ messages in thread
From: Jonathan Wakely @ 2022-12-10 11:15 UTC (permalink / raw)
  To: Arsen Arsenović
  Cc: gcc-patches, Jason Merrill, Jonathan Wakely, libstdc++

[-- Attachment #1: Type: text/plain, Size: 1928 bytes --]

On Sat, 10 Dec 2022, 09:51 Arsen Arsenović via Libstdc++, <
libstdc++@gcc.gnu.org> wrote:

> The lowercase constants are more consistent with the standard, and it is
> unlikely that the uppercase versions would've been accepted.
>
> gcc/cp/ChangeLog:
>
>         * contracts.cc: Rename references to
>         contract_violation_continuation_mode constants to be lowercase.
>
> libstdc++-v3/ChangeLog:
>
>         * include/experimental/contract: Lowercase the constants in
>         contract_violation_continuation_mode.
>

OK as far as the library side goes.


---
>  gcc/cp/contracts.cc                        | 4 ++--
>  libstdc++-v3/include/experimental/contract | 2 +-
>  2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/gcc/cp/contracts.cc b/gcc/cp/contracts.cc
> index 45f52b20392..26316372389 100644
> --- a/gcc/cp/contracts.cc
> +++ b/gcc/cp/contracts.cc
> @@ -41,9 +41,9 @@ along with GCC; see the file COPYING3.  If not see
>          "v > 0", // comment,
>          "default", // assertion_level,
>          "default", // assertion_role,
> -        MAYBE_CONTINUE, // continuation_mode
> +        maybe_continue, // continuation_mode
>         });
> -       terminate (); // if NEVER_CONTINUE
> +       terminate (); // if never_continue
>       }
>
>     We use an internal type with the same layout as contract_violation
> rather
> diff --git a/libstdc++-v3/include/experimental/contract
> b/libstdc++-v3/include/experimental/contract
> index cf655023da7..a2babed6301 100644
> --- a/libstdc++-v3/include/experimental/contract
> +++ b/libstdc++-v3/include/experimental/contract
> @@ -45,7 +45,7 @@ namespace experimental
>  {
>    // From P1332
>    enum class contract_violation_continuation_mode {
> -    NEVER_CONTINUE, MAYBE_CONTINUE
> +    never_continue, maybe_continue
>    };
>
>    class contract_violation {
> --
> 2.38.1
>
>

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 1/4] contracts: Lowercase {MAYBE,NEVER}_CONTINUE
  2022-12-10  9:43 ` [PATCH 1/4] contracts: Lowercase {MAYBE,NEVER}_CONTINUE Arsen Arsenović
  2022-12-10 11:15   ` Jonathan Wakely
@ 2022-12-15 16:25   ` Jason Merrill
  2022-12-15 17:39     ` Arsen Arsenović
  1 sibling, 1 reply; 27+ messages in thread
From: Jason Merrill @ 2022-12-15 16:25 UTC (permalink / raw)
  To: Arsen Arsenović, gcc-patches; +Cc: jwakely, libstdc++

On 12/10/22 04:43, Arsen Arsenović wrote:
> The lowercase constants are more consistent with the standard, and it is
> unlikely that the uppercase versions would've been accepted.

OK.

> gcc/cp/ChangeLog:
> 
> 	* contracts.cc: Rename references to
> 	contract_violation_continuation_mode constants to be lowercase.
> 
> libstdc++-v3/ChangeLog:
> 
> 	* include/experimental/contract: Lowercase the constants in
> 	contract_violation_continuation_mode.
> ---
>   gcc/cp/contracts.cc                        | 4 ++--
>   libstdc++-v3/include/experimental/contract | 2 +-
>   2 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/gcc/cp/contracts.cc b/gcc/cp/contracts.cc
> index 45f52b20392..26316372389 100644
> --- a/gcc/cp/contracts.cc
> +++ b/gcc/cp/contracts.cc
> @@ -41,9 +41,9 @@ along with GCC; see the file COPYING3.  If not see
>   	 "v > 0", // comment,
>   	 "default", // assertion_level,
>   	 "default", // assertion_role,
> -	 MAYBE_CONTINUE, // continuation_mode
> +	 maybe_continue, // continuation_mode
>          });
> -       terminate (); // if NEVER_CONTINUE
> +       terminate (); // if never_continue
>        }
>   
>      We use an internal type with the same layout as contract_violation rather
> diff --git a/libstdc++-v3/include/experimental/contract b/libstdc++-v3/include/experimental/contract
> index cf655023da7..a2babed6301 100644
> --- a/libstdc++-v3/include/experimental/contract
> +++ b/libstdc++-v3/include/experimental/contract
> @@ -45,7 +45,7 @@ namespace experimental
>   {
>     // From P1332
>     enum class contract_violation_continuation_mode {
> -    NEVER_CONTINUE, MAYBE_CONTINUE
> +    never_continue, maybe_continue
>     };
>   
>     class contract_violation {


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 2/4] libstdc++: Improve output of default contract violation handler [PR107792]
  2022-12-10  9:43 ` [PATCH 2/4] libstdc++: Improve output of default contract violation handler [PR107792] Arsen Arsenović
@ 2022-12-15 16:28   ` Jason Merrill
  2022-12-15 17:43     ` Arsen Arsenović
  0 siblings, 1 reply; 27+ messages in thread
From: Jason Merrill @ 2022-12-15 16:28 UTC (permalink / raw)
  To: Arsen Arsenović, gcc-patches; +Cc: jwakely, libstdc++

On 12/10/22 04:43, Arsen Arsenović wrote:
> From: Jonathan Wakely <jwakely@redhat.com>
> 
> Make the output more readable. Don't output anything unless verbose
> termination is enabled at configure-time.
> 
> libstdc++-v3/ChangeLog:
> 
> 	PR libstdc++/107792
> 	PR libstdc++/107778
> 	* src/experimental/contract.cc (handle_contract_violation): Make
> 	output more readable.
> ---
>   libstdc++-v3/src/experimental/contract.cc | 23 +++++++++++++----------
>   1 file changed, 13 insertions(+), 10 deletions(-)
> 
> diff --git a/libstdc++-v3/src/experimental/contract.cc b/libstdc++-v3/src/experimental/contract.cc
> index c8d2697eddc..6a7f064d35e 100644
> --- a/libstdc++-v3/src/experimental/contract.cc
> +++ b/libstdc++-v3/src/experimental/contract.cc
> @@ -1,4 +1,5 @@
>   // -*- C++ -*- std::experimental::contract_violation and friends
> +
>   // Copyright (C) 2019-2022 Free Software Foundation, Inc.
>   //
>   // This file is part of GCC.
> @@ -23,19 +24,21 @@
>   // <http://www.gnu.org/licenses/>.
>   
>   #include <experimental/contract>
> -#include <iostream>
> +#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
> +# include <iostream>
> +#endif
>   
>   __attribute__ ((weak)) void
>   handle_contract_violation (const std::experimental::contract_violation &violation)
>   {
> -  std::cerr << "default std::handle_contract_violation called: \n"
> -    << " " << violation.file_name()
> -    << " " << violation.line_number()
> -    << " " << violation.function_name()
> -    << " " << violation.comment()
> -    << " " << violation.assertion_level()
> -    << " " << violation.assertion_role()
> -    << " " << (int)violation.continuation_mode()
> +#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
> +  const char* modes[]{ "never", "maybe" }; // Must match enumerators in header.

I'd actually suggest "off" and "on" since it's really a boolean since 
"always_continue" was dropped.

> +  std::cerr << "contract violation in function " << violation.function_name()
> +    << " at " << violation.file_name() << ':' << violation.line_number()
> +    << ": " << violation.comment()
> +    << "\n[level:" << violation.assertion_level()

Maybe omit level/role if "default"?

> +    << ", role:" << violation.assertion_role() << ", continuation mode:"
> +    << modes[(int)violation.continuation_mode()] << ']'
>       << std::endl;
> +#endif
>   }


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 4/4] contrib: Add dg-out-generator.pl
  2022-12-10  9:43 ` [PATCH 4/4] contrib: Add dg-out-generator.pl Arsen Arsenović
@ 2022-12-15 16:30   ` Jason Merrill
  2022-12-15 17:30     ` Arsen Arsenović
  0 siblings, 1 reply; 27+ messages in thread
From: Jason Merrill @ 2022-12-15 16:30 UTC (permalink / raw)
  To: Arsen Arsenović, gcc-patches; +Cc: jwakely, libstdc++

On 12/10/22 04:43, Arsen Arsenović wrote:
> This script is a helper used to generate dg-output lines from an existing
> program output conveniently.  It takes care of escaping Tcl and ARE stuff.
> contrib/ChangeLog:
> 
> 	* dg-out-generator.pl: New file.
> ---
>   contrib/dg-out-generator.pl | 67 +++++++++++++++++++++++++++++++++++++
>   1 file changed, 67 insertions(+)
>   create mode 100755 contrib/dg-out-generator.pl
> 
> diff --git a/contrib/dg-out-generator.pl b/contrib/dg-out-generator.pl
> new file mode 100755
> index 00000000000..38aed2aa38d
> --- /dev/null
> +++ b/contrib/dg-out-generator.pl
> @@ -0,0 +1,67 @@
> +#!/usr/bin/env perl
> +#
> +# Copyright (C) 2022 GCC Contributors.
> +# Contributed by Arsen Arsenović.
> +#
> +# This script is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3, or (at your option)
> +# any later version.
> +
> +# This script reads program output on STDIN, and out of it produces a block of
> +# dg-output lines that can be yanked at the end of a file.  It will escape
> +# special ARE and Tcl constructs automatically.
> +#
> +# Each argument passed on the standard input is treated as a string to be
> +# replaced by ``.*'' in the final result.  This is intended to mask out build
> +# paths, filenames, etc.
> +#
> +# Usage example:
> +
> +# $ g++-13 -fcontracts -o test \
> +#  'g++.dg/contracts/contracts-access1.C' && \
> +#   ./test |& dg-out-generator.pl 'g++.dg/contracts/contracts-access1.C'
> +# // { dg-output "contract violation in function Base::b at .*:11: pub > 0(\n|\r\n|\r)*" }
> +# // { dg-output "\\\[level:default, role:default, continuation mode:never\\\](\n|\r\n|\r)*" }
> +# // { dg-output "terminate called without an active exception(\n|\r\n|\r)*" }
> +# You can now freely dump the above into your testcase.
> +
> +use strict;
> +use warnings;
> +use POSIX 'floor';
> +
> +my $escapees = '(' . join ('|', map { quotemeta } @ARGV) . ')';
> +
> +sub gboundary($)
> +{
> +  my $str = shift;
> +  my $sz = 10.0;
> +  for (;;)
> +    {
> +      my $bnd = join '', (map chr 64 + rand 27, 1 .. floor $sz);
> +      return $bnd unless index ($str, $bnd) >= 0;
> +      $sz += 0.1;
> +    }
> +}
> +
> +while (<STDIN>)
> +  {
> +    # Escape our escapees.
> +    my $boundary = gboundary $_;
> +    s/$escapees/$boundary/;
> +
> +    # Quote stuff special in Tcl ARE.
> +    s/([[\]*+?{}()\\])/\\$1/g;
> +
> +    # Then, special stuff in TCL itself.
> +    s/([\][\\])/\\$1/g;
> +
> +    # Newlines should be more tolerant.
> +    s/\n$/(\\n|\\r\\n|\\r)*/;
> +
> +    # Then split out the boundary, replacing it with .*.
> +    s/$boundary/.*/;
> +
> +    # Then, let's print it in a dg-output block.
> +    print "// { dg-output \"$_\" }\n";

I wonder if you want to wrap the pattern in {} instead of "" so you 
don't need the "special stuff in TCL itself" quoting?

Jason


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 4/4] contrib: Add dg-out-generator.pl
  2022-12-15 16:30   ` Jason Merrill
@ 2022-12-15 17:30     ` Arsen Arsenović
  0 siblings, 0 replies; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-15 17:30 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches, jwakely, libstdc++

[-- Attachment #1: Type: text/plain, Size: 513 bytes --]

Hi Jason,

Jason Merrill <jason@redhat.com> writes:

> I wonder if you want to wrap the pattern in {} instead of "" so you don't need
> the "special stuff in TCL itself" quoting?

{}s lack generality, for instance, try: puts {unbalanced \}}.  I could
try to write a revision that complies with the minimal escaping style
when I take the opportunity to address your other comment.

(also, it just occurred to me that I forgot to escape dollar signs)

Thanks, have a great day.
-- 
Arsen Arsenović

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 381 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 1/4] contracts: Lowercase {MAYBE,NEVER}_CONTINUE
  2022-12-15 16:25   ` Jason Merrill
@ 2022-12-15 17:39     ` Arsen Arsenović
  2022-12-20 17:16       ` Jason Merrill
  0 siblings, 1 reply; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-15 17:39 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches, jwakely, libstdc++

[-- Attachment #1: Type: text/plain, Size: 315 bytes --]

Hi,

Jason Merrill <jason@redhat.com> writes:

>> The lowercase constants are more consistent with the standard, and it is
>> unlikely that the uppercase versions would've been accepted.
>
> OK.

Thanks.  Could you push this for me?  I don't have write access.

Have a great day.
-- 
Arsen Arsenović

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 381 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 2/4] libstdc++: Improve output of default contract violation handler [PR107792]
  2022-12-15 16:28   ` Jason Merrill
@ 2022-12-15 17:43     ` Arsen Arsenović
  2022-12-20 10:49       ` [PATCH 1/3] " Arsen Arsenović
  0 siblings, 1 reply; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-15 17:43 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches, jwakely, libstdc++

[-- Attachment #1: Type: text/plain, Size: 535 bytes --]

Hi,

Jason Merrill <jason@redhat.com> writes:

>
> I'd actually suggest "off" and "on" since it's really a boolean since
> "always_continue" was dropped.
>
>> +  std::cerr << "contract violation in function " << violation.function_name()
>> +    << " at " << violation.file_name() << ':' << violation.line_number()
>> +    << ": " << violation.comment()
>> +    << "\n[level:" << violation.assertion_level()
>
> Maybe omit level/role if "default"?

ACK on both, sounds good.

Have a great day.
-- 
Arsen Arsenović

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 381 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 1/3] libstdc++: Improve output of default contract violation handler [PR107792]
  2022-12-15 17:43     ` Arsen Arsenović
@ 2022-12-20 10:49       ` Arsen Arsenović
  2022-12-20 10:49         ` [PATCH 2/3] contracts: Update testsuite against new default viol. handler format Arsen Arsenović
                           ` (2 more replies)
  0 siblings, 3 replies; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-20 10:49 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches, jwakely, libstdc++

From: Jonathan Wakely <jwakely@redhat.com>

Make the output more readable. Don't output anything unless verbose
termination is enabled at configure-time.

libstdc++-v3/ChangeLog:

	PR libstdc++/107792
	PR libstdc++/107778
	* src/experimental/contract.cc (handle_contract_violation): Make
	output more readable.
---
Alright, updated to omit information that's defaulted.

Turns out your suggestion for dg-output was quite clever - because {} is
special in ARE, it's always prefixed by \ when escaping with curlies,
and so it never counds towards the "paired curly braces" rules, and
requires no extra escaping code at all!  That's quite a bit neater.

 libstdc++-v3/src/experimental/contract.cc | 50 ++++++++++++++++++-----
 1 file changed, 39 insertions(+), 11 deletions(-)

diff --git a/libstdc++-v3/src/experimental/contract.cc b/libstdc++-v3/src/experimental/contract.cc
index c8d2697eddc..fbe8815a5c2 100644
--- a/libstdc++-v3/src/experimental/contract.cc
+++ b/libstdc++-v3/src/experimental/contract.cc
@@ -1,4 +1,5 @@
 // -*- C++ -*- std::experimental::contract_violation and friends
+
 // Copyright (C) 2019-2022 Free Software Foundation, Inc.
 //
 // This file is part of GCC.
@@ -23,19 +24,46 @@
 // <http://www.gnu.org/licenses/>.
 
 #include <experimental/contract>
-#include <iostream>
+#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
+# include <iostream>
+#endif
 
 __attribute__ ((weak)) void
 handle_contract_violation (const std::experimental::contract_violation &violation)
 {
-  std::cerr << "default std::handle_contract_violation called: \n"
-    << " " << violation.file_name()
-    << " " << violation.line_number()
-    << " " << violation.function_name()
-    << " " << violation.comment()
-    << " " << violation.assertion_level()
-    << " " << violation.assertion_role()
-    << " " << (int)violation.continuation_mode()
-    << std::endl;
+#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
+  bool level_default_p = violation.assertion_level() == "default";
+  bool role_default_p = violation.assertion_role() == "default";
+  bool cont_mode_default_p = violation.continuation_mode()
+    == std::experimental::contract_violation_continuation_mode::never_continue;
+
+  const char* modes[]{ "never", "maybe" }; // Must match enumerators in header.
+  std::cerr << "contract violation in function " << violation.function_name()
+    << " at " << violation.file_name() << ':' << violation.line_number()
+    << ": " << violation.comment();
+
+  const char* delimiter = "\n[";
+
+  if (!level_default_p)
+    {
+      std::cerr << delimiter << "level:" << violation.assertion_level();
+      delimiter = ", ";
+    }
+  if (!role_default_p)
+    {
+      std::cerr << delimiter << "role:" << violation.assertion_role();
+      delimiter = ", ";
+    }
+  if (!cont_mode_default_p)
+    {
+      std::cerr << delimiter << "mode:"
+		<< modes[(int)violation.continuation_mode() & 1];
+      delimiter = ", ";
+    }
+
+  if (delimiter[0] == ',')
+    std::cerr << ']';
+
+  std::cerr << std::endl;
+#endif
 }
-
-- 
2.39.0


^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 2/3] contracts: Update testsuite against new default viol. handler format
  2022-12-20 10:49       ` [PATCH 1/3] " Arsen Arsenović
@ 2022-12-20 10:49         ` Arsen Arsenović
  2022-12-20 10:49         ` [PATCH 3/3] contrib: Add dg-out-generator.pl Arsen Arsenović
  2022-12-20 17:23         ` [PATCH 1/3] libstdc++: Improve output of default contract violation handler [PR107792] Jason Merrill
  2 siblings, 0 replies; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-20 10:49 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches, jwakely, libstdc++, Arsen Arsenović

This change was almost entirely mechanical.  Save for two files which had very
short matches, these changes were produced by two seds and a Perl script, for
the more involved cases.  The latter will be added in a subsequent commit.  The
former are as follows:

    sed -E -i "/dg-output/s/default std::handle_contract_violation called: \
    (\S+) (\S+) (\S+(<[A-Za-z0-9, ]*)?>?)\
    /contract violation in function \3 at \1:\2: /" *.C
    sed -i '/dg-output/s/  */ /g'

Whichever files remained failing after the above changes were checked-out,
re-ran, with output extracted, and ran through dg-out-generator.pl.

gcc/testsuite/ChangeLog:

	* g++.dg/contracts/contracts-access1.C: Convert to new default
	violation handler.
	* g++.dg/contracts/contracts-config1.C: Ditto.
	* g++.dg/contracts/contracts-constexpr1.C: Ditto.
	* g++.dg/contracts/contracts-ctor-dtor1.C: Ditto.
	* g++.dg/contracts/contracts-deduced2.C: Ditto.
	* g++.dg/contracts/contracts-friend1.C: Ditto.
	* g++.dg/contracts/contracts-multiline1.C: Ditto.
	* g++.dg/contracts/contracts-post3.C: Ditto.
	* g++.dg/contracts/contracts-pre10.C: Ditto.
	* g++.dg/contracts/contracts-pre2.C: Ditto.
	* g++.dg/contracts/contracts-pre2a2.C: Ditto.
	* g++.dg/contracts/contracts-pre3.C: Ditto.
	* g++.dg/contracts/contracts-pre4.C: Ditto.
	* g++.dg/contracts/contracts-pre5.C: Ditto.
	* g++.dg/contracts/contracts-pre7.C: Ditto.
	* g++.dg/contracts/contracts-pre9.C: Ditto.
	* g++.dg/contracts/contracts-redecl3.C: Ditto.
	* g++.dg/contracts/contracts-redecl4.C: Ditto.
	* g++.dg/contracts/contracts-redecl6.C: Ditto.
	* g++.dg/contracts/contracts-redecl7.C: Ditto.
	* g++.dg/contracts/contracts-tmpl-spec1.C: Ditto.
	* g++.dg/contracts/contracts-tmpl-spec2.C: Ditto.
	* g++.dg/contracts/contracts-tmpl-spec3.C: Ditto.
	* g++.dg/contracts/contracts10.C: Ditto.
	* g++.dg/contracts/contracts19.C: Ditto.
	* g++.dg/contracts/contracts25.C: Ditto.
	* g++.dg/contracts/contracts3.C: Ditto.
	* g++.dg/contracts/contracts35.C: Ditto.
	* g++.dg/contracts/contracts5.C: Ditto.
	* g++.dg/contracts/contracts7.C: Ditto.
	* g++.dg/contracts/contracts9.C: Ditto.
---
 .../g++.dg/contracts/contracts-access1.C      |  36 +--
 .../g++.dg/contracts/contracts-config1.C      |  30 ++-
 .../g++.dg/contracts/contracts-constexpr1.C   |  16 +-
 .../g++.dg/contracts/contracts-ctor-dtor1.C   |  96 ++++----
 .../g++.dg/contracts/contracts-deduced2.C     |  20 +-
 .../g++.dg/contracts/contracts-friend1.C      |  10 +-
 .../g++.dg/contracts/contracts-multiline1.C   |   2 +-
 .../g++.dg/contracts/contracts-post3.C        |   2 +-
 .../g++.dg/contracts/contracts-pre10.C        | 122 ++++++----
 .../g++.dg/contracts/contracts-pre2.C         |  36 +--
 .../g++.dg/contracts/contracts-pre2a2.C       |   6 +-
 .../g++.dg/contracts/contracts-pre3.C         | 156 ++++++------
 .../g++.dg/contracts/contracts-pre4.C         |  12 +-
 .../g++.dg/contracts/contracts-pre5.C         |  24 +-
 .../g++.dg/contracts/contracts-pre7.C         |  24 +-
 .../g++.dg/contracts/contracts-pre9.C         |  24 +-
 .../g++.dg/contracts/contracts-redecl3.C      |  36 +--
 .../g++.dg/contracts/contracts-redecl4.C      |  24 +-
 .../g++.dg/contracts/contracts-redecl6.C      |  36 +--
 .../g++.dg/contracts/contracts-redecl7.C      |  18 +-
 .../g++.dg/contracts/contracts-tmpl-spec1.C   |  26 +-
 .../g++.dg/contracts/contracts-tmpl-spec2.C   | 230 +++++++++++-------
 .../g++.dg/contracts/contracts-tmpl-spec3.C   |  27 +-
 gcc/testsuite/g++.dg/contracts/contracts10.C  |  16 +-
 gcc/testsuite/g++.dg/contracts/contracts19.C  |   4 +-
 gcc/testsuite/g++.dg/contracts/contracts25.C  |   8 +-
 gcc/testsuite/g++.dg/contracts/contracts3.C   |   2 +-
 gcc/testsuite/g++.dg/contracts/contracts35.C  |  16 +-
 gcc/testsuite/g++.dg/contracts/contracts5.C   |   2 +-
 gcc/testsuite/g++.dg/contracts/contracts7.C   |   2 +-
 gcc/testsuite/g++.dg/contracts/contracts9.C   |  24 +-
 31 files changed, 594 insertions(+), 493 deletions(-)

diff --git a/gcc/testsuite/g++.dg/contracts/contracts-access1.C b/gcc/testsuite/g++.dg/contracts/contracts-access1.C
index a3a29821017..414b29a1613 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-access1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-access1.C
@@ -107,22 +107,22 @@ int main()
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 11 Base::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 Base::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 13 Base::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 Child::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 27 Child::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 Child::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 37 VChild::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 VChild::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 VChild::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 49 TChild<Base>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 50 TChild<Base>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 51 TChild<Base>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 67 PubChild::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 PubChild::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 69 PubChild::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 79 TPubChild<PubBase>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 80 TPubChild<PubBase>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 81 TPubChild<PubBase>::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::b at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::b at .*.C:12: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::b at .*.C:13: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child::fun at .*.C:26: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child::fun at .*.C:27: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child::fun at .*.C:28: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function VChild::b at .*.C:37: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function VChild::b at .*.C:38: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function VChild::b at .*.C:39: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TChild<Base>::fun at .*.C:49: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TChild<Base>::fun at .*.C:50: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TChild<Base>::fun at .*.C:51: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function PubChild::fun at .*.C:67: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function PubChild::fun at .*.C:68: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function PubChild::fun at .*.C:69: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TPubChild<PubBase>::fun at .*.C:79: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TPubChild<PubBase>::fun at .*.C:80: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TPubChild<PubBase>::fun at .*.C:81: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-config1.C b/gcc/testsuite/g++.dg/contracts/contracts-config1.C
index 9e32bac535d..79741c5af36 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-config1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-config1.C
@@ -24,13 +24,23 @@ int main(int, char **)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*main false default default 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false default default 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false audit default 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false default new_role 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false default new_role 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false audit new_role 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false   1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false default default 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false audit default 1.*(\n|\r\n|\r)*" }
-
+// { dg-output {contract violation in function main at .*:14: false(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:15: false(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:16: false(\n|\r\n|\r)*} }
+// { dg-output {\[level:audit, mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:17: false(\n|\r\n|\r)*} }
+// { dg-output {\[role:new_role, mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:18: false(\n|\r\n|\r)*} }
+// { dg-output {\[role:new_role, mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:19: false(\n|\r\n|\r)*} }
+// { dg-output {\[level:audit, role:new_role, mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:20: false(\n|\r\n|\r)*} }
+// { dg-output {\[level:, role:, mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:21: false(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:22: false(\n|\r\n|\r)*} }
+// { dg-output {\[level:audit, mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function fun at .*:7: r > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-constexpr1.C b/gcc/testsuite/g++.dg/contracts/contracts-constexpr1.C
index 4c111358d9b..dc2a3854901 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-constexpr1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-constexpr1.C
@@ -63,12 +63,12 @@ int main(int, char **) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 14 ffun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 15 ffun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 ftfun<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 ftfun<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 explicitfn .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 explicitfn .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 ftfun<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 ftfun<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ffun at .*.C:14: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ffun at .*.C:15: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<int> at .*.C:38: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<int> at .*.C:39: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function explicitfn at .*.C:46: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function explicitfn at .*.C:48: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<double> at .*.C:38: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<double> at .*.C:39: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-ctor-dtor1.C b/gcc/testsuite/g++.dg/contracts/contracts-ctor-dtor1.C
index bcd6096b5a7..618a7efb07b 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-ctor-dtor1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-ctor-dtor1.C
@@ -124,54 +124,54 @@ int main(int, char**)
 };
 
 // test0
-// { dg-output "default std::handle_contract_violation called: .*.C 11 S::S .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 S::S .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 SInline::SInline .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 SInline::SInline .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 SDelegate0::SDelegate0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 SDelegate0::SDelegate0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 34 SDelegate1::SDelegate1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 34 SDelegate1::SDelegate1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 SDelegate2::SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 SDelegate2::SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 SDelegate2::SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 SDelegate2::SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 SDelegate3::SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 47 SDelegate3::SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 47 SDelegate3::SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 SDelegate3::SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 S1<int>::S1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 S1<int>::S1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 S1<double>::S1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 S1<double>::S1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 S2::S2<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 S2::S2<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 S2::S2<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 S2::S2<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<int>::S3<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<int>::S3<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<int>::S3<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<int>::S3<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<double>::S3<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<double>::S3<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<double>::S3<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<double>::S3<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 49 SDelegate3::~SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 49 SDelegate3::~SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 42 SDelegate2::~SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 42 SDelegate2::~SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 35 SDelegate1::~SDelegate1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 35 SDelegate1::~SDelegate1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 SDelegate0::~SDelegate0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 SDelegate0::~SDelegate0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 SInline::~SInline .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 SInline::~SInline .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 S::~S .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 S::~S .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S at .*.C:11 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S at .*.C:11 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SInline::SInline at .*.C:20 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SInline::SInline at .*.C:20 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate0::SDelegate0 at .*.C:26 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate0::SDelegate0 at .*.C:26 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate1::SDelegate1 at .*.C:34 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate1::SDelegate1 at .*.C:34 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::SDelegate2 at .*.C:41 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::SDelegate2 at .*.C:40 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::SDelegate2 at .*.C:40 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::SDelegate2 at .*.C:41 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::SDelegate3 at .*.C:48 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::SDelegate3 at .*.C:47 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::SDelegate3 at .*.C:47 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::SDelegate3 at .*.C:48 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1<int>::S1 at .*.C:55 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1<int>::S1 at .*.C:55 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1<double>::S1 at .*.C:55 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1<double>::S1 at .*.C:55 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S2::S2<int> at .*.C:61 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S2::S2<int> at .*.C:61 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S2::S2<double> at .*.C:61 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S2::S2<double> at .*.C:61 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<int>::S3<int> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<int>::S3<int> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<int>::S3<double> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<int>::S3<double> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<double>::S3<int> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<double>::S3<int> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<double>::S3<double> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<double>::S3<double> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::~SDelegate3 at .*.C:49 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::~SDelegate3 at .*.C:49 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::~SDelegate2 at .*.C:42 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::~SDelegate2 at .*.C:42 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate1::~SDelegate1 at .*.C:35 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate1::~SDelegate1 at .*.C:35 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate0::~SDelegate0 at .*.C:28 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate0::~SDelegate0 at .*.C:28 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SInline::~SInline at .*.C:21 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SInline::~SInline at .*.C:21 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::~S at .*.C:12 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::~S at .*.C:12 .*(\n|\r\n|\r)*" }
 
 // test1
-// { dg-output "default std::handle_contract_violation called: .*.C 73 G0::G0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 80 G1::G1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 81 G1::~G1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 74 G0::~G0 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G0::G0 at .*.C:73 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G1::G1 at .*.C:80 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G1::~G1 at .*.C:81 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G0::~G0 at .*.C:74 .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-deduced2.C b/gcc/testsuite/g++.dg/contracts/contracts-deduced2.C
index da9c019f10a..fd43166e7b0 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-deduced2.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-deduced2.C
@@ -71,14 +71,14 @@ int main(int, char**) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 5 g0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 5 g0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 g1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 23 g3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 g4 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 37 g5 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 g6<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 g6<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 g7<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 g7<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g0 at .*.C:5: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g0 at .*.C:5: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g1 at .*.C:12: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g3 at .*.C:23: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g4 at .*.C:30: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g5 at .*.C:37: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g6<int> at .*.C:46: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g6<double> at .*.C:46: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g7<int> at .*.C:55: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g7<double> at .*.C:55: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-friend1.C b/gcc/testsuite/g++.dg/contracts/contracts-friend1.C
index 0ccfbe2c7c3..5eec11ffb26 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-friend1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-friend1.C
@@ -33,8 +33,8 @@ int main(int, char**) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 6 fn0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 19 fn2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 9 X::fns0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 X::fns1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 X::fns2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function fn0 at .*.C:6: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function fn2 at .*.C:19: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function X::fns0 at .*.C:9: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function X::fns1 at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function X::fns2 at .*.C:21: .*(\n|\r\n|\r)*" }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-multiline1.C b/gcc/testsuite/g++.dg/contracts/contracts-multiline1.C
index 8145c61e827..6ddae0f5b31 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-multiline1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-multiline1.C
@@ -16,4 +16,4 @@ int main(int, char **)
   ]];
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 8 main x < 10 && y > 123.*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:8: x < 10 && y > 123.*(\n|\r\n|\r)*" }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-post3.C b/gcc/testsuite/g++.dg/contracts/contracts-post3.C
index 9f1dffd8f6a..12923282796 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-post3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-post3.C
@@ -1,7 +1,7 @@
 // { dg-do run }
 // { dg-options "-std=c++2a -fcontracts" }
 // { dg-shouldfail "assert violation" }
-// { dg-output "default std::handle_contract_violation called" }
+// { dg-output "contract violation in function f1" }
 
 int f1(int n)
   [[post r: r > n]]
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre10.C b/gcc/testsuite/g++.dg/contracts/contracts-pre10.C
index 877e9ada404..6904b576c0c 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre10.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre10.C
@@ -140,51 +140,77 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 M::f<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f<int>.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 M::f<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f<double>.-11.5.: 11(\n|\r\n|\r)*" }
-// { dg-output "m.f<int>.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.f<double>.11.5.: -11(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 M::g<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g<int>.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 M::g<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g<double>.-11.5.: 11(\n|\r\n|\r)*" }
-// { dg-output "m.g<int>.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.g<double>.11.5.: -11(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 M::f_arg<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f_arg.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 M::f_arg<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f_arg.-11.5.: 11(\n|\r\n|\r)*" }
-// { dg-output "m.f_arg.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.f_arg.11.5.: -11(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 19 M::g_arg<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g_arg.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 19 M::g_arg<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g_arg.-11.5.: 11(\n|\r\n|\r)*" }
-// { dg-output "m.g_arg.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.g_arg.11.5.: -11(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 25 M::f_ret<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f_ret<int>.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 25 M::f_ret<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f_ret<double>.-11.5.: 16.500000(\n|\r\n|\r)*" }
-// { dg-output "m.f_ret<int>.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.f_ret<double>.11.5.: -16.500000(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 M::g_ret<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g_ret<int>.-10.: 15(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 M::g_ret<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g_ret<double>.-11.5.: 16.500000(\n|\r\n|\r)*" }
-// { dg-output "m.g_ret<int>.10.: -15(\n|\r\n|\r)*" }
-// { dg-output "m.g_ret<double>.11.5.: -16.500000(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 59 S<int>::g<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 59 S<int>::g<double> .*(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 59 S<double>::g<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 59 S<double>::g<double> .*(\n|\r\n|\r)*" }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::f<int> at .*:7: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {m.f<int>\(-10\): 10(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::f<double> at .*:7: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {m.f<double>\(-11.5\): 11(\n|\r\n|\r)*} }
+// { dg-output {m.f<int>\(10\): -10(\n|\r\n|\r)*} }
+// { dg-output {m.f<double>\(11.5\): -11(\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::g<int> at .*:10: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {m.g<int>\(-10\): 10(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::g<double> at .*:10: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {m.g<double>\(-11.5\): 11(\n|\r\n|\r)*} }
+// { dg-output {m.g<int>\(10\): -10(\n|\r\n|\r)*} }
+// { dg-output {m.g<double>\(11.5\): -11(\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::f_arg<int> at .*:16: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {m.f_arg\(-10\): 10(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::f_arg<double> at .*:16: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {m.f_arg\(-11.5\): 11(\n|\r\n|\r)*} }
+// { dg-output {m.f_arg\(10\): -10(\n|\r\n|\r)*} }
+// { dg-output {m.f_arg\(11.5\): -11(\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::g_arg<int> at .*:19: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {m.g_arg\(-10\): 10(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::g_arg<double> at .*:19: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {m.g_arg\(-11.5\): 11(\n|\r\n|\r)*} }
+// { dg-output {m.g_arg\(10\): -10(\n|\r\n|\r)*} }
+// { dg-output {m.g_arg\(11.5\): -11(\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::f_ret<int> at .*:25: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {m.f_ret<int>\(-10\): 10(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::f_ret<double> at .*:25: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {m.f_ret<double>\(-11.5\): 16.500000(\n|\r\n|\r)*} }
+// { dg-output {m.f_ret<int>\(10\): -10(\n|\r\n|\r)*} }
+// { dg-output {m.f_ret<double>\(11.5\): -16.500000(\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::g_ret<int> at .*:28: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {m.g_ret<int>\(-10\): 15(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::g_ret<double> at .*:28: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {m.g_ret<double>\(-11.5\): 16.500000(\n|\r\n|\r)*} }
+// { dg-output {m.g_ret<int>\(10\): -15(\n|\r\n|\r)*} }
+// { dg-output {m.g_ret<double>\(11.5\): -16.500000(\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<int>::f<int> at .*:56: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<int>::f<double> at .*:56: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<int>::g<int> at .*:59: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<int>::g<double> at .*:59: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<double>::f<int> at .*:56: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<double>::f<double> at .*:56: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<double>::g<int> at .*:59: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<double>::g<double> at .*:59: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre2.C b/gcc/testsuite/g++.dg/contracts/contracts-pre2.C
index 4fe2f9d0192..4012c4d89ac 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre2.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre2.C
@@ -174,39 +174,39 @@ namespace nonnullary
   }
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 12 nullary::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nullary::fun at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 18 nullary::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 19 nullary::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nullary::fun2 at .*.C:18: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nullary::fun2 at .*.C:19: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 146 nullary::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nullary::funend at .*.C:146: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 nonvoid::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::vfun at .*.C:39: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 45 nonvoid::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::fun at .*.C:45: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 nonvoid::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 nonvoid::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::fun2 at .*.C:52: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::fun2 at .*.C:53: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 155 nonvoid::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::funend at .*.C:155: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 74 nonnullary::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 nonnullary::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::vfun at .*.C:74: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::vfun at .*.C:75: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 81 nonnullary::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun at .*.C:81: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 88 nonnullary::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 89 nonnullary::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 90 nonnullary::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 91 nonnullary::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun2 at .*.C:88: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun2 at .*.C:89: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun2 at .*.C:90: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun2 at .*.C:91: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 167 nonnullary::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 168 nonnullary::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::funend at .*.C:167: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::funend at .*.C:168: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre2a2.C b/gcc/testsuite/g++.dg/contracts/contracts-pre2a2.C
index db9a0c37aa0..288952bbd05 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre2a2.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre2a2.C
@@ -16,7 +16,7 @@ int main()
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 6 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 9 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*\\.C:6: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*\\.C:9: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*\\.C:7: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre3.C b/gcc/testsuite/g++.dg/contracts/contracts-pre3.C
index 1c4e3a98e63..4d45533106d 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre3.C
@@ -403,123 +403,123 @@ member::S member::T1::funend(int m, double n)
   return s;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 37 member::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 member::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::vfun at .*.C:37:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::vfun at .*.C:38:  .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 45 member::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun at .*.C:45:  .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 member::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 member::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 54 member::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 member::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun2 at .*.C:52:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun2 at .*.C:53:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun2 at .*.C:54:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun2 at .*.C:55:  .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 397 member::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 398 member::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::funend at .*.C:397:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::funend at .*.C:398:  .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 85 special::T1::T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 86 special::T1::T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 99 special::T1::operator- .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 100 special::T1::operator- .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 92 special::T1::operator. .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 93 special::T1::operator. .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:85:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:86:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::operator- at .*.C:99:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::operator- at .*.C:100:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::operator. at .*.C:92:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::operator. at .*.C:93:  .*(\n|\r\n|\r)*" }
 // { dg-output "==========(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 113 special::T2::T2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 114 special::T2::T2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 127 special::T2::operator- .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 128 special::T2::operator- .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 120 special::T2::operator. .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 121 special::T2::operator. .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::T2 at .*.C:113:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::T2 at .*.C:114:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::operator- at .*.C:127:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::operator- at .*.C:128:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::operator. at .*.C:120:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::operator. at .*.C:121:  .*(\n|\r\n|\r)*" }
 // { dg-output "==========(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 144 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 145 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 85 special::T1::T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 86 special::T1::T1 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:144:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:145:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:85:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:86:  .*(\n|\r\n|\r)*" }
 // { dg-output "==========(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 156 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 144 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 145 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 85 special::T1::T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 86 special::T1::T1 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:156:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:144:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:145:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:85:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:86:  .*(\n|\r\n|\r)*" }
 // { dg-output "==========(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 151 special::TC::~TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 106 special::T1::~T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 151 special::TC::~TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 106 special::T1::~T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 134 special::T2::~T2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 106 special::T1::~T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 196 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 197 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 198 virt::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::~TC at .*.C:151:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::~T1 at .*.C:106:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::~TC at .*.C:151:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::~T1 at .*.C:106:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::~T2 at .*.C:134:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::~T1 at .*.C:106:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:196:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:197:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:198:  .*(\n|\r\n|\r)*" }
 // { dg-output "T1::fun::m: -10, T1::fun::n: -20, T1::v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 196 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 197 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 198 virt::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:196:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:197:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:198:  .*(\n|\r\n|\r)*" }
 // { dg-output "T1::fun::m: -10, T1::fun::n: -20, T1::v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 211 virt::T3::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 212 virt::T3::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 213 virt::T3::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:211:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:212:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:213:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3::fun::m: -10, T3::fun::n: -20, T3::v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 247 virt::T3b::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 248 virt::T3b::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 249 virt::T3b::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:247:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:248:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:249:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::fun::m: -10, T3b::fun::n: -20, T3b::v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 288 virt::T3c::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 289 virt::T3c::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 290 virt::T3c::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:288:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:289:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:290:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::fun::m: -10, T3c::fun::n: -20, T3c::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T1:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 196 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 197 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 198 virt::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:196:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:197:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:198:  .*(\n|\r\n|\r)*" }
 // { dg-output "T1::fun::m: -1, T1::fun::n: -2, T1::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T2:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 196 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 197 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 198 virt::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:196:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:197:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:198:  .*(\n|\r\n|\r)*" }
 // { dg-output "T1::fun::m: -1, T1::fun::n: -2, T1::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T3:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 211 virt::T3::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 212 virt::T3::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 213 virt::T3::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:211:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:212:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:213:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3::fun::m: -1, T3::fun::n: -2, T3::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T3b:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 247 virt::T3b::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 248 virt::T3b::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 249 virt::T3b::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:247:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:248:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:249:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::fun::m: -1, T3b::fun::n: -2, T3b::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T3c:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 288 virt::T3c::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 289 virt::T3c::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 290 virt::T3c::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:288:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:289:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:290:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::fun::m: -1, T3c::fun::n: -2, T3c::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=============(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 256 virt::T3b::p .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 257 virt::T3b::p .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::p at .*.C:256:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::p at .*.C:257:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::p: a: -3, v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 264 virt::T3b::u .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 265 virt::T3b::u .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::u at .*.C:264:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::u at .*.C:265:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::u: a: -3, z: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 272 virt::T3b::n .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::n at .*.C:272:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::n: a: -3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 279 virt::T3b::Sn .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::Sn at .*.C:279:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::Sn: a: -3(\n|\r\n|\r)*" }
 // { dg-output "=============(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 297 virt::T3c::p .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 298 virt::T3c::p .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::p at .*.C:297:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::p at .*.C:298:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::p: a: -3, v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 305 virt::T3c::u .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 306 virt::T3c::u .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::u at .*.C:305:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::u at .*.C:306:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::u: a: -3, z: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 313 virt::T3c::n .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::n at .*.C:313:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::n: a: -3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 320 virt::T3c::Sn .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::Sn at .*.C:320:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::Sn: a: -3(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre4.C b/gcc/testsuite/g++.dg/contracts/contracts-pre4.C
index 16189cdce9d..1049a5be483 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre4.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre4.C
@@ -77,16 +77,16 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Base::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Base: 0(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Base::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child0: 0(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Child1::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child1::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child1: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Child2::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child2::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child2: 20(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Child3::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child3::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child3: 30(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Child4::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child4::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child4: 40(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre5.C b/gcc/testsuite/g++.dg/contracts/contracts-pre5.C
index 278a545055f..b9f855b616d 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre5.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre5.C
@@ -56,26 +56,26 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 8 body<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function body<int> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "-2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 8 body<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function body<double> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "-5(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 none<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function none<int> at .*.C:16: .*(\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 none<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function none<double> at .*.C:16: .*(\n|\r\n|\r)*" }
 // { dg-output "2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 23 arg0<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg0<int> at .*.C:23: .*(\n|\r\n|\r)*" }
 // { dg-output "-9(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 23 arg0<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg0<double> at .*.C:23: .*(\n|\r\n|\r)*" }
 // { dg-output "-7(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 arg1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 31 arg1<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<int> at .*.C:30: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<int> at .*.C:31: .*(\n|\r\n|\r)*" }
 // { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 arg1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 31 arg1<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<double> at .*.C:30: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<double> at .*.C:31: .*(\n|\r\n|\r)*" }
 // { dg-output "-11(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 ret<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<int> at .*.C:38: .*(\n|\r\n|\r)*" }
 // { dg-output "3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 ret<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<double> at .*.C:38: .*(\n|\r\n|\r)*" }
 // { dg-output "4(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre7.C b/gcc/testsuite/g++.dg/contracts/contracts-pre7.C
index aeb8fc042e6..dbf60fb53e3 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre7.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre7.C
@@ -108,27 +108,27 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 13 ns0::f<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::f<int> at .*.C:13: .*(\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 ns0::ns1::f<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::f<int> at .*.C:28: .*(\n|\r\n|\r)*" }
 // { dg-output "2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 ns0::ns1::f2<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::f2<int> at .*.C:46: .*(\n|\r\n|\r)*" }
 // { dg-output "3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 ns0::ns1::ns2::f<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::ns2::f<int> at .*.C:53: .*(\n|\r\n|\r)*" }
 // { dg-output "4(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 ns0::S<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::S<int>::f at .*.C:76: .*(\n|\r\n|\r)*" }
 // { dg-output "5(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 82 ns0::ns1::S2<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::S2<int>::f at .*.C:82: .*(\n|\r\n|\r)*" }
 // { dg-output "6(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 13 ns0::f<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::f<double> at .*.C:13: .*(\n|\r\n|\r)*" }
 // { dg-output "7(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 ns0::ns1::f<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::f<double> at .*.C:28: .*(\n|\r\n|\r)*" }
 // { dg-output "8(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 ns0::ns1::f2<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::f2<double> at .*.C:46: .*(\n|\r\n|\r)*" }
 // { dg-output "9(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 ns0::ns1::ns2::f<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::ns2::f<double> at .*.C:53: .*(\n|\r\n|\r)*" }
 // { dg-output "10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 ns0::S<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::S<double>::f at .*.C:76: .*(\n|\r\n|\r)*" }
 // { dg-output "11(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 82 ns0::ns1::S2<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::S2<double>::f at .*.C:82: .*(\n|\r\n|\r)*" }
 // { dg-output "12(\n|\r\n|\r)*" }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre9.C b/gcc/testsuite/g++.dg/contracts/contracts-pre9.C
index 64c0cfa36df..f1a8b9ce555 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre9.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre9.C
@@ -108,39 +108,39 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 14 S<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<int>::f at .*.C:14: .*(\n|\r\n|\r)*" }
 // { dg-output "s_int.f.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 S<int>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<int>::g at .*.C:10: .*(\n|\r\n|\r)*" }
 // { dg-output "s_int.g.-10.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_int.f.10.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_int.g.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 14 S<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<double>::f at .*.C:14: .*(\n|\r\n|\r)*" }
 // { dg-output "s_double.f.-10.5.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 S<double>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<double>::g at .*.C:10: .*(\n|\r\n|\r)*" }
 // { dg-output "s_double.g.-10.5.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_double.f.10.5.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_double.g.10.5.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 33 S_arg<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_arg<int>::f at .*.C:33: .*(\n|\r\n|\r)*" }
 // { dg-output "s_arg_int.f.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 29 S_arg<int>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_arg<int>::g at .*.C:29: .*(\n|\r\n|\r)*" }
 // { dg-output "s_arg_int.g.-10.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_arg_int.f.10.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_arg_int.g.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 33 S_arg<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_arg<double>::f at .*.C:33: .*(\n|\r\n|\r)*" }
 // { dg-output "s_arg_double.f.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 29 S_arg<double>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_arg<double>::g at .*.C:29: .*(\n|\r\n|\r)*" }
 // { dg-output "s_arg_double.g.-10.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_arg_double.f.10.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_arg_double.g.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 S_ret<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_ret<int>::f at .*.C:52: .*(\n|\r\n|\r)*" }
 // { dg-output "s_ret_int.f.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 S_ret<int>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_ret<int>::g at .*.C:48: .*(\n|\r\n|\r)*" }
 // { dg-output "s_ret_int.g.-10.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_ret_int.f.10.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_ret_int.g.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 S_ret<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_ret<double>::f at .*.C:52: .*(\n|\r\n|\r)*" }
 // { dg-output "s_ret_double.f.-10.: 10.000000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 S_ret<double>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_ret<double>::g at .*.C:48: .*(\n|\r\n|\r)*" }
 // { dg-output "s_ret_double.g.-10.: 10.000000(\n|\r\n|\r)*" }
 // { dg-output "s_ret_double.f.10.: -10.000000(\n|\r\n|\r)*" }
 // { dg-output "s_ret_double.g.10.: -10.000000(\n|\r\n|\r)*" }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-redecl3.C b/gcc/testsuite/g++.dg/contracts/contracts-redecl3.C
index fdfca3a65ff..a3d42e5daa4 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-redecl3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-redecl3.C
@@ -160,36 +160,36 @@ namespace nondefining
   }
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 25 defining::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 defining::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::vfun at .*.C:25: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::vfun at .*.C:26: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 32 defining::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun at .*.C:32: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 42 defining::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:39: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:40: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:41: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:42: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 138 defining::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 139 defining::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::funend at .*.C:138: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::funend at .*.C:139: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 nondefining::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 69 nondefining::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::vfun at .*.C:68: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::vfun at .*.C:69: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 71 nondefining::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun at .*.C:71: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 73 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 74 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:73: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:74: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:75: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:76: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 151 nondefining::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 152 nondefining::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::funend at .*.C:151: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::funend at .*.C:152: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-redecl4.C b/gcc/testsuite/g++.dg/contracts/contracts-redecl4.C
index c1e234226b6..3fbf222b243 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-redecl4.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-redecl4.C
@@ -33,24 +33,24 @@ int main(int, char **)
   printf("=====\n");
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 10 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "f: a: 1, b: 1, c: 1(\n|\r\n|\r)*" }
 // { dg-output "=====(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "f: a: 1, b: 1, c: 10(\n|\r\n|\r)*" }
 // { dg-output "=====(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "f: a: 1, b: 11, c: 10(\n|\r\n|\r)*" }
 // { dg-output "=====(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "f: a: 12, b: 11, c: 10(\n|\r\n|\r)*" }
 // { dg-output "=====(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-redecl6.C b/gcc/testsuite/g++.dg/contracts/contracts-redecl6.C
index e79a5aa38ef..c7d12b32a48 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-redecl6.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-redecl6.C
@@ -160,36 +160,36 @@ namespace nondefining
   }
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 25 defining::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 defining::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::vfun at .*.C:25: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::vfun at .*.C:26: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 32 defining::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun at .*.C:32: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 42 defining::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:39: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:40: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:41: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:42: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 138 defining::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 139 defining::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::funend at .*.C:138: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::funend at .*.C:139: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 nondefining::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 69 nondefining::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::vfun at .*.C:68: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::vfun at .*.C:69: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 71 nondefining::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun at .*.C:71: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 73 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 74 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:73: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:74: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:75: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:76: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 151 nondefining::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 152 nondefining::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::funend at .*.C:151: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::funend at .*.C:152: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-redecl7.C b/gcc/testsuite/g++.dg/contracts/contracts-redecl7.C
index e3a57eea632..7503a4195f7 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-redecl7.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-redecl7.C
@@ -77,19 +77,19 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 9 S::now .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::now at .*.C:9: .*(\n|\r\n|\r)*" }
 // { dg-output "S::now: a: -10, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 15 now .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function now at .*.C:15: .*(\n|\r\n|\r)*" }
 // { dg-output "now: a: -20, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 22 later .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 22 later .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function later at .*.C:22: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function later at .*.C:22: .*(\n|\r\n|\r)*" }
 // { dg-output "later: a: -21, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 27 both .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function both at .*.C:27: .*(\n|\r\n|\r)*" }
 // { dg-output "both: a: -22, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 36 hidden .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 36 hidden .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function hidden at .*.C:36: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function hidden at .*.C:36: .*(\n|\r\n|\r)*" }
 // { dg-output "hidden: a: -23, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 hidden2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 hidden2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function hidden2 at .*.C:41: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function hidden2 at .*.C:41: .*(\n|\r\n|\r)*" }
 // { dg-output "hidden2: a: -24, t->pri: -10(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec1.C b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec1.C
index 57ba7653543..546c0db2f04 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec1.C
@@ -94,28 +94,28 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 8 body<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function body<int> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "-2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 body<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function body<double> at .*.C:16: .*(\n|\r\n|\r)*" }
 // { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 24 none<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function none<int> at .*.C:24: .*(\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 31 none<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function none<double> at .*.C:31: .*(\n|\r\n|\r)*" }
 // { dg-output "-101(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 arg0<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg0<int> at .*.C:38: .*(\n|\r\n|\r)*" }
 // { dg-output "-9(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 45 arg0<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg0<double> at .*.C:45: .*(\n|\r\n|\r)*" }
 // { dg-output "11(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 arg1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 arg1<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<int> at .*.C:52: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<int> at .*.C:53: .*(\n|\r\n|\r)*" }
 // { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 60 arg1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 arg1<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<double> at .*.C:60: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<double> at .*.C:61: .*(\n|\r\n|\r)*" }
 // { dg-output "14(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 ret<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<int> at .*.C:68: .*(\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 ret<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<double> at .*.C:75: .*(\n|\r\n|\r)*" }
 // { dg-output "3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 ret<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<double> at .*.C:75: .*(\n|\r\n|\r)*" }
 // { dg-output "3.300000(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec2.C b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec2.C
index 25982dfc826..75dc40640f7 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec2.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec2.C
@@ -304,92 +304,144 @@ int main(int, char**)
   return 0;
 }
 
-
-// { dg-output "default std::handle_contract_violation called: .*.C 9 body<int> .*(\n|\r\n|\r)*" }
-// { dg-output "-2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 17 body<double> .*(\n|\r\n|\r)*" }
-// { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 25 none<int> .*(\n|\r\n|\r)*" }
-// { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 32 none<double> .*(\n|\r\n|\r)*" }
-// { dg-output "-101(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 arg0<int> .*(\n|\r\n|\r)*" }
-// { dg-output "-9(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 arg0<double> .*(\n|\r\n|\r)*" }
-// { dg-output "11(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 arg1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 54 arg1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 arg1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 62 arg1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "14(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 69 ret<int> .*(\n|\r\n|\r)*" }
-// { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 ret<double> .*(\n|\r\n|\r)*" }
-// { dg-output "3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 ret<double> .*(\n|\r\n|\r)*" }
-// { dg-output "3.300000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 83 g1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "-1(\n|\r\n|\r)*" }
-// { dg-output "-1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 97 g2<int> .*(\n|\r\n|\r)*" }
-// { dg-output "-1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 107 g2<double> .*(\n|\r\n|\r)*" }
-// { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 114 g2<char> .*(\n|\r\n|\r)*" }
-// { dg-output "100(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 124 G3<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 125 G3<double, .*(\n|\r\n|\r)*" }
-// { dg-output "G3 general T S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 139 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 140 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "G3 partial int S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 147 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 148 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "G3 full int double(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 124 G3<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 125 G3<char, .*(\n|\r\n|\r)*" }
-// { dg-output "G3 general T S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 139 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 140 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "G3 partial int S(\n|\r\n|\r)*" }
-// { dg-output "G3 full int C(\n|\r\n|\r)*" }
-// { dg-output "G3 full int C(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 173 G4<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 174 G4<int, .*(\n|\r\n|\r)*" }
-// { dg-output "G4 general T S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 175 G4<int, .*(\n|\r\n|\r)*" }
-// { dg-output "G4 full double double(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 206 G4<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 207 G4<double, .*(\n|\r\n|\r)*" }
-// { dg-output "G4 full double char(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 208 G4<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 187 G4<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 188 G4<char, .*(\n|\r\n|\r)*" }
-// { dg-output "G4 partial char S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 189 G4<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 220 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 221 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 222 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "G5 gen T S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 220 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 221 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 222 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "G5 gen T S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 233 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 234 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 235 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "G5 partial char S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 233 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 234 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 235 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "G5 partial char S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 244 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 245 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 246 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "G5 full double double, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 244 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 245 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 246 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "G5 full double double, f gen R(\n|\r\n|\r)*" }
-
+// { dg-output {contract violation in function body<int> at .*:9: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {-2(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function body<double> at .*:17: a > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {-3(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function none<int> at .*:25: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {1(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function none<double> at .*:32: a > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {-101(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function arg0<int> at .*:39: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {-9(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function arg0<double> at .*:46: t > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {11(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function arg1<int> at .*:53: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function arg1<int> at .*:54: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {-3(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function arg1<double> at .*:61: a > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function arg1<double> at .*:62: t > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {14(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function ret<int> at .*:69: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {1(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function ret<double> at .*:76: a > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {3(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function ret<double> at .*:76: a > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {3.300000(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function g1<int> at .*:83: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {-1(\n|\r\n|\r)*} }
+// { dg-output {-1(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function g2<int> at .*:97: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {-1(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function g2<double> at .*:107: t < 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {1(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function g2<char> at .*:114: t < 'c'(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {100(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<double, double>::f at .*:124: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<double, double>::f at .*:125: s > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G3 general T S(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<int, int>::f at .*:139: t > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<int, int>::f at .*:140: s > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G3 partial int S(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<int, double>::f at .*:147: t > 2(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<int, double>::f at .*:148: s > 2(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G3 full int double(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<char, char>::f at .*:124: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<char, char>::f at .*:125: s > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G3 general T S(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<int, char>::f at .*:139: t > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<int, char>::f at .*:140: s > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G3 partial int S(\n|\r\n|\r)*} }
+// { dg-output {G3 full int C(\n|\r\n|\r)*} }
+// { dg-output {G3 full int C(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<int, int>::G4 at .*:173: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<int, int>::G4 at .*:174: s > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G4 general T S(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<int, int>::G4 at .*:175: x > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G4 full double double(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<double, char>::G4 at .*:206: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<double, char>::G4 at .*:207: b > 'b'(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G4 full double char(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<double, char>::G4 at .*:208: x > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<char, int>::G4 at .*:187: t > 'c'(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<char, int>::G4 at .*:188: s > 3(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G4 partial char S(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<char, int>::G4 at .*:189: x2 > 3(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, int>::f<int> at .*:220: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, int>::f<int> at .*:221: s > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, int>::f<int> at .*:222: r > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G5 gen T S, f gen R(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, int>::f<double> at .*:220: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, int>::f<double> at .*:221: s > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, int>::f<double> at .*:222: r > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G5 gen T S, f gen R(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<char, int>::f<int> at .*:233: x > 'z'(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<char, int>::f<int> at .*:234: y > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<char, int>::f<int> at .*:235: z > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G5 partial char S, f gen R(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<char, int>::f<double> at .*:233: x > 'z'(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<char, int>::f<double> at .*:234: y > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<char, int>::f<double> at .*:235: z > 1(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G5 partial char S, f gen R(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<double, double>::f<int> at .*:244: a > 2(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<double, double>::f<int> at .*:245: b > 2(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<double, double>::f<int> at .*:246: c > 2(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G5 full double double, f gen R(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<double, double>::f<double> at .*:244: a > 2(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<double, double>::f<double> at .*:245: b > 2(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<double, double>::f<double> at .*:246: c > 2(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G5 full double double, f gen R(\n|\r\n|\r)*} }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec3.C b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec3.C
index 44725893061..fe0210c236a 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec3.C
@@ -32,14 +32,19 @@ int main(int, char**) {
   return 0;
 }
 
-// { dg-output "G5 full double double, f gen R(\n|\r\n|\r)*" }
-// { dg-output "G5 full double double, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* t > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* s > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* r > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "G5 gen T S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* t > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* s > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* r > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "G5 gen T S, f gen R(\n|\r\n|\r)*" }
-
+// { dg-output {G5 full double double, f gen R(\n|\r\n|\r)*} }
+// { dg-output {G5 full double double, f gen R(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, double>::f<int> at .*:10: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, double>::f<int> at .*:10: s > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, double>::f<int> at .*:10: r > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G5 gen T S, f gen R(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, double>::f<double> at .*:10: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, double>::f<double> at .*:10: s > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, double>::f<double> at .*:10: r > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {G5 gen T S, f gen R(\n|\r\n|\r)*} }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts10.C b/gcc/testsuite/g++.dg/contracts/contracts10.C
index ce0723c3db4..9ed86312b40 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts10.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts10.C
@@ -62,12 +62,12 @@ int main()
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 47 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 49 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 100 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 13 tns::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 33 tns::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 tns::TestType::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 24 tns::TestType::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:47: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:48: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:49: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:100: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function tns::fun at .*.C:13: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function tns::fun2 at .*.C:33: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function tns::TestType::fun at .*.C:40: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function tns::TestType::fun2 at .*.C:24: .*(\n|\r\n|\r)*" }
  
diff --git a/gcc/testsuite/g++.dg/contracts/contracts19.C b/gcc/testsuite/g++.dg/contracts/contracts19.C
index 4a8b43a3186..2f7dc3aeefc 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts19.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts19.C
@@ -14,6 +14,6 @@ int main()
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 11 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 main .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:12: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts25.C b/gcc/testsuite/g++.dg/contracts/contracts25.C
index 01217807bc1..8758dd58bcf 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts25.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts25.C
@@ -50,8 +50,8 @@ int main(int, char **) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 12 ffun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 ftfun<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 36 explicitfn .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 ftfun<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ffun at .*.C:12: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<int> at .*.C:30: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function explicitfn at .*.C:36: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<double> at .*.C:30: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts3.C b/gcc/testsuite/g++.dg/contracts/contracts3.C
index ecb9fdb1e65..73dc7a15544 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts3.C
@@ -3,7 +3,7 @@
 // { dg-do run }
 // { dg-options "-std=c++2a -fcontracts" }
 // { dg-shouldfail "assert violation" }
-// { dg-output "default std::handle_contract_violation called" }
+// { dg-output "contract violation in function main" }
 
 int main()
 {
diff --git a/gcc/testsuite/g++.dg/contracts/contracts35.C b/gcc/testsuite/g++.dg/contracts/contracts35.C
index ddd80025afc..dc675d13578 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts35.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts35.C
@@ -32,16 +32,16 @@ int main(int, char **) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S<int> at .*.C:8: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S<int> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "S::S.T.: -1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S<double> at .*.C:8: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S<double> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "S::S.T.: -2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1::S1<int> at .*.C:20: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1::S1<int> at .*.C:20: .*(\n|\r\n|\r)*" }
 // { dg-output "S1::S1.T.: -3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1::S1<double> at .*.C:20: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1::S1<double> at .*.C:20: .*(\n|\r\n|\r)*" }
 // { dg-output "S1::S1.T.: -4(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts5.C b/gcc/testsuite/g++.dg/contracts/contracts5.C
index 0fa0ec83be5..3c591833bf1 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts5.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts5.C
@@ -3,7 +3,7 @@
 // { dg-do run }
 // { dg-options "-std=c++2a -fcontracts -fcontract-build-level=audit" }
 // { dg-shouldfail "assert violation" }
-// { dg-output "default std::handle_contract_violation called" }
+// { dg-output "contract violation in function main" }
 
 int main()
 {
diff --git a/gcc/testsuite/g++.dg/contracts/contracts7.C b/gcc/testsuite/g++.dg/contracts/contracts7.C
index eaad8f0fc9d..9e7cae9433e 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts7.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts7.C
@@ -4,7 +4,7 @@
 // contract failure is switched on
 // { dg-do run }
 // { dg-options "-std=c++2a -fcontracts -fcontract-continuation-mode=on" }
-// { dg-output "default std::handle_contract_violation called" }
+// { dg-output "contract violation in function main" }
 
 int main()
 {
diff --git a/gcc/testsuite/g++.dg/contracts/contracts9.C b/gcc/testsuite/g++.dg/contracts/contracts9.C
index f566628ec44..cafbcd091b6 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts9.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts9.C
@@ -35,11 +35,19 @@ int main()
   // return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 12 fun1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 fun1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 fun1<const char.> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 fun1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 fun1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 32 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 test<int>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 test<double>::fun .*(\n|\r\n|\r)*" }
+// { dg-output {contract violation in function fun1<int> at .*:12: \(long long\)b > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function fun1<double> at .*:11: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function fun1<const char\*> at .*:11: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function fun1<int> at .*:11: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function fun1<int> at .*:12: \(long long\)b > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:32: fun1\(-1, -5\)(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function test<int>::fun at .*:21: b > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function test<double>::fun at .*:21: b > 0(\n|\r\n|\r)*} }
+// { dg-output {\[mode:maybe\](\n|\r\n|\r)*} }
-- 
2.39.0


^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 3/3] contrib: Add dg-out-generator.pl
  2022-12-20 10:49       ` [PATCH 1/3] " Arsen Arsenović
  2022-12-20 10:49         ` [PATCH 2/3] contracts: Update testsuite against new default viol. handler format Arsen Arsenović
@ 2022-12-20 10:49         ` Arsen Arsenović
  2022-12-20 15:57           ` Jonathan Wakely
  2022-12-20 17:23         ` [PATCH 1/3] libstdc++: Improve output of default contract violation handler [PR107792] Jason Merrill
  2 siblings, 1 reply; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-20 10:49 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches, jwakely, libstdc++, Arsen Arsenović

This script is a helper used to generate dg-output lines from an existing
program output conveniently.  It takes care of escaping Tcl and ARE stuff.

contrib/ChangeLog:

	* dg-out-generator.pl: New file.
---
 contrib/dg-out-generator.pl | 79 +++++++++++++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)
 create mode 100755 contrib/dg-out-generator.pl

diff --git a/contrib/dg-out-generator.pl b/contrib/dg-out-generator.pl
new file mode 100755
index 00000000000..663b00fa496
--- /dev/null
+++ b/contrib/dg-out-generator.pl
@@ -0,0 +1,79 @@
+#!/usr/bin/env perl
+#
+# Copyright (C) 2022 GCC Contributors.
+# Contributed by Arsen Arsenović.
+#
+# This script is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+
+# This script reads program output on STDIN, and out of it produces a block of
+# dg-output lines that can be yanked at the end of a file.  It will escape
+# special ARE and Tcl constructs automatically.
+#
+# Each argument passed on the standard input is treated as a string to be
+# replaced by ``.*'' in the final result.  This is intended to mask out build
+# paths, filenames, etc.
+#
+# Usage example:
+
+# $ g++-13 -fcontracts -o test \
+#  'g++.dg/contracts/contracts-access1.C' && \
+#   ./test |& dg-out-generator.pl 'g++.dg/contracts/contracts-access1.C'
+# // { dg-output {contract violation in function Base::b at .*:11: pub > 0(\n|\r\n|\r)*} }
+# // { dg-output {\[level:default, role:default, continuation mode:never\](\n|\r\n|\r)*} }
+# // { dg-output {terminate called without an active exception(\n|\r\n|\r)*} }
+
+# You can now freely dump the above into your testcase.
+
+use strict;
+use warnings;
+use POSIX 'floor';
+
+my $escapees = '(' . join ('|', map { quotemeta } @ARGV) . ')';
+
+sub gboundary($)
+{
+  my $str = shift;
+  my $sz = 10.0;
+  for (;;)
+    {
+      my $bnd = join '', (map chr 64 + rand 27, 1 .. floor $sz);
+      return $bnd unless index ($str, $bnd) >= 0;
+      $sz += 0.1;
+    }
+}
+
+while (<STDIN>)
+  {
+    # Escape our escapees.
+    my $boundary;
+    if (@ARGV) {
+      # Checking this is necessary to avoid a spurious .* between all
+      # characters if no arguments are passed.
+      $boundary = gboundary $_;
+      s/$escapees/$boundary/g;
+    }
+
+    # Quote stuff special in Tcl ARE.  This step also effectively nulls any
+    # concern about escaping.  As long as all curly braces are escaped, the
+    # string will, when passing through the braces rule of Tcl, be identical to
+    # the input.
+    s/([[\]*+?{}()\\])/\\$1/g;
+
+    # Newlines should be more tolerant.
+    s/\n$/(\\n|\\r\\n|\\r)*/;
+
+    # Then split out the boundary, replacing it with .*.
+    s/$boundary/.*/g if defined $boundary;
+
+    # Then, let's print it in a dg-output block.  If you'd prefer /* keep in
+    # mind that if your string contains */ it could terminate the comment
+    # early.  Maybe add an extra s!\*/!*()/!g or something.
+    print "// { dg-output {$_} }\n";
+  }
+
+# File Local Vars:
+# indent-tabs-mode: nil
+# End:
-- 
2.39.0


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 3/3] contrib: Add dg-out-generator.pl
  2022-12-20 10:49         ` [PATCH 3/3] contrib: Add dg-out-generator.pl Arsen Arsenović
@ 2022-12-20 15:57           ` Jonathan Wakely
  0 siblings, 0 replies; 27+ messages in thread
From: Jonathan Wakely @ 2022-12-20 15:57 UTC (permalink / raw)
  To: Arsen Arsenović; +Cc: Jason Merrill, gcc-patches, libstdc++

On Tue, 20 Dec 2022 at 10:49, Arsen Arsenović <arsen@aarsen.me> wrote:
>
> This script is a helper used to generate dg-output lines from an existing
> program output conveniently.  It takes care of escaping Tcl and ARE stuff.
>
> contrib/ChangeLog:
>
>         * dg-out-generator.pl: New file.
> ---
>  contrib/dg-out-generator.pl | 79 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 79 insertions(+)
>  create mode 100755 contrib/dg-out-generator.pl
>
> diff --git a/contrib/dg-out-generator.pl b/contrib/dg-out-generator.pl
> new file mode 100755
> index 00000000000..663b00fa496
> --- /dev/null
> +++ b/contrib/dg-out-generator.pl
> @@ -0,0 +1,79 @@
> +#!/usr/bin/env perl
> +#
> +# Copyright (C) 2022 GCC Contributors.

As discussed on IRC, this form of copyright notice is novel, and
should probably be the usual FSF copyright notice instead, since you
have an assignment in place.

> +# Contributed by Arsen Arsenović.
> +#
> +# This script is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3, or (at your option)
> +# any later version.
> +
> +# This script reads program output on STDIN, and out of it produces a block of
> +# dg-output lines that can be yanked at the end of a file.  It will escape
> +# special ARE and Tcl constructs automatically.
> +#
> +# Each argument passed on the standard input is treated as a string to be
> +# replaced by ``.*'' in the final result.  This is intended to mask out build
> +# paths, filenames, etc.
> +#
> +# Usage example:
> +
> +# $ g++-13 -fcontracts -o test \
> +#  'g++.dg/contracts/contracts-access1.C' && \
> +#   ./test |& dg-out-generator.pl 'g++.dg/contracts/contracts-access1.C'
> +# // { dg-output {contract violation in function Base::b at .*:11: pub > 0(\n|\r\n|\r)*} }
> +# // { dg-output {\[level:default, role:default, continuation mode:never\](\n|\r\n|\r)*} }
> +# // { dg-output {terminate called without an active exception(\n|\r\n|\r)*} }
> +
> +# You can now freely dump the above into your testcase.
> +
> +use strict;
> +use warnings;
> +use POSIX 'floor';
> +
> +my $escapees = '(' . join ('|', map { quotemeta } @ARGV) . ')';
> +
> +sub gboundary($)
> +{
> +  my $str = shift;
> +  my $sz = 10.0;
> +  for (;;)
> +    {
> +      my $bnd = join '', (map chr 64 + rand 27, 1 .. floor $sz);
> +      return $bnd unless index ($str, $bnd) >= 0;
> +      $sz += 0.1;
> +    }
> +}
> +
> +while (<STDIN>)
> +  {
> +    # Escape our escapees.
> +    my $boundary;
> +    if (@ARGV) {
> +      # Checking this is necessary to avoid a spurious .* between all
> +      # characters if no arguments are passed.
> +      $boundary = gboundary $_;
> +      s/$escapees/$boundary/g;
> +    }
> +
> +    # Quote stuff special in Tcl ARE.  This step also effectively nulls any
> +    # concern about escaping.  As long as all curly braces are escaped, the
> +    # string will, when passing through the braces rule of Tcl, be identical to
> +    # the input.
> +    s/([[\]*+?{}()\\])/\\$1/g;
> +
> +    # Newlines should be more tolerant.
> +    s/\n$/(\\n|\\r\\n|\\r)*/;
> +
> +    # Then split out the boundary, replacing it with .*.
> +    s/$boundary/.*/g if defined $boundary;
> +
> +    # Then, let's print it in a dg-output block.  If you'd prefer /* keep in
> +    # mind that if your string contains */ it could terminate the comment
> +    # early.  Maybe add an extra s!\*/!*()/!g or something.
> +    print "// { dg-output {$_} }\n";
> +  }
> +
> +# File Local Vars:
> +# indent-tabs-mode: nil
> +# End:
> --
> 2.39.0
>


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 1/4] contracts: Lowercase {MAYBE,NEVER}_CONTINUE
  2022-12-15 17:39     ` Arsen Arsenović
@ 2022-12-20 17:16       ` Jason Merrill
  0 siblings, 0 replies; 27+ messages in thread
From: Jason Merrill @ 2022-12-20 17:16 UTC (permalink / raw)
  To: Arsen Arsenović; +Cc: gcc-patches, jwakely, libstdc++

On 12/15/22 12:39, Arsen Arsenović wrote:
> Hi,
> 
> Jason Merrill <jason@redhat.com> writes:
> 
>>> The lowercase constants are more consistent with the standard, and it is
>>> unlikely that the uppercase versions would've been accepted.
>>
>> OK.
> 
> Thanks.  Could you push this for me?  I don't have write access.

Done.

Jason



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 1/3] libstdc++: Improve output of default contract violation handler [PR107792]
  2022-12-20 10:49       ` [PATCH 1/3] " Arsen Arsenović
  2022-12-20 10:49         ` [PATCH 2/3] contracts: Update testsuite against new default viol. handler format Arsen Arsenović
  2022-12-20 10:49         ` [PATCH 3/3] contrib: Add dg-out-generator.pl Arsen Arsenović
@ 2022-12-20 17:23         ` Jason Merrill
  2022-12-22 11:03           ` Arsen Arsenović
                             ` (2 more replies)
  2 siblings, 3 replies; 27+ messages in thread
From: Jason Merrill @ 2022-12-20 17:23 UTC (permalink / raw)
  To: Arsen Arsenović; +Cc: gcc-patches, jwakely, libstdc++

On 12/20/22 05:49, Arsen Arsenović wrote:
> From: Jonathan Wakely <jwakely@redhat.com>
> 
> Make the output more readable. Don't output anything unless verbose
> termination is enabled at configure-time.
> 
> libstdc++-v3/ChangeLog:
> 
> 	PR libstdc++/107792
> 	PR libstdc++/107778
> 	* src/experimental/contract.cc (handle_contract_violation): Make
> 	output more readable.
> ---
> Alright, updated to omit information that's defaulted.
> 
> Turns out your suggestion for dg-output was quite clever - because {} is
> special in ARE, it's always prefixed by \ when escaping with curlies,
> and so it never counds towards the "paired curly braces" rules, and
> requires no extra escaping code at all!  That's quite a bit neater.
> 
>   libstdc++-v3/src/experimental/contract.cc | 50 ++++++++++++++++++-----
>   1 file changed, 39 insertions(+), 11 deletions(-)
> 
> diff --git a/libstdc++-v3/src/experimental/contract.cc b/libstdc++-v3/src/experimental/contract.cc
> index c8d2697eddc..fbe8815a5c2 100644
> --- a/libstdc++-v3/src/experimental/contract.cc
> +++ b/libstdc++-v3/src/experimental/contract.cc
> @@ -1,4 +1,5 @@
>   // -*- C++ -*- std::experimental::contract_violation and friends
> +
>   // Copyright (C) 2019-2022 Free Software Foundation, Inc.
>   //
>   // This file is part of GCC.
> @@ -23,19 +24,46 @@
>   // <http://www.gnu.org/licenses/>.
>   
>   #include <experimental/contract>
> -#include <iostream>
> +#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
> +# include <iostream>
> +#endif
>   
>   __attribute__ ((weak)) void
>   handle_contract_violation (const std::experimental::contract_violation &violation)
>   {
> -  std::cerr << "default std::handle_contract_violation called: \n"
> -    << " " << violation.file_name()
> -    << " " << violation.line_number()
> -    << " " << violation.function_name()
> -    << " " << violation.comment()
> -    << " " << violation.assertion_level()
> -    << " " << violation.assertion_role()
> -    << " " << (int)violation.continuation_mode()
> -    << std::endl;
> +#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
> +  bool level_default_p = violation.assertion_level() == "default";
> +  bool role_default_p = violation.assertion_role() == "default";
> +  bool cont_mode_default_p = violation.continuation_mode()
> +    == std::experimental::contract_violation_continuation_mode::never_continue;
> +
> +  const char* modes[]{ "never", "maybe" }; // Must match enumerators in header.
> +  std::cerr << "contract violation in function " << violation.function_name()
> +    << " at " << violation.file_name() << ':' << violation.line_number()
> +    << ": " << violation.comment();
> +
> +  const char* delimiter = "\n[";
> +
> +  if (!level_default_p)
> +    {
> +      std::cerr << delimiter << "level:" << violation.assertion_level();
> +      delimiter = ", ";
> +    }
> +  if (!role_default_p)
> +    {
> +      std::cerr << delimiter << "role:" << violation.assertion_role();
> +      delimiter = ", ";
> +    }
> +  if (!cont_mode_default_p)
> +    {
> +      std::cerr << delimiter << "mode:"
> +		<< modes[(int)violation.continuation_mode() & 1];

I still think this should be "continuation: on/off".

Jason


^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 1/3] libstdc++: Improve output of default contract violation handler [PR107792]
  2022-12-20 17:23         ` [PATCH 1/3] libstdc++: Improve output of default contract violation handler [PR107792] Jason Merrill
@ 2022-12-22 11:03           ` Arsen Arsenović
  2022-12-22 21:40             ` Jason Merrill
  2022-12-22 11:03           ` [PATCH 2/3] contracts: Update testsuite against new default viol. handler format Arsen Arsenović
  2022-12-22 11:03           ` [PATCH 3/3] contrib: Add dg-out-generator.pl Arsen Arsenović
  2 siblings, 1 reply; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-22 11:03 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches, jwakely, libstdc++, arsen

From: Jonathan Wakely <jwakely@redhat.com>

Make the output more readable. Don't output anything unless verbose
termination is enabled at configure-time.

libstdc++-v3/ChangeLog:

	PR libstdc++/107792
	PR libstdc++/107778
	* src/experimental/contract.cc (handle_contract_violation): Make
	output more readable.
---
Heh, wouldn't be me if I forgot nothing.  Sorry about that.

How's this?

 libstdc++-v3/src/experimental/contract.cc | 50 ++++++++++++++++++-----
 1 file changed, 39 insertions(+), 11 deletions(-)

diff --git a/libstdc++-v3/src/experimental/contract.cc b/libstdc++-v3/src/experimental/contract.cc
index c8d2697eddc..2d41a6326cf 100644
--- a/libstdc++-v3/src/experimental/contract.cc
+++ b/libstdc++-v3/src/experimental/contract.cc
@@ -1,4 +1,5 @@
 // -*- C++ -*- std::experimental::contract_violation and friends
+
 // Copyright (C) 2019-2022 Free Software Foundation, Inc.
 //
 // This file is part of GCC.
@@ -23,19 +24,46 @@
 // <http://www.gnu.org/licenses/>.
 
 #include <experimental/contract>
-#include <iostream>
+#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
+# include <iostream>
+#endif
 
 __attribute__ ((weak)) void
 handle_contract_violation (const std::experimental::contract_violation &violation)
 {
-  std::cerr << "default std::handle_contract_violation called: \n"
-    << " " << violation.file_name()
-    << " " << violation.line_number()
-    << " " << violation.function_name()
-    << " " << violation.comment()
-    << " " << violation.assertion_level()
-    << " " << violation.assertion_role()
-    << " " << (int)violation.continuation_mode()
-    << std::endl;
+#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
+  bool level_default_p = violation.assertion_level() == "default";
+  bool role_default_p = violation.assertion_role() == "default";
+  bool cont_mode_default_p = violation.continuation_mode()
+    == std::experimental::contract_violation_continuation_mode::never_continue;
+
+  const char* modes[]{ "off", "on" }; // Must match enumerators in header.
+  std::cerr << "contract violation in function " << violation.function_name()
+    << " at " << violation.file_name() << ':' << violation.line_number()
+    << ": " << violation.comment();
+
+  const char* delimiter = "\n[";
+
+  if (!level_default_p)
+    {
+      std::cerr << delimiter << "level:" << violation.assertion_level();
+      delimiter = ", ";
+    }
+  if (!role_default_p)
+    {
+      std::cerr << delimiter << "role:" << violation.assertion_role();
+      delimiter = ", ";
+    }
+  if (!cont_mode_default_p)
+    {
+      std::cerr << delimiter << "continue:"
+		<< modes[(int)violation.continuation_mode() & 1];
+      delimiter = ", ";
+    }
+
+  if (delimiter[0] == ',')
+    std::cerr << ']';
+
+  std::cerr << std::endl;
+#endif
 }
-
-- 
2.39.0


^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 2/3] contracts: Update testsuite against new default viol. handler format
  2022-12-20 17:23         ` [PATCH 1/3] libstdc++: Improve output of default contract violation handler [PR107792] Jason Merrill
  2022-12-22 11:03           ` Arsen Arsenović
@ 2022-12-22 11:03           ` Arsen Arsenović
  2022-12-22 11:03           ` [PATCH 3/3] contrib: Add dg-out-generator.pl Arsen Arsenović
  2 siblings, 0 replies; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-22 11:03 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches, jwakely, libstdc++, Arsen Arsenović

This change was almost entirely mechanical.  Save for two files which had very
short matches, these changes were produced by two seds and a Perl script, for
the more involved cases.  The latter will be added in a subsequent commit.  The
former are as follows:

    sed -E -i "/dg-output/s/default std::handle_contract_violation called: \
    (\S+) (\S+) (\S+(<[A-Za-z0-9, ]*)?>?)\
    /contract violation in function \3 at \1:\2: /" *.C
    sed -i '/dg-output/s/  */ /g'

Whichever files remained failing after the above changes were checked-out,
re-ran, with output extracted, and ran through dg-out-generator.pl.

gcc/testsuite/ChangeLog:

	* g++.dg/contracts/contracts-access1.C: Convert to new default
	violation handler.
	* g++.dg/contracts/contracts-config1.C: Ditto.
	* g++.dg/contracts/contracts-constexpr1.C: Ditto.
	* g++.dg/contracts/contracts-ctor-dtor1.C: Ditto.
	* g++.dg/contracts/contracts-deduced2.C: Ditto.
	* g++.dg/contracts/contracts-friend1.C: Ditto.
	* g++.dg/contracts/contracts-multiline1.C: Ditto.
	* g++.dg/contracts/contracts-post3.C: Ditto.
	* g++.dg/contracts/contracts-pre10.C: Ditto.
	* g++.dg/contracts/contracts-pre2.C: Ditto.
	* g++.dg/contracts/contracts-pre2a2.C: Ditto.
	* g++.dg/contracts/contracts-pre3.C: Ditto.
	* g++.dg/contracts/contracts-pre4.C: Ditto.
	* g++.dg/contracts/contracts-pre5.C: Ditto.
	* g++.dg/contracts/contracts-pre7.C: Ditto.
	* g++.dg/contracts/contracts-pre9.C: Ditto.
	* g++.dg/contracts/contracts-redecl3.C: Ditto.
	* g++.dg/contracts/contracts-redecl4.C: Ditto.
	* g++.dg/contracts/contracts-redecl6.C: Ditto.
	* g++.dg/contracts/contracts-redecl7.C: Ditto.
	* g++.dg/contracts/contracts-tmpl-spec1.C: Ditto.
	* g++.dg/contracts/contracts-tmpl-spec2.C: Ditto.
	* g++.dg/contracts/contracts-tmpl-spec3.C: Ditto.
	* g++.dg/contracts/contracts10.C: Ditto.
	* g++.dg/contracts/contracts19.C: Ditto.
	* g++.dg/contracts/contracts25.C: Ditto.
	* g++.dg/contracts/contracts3.C: Ditto.
	* g++.dg/contracts/contracts35.C: Ditto.
	* g++.dg/contracts/contracts5.C: Ditto.
	* g++.dg/contracts/contracts7.C: Ditto.
	* g++.dg/contracts/contracts9.C: Ditto.
---
 .../g++.dg/contracts/contracts-access1.C      |  36 +--
 .../g++.dg/contracts/contracts-config1.C      |  30 ++-
 .../g++.dg/contracts/contracts-constexpr1.C   |  16 +-
 .../g++.dg/contracts/contracts-ctor-dtor1.C   |  96 ++++----
 .../g++.dg/contracts/contracts-deduced2.C     |  20 +-
 .../g++.dg/contracts/contracts-friend1.C      |  10 +-
 .../g++.dg/contracts/contracts-multiline1.C   |   2 +-
 .../g++.dg/contracts/contracts-post3.C        |   2 +-
 .../g++.dg/contracts/contracts-pre10.C        | 122 ++++++----
 .../g++.dg/contracts/contracts-pre2.C         |  36 +--
 .../g++.dg/contracts/contracts-pre2a2.C       |   6 +-
 .../g++.dg/contracts/contracts-pre3.C         | 156 ++++++------
 .../g++.dg/contracts/contracts-pre4.C         |  12 +-
 .../g++.dg/contracts/contracts-pre5.C         |  24 +-
 .../g++.dg/contracts/contracts-pre7.C         |  24 +-
 .../g++.dg/contracts/contracts-pre9.C         |  24 +-
 .../g++.dg/contracts/contracts-redecl3.C      |  36 +--
 .../g++.dg/contracts/contracts-redecl4.C      |  24 +-
 .../g++.dg/contracts/contracts-redecl6.C      |  36 +--
 .../g++.dg/contracts/contracts-redecl7.C      |  18 +-
 .../g++.dg/contracts/contracts-tmpl-spec1.C   |  26 +-
 .../g++.dg/contracts/contracts-tmpl-spec2.C   | 230 +++++++++++-------
 .../g++.dg/contracts/contracts-tmpl-spec3.C   |  27 +-
 gcc/testsuite/g++.dg/contracts/contracts10.C  |  16 +-
 gcc/testsuite/g++.dg/contracts/contracts19.C  |   4 +-
 gcc/testsuite/g++.dg/contracts/contracts25.C  |   8 +-
 gcc/testsuite/g++.dg/contracts/contracts3.C   |   2 +-
 gcc/testsuite/g++.dg/contracts/contracts35.C  |  16 +-
 gcc/testsuite/g++.dg/contracts/contracts5.C   |   2 +-
 gcc/testsuite/g++.dg/contracts/contracts7.C   |   2 +-
 gcc/testsuite/g++.dg/contracts/contracts9.C   |  24 +-
 31 files changed, 594 insertions(+), 493 deletions(-)

diff --git a/gcc/testsuite/g++.dg/contracts/contracts-access1.C b/gcc/testsuite/g++.dg/contracts/contracts-access1.C
index a3a29821017..414b29a1613 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-access1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-access1.C
@@ -107,22 +107,22 @@ int main()
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 11 Base::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 Base::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 13 Base::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 Child::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 27 Child::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 Child::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 37 VChild::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 VChild::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 VChild::b .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 49 TChild<Base>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 50 TChild<Base>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 51 TChild<Base>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 67 PubChild::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 PubChild::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 69 PubChild::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 79 TPubChild<PubBase>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 80 TPubChild<PubBase>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 81 TPubChild<PubBase>::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::b at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::b at .*.C:12: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::b at .*.C:13: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child::fun at .*.C:26: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child::fun at .*.C:27: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child::fun at .*.C:28: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function VChild::b at .*.C:37: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function VChild::b at .*.C:38: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function VChild::b at .*.C:39: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TChild<Base>::fun at .*.C:49: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TChild<Base>::fun at .*.C:50: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TChild<Base>::fun at .*.C:51: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function PubChild::fun at .*.C:67: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function PubChild::fun at .*.C:68: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function PubChild::fun at .*.C:69: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TPubChild<PubBase>::fun at .*.C:79: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TPubChild<PubBase>::fun at .*.C:80: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function TPubChild<PubBase>::fun at .*.C:81: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-config1.C b/gcc/testsuite/g++.dg/contracts/contracts-config1.C
index 9e32bac535d..950b0d80084 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-config1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-config1.C
@@ -24,13 +24,23 @@ int main(int, char **)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*main false default default 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false default default 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false audit default 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false default new_role 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false default new_role 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false audit new_role 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false   1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false default default 1.*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*main false audit default 1.*(\n|\r\n|\r)*" }
-
+// { dg-output {contract violation in function main at .*:14: false(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:15: false(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:16: false(\n|\r\n|\r)*} }
+// { dg-output {\[level:audit, continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:17: false(\n|\r\n|\r)*} }
+// { dg-output {\[role:new_role, continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:18: false(\n|\r\n|\r)*} }
+// { dg-output {\[role:new_role, continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:19: false(\n|\r\n|\r)*} }
+// { dg-output {\[level:audit, role:new_role, continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:20: false(\n|\r\n|\r)*} }
+// { dg-output {\[level:, role:, continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:21: false(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:22: false(\n|\r\n|\r)*} }
+// { dg-output {\[level:audit, continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function fun at .*:7: r > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-constexpr1.C b/gcc/testsuite/g++.dg/contracts/contracts-constexpr1.C
index 4c111358d9b..dc2a3854901 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-constexpr1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-constexpr1.C
@@ -63,12 +63,12 @@ int main(int, char **) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 14 ffun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 15 ffun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 ftfun<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 ftfun<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 explicitfn .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 explicitfn .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 ftfun<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 ftfun<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ffun at .*.C:14: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ffun at .*.C:15: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<int> at .*.C:38: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<int> at .*.C:39: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function explicitfn at .*.C:46: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function explicitfn at .*.C:48: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<double> at .*.C:38: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<double> at .*.C:39: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-ctor-dtor1.C b/gcc/testsuite/g++.dg/contracts/contracts-ctor-dtor1.C
index bcd6096b5a7..618a7efb07b 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-ctor-dtor1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-ctor-dtor1.C
@@ -124,54 +124,54 @@ int main(int, char**)
 };
 
 // test0
-// { dg-output "default std::handle_contract_violation called: .*.C 11 S::S .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 S::S .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 SInline::SInline .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 SInline::SInline .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 SDelegate0::SDelegate0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 SDelegate0::SDelegate0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 34 SDelegate1::SDelegate1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 34 SDelegate1::SDelegate1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 SDelegate2::SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 SDelegate2::SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 SDelegate2::SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 SDelegate2::SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 SDelegate3::SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 47 SDelegate3::SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 47 SDelegate3::SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 SDelegate3::SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 S1<int>::S1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 S1<int>::S1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 S1<double>::S1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 S1<double>::S1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 S2::S2<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 S2::S2<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 S2::S2<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 S2::S2<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<int>::S3<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<int>::S3<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<int>::S3<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<int>::S3<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<double>::S3<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<double>::S3<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<double>::S3<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 S3<double>::S3<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 49 SDelegate3::~SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 49 SDelegate3::~SDelegate3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 42 SDelegate2::~SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 42 SDelegate2::~SDelegate2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 35 SDelegate1::~SDelegate1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 35 SDelegate1::~SDelegate1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 SDelegate0::~SDelegate0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 SDelegate0::~SDelegate0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 SInline::~SInline .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 SInline::~SInline .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 S::~S .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 S::~S .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S at .*.C:11 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S at .*.C:11 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SInline::SInline at .*.C:20 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SInline::SInline at .*.C:20 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate0::SDelegate0 at .*.C:26 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate0::SDelegate0 at .*.C:26 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate1::SDelegate1 at .*.C:34 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate1::SDelegate1 at .*.C:34 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::SDelegate2 at .*.C:41 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::SDelegate2 at .*.C:40 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::SDelegate2 at .*.C:40 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::SDelegate2 at .*.C:41 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::SDelegate3 at .*.C:48 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::SDelegate3 at .*.C:47 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::SDelegate3 at .*.C:47 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::SDelegate3 at .*.C:48 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1<int>::S1 at .*.C:55 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1<int>::S1 at .*.C:55 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1<double>::S1 at .*.C:55 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1<double>::S1 at .*.C:55 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S2::S2<int> at .*.C:61 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S2::S2<int> at .*.C:61 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S2::S2<double> at .*.C:61 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S2::S2<double> at .*.C:61 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<int>::S3<int> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<int>::S3<int> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<int>::S3<double> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<int>::S3<double> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<double>::S3<int> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<double>::S3<int> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<double>::S3<double> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S3<double>::S3<double> at .*.C:68 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::~SDelegate3 at .*.C:49 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate3::~SDelegate3 at .*.C:49 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::~SDelegate2 at .*.C:42 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate2::~SDelegate2 at .*.C:42 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate1::~SDelegate1 at .*.C:35 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate1::~SDelegate1 at .*.C:35 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate0::~SDelegate0 at .*.C:28 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SDelegate0::~SDelegate0 at .*.C:28 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SInline::~SInline at .*.C:21 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function SInline::~SInline at .*.C:21 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::~S at .*.C:12 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::~S at .*.C:12 .*(\n|\r\n|\r)*" }
 
 // test1
-// { dg-output "default std::handle_contract_violation called: .*.C 73 G0::G0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 80 G1::G1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 81 G1::~G1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 74 G0::~G0 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G0::G0 at .*.C:73 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G1::G1 at .*.C:80 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G1::~G1 at .*.C:81 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function G0::~G0 at .*.C:74 .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-deduced2.C b/gcc/testsuite/g++.dg/contracts/contracts-deduced2.C
index da9c019f10a..fd43166e7b0 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-deduced2.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-deduced2.C
@@ -71,14 +71,14 @@ int main(int, char**) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 5 g0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 5 g0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 g1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 23 g3 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 g4 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 37 g5 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 g6<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 g6<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 g7<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 g7<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g0 at .*.C:5: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g0 at .*.C:5: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g1 at .*.C:12: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g3 at .*.C:23: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g4 at .*.C:30: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g5 at .*.C:37: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g6<int> at .*.C:46: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g6<double> at .*.C:46: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g7<int> at .*.C:55: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function g7<double> at .*.C:55: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-friend1.C b/gcc/testsuite/g++.dg/contracts/contracts-friend1.C
index 0ccfbe2c7c3..5eec11ffb26 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-friend1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-friend1.C
@@ -33,8 +33,8 @@ int main(int, char**) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 6 fn0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 19 fn2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 9 X::fns0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 X::fns1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 X::fns2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function fn0 at .*.C:6: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function fn2 at .*.C:19: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function X::fns0 at .*.C:9: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function X::fns1 at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function X::fns2 at .*.C:21: .*(\n|\r\n|\r)*" }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-multiline1.C b/gcc/testsuite/g++.dg/contracts/contracts-multiline1.C
index 8145c61e827..6ddae0f5b31 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-multiline1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-multiline1.C
@@ -16,4 +16,4 @@ int main(int, char **)
   ]];
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 8 main x < 10 && y > 123.*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:8: x < 10 && y > 123.*(\n|\r\n|\r)*" }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-post3.C b/gcc/testsuite/g++.dg/contracts/contracts-post3.C
index 9f1dffd8f6a..12923282796 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-post3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-post3.C
@@ -1,7 +1,7 @@
 // { dg-do run }
 // { dg-options "-std=c++2a -fcontracts" }
 // { dg-shouldfail "assert violation" }
-// { dg-output "default std::handle_contract_violation called" }
+// { dg-output "contract violation in function f1" }
 
 int f1(int n)
   [[post r: r > n]]
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre10.C b/gcc/testsuite/g++.dg/contracts/contracts-pre10.C
index 877e9ada404..d6dc0ad8c92 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre10.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre10.C
@@ -140,51 +140,77 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 M::f<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f<int>.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 M::f<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f<double>.-11.5.: 11(\n|\r\n|\r)*" }
-// { dg-output "m.f<int>.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.f<double>.11.5.: -11(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 M::g<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g<int>.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 M::g<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g<double>.-11.5.: 11(\n|\r\n|\r)*" }
-// { dg-output "m.g<int>.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.g<double>.11.5.: -11(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 M::f_arg<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f_arg.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 M::f_arg<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f_arg.-11.5.: 11(\n|\r\n|\r)*" }
-// { dg-output "m.f_arg.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.f_arg.11.5.: -11(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 19 M::g_arg<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g_arg.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 19 M::g_arg<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g_arg.-11.5.: 11(\n|\r\n|\r)*" }
-// { dg-output "m.g_arg.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.g_arg.11.5.: -11(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 25 M::f_ret<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f_ret<int>.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 25 M::f_ret<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.f_ret<double>.-11.5.: 16.500000(\n|\r\n|\r)*" }
-// { dg-output "m.f_ret<int>.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "m.f_ret<double>.11.5.: -16.500000(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 M::g_ret<int> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g_ret<int>.-10.: 15(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 M::g_ret<double> .*(\n|\r\n|\r)*" }
-// { dg-output "m.g_ret<double>.-11.5.: 16.500000(\n|\r\n|\r)*" }
-// { dg-output "m.g_ret<int>.10.: -15(\n|\r\n|\r)*" }
-// { dg-output "m.g_ret<double>.11.5.: -16.500000(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 59 S<int>::g<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 59 S<int>::g<double> .*(\n|\r\n|\r)*" }
-// { dg-output "=================================(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 59 S<double>::g<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 59 S<double>::g<double> .*(\n|\r\n|\r)*" }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::f<int> at .*:7: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {m.f<int>\(-10\): 10(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::f<double> at .*:7: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {m.f<double>\(-11.5\): 11(\n|\r\n|\r)*} }
+// { dg-output {m.f<int>\(10\): -10(\n|\r\n|\r)*} }
+// { dg-output {m.f<double>\(11.5\): -11(\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::g<int> at .*:10: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {m.g<int>\(-10\): 10(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::g<double> at .*:10: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {m.g<double>\(-11.5\): 11(\n|\r\n|\r)*} }
+// { dg-output {m.g<int>\(10\): -10(\n|\r\n|\r)*} }
+// { dg-output {m.g<double>\(11.5\): -11(\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::f_arg<int> at .*:16: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {m.f_arg\(-10\): 10(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::f_arg<double> at .*:16: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {m.f_arg\(-11.5\): 11(\n|\r\n|\r)*} }
+// { dg-output {m.f_arg\(10\): -10(\n|\r\n|\r)*} }
+// { dg-output {m.f_arg\(11.5\): -11(\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::g_arg<int> at .*:19: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {m.g_arg\(-10\): 10(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::g_arg<double> at .*:19: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {m.g_arg\(-11.5\): 11(\n|\r\n|\r)*} }
+// { dg-output {m.g_arg\(10\): -10(\n|\r\n|\r)*} }
+// { dg-output {m.g_arg\(11.5\): -11(\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::f_ret<int> at .*:25: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {m.f_ret<int>\(-10\): 10(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::f_ret<double> at .*:25: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {m.f_ret<double>\(-11.5\): 16.500000(\n|\r\n|\r)*} }
+// { dg-output {m.f_ret<int>\(10\): -10(\n|\r\n|\r)*} }
+// { dg-output {m.f_ret<double>\(11.5\): -16.500000(\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::g_ret<int> at .*:28: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {m.g_ret<int>\(-10\): 15(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function M::g_ret<double> at .*:28: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {m.g_ret<double>\(-11.5\): 16.500000(\n|\r\n|\r)*} }
+// { dg-output {m.g_ret<int>\(10\): -15(\n|\r\n|\r)*} }
+// { dg-output {m.g_ret<double>\(11.5\): -16.500000(\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<int>::f<int> at .*:56: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<int>::f<double> at .*:56: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<int>::g<int> at .*:59: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<int>::g<double> at .*:59: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<double>::f<int> at .*:56: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<double>::f<double> at .*:56: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {=================================(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<double>::g<int> at .*:59: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function S<double>::g<double> at .*:59: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre2.C b/gcc/testsuite/g++.dg/contracts/contracts-pre2.C
index 4fe2f9d0192..4012c4d89ac 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre2.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre2.C
@@ -174,39 +174,39 @@ namespace nonnullary
   }
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 12 nullary::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nullary::fun at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 18 nullary::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 19 nullary::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nullary::fun2 at .*.C:18: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nullary::fun2 at .*.C:19: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 146 nullary::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nullary::funend at .*.C:146: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 nonvoid::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::vfun at .*.C:39: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 45 nonvoid::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::fun at .*.C:45: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 nonvoid::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 nonvoid::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::fun2 at .*.C:52: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::fun2 at .*.C:53: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 155 nonvoid::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonvoid::funend at .*.C:155: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 74 nonnullary::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 nonnullary::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::vfun at .*.C:74: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::vfun at .*.C:75: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 81 nonnullary::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun at .*.C:81: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 88 nonnullary::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 89 nonnullary::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 90 nonnullary::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 91 nonnullary::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun2 at .*.C:88: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun2 at .*.C:89: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun2 at .*.C:90: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::fun2 at .*.C:91: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 167 nonnullary::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 168 nonnullary::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::funend at .*.C:167: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nonnullary::funend at .*.C:168: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre2a2.C b/gcc/testsuite/g++.dg/contracts/contracts-pre2a2.C
index db9a0c37aa0..288952bbd05 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre2a2.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre2a2.C
@@ -16,7 +16,7 @@ int main()
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 6 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 9 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*\\.C:6: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*\\.C:9: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*\\.C:7: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre3.C b/gcc/testsuite/g++.dg/contracts/contracts-pre3.C
index 1c4e3a98e63..4d45533106d 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre3.C
@@ -403,123 +403,123 @@ member::S member::T1::funend(int m, double n)
   return s;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 37 member::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 member::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::vfun at .*.C:37:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::vfun at .*.C:38:  .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 45 member::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun at .*.C:45:  .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 member::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 member::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 54 member::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 55 member::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun2 at .*.C:52:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun2 at .*.C:53:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun2 at .*.C:54:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::fun2 at .*.C:55:  .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 397 member::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 398 member::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::funend at .*.C:397:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function member::T1::funend at .*.C:398:  .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 85 special::T1::T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 86 special::T1::T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 99 special::T1::operator- .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 100 special::T1::operator- .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 92 special::T1::operator. .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 93 special::T1::operator. .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:85:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:86:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::operator- at .*.C:99:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::operator- at .*.C:100:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::operator. at .*.C:92:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::operator. at .*.C:93:  .*(\n|\r\n|\r)*" }
 // { dg-output "==========(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 113 special::T2::T2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 114 special::T2::T2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 127 special::T2::operator- .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 128 special::T2::operator- .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 120 special::T2::operator. .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 121 special::T2::operator. .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::T2 at .*.C:113:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::T2 at .*.C:114:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::operator- at .*.C:127:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::operator- at .*.C:128:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::operator. at .*.C:120:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::operator. at .*.C:121:  .*(\n|\r\n|\r)*" }
 // { dg-output "==========(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 144 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 145 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 85 special::T1::T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 86 special::T1::T1 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:144:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:145:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:85:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:86:  .*(\n|\r\n|\r)*" }
 // { dg-output "==========(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 156 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 144 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 145 special::TC::TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 85 special::T1::T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 86 special::T1::T1 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:156:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:144:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::TC at .*.C:145:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:85:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::T1 at .*.C:86:  .*(\n|\r\n|\r)*" }
 // { dg-output "==========(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 151 special::TC::~TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 106 special::T1::~T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 151 special::TC::~TC .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 106 special::T1::~T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 134 special::T2::~T2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 106 special::T1::~T1 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 196 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 197 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 198 virt::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::~TC at .*.C:151:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::~T1 at .*.C:106:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::TC::~TC at .*.C:151:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::~T1 at .*.C:106:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T2::~T2 at .*.C:134:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function special::T1::~T1 at .*.C:106:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:196:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:197:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:198:  .*(\n|\r\n|\r)*" }
 // { dg-output "T1::fun::m: -10, T1::fun::n: -20, T1::v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 196 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 197 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 198 virt::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:196:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:197:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:198:  .*(\n|\r\n|\r)*" }
 // { dg-output "T1::fun::m: -10, T1::fun::n: -20, T1::v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 211 virt::T3::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 212 virt::T3::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 213 virt::T3::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:211:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:212:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:213:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3::fun::m: -10, T3::fun::n: -20, T3::v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 247 virt::T3b::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 248 virt::T3b::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 249 virt::T3b::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:247:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:248:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:249:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::fun::m: -10, T3b::fun::n: -20, T3b::v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 288 virt::T3c::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 289 virt::T3c::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 290 virt::T3c::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:288:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:289:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:290:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::fun::m: -10, T3c::fun::n: -20, T3c::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T1:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 196 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 197 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 198 virt::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:196:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:197:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:198:  .*(\n|\r\n|\r)*" }
 // { dg-output "T1::fun::m: -1, T1::fun::n: -2, T1::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T2:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 196 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 197 virt::T1::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 198 virt::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:196:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:197:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T1::fun at .*.C:198:  .*(\n|\r\n|\r)*" }
 // { dg-output "T1::fun::m: -1, T1::fun::n: -2, T1::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T3:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 211 virt::T3::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 212 virt::T3::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 213 virt::T3::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:211:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:212:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3::fun at .*.C:213:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3::fun::m: -1, T3::fun::n: -2, T3::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T3b:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 247 virt::T3b::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 248 virt::T3b::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 249 virt::T3b::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:247:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:248:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::fun at .*.C:249:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::fun::m: -1, T3b::fun::n: -2, T3b::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=================(\n|\r\n|\r)*" }
 // { dg-output "T3c:(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 288 virt::T3c::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 289 virt::T3c::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 290 virt::T3c::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:288:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:289:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::fun at .*.C:290:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::fun::m: -1, T3c::fun::n: -2, T3c::v: -10(\n|\r\n|\r)*" }
 // { dg-output "=============(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 256 virt::T3b::p .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 257 virt::T3b::p .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::p at .*.C:256:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::p at .*.C:257:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::p: a: -3, v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 264 virt::T3b::u .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 265 virt::T3b::u .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::u at .*.C:264:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::u at .*.C:265:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::u: a: -3, z: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 272 virt::T3b::n .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::n at .*.C:272:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::n: a: -3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 279 virt::T3b::Sn .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3b::Sn at .*.C:279:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3b::Sn: a: -3(\n|\r\n|\r)*" }
 // { dg-output "=============(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 297 virt::T3c::p .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 298 virt::T3c::p .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::p at .*.C:297:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::p at .*.C:298:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::p: a: -3, v: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 305 virt::T3c::u .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 306 virt::T3c::u .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::u at .*.C:305:  .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::u at .*.C:306:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::u: a: -3, z: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 313 virt::T3c::n .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::n at .*.C:313:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::n: a: -3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 320 virt::T3c::Sn .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function virt::T3c::Sn at .*.C:320:  .*(\n|\r\n|\r)*" }
 // { dg-output "T3c::Sn: a: -3(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre4.C b/gcc/testsuite/g++.dg/contracts/contracts-pre4.C
index 16189cdce9d..1049a5be483 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre4.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre4.C
@@ -77,16 +77,16 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Base::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Base: 0(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Base::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Base::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child0: 0(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Child1::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child1::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child1: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Child2::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child2::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child2: 20(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Child3::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child3::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child3: 30(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 7 Child4::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function Child4::f at .*.C:7: .*(\n|\r\n|\r)*" }
 // { dg-output "Child4: 40(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre5.C b/gcc/testsuite/g++.dg/contracts/contracts-pre5.C
index 278a545055f..b9f855b616d 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre5.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre5.C
@@ -56,26 +56,26 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 8 body<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function body<int> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "-2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 8 body<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function body<double> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "-5(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 none<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function none<int> at .*.C:16: .*(\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 none<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function none<double> at .*.C:16: .*(\n|\r\n|\r)*" }
 // { dg-output "2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 23 arg0<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg0<int> at .*.C:23: .*(\n|\r\n|\r)*" }
 // { dg-output "-9(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 23 arg0<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg0<double> at .*.C:23: .*(\n|\r\n|\r)*" }
 // { dg-output "-7(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 arg1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 31 arg1<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<int> at .*.C:30: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<int> at .*.C:31: .*(\n|\r\n|\r)*" }
 // { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 arg1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 31 arg1<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<double> at .*.C:30: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<double> at .*.C:31: .*(\n|\r\n|\r)*" }
 // { dg-output "-11(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 ret<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<int> at .*.C:38: .*(\n|\r\n|\r)*" }
 // { dg-output "3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 ret<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<double> at .*.C:38: .*(\n|\r\n|\r)*" }
 // { dg-output "4(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre7.C b/gcc/testsuite/g++.dg/contracts/contracts-pre7.C
index aeb8fc042e6..dbf60fb53e3 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre7.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre7.C
@@ -108,27 +108,27 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 13 ns0::f<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::f<int> at .*.C:13: .*(\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 ns0::ns1::f<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::f<int> at .*.C:28: .*(\n|\r\n|\r)*" }
 // { dg-output "2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 ns0::ns1::f2<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::f2<int> at .*.C:46: .*(\n|\r\n|\r)*" }
 // { dg-output "3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 ns0::ns1::ns2::f<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::ns2::f<int> at .*.C:53: .*(\n|\r\n|\r)*" }
 // { dg-output "4(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 ns0::S<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::S<int>::f at .*.C:76: .*(\n|\r\n|\r)*" }
 // { dg-output "5(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 82 ns0::ns1::S2<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::S2<int>::f at .*.C:82: .*(\n|\r\n|\r)*" }
 // { dg-output "6(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 13 ns0::f<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::f<double> at .*.C:13: .*(\n|\r\n|\r)*" }
 // { dg-output "7(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 28 ns0::ns1::f<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::f<double> at .*.C:28: .*(\n|\r\n|\r)*" }
 // { dg-output "8(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 ns0::ns1::f2<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::f2<double> at .*.C:46: .*(\n|\r\n|\r)*" }
 // { dg-output "9(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 ns0::ns1::ns2::f<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::ns2::f<double> at .*.C:53: .*(\n|\r\n|\r)*" }
 // { dg-output "10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 ns0::S<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::S<double>::f at .*.C:76: .*(\n|\r\n|\r)*" }
 // { dg-output "11(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 82 ns0::ns1::S2<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ns0::ns1::S2<double>::f at .*.C:82: .*(\n|\r\n|\r)*" }
 // { dg-output "12(\n|\r\n|\r)*" }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-pre9.C b/gcc/testsuite/g++.dg/contracts/contracts-pre9.C
index 64c0cfa36df..f1a8b9ce555 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-pre9.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-pre9.C
@@ -108,39 +108,39 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 14 S<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<int>::f at .*.C:14: .*(\n|\r\n|\r)*" }
 // { dg-output "s_int.f.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 S<int>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<int>::g at .*.C:10: .*(\n|\r\n|\r)*" }
 // { dg-output "s_int.g.-10.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_int.f.10.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_int.g.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 14 S<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<double>::f at .*.C:14: .*(\n|\r\n|\r)*" }
 // { dg-output "s_double.f.-10.5.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 S<double>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S<double>::g at .*.C:10: .*(\n|\r\n|\r)*" }
 // { dg-output "s_double.g.-10.5.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_double.f.10.5.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_double.g.10.5.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 33 S_arg<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_arg<int>::f at .*.C:33: .*(\n|\r\n|\r)*" }
 // { dg-output "s_arg_int.f.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 29 S_arg<int>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_arg<int>::g at .*.C:29: .*(\n|\r\n|\r)*" }
 // { dg-output "s_arg_int.g.-10.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_arg_int.f.10.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_arg_int.g.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 33 S_arg<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_arg<double>::f at .*.C:33: .*(\n|\r\n|\r)*" }
 // { dg-output "s_arg_double.f.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 29 S_arg<double>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_arg<double>::g at .*.C:29: .*(\n|\r\n|\r)*" }
 // { dg-output "s_arg_double.g.-10.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_arg_double.f.10.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_arg_double.g.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 S_ret<int>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_ret<int>::f at .*.C:52: .*(\n|\r\n|\r)*" }
 // { dg-output "s_ret_int.f.-10.: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 S_ret<int>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_ret<int>::g at .*.C:48: .*(\n|\r\n|\r)*" }
 // { dg-output "s_ret_int.g.-10.: 10(\n|\r\n|\r)*" }
 // { dg-output "s_ret_int.f.10.: -10(\n|\r\n|\r)*" }
 // { dg-output "s_ret_int.g.10.: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 S_ret<double>::f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_ret<double>::f at .*.C:52: .*(\n|\r\n|\r)*" }
 // { dg-output "s_ret_double.f.-10.: 10.000000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 S_ret<double>::g .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S_ret<double>::g at .*.C:48: .*(\n|\r\n|\r)*" }
 // { dg-output "s_ret_double.g.-10.: 10.000000(\n|\r\n|\r)*" }
 // { dg-output "s_ret_double.f.10.: -10.000000(\n|\r\n|\r)*" }
 // { dg-output "s_ret_double.g.10.: -10.000000(\n|\r\n|\r)*" }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-redecl3.C b/gcc/testsuite/g++.dg/contracts/contracts-redecl3.C
index fdfca3a65ff..a3d42e5daa4 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-redecl3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-redecl3.C
@@ -160,36 +160,36 @@ namespace nondefining
   }
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 25 defining::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 defining::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::vfun at .*.C:25: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::vfun at .*.C:26: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 32 defining::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun at .*.C:32: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 42 defining::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:39: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:40: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:41: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:42: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 138 defining::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 139 defining::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::funend at .*.C:138: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::funend at .*.C:139: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 nondefining::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 69 nondefining::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::vfun at .*.C:68: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::vfun at .*.C:69: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 71 nondefining::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun at .*.C:71: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 73 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 74 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:73: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:74: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:75: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:76: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 151 nondefining::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 152 nondefining::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::funend at .*.C:151: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::funend at .*.C:152: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-redecl4.C b/gcc/testsuite/g++.dg/contracts/contracts-redecl4.C
index c1e234226b6..3fbf222b243 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-redecl4.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-redecl4.C
@@ -33,24 +33,24 @@ int main(int, char **)
   printf("=====\n");
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 10 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "f: a: 1, b: 1, c: 1(\n|\r\n|\r)*" }
 // { dg-output "=====(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "f: a: 1, b: 1, c: 10(\n|\r\n|\r)*" }
 // { dg-output "=====(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "f: a: 1, b: 11, c: 10(\n|\r\n|\r)*" }
 // { dg-output "=====(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 f .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 f .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:10: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function f at .*.C:12: .*(\n|\r\n|\r)*" }
 // { dg-output "f: a: 12, b: 11, c: 10(\n|\r\n|\r)*" }
 // { dg-output "=====(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-redecl6.C b/gcc/testsuite/g++.dg/contracts/contracts-redecl6.C
index e79a5aa38ef..c7d12b32a48 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-redecl6.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-redecl6.C
@@ -160,36 +160,36 @@ namespace nondefining
   }
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 25 defining::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 26 defining::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::vfun at .*.C:25: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::vfun at .*.C:26: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 32 defining::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun at .*.C:32: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 defining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 42 defining::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:39: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:40: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:41: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::fun2 at .*.C:42: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 138 defining::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 139 defining::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::funend at .*.C:138: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function defining::T1::funend at .*.C:139: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 nondefining::T1::vfun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 69 nondefining::T1::vfun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::vfun at .*.C:68: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::vfun at .*.C:69: .*(\n|\r\n|\r)*" }
 // { dg-output "vfun::x: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 71 nondefining::T1::fun .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun at .*.C:71: .*(\n|\r\n|\r)*" }
 // { dg-output "fun::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::f: 10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 73 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 74 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 nondefining::T1::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:73: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:74: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:75: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::fun2 at .*.C:76: .*(\n|\r\n|\r)*" }
 // { dg-output "fun2::x: 10 fun2::y: 10.500000(\n|\r\n|\r)*" }
 // { dg-output "main::d: 10.500000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 151 nondefining::T1::funend .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 152 nondefining::T1::funend .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::funend at .*.C:151: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function nondefining::T1::funend at .*.C:152: .*(\n|\r\n|\r)*" }
 // { dg-output "funend::x: 10(\n|\r\n|\r)*" }
 // { dg-output "main::s.z: 1(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-redecl7.C b/gcc/testsuite/g++.dg/contracts/contracts-redecl7.C
index e3a57eea632..7503a4195f7 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-redecl7.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-redecl7.C
@@ -77,19 +77,19 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 9 S::now .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::now at .*.C:9: .*(\n|\r\n|\r)*" }
 // { dg-output "S::now: a: -10, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 15 now .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function now at .*.C:15: .*(\n|\r\n|\r)*" }
 // { dg-output "now: a: -20, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 22 later .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 22 later .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function later at .*.C:22: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function later at .*.C:22: .*(\n|\r\n|\r)*" }
 // { dg-output "later: a: -21, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 27 both .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function both at .*.C:27: .*(\n|\r\n|\r)*" }
 // { dg-output "both: a: -22, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 36 hidden .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 36 hidden .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function hidden at .*.C:36: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function hidden at .*.C:36: .*(\n|\r\n|\r)*" }
 // { dg-output "hidden: a: -23, t->pri: -10(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 hidden2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 41 hidden2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function hidden2 at .*.C:41: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function hidden2 at .*.C:41: .*(\n|\r\n|\r)*" }
 // { dg-output "hidden2: a: -24, t->pri: -10(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec1.C b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec1.C
index 57ba7653543..546c0db2f04 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec1.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec1.C
@@ -94,28 +94,28 @@ int main(int, char**)
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 8 body<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function body<int> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "-2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 16 body<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function body<double> at .*.C:16: .*(\n|\r\n|\r)*" }
 // { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 24 none<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function none<int> at .*.C:24: .*(\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 31 none<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function none<double> at .*.C:31: .*(\n|\r\n|\r)*" }
 // { dg-output "-101(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 38 arg0<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg0<int> at .*.C:38: .*(\n|\r\n|\r)*" }
 // { dg-output "-9(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 45 arg0<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg0<double> at .*.C:45: .*(\n|\r\n|\r)*" }
 // { dg-output "11(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 52 arg1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 arg1<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<int> at .*.C:52: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<int> at .*.C:53: .*(\n|\r\n|\r)*" }
 // { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 60 arg1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 arg1<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<double> at .*.C:60: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function arg1<double> at .*.C:61: .*(\n|\r\n|\r)*" }
 // { dg-output "14(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 68 ret<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<int> at .*.C:68: .*(\n|\r\n|\r)*" }
 // { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 ret<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<double> at .*.C:75: .*(\n|\r\n|\r)*" }
 // { dg-output "3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 75 ret<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ret<double> at .*.C:75: .*(\n|\r\n|\r)*" }
 // { dg-output "3.300000(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec2.C b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec2.C
index 25982dfc826..ebc53788e0c 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec2.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec2.C
@@ -304,92 +304,144 @@ int main(int, char**)
   return 0;
 }
 
-
-// { dg-output "default std::handle_contract_violation called: .*.C 9 body<int> .*(\n|\r\n|\r)*" }
-// { dg-output "-2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 17 body<double> .*(\n|\r\n|\r)*" }
-// { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 25 none<int> .*(\n|\r\n|\r)*" }
-// { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 32 none<double> .*(\n|\r\n|\r)*" }
-// { dg-output "-101(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 39 arg0<int> .*(\n|\r\n|\r)*" }
-// { dg-output "-9(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 46 arg0<double> .*(\n|\r\n|\r)*" }
-// { dg-output "11(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 53 arg1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 54 arg1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "-3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 61 arg1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 62 arg1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "14(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 69 ret<int> .*(\n|\r\n|\r)*" }
-// { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 ret<double> .*(\n|\r\n|\r)*" }
-// { dg-output "3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 76 ret<double> .*(\n|\r\n|\r)*" }
-// { dg-output "3.300000(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 83 g1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "-1(\n|\r\n|\r)*" }
-// { dg-output "-1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 97 g2<int> .*(\n|\r\n|\r)*" }
-// { dg-output "-1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 107 g2<double> .*(\n|\r\n|\r)*" }
-// { dg-output "1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 114 g2<char> .*(\n|\r\n|\r)*" }
-// { dg-output "100(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 124 G3<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 125 G3<double, .*(\n|\r\n|\r)*" }
-// { dg-output "G3 general T S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 139 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 140 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "G3 partial int S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 147 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 148 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "G3 full int double(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 124 G3<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 125 G3<char, .*(\n|\r\n|\r)*" }
-// { dg-output "G3 general T S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 139 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 140 G3<int, .*(\n|\r\n|\r)*" }
-// { dg-output "G3 partial int S(\n|\r\n|\r)*" }
-// { dg-output "G3 full int C(\n|\r\n|\r)*" }
-// { dg-output "G3 full int C(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 173 G4<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 174 G4<int, .*(\n|\r\n|\r)*" }
-// { dg-output "G4 general T S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 175 G4<int, .*(\n|\r\n|\r)*" }
-// { dg-output "G4 full double double(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 206 G4<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 207 G4<double, .*(\n|\r\n|\r)*" }
-// { dg-output "G4 full double char(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 208 G4<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 187 G4<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 188 G4<char, .*(\n|\r\n|\r)*" }
-// { dg-output "G4 partial char S(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 189 G4<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 220 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 221 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 222 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "G5 gen T S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 220 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 221 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 222 G5<int, .*(\n|\r\n|\r)*" }
-// { dg-output "G5 gen T S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 233 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 234 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 235 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "G5 partial char S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 233 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 234 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 235 G5<char, .*(\n|\r\n|\r)*" }
-// { dg-output "G5 partial char S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 244 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 245 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 246 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "G5 full double double, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 244 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 245 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 246 G5<double, .*(\n|\r\n|\r)*" }
-// { dg-output "G5 full double double, f gen R(\n|\r\n|\r)*" }
-
+// { dg-output {contract violation in function body<int> at .*:9: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {-2(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function body<double> at .*:17: a > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {-3(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function none<int> at .*:25: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {1(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function none<double> at .*:32: a > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {-101(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function arg0<int> at .*:39: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {-9(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function arg0<double> at .*:46: t > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {11(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function arg1<int> at .*:53: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function arg1<int> at .*:54: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {-3(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function arg1<double> at .*:61: a > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function arg1<double> at .*:62: t > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {14(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function ret<int> at .*:69: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {1(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function ret<double> at .*:76: a > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {3(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function ret<double> at .*:76: a > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {3.300000(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function g1<int> at .*:83: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {-1(\n|\r\n|\r)*} }
+// { dg-output {-1(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function g2<int> at .*:97: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {-1(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function g2<double> at .*:107: t < 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {1(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function g2<char> at .*:114: t < 'c'(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {100(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<double, double>::f at .*:124: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<double, double>::f at .*:125: s > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G3 general T S(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<int, int>::f at .*:139: t > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<int, int>::f at .*:140: s > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G3 partial int S(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<int, double>::f at .*:147: t > 2(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<int, double>::f at .*:148: s > 2(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G3 full int double(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<char, char>::f at .*:124: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<char, char>::f at .*:125: s > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G3 general T S(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<int, char>::f at .*:139: t > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G3<int, char>::f at .*:140: s > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G3 partial int S(\n|\r\n|\r)*} }
+// { dg-output {G3 full int C(\n|\r\n|\r)*} }
+// { dg-output {G3 full int C(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<int, int>::G4 at .*:173: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<int, int>::G4 at .*:174: s > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G4 general T S(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<int, int>::G4 at .*:175: x > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G4 full double double(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<double, char>::G4 at .*:206: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<double, char>::G4 at .*:207: b > 'b'(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G4 full double char(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<double, char>::G4 at .*:208: x > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<char, int>::G4 at .*:187: t > 'c'(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<char, int>::G4 at .*:188: s > 3(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G4 partial char S(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G4<char, int>::G4 at .*:189: x2 > 3(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, int>::f<int> at .*:220: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, int>::f<int> at .*:221: s > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, int>::f<int> at .*:222: r > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G5 gen T S, f gen R(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, int>::f<double> at .*:220: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, int>::f<double> at .*:221: s > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, int>::f<double> at .*:222: r > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G5 gen T S, f gen R(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<char, int>::f<int> at .*:233: x > 'z'(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<char, int>::f<int> at .*:234: y > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<char, int>::f<int> at .*:235: z > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G5 partial char S, f gen R(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<char, int>::f<double> at .*:233: x > 'z'(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<char, int>::f<double> at .*:234: y > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<char, int>::f<double> at .*:235: z > 1(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G5 partial char S, f gen R(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<double, double>::f<int> at .*:244: a > 2(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<double, double>::f<int> at .*:245: b > 2(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<double, double>::f<int> at .*:246: c > 2(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G5 full double double, f gen R(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<double, double>::f<double> at .*:244: a > 2(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<double, double>::f<double> at .*:245: b > 2(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<double, double>::f<double> at .*:246: c > 2(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G5 full double double, f gen R(\n|\r\n|\r)*} }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec3.C b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec3.C
index 44725893061..7438cafdb65 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts-tmpl-spec3.C
@@ -32,14 +32,19 @@ int main(int, char**) {
   return 0;
 }
 
-// { dg-output "G5 full double double, f gen R(\n|\r\n|\r)*" }
-// { dg-output "G5 full double double, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* t > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* s > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* r > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "G5 gen T S, f gen R(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* t > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* s > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 10 G5<int, .* r > 0 .*(\n|\r\n|\r)*" }
-// { dg-output "G5 gen T S, f gen R(\n|\r\n|\r)*" }
-
+// { dg-output {G5 full double double, f gen R(\n|\r\n|\r)*} }
+// { dg-output {G5 full double double, f gen R(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, double>::f<int> at .*:10: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, double>::f<int> at .*:10: s > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, double>::f<int> at .*:10: r > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G5 gen T S, f gen R(\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, double>::f<double> at .*:10: t > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, double>::f<double> at .*:10: s > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function G5<int, double>::f<double> at .*:10: r > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {G5 gen T S, f gen R(\n|\r\n|\r)*} }
diff --git a/gcc/testsuite/g++.dg/contracts/contracts10.C b/gcc/testsuite/g++.dg/contracts/contracts10.C
index ce0723c3db4..9ed86312b40 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts10.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts10.C
@@ -62,12 +62,12 @@ int main()
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 47 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 48 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 49 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 100 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 13 tns::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 33 tns::fun2 .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 40 tns::TestType::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 24 tns::TestType::fun2 .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:47: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:48: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:49: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:100: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function tns::fun at .*.C:13: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function tns::fun2 at .*.C:33: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function tns::TestType::fun at .*.C:40: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function tns::TestType::fun2 at .*.C:24: .*(\n|\r\n|\r)*" }
  
diff --git a/gcc/testsuite/g++.dg/contracts/contracts19.C b/gcc/testsuite/g++.dg/contracts/contracts19.C
index 4a8b43a3186..2f7dc3aeefc 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts19.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts19.C
@@ -14,6 +14,6 @@ int main()
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 11 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 main .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:11: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function main at .*.C:12: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts25.C b/gcc/testsuite/g++.dg/contracts/contracts25.C
index 01217807bc1..8758dd58bcf 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts25.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts25.C
@@ -50,8 +50,8 @@ int main(int, char **) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 12 ffun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 ftfun<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 36 explicitfn .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 30 ftfun<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ffun at .*.C:12: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<int> at .*.C:30: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function explicitfn at .*.C:36: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function ftfun<double> at .*.C:30: .*(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts3.C b/gcc/testsuite/g++.dg/contracts/contracts3.C
index ecb9fdb1e65..73dc7a15544 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts3.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts3.C
@@ -3,7 +3,7 @@
 // { dg-do run }
 // { dg-options "-std=c++2a -fcontracts" }
 // { dg-shouldfail "assert violation" }
-// { dg-output "default std::handle_contract_violation called" }
+// { dg-output "contract violation in function main" }
 
 int main()
 {
diff --git a/gcc/testsuite/g++.dg/contracts/contracts35.C b/gcc/testsuite/g++.dg/contracts/contracts35.C
index ddd80025afc..dc675d13578 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts35.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts35.C
@@ -32,16 +32,16 @@ int main(int, char **) {
   return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S<int> at .*.C:8: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S<int> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "S::S.T.: -1(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 8 S::S<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S<double> at .*.C:8: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S::S<double> at .*.C:8: .*(\n|\r\n|\r)*" }
 // { dg-output "S::S.T.: -2(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<int> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1::S1<int> at .*.C:20: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1::S1<int> at .*.C:20: .*(\n|\r\n|\r)*" }
 // { dg-output "S1::S1.T.: -3(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 20 S1::S1<double> .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1::S1<double> at .*.C:20: .*(\n|\r\n|\r)*" }
+// { dg-output "contract violation in function S1::S1<double> at .*.C:20: .*(\n|\r\n|\r)*" }
 // { dg-output "S1::S1.T.: -4(\n|\r\n|\r)*" }
 
diff --git a/gcc/testsuite/g++.dg/contracts/contracts5.C b/gcc/testsuite/g++.dg/contracts/contracts5.C
index 0fa0ec83be5..3c591833bf1 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts5.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts5.C
@@ -3,7 +3,7 @@
 // { dg-do run }
 // { dg-options "-std=c++2a -fcontracts -fcontract-build-level=audit" }
 // { dg-shouldfail "assert violation" }
-// { dg-output "default std::handle_contract_violation called" }
+// { dg-output "contract violation in function main" }
 
 int main()
 {
diff --git a/gcc/testsuite/g++.dg/contracts/contracts7.C b/gcc/testsuite/g++.dg/contracts/contracts7.C
index eaad8f0fc9d..9e7cae9433e 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts7.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts7.C
@@ -4,7 +4,7 @@
 // contract failure is switched on
 // { dg-do run }
 // { dg-options "-std=c++2a -fcontracts -fcontract-continuation-mode=on" }
-// { dg-output "default std::handle_contract_violation called" }
+// { dg-output "contract violation in function main" }
 
 int main()
 {
diff --git a/gcc/testsuite/g++.dg/contracts/contracts9.C b/gcc/testsuite/g++.dg/contracts/contracts9.C
index f566628ec44..aedea845f02 100644
--- a/gcc/testsuite/g++.dg/contracts/contracts9.C
+++ b/gcc/testsuite/g++.dg/contracts/contracts9.C
@@ -35,11 +35,19 @@ int main()
   // return 0;
 }
 
-// { dg-output "default std::handle_contract_violation called: .*.C 12 fun1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 fun1<double> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 fun1<const char.> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 11 fun1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 12 fun1<int> .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 32 main .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 test<int>::fun .*(\n|\r\n|\r)*" }
-// { dg-output "default std::handle_contract_violation called: .*.C 21 test<double>::fun .*(\n|\r\n|\r)*" }
+// { dg-output {contract violation in function fun1<int> at .*:12: \(long long\)b > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function fun1<double> at .*:11: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function fun1<const char\*> at .*:11: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function fun1<int> at .*:11: a > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function fun1<int> at .*:12: \(long long\)b > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function main at .*:32: fun1\(-1, -5\)(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function test<int>::fun at .*:21: b > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
+// { dg-output {contract violation in function test<double>::fun at .*:21: b > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }
-- 
2.39.0


^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 3/3] contrib: Add dg-out-generator.pl
  2022-12-20 17:23         ` [PATCH 1/3] libstdc++: Improve output of default contract violation handler [PR107792] Jason Merrill
  2022-12-22 11:03           ` Arsen Arsenović
  2022-12-22 11:03           ` [PATCH 2/3] contracts: Update testsuite against new default viol. handler format Arsen Arsenović
@ 2022-12-22 11:03           ` Arsen Arsenović
  2022-12-22 21:43             ` Jason Merrill
  2 siblings, 1 reply; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-22 11:03 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches, jwakely, libstdc++, Arsen Arsenović

This script is a helper used to generate dg-output lines from an existing
program output conveniently.  It takes care of escaping Tcl and ARE stuff.

contrib/ChangeLog:

	* dg-out-generator.pl: New file.
---
I updated this file to include the proper copyright header, after dkm notified
me that I got it wrong on IRC ;D

 contrib/dg-out-generator.pl | 79 +++++++++++++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)
 create mode 100755 contrib/dg-out-generator.pl

diff --git a/contrib/dg-out-generator.pl b/contrib/dg-out-generator.pl
new file mode 100755
index 00000000000..1e9247165b2
--- /dev/null
+++ b/contrib/dg-out-generator.pl
@@ -0,0 +1,79 @@
+#!/usr/bin/env perl
+#
+# Copyright (C) 2022 Free Software Foundation, Inc.
+# Contributed by Arsen Arsenović.
+#
+# This script is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+
+# This script reads program output on STDIN, and out of it produces a block of
+# dg-output lines that can be yanked at the end of a file.  It will escape
+# special ARE and Tcl constructs automatically.
+#
+# Each argument passed on the standard input is treated as a string to be
+# replaced by ``.*'' in the final result.  This is intended to mask out build
+# paths, filenames, etc.
+#
+# Usage example:
+
+# $ g++-13 -fcontracts -o test \
+#  'g++.dg/contracts/contracts-access1.C' && \
+#   ./test |& dg-out-generator.pl 'g++.dg/contracts/contracts-access1.C'
+# // { dg-output {contract violation in function Base::b at .*:11: pub > 0(\n|\r\n|\r)*} }
+# // { dg-output {\[level:default, role:default, continuation mode:never\](\n|\r\n|\r)*} }
+# // { dg-output {terminate called without an active exception(\n|\r\n|\r)*} }
+
+# You can now freely dump the above into your testcase.
+
+use strict;
+use warnings;
+use POSIX 'floor';
+
+my $escapees = '(' . join ('|', map { quotemeta } @ARGV) . ')';
+
+sub gboundary($)
+{
+  my $str = shift;
+  my $sz = 10.0;
+  for (;;)
+    {
+      my $bnd = join '', (map chr 64 + rand 27, 1 .. floor $sz);
+      return $bnd unless index ($str, $bnd) >= 0;
+      $sz += 0.1;
+    }
+}
+
+while (<STDIN>)
+  {
+    # Escape our escapees.
+    my $boundary;
+    if (@ARGV) {
+      # Checking this is necessary to avoid a spurious .* between all
+      # characters if no arguments are passed.
+      $boundary = gboundary $_;
+      s/$escapees/$boundary/g;
+    }
+
+    # Quote stuff special in Tcl ARE.  This step also effectively nulls any
+    # concern about escaping.  As long as all curly braces are escaped, the
+    # string will, when passing through the braces rule of Tcl, be identical to
+    # the input.
+    s/([[\]*+?{}()\\])/\\$1/g;
+
+    # Newlines should be more tolerant.
+    s/\n$/(\\n|\\r\\n|\\r)*/;
+
+    # Then split out the boundary, replacing it with .*.
+    s/$boundary/.*/g if defined $boundary;
+
+    # Then, let's print it in a dg-output block.  If you'd prefer /* keep in
+    # mind that if your string contains */ it could terminate the comment
+    # early.  Maybe add an extra s!\*/!*()/!g or something.
+    print "// { dg-output {$_} }\n";
+  }
+
+# File Local Vars:
+# indent-tabs-mode: nil
+# End:
-- 
2.39.0


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 1/3] libstdc++: Improve output of default contract violation handler [PR107792]
  2022-12-22 11:03           ` Arsen Arsenović
@ 2022-12-22 21:40             ` Jason Merrill
  2022-12-22 22:02               ` Jonathan Wakely
  0 siblings, 1 reply; 27+ messages in thread
From: Jason Merrill @ 2022-12-22 21:40 UTC (permalink / raw)
  To: Arsen Arsenović; +Cc: gcc-patches, jwakely, libstdc++

On 12/22/22 06:03, Arsen Arsenović wrote:
> From: Jonathan Wakely <jwakely@redhat.com>
> 
> Make the output more readable. Don't output anything unless verbose
> termination is enabled at configure-time.

LGTM if Jonathan agrees.  The testsuite changes should be applied in the 
same commit.

> libstdc++-v3/ChangeLog:
> 
> 	PR libstdc++/107792
> 	PR libstdc++/107778
> 	* src/experimental/contract.cc (handle_contract_violation): Make
> 	output more readable.
> ---
> Heh, wouldn't be me if I forgot nothing.  Sorry about that.
> 
> How's this?
> 
>   libstdc++-v3/src/experimental/contract.cc | 50 ++++++++++++++++++-----
>   1 file changed, 39 insertions(+), 11 deletions(-)
> 
> diff --git a/libstdc++-v3/src/experimental/contract.cc b/libstdc++-v3/src/experimental/contract.cc
> index c8d2697eddc..2d41a6326cf 100644
> --- a/libstdc++-v3/src/experimental/contract.cc
> +++ b/libstdc++-v3/src/experimental/contract.cc
> @@ -1,4 +1,5 @@
>   // -*- C++ -*- std::experimental::contract_violation and friends
> +
>   // Copyright (C) 2019-2022 Free Software Foundation, Inc.
>   //
>   // This file is part of GCC.
> @@ -23,19 +24,46 @@
>   // <http://www.gnu.org/licenses/>.
>   
>   #include <experimental/contract>
> -#include <iostream>
> +#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
> +# include <iostream>
> +#endif
>   
>   __attribute__ ((weak)) void
>   handle_contract_violation (const std::experimental::contract_violation &violation)
>   {
> -  std::cerr << "default std::handle_contract_violation called: \n"
> -    << " " << violation.file_name()
> -    << " " << violation.line_number()
> -    << " " << violation.function_name()
> -    << " " << violation.comment()
> -    << " " << violation.assertion_level()
> -    << " " << violation.assertion_role()
> -    << " " << (int)violation.continuation_mode()
> -    << std::endl;
> +#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
> +  bool level_default_p = violation.assertion_level() == "default";
> +  bool role_default_p = violation.assertion_role() == "default";
> +  bool cont_mode_default_p = violation.continuation_mode()
> +    == std::experimental::contract_violation_continuation_mode::never_continue;
> +
> +  const char* modes[]{ "off", "on" }; // Must match enumerators in header.
> +  std::cerr << "contract violation in function " << violation.function_name()
> +    << " at " << violation.file_name() << ':' << violation.line_number()
> +    << ": " << violation.comment();
> +
> +  const char* delimiter = "\n[";
> +
> +  if (!level_default_p)
> +    {
> +      std::cerr << delimiter << "level:" << violation.assertion_level();
> +      delimiter = ", ";
> +    }
> +  if (!role_default_p)
> +    {
> +      std::cerr << delimiter << "role:" << violation.assertion_role();
> +      delimiter = ", ";
> +    }
> +  if (!cont_mode_default_p)
> +    {
> +      std::cerr << delimiter << "continue:"
> +		<< modes[(int)violation.continuation_mode() & 1];
> +      delimiter = ", ";
> +    }
> +
> +  if (delimiter[0] == ',')
> +    std::cerr << ']';
> +
> +  std::cerr << std::endl;
> +#endif
>   }
> -


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 3/3] contrib: Add dg-out-generator.pl
  2022-12-22 11:03           ` [PATCH 3/3] contrib: Add dg-out-generator.pl Arsen Arsenović
@ 2022-12-22 21:43             ` Jason Merrill
  2022-12-22 21:56               ` Arsen Arsenović
  0 siblings, 1 reply; 27+ messages in thread
From: Jason Merrill @ 2022-12-22 21:43 UTC (permalink / raw)
  To: Arsen Arsenović; +Cc: gcc-patches, jwakely, libstdc++

On 12/22/22 06:03, Arsen Arsenović wrote:
> This script is a helper used to generate dg-output lines from an existing
> program output conveniently.  It takes care of escaping Tcl and ARE stuff.
> 
> contrib/ChangeLog:
> 
> 	* dg-out-generator.pl: New file.
> ---
> I updated this file to include the proper copyright header, after dkm notified
> me that I got it wrong on IRC ;D
> 
>   contrib/dg-out-generator.pl | 79 +++++++++++++++++++++++++++++++++++++
>   1 file changed, 79 insertions(+)
>   create mode 100755 contrib/dg-out-generator.pl
> 
> diff --git a/contrib/dg-out-generator.pl b/contrib/dg-out-generator.pl
> new file mode 100755
> index 00000000000..1e9247165b2
> --- /dev/null
> +++ b/contrib/dg-out-generator.pl
> @@ -0,0 +1,79 @@
> +#!/usr/bin/env perl
> +#
> +# Copyright (C) 2022 Free Software Foundation, Inc.
> +# Contributed by Arsen Arsenović.
> +#
> +# This script is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3, or (at your option)
> +# any later version.
> +
> +# This script reads program output on STDIN, and out of it produces a block of
> +# dg-output lines that can be yanked at the end of a file.  It will escape
> +# special ARE and Tcl constructs automatically.
> +#
> +# Each argument passed on the standard input is treated as a string to be
> +# replaced by ``.*'' in the final result.  This is intended to mask out build
> +# paths, filenames, etc.
> +#
> +# Usage example:
> +
> +# $ g++-13 -fcontracts -o test \
> +#  'g++.dg/contracts/contracts-access1.C' && \
> +#   ./test |& dg-out-generator.pl 'g++.dg/contracts/contracts-access1.C'
> +# // { dg-output {contract violation in function Base::b at .*:11: pub > 0(\n|\r\n|\r)*} }
> +# // { dg-output {\[level:default, role:default, continuation mode:never\](\n|\r\n|\r)*} }
> +# // { dg-output {terminate called without an active exception(\n|\r\n|\r)*} }
> +
> +# You can now freely dump the above into your testcase.
> +
> +use strict;
> +use warnings;
> +use POSIX 'floor';
> +
> +my $escapees = '(' . join ('|', map { quotemeta } @ARGV) . ')';
> +
> +sub gboundary($)
> +{
> +  my $str = shift;
> +  my $sz = 10.0;
> +  for (;;)
> +    {
> +      my $bnd = join '', (map chr 64 + rand 27, 1 .. floor $sz);
> +      return $bnd unless index ($str, $bnd) >= 0;
> +      $sz += 0.1;
> +    }
> +}
> +
> +while (<STDIN>)
> +  {
> +    # Escape our escapees.
> +    my $boundary;
> +    if (@ARGV) {
> +      # Checking this is necessary to avoid a spurious .* between all
> +      # characters if no arguments are passed.
> +      $boundary = gboundary $_;
> +      s/$escapees/$boundary/g;
> +    }
> +
> +    # Quote stuff special in Tcl ARE.  This step also effectively nulls any
> +    # concern about escaping.  As long as all curly braces are escaped, the
> +    # string will, when passing through the braces rule of Tcl, be identical to
> +    # the input.
> +    s/([[\]*+?{}()\\])/\\$1/g;
> +
> +    # Newlines should be more tolerant.
> +    s/\n$/(\\n|\\r\\n|\\r)*/;

Isn't specifically handling \\r\\n redundant with the * operator?

> +    # Then split out the boundary, replacing it with .*.
> +    s/$boundary/.*/g if defined $boundary;
> +
> +    # Then, let's print it in a dg-output block.  If you'd prefer /* keep in
> +    # mind that if your string contains */ it could terminate the comment
> +    # early.  Maybe add an extra s!\*/!*()/!g or something.
> +    print "// { dg-output {$_} }\n";
> +  }
> +
> +# File Local Vars:
> +# indent-tabs-mode: nil
> +# End:


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 3/3] contrib: Add dg-out-generator.pl
  2022-12-22 21:43             ` Jason Merrill
@ 2022-12-22 21:56               ` Arsen Arsenović
  2022-12-22 22:21                 ` Jason Merrill
  0 siblings, 1 reply; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-22 21:56 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches, jwakely, libstdc++

[-- Attachment #1: Type: text/plain, Size: 783 bytes --]

Hi,

Jason Merrill <jason@redhat.com> writes:
>> +    # Newlines should be more tolerant.
>> +    s/\n$/(\\n|\\r\\n|\\r)*/;
>
> Isn't specifically handling \\r\\n redundant with the * operator?

To the extent of my knowledge, yes; I left that in since the original
tests I was replacing with this script also used this terminator:

-// { dg-output "default std::handle_contract_violation called: .*.C 21 test<double>::fun .*(\n|\r\n|\r)*" }
+// { dg-output {contract violation in function test<double>::fun at .*:21: b > 0(\n|\r\n|\r)*} }
+// { dg-output {\[continue:on\](\n|\r\n|\r)*} }

That could easily use the simpler [\r\n]* form too:

% regexp {^[\r\n]*$} "\r\n\n\n"
1

Feel free to swap that in too.

Thanks, have a great night.
-- 
Arsen Arsenović

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 381 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 1/3] libstdc++: Improve output of default contract violation handler [PR107792]
  2022-12-22 21:40             ` Jason Merrill
@ 2022-12-22 22:02               ` Jonathan Wakely
  0 siblings, 0 replies; 27+ messages in thread
From: Jonathan Wakely @ 2022-12-22 22:02 UTC (permalink / raw)
  To: Jason Merrill; +Cc: Arsen Arsenović, gcc-patches, jwakely, libstdc++

On Thu, 22 Dec 2022 at 21:41, Jason Merrill via Libstdc++
<libstdc++@gcc.gnu.org> wrote:
>
> On 12/22/22 06:03, Arsen Arsenović wrote:
> > From: Jonathan Wakely <jwakely@redhat.com>
> >
> > Make the output more readable. Don't output anything unless verbose
> > termination is enabled at configure-time.
>
> LGTM if Jonathan agrees.  The testsuite changes should be applied in the
> same commit.

Yup, Arsen and I have been discussing this patch over IRC, I'm happy with it.

>
> > libstdc++-v3/ChangeLog:
> >
> >       PR libstdc++/107792
> >       PR libstdc++/107778
> >       * src/experimental/contract.cc (handle_contract_violation): Make
> >       output more readable.
> > ---
> > Heh, wouldn't be me if I forgot nothing.  Sorry about that.
> >
> > How's this?
> >
> >   libstdc++-v3/src/experimental/contract.cc | 50 ++++++++++++++++++-----
> >   1 file changed, 39 insertions(+), 11 deletions(-)
> >
> > diff --git a/libstdc++-v3/src/experimental/contract.cc b/libstdc++-v3/src/experimental/contract.cc
> > index c8d2697eddc..2d41a6326cf 100644
> > --- a/libstdc++-v3/src/experimental/contract.cc
> > +++ b/libstdc++-v3/src/experimental/contract.cc
> > @@ -1,4 +1,5 @@
> >   // -*- C++ -*- std::experimental::contract_violation and friends
> > +
> >   // Copyright (C) 2019-2022 Free Software Foundation, Inc.
> >   //
> >   // This file is part of GCC.
> > @@ -23,19 +24,46 @@
> >   // <http://www.gnu.org/licenses/>.
> >
> >   #include <experimental/contract>
> > -#include <iostream>
> > +#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
> > +# include <iostream>
> > +#endif
> >
> >   __attribute__ ((weak)) void
> >   handle_contract_violation (const std::experimental::contract_violation &violation)
> >   {
> > -  std::cerr << "default std::handle_contract_violation called: \n"
> > -    << " " << violation.file_name()
> > -    << " " << violation.line_number()
> > -    << " " << violation.function_name()
> > -    << " " << violation.comment()
> > -    << " " << violation.assertion_level()
> > -    << " " << violation.assertion_role()
> > -    << " " << (int)violation.continuation_mode()
> > -    << std::endl;
> > +#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
> > +  bool level_default_p = violation.assertion_level() == "default";
> > +  bool role_default_p = violation.assertion_role() == "default";
> > +  bool cont_mode_default_p = violation.continuation_mode()
> > +    == std::experimental::contract_violation_continuation_mode::never_continue;
> > +
> > +  const char* modes[]{ "off", "on" }; // Must match enumerators in header.
> > +  std::cerr << "contract violation in function " << violation.function_name()
> > +    << " at " << violation.file_name() << ':' << violation.line_number()
> > +    << ": " << violation.comment();
> > +
> > +  const char* delimiter = "\n[";
> > +
> > +  if (!level_default_p)
> > +    {
> > +      std::cerr << delimiter << "level:" << violation.assertion_level();
> > +      delimiter = ", ";
> > +    }
> > +  if (!role_default_p)
> > +    {
> > +      std::cerr << delimiter << "role:" << violation.assertion_role();
> > +      delimiter = ", ";
> > +    }
> > +  if (!cont_mode_default_p)
> > +    {
> > +      std::cerr << delimiter << "continue:"
> > +             << modes[(int)violation.continuation_mode() & 1];
> > +      delimiter = ", ";
> > +    }
> > +
> > +  if (delimiter[0] == ',')
> > +    std::cerr << ']';
> > +
> > +  std::cerr << std::endl;
> > +#endif
> >   }
> > -
>

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 3/3] contrib: Add dg-out-generator.pl
  2022-12-22 21:56               ` Arsen Arsenović
@ 2022-12-22 22:21                 ` Jason Merrill
  2022-12-22 22:56                   ` Arsen Arsenović
  0 siblings, 1 reply; 27+ messages in thread
From: Jason Merrill @ 2022-12-22 22:21 UTC (permalink / raw)
  To: Arsen Arsenović; +Cc: gcc-patches, jwakely, libstdc++

On 12/22/22 16:56, Arsen Arsenović wrote:
> Hi,
> 
> Jason Merrill <jason@redhat.com> writes:
>>> +    # Newlines should be more tolerant.
>>> +    s/\n$/(\\n|\\r\\n|\\r)*/;
>>
>> Isn't specifically handling \\r\\n redundant with the * operator?
> 
> To the extent of my knowledge, yes; I left that in since the original
> tests I was replacing with this script also used this terminator:
> 
> -// { dg-output "default std::handle_contract_violation called: .*.C 21 test<double>::fun .*(\n|\r\n|\r)*" }

Aha, I wonder why the original tests have the terminal *?  Testcases 
elsewhere in the testsuite that check for (\n|\r\n|\r) don't use *.  I 
think I'll drop the * from both the tests and the script.

Jason


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 3/3] contrib: Add dg-out-generator.pl
  2022-12-22 22:21                 ` Jason Merrill
@ 2022-12-22 22:56                   ` Arsen Arsenović
  0 siblings, 0 replies; 27+ messages in thread
From: Arsen Arsenović @ 2022-12-22 22:56 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches, jwakely, libstdc++

[-- Attachment #1: Type: text/plain, Size: 460 bytes --]


Jason Merrill <jason@redhat.com> writes:

> Aha, I wonder why the original tests have the terminal *?  Testcases elsewhere
> in the testsuite that check for (\n|\r\n|\r) don't use *.  I think I'll drop
> the * from both the tests and the script.
>
> Jason

Yep, that sounds reasonable.  I'm not sure why, the original handler
didn't emit double newlines or something either I don't think.

Thanks for handling that anyway.
-- 
Arsen Arsenović

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 381 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2022-12-22 22:57 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-10  9:42 [PATCH 0/4] c++: Small tweaks to contracts Arsen Arsenović
2022-12-10  9:43 ` [PATCH 1/4] contracts: Lowercase {MAYBE,NEVER}_CONTINUE Arsen Arsenović
2022-12-10 11:15   ` Jonathan Wakely
2022-12-15 16:25   ` Jason Merrill
2022-12-15 17:39     ` Arsen Arsenović
2022-12-20 17:16       ` Jason Merrill
2022-12-10  9:43 ` [PATCH 2/4] libstdc++: Improve output of default contract violation handler [PR107792] Arsen Arsenović
2022-12-15 16:28   ` Jason Merrill
2022-12-15 17:43     ` Arsen Arsenović
2022-12-20 10:49       ` [PATCH 1/3] " Arsen Arsenović
2022-12-20 10:49         ` [PATCH 2/3] contracts: Update testsuite against new default viol. handler format Arsen Arsenović
2022-12-20 10:49         ` [PATCH 3/3] contrib: Add dg-out-generator.pl Arsen Arsenović
2022-12-20 15:57           ` Jonathan Wakely
2022-12-20 17:23         ` [PATCH 1/3] libstdc++: Improve output of default contract violation handler [PR107792] Jason Merrill
2022-12-22 11:03           ` Arsen Arsenović
2022-12-22 21:40             ` Jason Merrill
2022-12-22 22:02               ` Jonathan Wakely
2022-12-22 11:03           ` [PATCH 2/3] contracts: Update testsuite against new default viol. handler format Arsen Arsenović
2022-12-22 11:03           ` [PATCH 3/3] contrib: Add dg-out-generator.pl Arsen Arsenović
2022-12-22 21:43             ` Jason Merrill
2022-12-22 21:56               ` Arsen Arsenović
2022-12-22 22:21                 ` Jason Merrill
2022-12-22 22:56                   ` Arsen Arsenović
2022-12-10  9:43 ` [PATCH 3/4] contracts: Update testsuite against new default viol. handler format Arsen Arsenović
2022-12-10  9:43 ` [PATCH 4/4] contrib: Add dg-out-generator.pl Arsen Arsenović
2022-12-15 16:30   ` Jason Merrill
2022-12-15 17:30     ` Arsen Arsenović

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).