mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 03:47:02 -05:00
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 <jwakely@redhat.com> Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
This commit is contained in:
@@ -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" } }
|
||||
|
||||
|
||||
@@ -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" } }
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user