libstdc++: [_GLIBCXX_INLINE_VERSION] Add handle_contract_violation
symbol alias
libstdc++-v3/ChangeLog:
* src/experimental/contract.cc
[_GLIBCXX_INLINE_VERSION](handle_contract_violation): Provide
symbol alias
without version namespace decoration for gcc.
Here is what I'm testing eventually, ok to commit if successful ?
François
On 20/09/2023 11:32, Jonathan Wakely wrote:
On Wed, 20 Sept 2023 at 05:51, François Dumont via Libstdc++
<libstd...@gcc.gnu.org> wrote:
libstdc++: Remove std::constract_violation from versioned namespace
Spelling mistake in contract_violation, and it's not
std::contract_violation, it's std::experimental::contract_violation
GCC expects this type to be in std namespace directly.
Again, it's in std::experimental not in std directly.
Will this change cause problems when including another experimental
header, which does put experimental below std::__8?
I think std::__8::experimental and std::experimental will become ambiguous.
Maybe we do want to remove the inline __8 namespace from all
experimental headers. That needs a bit more thought though.
libstdc++-v3/ChangeLog:
* include/experimental/contract:
Remove _GLIBCXX_BEGIN_NAMESPACE_VERSION/_GLIBCXX_END_NAMESPACE_VERSION.
This line is too long for the changelog.
It does fix 29 g++.dg/contracts in gcc testsuite.
Ok to commit ?
François
diff --git a/libstdc++-v3/src/experimental/contract.cc b/libstdc++-v3/src/experimental/contract.cc
index 504a6c041f1..17daa3312ca 100644
--- a/libstdc++-v3/src/experimental/contract.cc
+++ b/libstdc++-v3/src/experimental/contract.cc
@@ -67,3 +67,14 @@ handle_contract_violation (const std::experimental::contract_violation &violatio
std::cerr << std::endl;
#endif
}
+
+#if _GLIBCXX_INLINE_VERSION
+// Provide symbol alias without version namespace decoration for gcc.
+extern "C"
+void _Z25handle_contract_violationRKNSt12experimental18contract_violationE
+(const std::experimental::contract_violation &violation)
+__attribute__ (
+(alias
+ ("_Z25handle_contract_violationRKNSt3__812experimental18contract_violationE"),
+ weak));
+#endif