diff --git a/src/sim/guest_abi.hh b/src/sim/guest_abi.hh index 5432af3f92..9726c49db6 100644 --- a/src/sim/guest_abi.hh +++ b/src/sim/guest_abi.hh @@ -284,6 +284,12 @@ class VarArgs } }; +template +struct IsVarArgs : public std::false_type {}; + +template +struct IsVarArgs> : public std::true_type {}; + template std::ostream & operator << (std::ostream &os, const VarArgs &va) diff --git a/src/sim/guest_abi.test.cc b/src/sim/guest_abi.test.cc index 506163ee65..bd444aa321 100644 --- a/src/sim/guest_abi.test.cc +++ b/src/sim/guest_abi.test.cc @@ -362,3 +362,14 @@ TEST(GuestABI, dumpSimcall) std::string dump = dumpSimcall("test", &tc, testIntVoid); EXPECT_EQ(dump, "test(0, 11, 2, 13, ...)"); } + +TEST(GuestABI, isVarArgs) +{ + EXPECT_TRUE(GuestABI::IsVarArgs>::value); + EXPECT_FALSE(GuestABI::IsVarArgs::value); + EXPECT_FALSE(GuestABI::IsVarArgs::value); + struct FooStruct {}; + EXPECT_FALSE(GuestABI::IsVarArgs::value); + union FooUnion {}; + EXPECT_FALSE(GuestABI::IsVarArgs::value); +}