From: Tomasz Kamiński Date: Wed, 7 Jan 2026 16:24:55 +0000 (+0100) Subject: libstdc++: Use tree-dump-gimple in variant constant init tests. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5513935f48e50e97c854b746e758842c846a7740;p=thirdparty%2Fgcc.git libstdc++: Use tree-dump-gimple in variant constant init tests. Use of scan-assembler-dem for matching against debug symbols, turned out to not be portable, as they representation in assembly output differs between platforms: arm use 60 columns limit, emitting multiple rows, and some platforms may encode them using base64. We use tree-dump-gimple instead, that outputs a constructor name portably, allowing us to simply match for invocation of constructor for given type, as each variable has different type. To use scan-tree-dump(-not) we load scantree.exp file and it's dependency scandump.exp from gcc/testsuite/lib. libstdc++-v3/ChangeLog: * testsuite/20_util/variant/constinit.cc: Use scan-tree-dump for matching of constructor. * testsuite/20_util/variant/constinit_compat.cc: Likewise. * testsuite/lib/libstdc++.exp: Load scantree.exp and scandump.exp. Reviewed-by: Jonathan Wakely Signed-off-by: Tomasz Kamiński --- diff --git a/libstdc++-v3/testsuite/20_util/variant/constinit.cc b/libstdc++-v3/testsuite/20_util/variant/constinit.cc index 48d647b1006..821e2de9821 100644 --- a/libstdc++-v3/testsuite/20_util/variant/constinit.cc +++ b/libstdc++-v3/testsuite/20_util/variant/constinit.cc @@ -1,3 +1,4 @@ +// { dg-options "-fdump-tree-gimple" } // { dg-do compile { target c++17 } } #include @@ -21,20 +22,20 @@ struct NonTrivialEmpty }; std::variant vNonEmpty(std::in_place_type); -// { dg-final { scan-assembler-dem-not "(std::in_place_type_t)" } } +// { dg-final { scan-tree-dump-not "std::variant::variant" "gimple" } } std::variant vNonTrivial(std::in_place_type); -// { dg-final { scan-assembler-dem-not "(std::in_place_type_t)" } } +// { dg-final { scan-tree-dump-not "std::variant::variant" "gimple" } } std::variant vNonTrivialNonConstexpr(std::in_place_index<1>, 2); -// { dg-final { scan-assembler-dem "(std::in_place_index_t<1ul?>, int&&)" } } +// { dg-final { scan-tree-dump "std::variant::variant" "gimple" } } std::variant vTrivialEmpty(std::in_place_type); -// { dg-final { scan-assembler-dem-not "(std::in_place_type_t)" } } +// { dg-final { scan-tree-dump-not "std::variant::variant" "gimple" } } std::variant vNonTrivialEmpty(std::in_place_type); -// { dg-final { scan-assembler-dem-not "(std::in_place_type_t)" } } +// { dg-final { scan-tree-dump-not "std::variant::variant" "gimple" } } std::variant vNonTrivialEmptyNonConstexpr(std::in_place_index<1>, 2.0); -// { dg-final { scan-assembler-dem "(std::in_place_index_t<1ul?>, double&&)" } } +// { dg-final { scan-tree-dump "std::variant::variant" "gimple" } } diff --git a/libstdc++-v3/testsuite/20_util/variant/constinit_compat.cc b/libstdc++-v3/testsuite/20_util/variant/constinit_compat.cc index 374861728ae..d930f7fad80 100644 --- a/libstdc++-v3/testsuite/20_util/variant/constinit_compat.cc +++ b/libstdc++-v3/testsuite/20_util/variant/constinit_compat.cc @@ -1,4 +1,4 @@ -// { dg-options "-D_GLIBCXX_USE_VARIANT_CXX17_OLD_ABI" } +// { dg-options "-fdump-tree-gimple -D_GLIBCXX_USE_VARIANT_CXX17_OLD_ABI" } // { dg-do compile { target c++17 } } #include @@ -22,22 +22,21 @@ struct NonTrivialEmpty }; std::variant vNonEmpty(std::in_place_type); -// { dg-final { scan-assembler-dem-not "(std::in_place_type_t)" } } +// { dg-final { scan-tree-dump-not "std::variant::variant" "gimple" } } std::variant vNonTrivial(std::in_place_type); -// { dg-final { scan-assembler-dem "(std::in_place_type_t)" { target { ! c++20 } } } } -// { dg-final { scan-assembler-dem-not "(std::in_place_type_t)" { target c++20 } } } +// { dg-final { scan-tree-dump "std::variant::variant" "gimple" { target { ! c++20 } } } } +// { dg-final { scan-tree-dump-not "std::variant::variant" "gimple" { target c++20 } } } std::variant vNonTrivialNonConstexpr(std::in_place_index<1>, 2); -// { dg-final { scan-assembler-dem "(std::in_place_index_t<1ul?>, int&&)" } } +// { dg-final { scan-tree-dump "std::variant::variant" "gimple" } } std::variant vTrivialEmpty(std::in_place_type); -// { dg-final { scan-assembler-dem-not "(std::in_place_type_t)" } } +// { dg-final { scan-tree-dump-not "std::variant::variant" "gimple" } } std::variant vNonTrivialEmpty(std::in_place_type); -// { dg-final { scan-assembler-dem "(std::in_place_type_t)" { target { ! c++20 } } } } -// { dg-final { scan-assembler-dem-not "(std::in_place_type_t)" { target c++20 } } } +// { dg-final { scan-tree-dump "std::variant::variant" "gimple" { target { ! c++20 } } } } +// { dg-final { scan-tree-dump-not "std::variant::variant" "gimple" { target c++20 } } } std::variant vNonTrivialEmptyNonConstexpr(std::in_place_index<1>, 2.0); -// { dg-final { scan-assembler-dem "(std::in_place_index_t<1ul?>, double&&)" } } - +// { dg-final { scan-tree-dump "std::variant::variant" "gimple" } } diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp index 87c4b0a5c94..67c47549963 100644 --- a/libstdc++-v3/testsuite/lib/libstdc++.exp +++ b/libstdc++-v3/testsuite/lib/libstdc++.exp @@ -68,6 +68,8 @@ load_gcc_lib target-supports-dg.exp load_lib prune.exp load_lib dg-options.exp load_gcc_lib scanasm.exp +load_gcc_lib scandump.exp +load_gcc_lib scantree.exp load_gcc_lib target-libpath.exp load_gcc_lib timeout.exp load_gcc_lib timeout-dg.exp