From: Jonathan Wakely <jwak...@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