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 limits output rows to 60 columns, emitting multiple rows, and some platforms
may encode them using base64.

We use tree-dump-gimple output 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.
---
Tested variant/constinit* locally in all standard modes, and x86_64 and
-m 32 linux locally. OK for trunk?

 .../testsuite/20_util/variant/constinit.cc    | 13 +++++++------
 .../20_util/variant/constinit_compat.cc       | 19 +++++++++----------
 libstdc++-v3/testsuite/lib/libstdc++.exp      |  2 ++
 3 files changed, 18 insertions(+), 16 deletions(-)

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 <variant>
@@ -21,20 +22,20 @@ struct NonTrivialEmpty
 };
 
 std::variant<NonEmpty> vNonEmpty(std::in_place_type<NonEmpty>);
-// { dg-final { scan-assembler-dem-not "(std::in_place_type_t<NonEmpty>)" } }
+// { dg-final { scan-tree-dump-not "std::variant<NonEmpty>::variant" "gimple" 
} }
 
 std::variant<NonTrivial> vNonTrivial(std::in_place_type<NonTrivial>);
-// { dg-final { scan-assembler-dem-not "(std::in_place_type_t<NonTrivial>)" } }
+// { dg-final { scan-tree-dump-not "std::variant<NonTrivial>::variant" 
"gimple" } }
 
 std::variant<int, NonTrivial> 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<int, NonTrivial>::variant" 
"gimple" } }
 
 std::variant<TrivialEmpty> vTrivialEmpty(std::in_place_type<TrivialEmpty>);
-// { dg-final { scan-assembler-dem-not "(std::in_place_type_t<TrivialEmpty>)" 
} }
+// { dg-final { scan-tree-dump-not "std::variant<TrivialEmpty>::variant" 
"gimple" } }
 
 std::variant<NonTrivialEmpty> 
vNonTrivialEmpty(std::in_place_type<NonTrivialEmpty>);
-// { dg-final { scan-assembler-dem-not 
"(std::in_place_type_t<NonTrivialEmpty>)" } }
+// { dg-final { scan-tree-dump-not "std::variant<NonTrivialEmpty>::variant" 
"gimple" } }
 
 std::variant<int, NonTrivialEmpty> 
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<int, NonTrivialEmpty>::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 <variant>
@@ -22,22 +22,21 @@ struct NonTrivialEmpty
 };
 
 std::variant<NonEmpty> vNonEmpty(std::in_place_type<NonEmpty>);
-// { dg-final { scan-assembler-dem-not "(std::in_place_type_t<NonEmpty>)" } }
+// { dg-final { scan-tree-dump-not "std::variant<NonEmpty>::variant" "gimple" 
} }
 
 std::variant<NonTrivial> vNonTrivial(std::in_place_type<NonTrivial>);
-// { dg-final { scan-assembler-dem "(std::in_place_type_t<NonTrivial>)" { 
target { ! c++20 } } } }
-// { dg-final { scan-assembler-dem-not "(std::in_place_type_t<NonTrivial>)" { 
target c++20 } } }
+// { dg-final { scan-tree-dump "std::variant<NonTrivial>::variant" "gimple" { 
target { ! c++20 } } } }
+// { dg-final { scan-tree-dump-not "std::variant<NonTrivial>::variant" 
"gimple" { target c++20 } } }
 
 std::variant<int, NonTrivial> 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<int, NonTrivial>::variant" 
"gimple" } }
 
 std::variant<TrivialEmpty> vTrivialEmpty(std::in_place_type<TrivialEmpty>);
-// { dg-final { scan-assembler-dem-not "(std::in_place_type_t<TrivialEmpty>)" 
} }
+// { dg-final { scan-tree-dump-not "std::variant<TrivialEmpty>::variant" 
"gimple" } }
 
 std::variant<NonTrivialEmpty> 
vNonTrivialEmpty(std::in_place_type<NonTrivialEmpty>);
-// { dg-final { scan-assembler-dem "(std::in_place_type_t<NonTrivialEmpty>)" { 
target { ! c++20 } } } }
-// { dg-final { scan-assembler-dem-not 
"(std::in_place_type_t<NonTrivialEmpty>)" { target c++20 } } }
+// { dg-final { scan-tree-dump "std::variant<NonTrivialEmpty>::variant" 
"gimple" { target { ! c++20 } } } }
+// { dg-final { scan-tree-dump-not "std::variant<NonTrivialEmpty>::variant" 
"gimple" { target c++20 } } }
 
 std::variant<int, NonTrivialEmpty> 
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<int, NonTrivialEmpty>::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
-- 
2.52.0

Reply via email to