Export of internal Abseil changes
-- 692d3df279e7592d01c1008cb85f2a010c3d17da by Abseil Team <absl-team@google.com>: Use EXPECT_DEATH_IF_SUPPORTED instead of raw EXPECT_DEATH. PiperOrigin-RevId: 307802196 -- ebc40936b677b79cad9f87f944794c35946f9dbd by Gennadiy Rozental <rogeeff@google.com>: Eliminate SetCallback from absl::Flag<T> public interface. We also make SetCallback on FlagRegistrar to return rvalue, so that we can add more tail calls after it. PiperOrigin-RevId: 307745935 GitOrigin-RevId: 15f69a9dae9c70c884ce85ca1a4bf359a2609db0 Change-Id: Ibec13463e44e4071c48fb12389f47e716cee7a9d
This commit is contained in:
parent
cb52b05ea2
commit
902909a430
11 changed files with 59 additions and 58 deletions
|
@ -1543,7 +1543,7 @@ TEST(Btree, MapAt) {
|
|||
#ifdef ABSL_HAVE_EXCEPTIONS
|
||||
EXPECT_THROW(map.at(3), std::out_of_range);
|
||||
#else
|
||||
EXPECT_DEATH(map.at(3), "absl::btree_map::at");
|
||||
EXPECT_DEATH_IF_SUPPORTED(map.at(3), "absl::btree_map::at");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -773,10 +773,10 @@ TEST(FixedArrayTest, AddressSanitizerAnnotations1) {
|
|||
int* raw = a.data();
|
||||
raw[0] = 0;
|
||||
raw[9] = 0;
|
||||
EXPECT_DEATH(raw[-2] = 0, "container-overflow");
|
||||
EXPECT_DEATH(raw[-1] = 0, "container-overflow");
|
||||
EXPECT_DEATH(raw[10] = 0, "container-overflow");
|
||||
EXPECT_DEATH(raw[31] = 0, "container-overflow");
|
||||
EXPECT_DEATH_IF_SUPPORTED(raw[-2] = 0, "container-overflow");
|
||||
EXPECT_DEATH_IF_SUPPORTED(raw[-1] = 0, "container-overflow");
|
||||
EXPECT_DEATH_IF_SUPPORTED(raw[10] = 0, "container-overflow");
|
||||
EXPECT_DEATH_IF_SUPPORTED(raw[31] = 0, "container-overflow");
|
||||
}
|
||||
|
||||
TEST(FixedArrayTest, AddressSanitizerAnnotations2) {
|
||||
|
@ -784,10 +784,10 @@ TEST(FixedArrayTest, AddressSanitizerAnnotations2) {
|
|||
char* raw = a.data();
|
||||
raw[0] = 0;
|
||||
raw[11] = 0;
|
||||
EXPECT_DEATH(raw[-7] = 0, "container-overflow");
|
||||
EXPECT_DEATH(raw[-1] = 0, "container-overflow");
|
||||
EXPECT_DEATH(raw[12] = 0, "container-overflow");
|
||||
EXPECT_DEATH(raw[17] = 0, "container-overflow");
|
||||
EXPECT_DEATH_IF_SUPPORTED(raw[-7] = 0, "container-overflow");
|
||||
EXPECT_DEATH_IF_SUPPORTED(raw[-1] = 0, "container-overflow");
|
||||
EXPECT_DEATH_IF_SUPPORTED(raw[12] = 0, "container-overflow");
|
||||
EXPECT_DEATH_IF_SUPPORTED(raw[17] = 0, "container-overflow");
|
||||
}
|
||||
|
||||
TEST(FixedArrayTest, AddressSanitizerAnnotations3) {
|
||||
|
@ -795,8 +795,8 @@ TEST(FixedArrayTest, AddressSanitizerAnnotations3) {
|
|||
uint64_t* raw = a.data();
|
||||
raw[0] = 0;
|
||||
raw[19] = 0;
|
||||
EXPECT_DEATH(raw[-1] = 0, "container-overflow");
|
||||
EXPECT_DEATH(raw[20] = 0, "container-overflow");
|
||||
EXPECT_DEATH_IF_SUPPORTED(raw[-1] = 0, "container-overflow");
|
||||
EXPECT_DEATH_IF_SUPPORTED(raw[20] = 0, "container-overflow");
|
||||
}
|
||||
|
||||
TEST(FixedArrayTest, AddressSanitizerAnnotations4) {
|
||||
|
@ -808,11 +808,11 @@ TEST(FixedArrayTest, AddressSanitizerAnnotations4) {
|
|||
// there is only a 8-byte red zone before the container range, so we only
|
||||
// access the last 4 bytes of the struct to make sure it stays within the red
|
||||
// zone.
|
||||
EXPECT_DEATH(raw[-1].z_ = 0, "container-overflow");
|
||||
EXPECT_DEATH(raw[10] = ThreeInts(), "container-overflow");
|
||||
EXPECT_DEATH_IF_SUPPORTED(raw[-1].z_ = 0, "container-overflow");
|
||||
EXPECT_DEATH_IF_SUPPORTED(raw[10] = ThreeInts(), "container-overflow");
|
||||
// The actual size of storage is kDefaultBytes=256, 21*12 = 252,
|
||||
// so reading raw[21] should still trigger the correct warning.
|
||||
EXPECT_DEATH(raw[21] = ThreeInts(), "container-overflow");
|
||||
EXPECT_DEATH_IF_SUPPORTED(raw[21] = ThreeInts(), "container-overflow");
|
||||
}
|
||||
#endif // ADDRESS_SANITIZER
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ TEST_P(FailureSignalHandlerDeathTest, AbslFailureSignal) {
|
|||
exit_regex);
|
||||
#else
|
||||
// Windows doesn't have testing::KilledBySignal().
|
||||
EXPECT_DEATH(InstallHandlerAndRaise(signo), exit_regex);
|
||||
EXPECT_DEATH_IF_SUPPORTED(InstallHandlerAndRaise(signo), exit_regex);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -107,8 +107,8 @@ TEST_P(FailureSignalHandlerDeathTest, AbslFatalSignalsWithWriterFn) {
|
|||
testing::KilledBySignal(signo), exit_regex);
|
||||
#else
|
||||
// Windows doesn't have testing::KilledBySignal().
|
||||
EXPECT_DEATH(InstallHandlerWithWriteToFileAndRaise(file.c_str(), signo),
|
||||
exit_regex);
|
||||
EXPECT_DEATH_IF_SUPPORTED(
|
||||
InstallHandlerWithWriteToFileAndRaise(file.c_str(), signo), exit_regex);
|
||||
#endif
|
||||
|
||||
// Open the file in this process and check its contents.
|
||||
|
|
|
@ -149,9 +149,6 @@ class Flag {
|
|||
}
|
||||
T Get() const { return GetImpl()->Get(); }
|
||||
void Set(const T& v) { GetImpl()->Set(v); }
|
||||
void SetCallback(const flags_internal::FlagCallbackFunc mutation_callback) {
|
||||
GetImpl()->SetCallback(mutation_callback);
|
||||
}
|
||||
void InvokeCallback() { GetImpl()->InvokeCallback(); }
|
||||
|
||||
// The data members are logically private, but they need to be public for
|
||||
|
|
|
@ -583,18 +583,21 @@ using FlagDeathTest = FlagTest;
|
|||
|
||||
TEST_F(FlagDeathTest, TestTypeMismatchValidations) {
|
||||
#if !defined(NDEBUG)
|
||||
EXPECT_DEATH(static_cast<void>(absl::GetFlag(FLAGS_mistyped_int_flag)),
|
||||
"Flag 'mistyped_int_flag' is defined as one type and declared "
|
||||
"as another");
|
||||
EXPECT_DEATH(static_cast<void>(absl::GetFlag(FLAGS_mistyped_string_flag)),
|
||||
"Flag 'mistyped_string_flag' is defined as one type and "
|
||||
"declared as another");
|
||||
EXPECT_DEATH_IF_SUPPORTED(
|
||||
static_cast<void>(absl::GetFlag(FLAGS_mistyped_int_flag)),
|
||||
"Flag 'mistyped_int_flag' is defined as one type and declared "
|
||||
"as another");
|
||||
EXPECT_DEATH_IF_SUPPORTED(
|
||||
static_cast<void>(absl::GetFlag(FLAGS_mistyped_string_flag)),
|
||||
"Flag 'mistyped_string_flag' is defined as one type and "
|
||||
"declared as another");
|
||||
#endif
|
||||
|
||||
EXPECT_DEATH(absl::SetFlag(&FLAGS_mistyped_int_flag, 1),
|
||||
"Flag 'mistyped_int_flag' is defined as one type and declared "
|
||||
"as another");
|
||||
EXPECT_DEATH(
|
||||
EXPECT_DEATH_IF_SUPPORTED(
|
||||
absl::SetFlag(&FLAGS_mistyped_int_flag, 1),
|
||||
"Flag 'mistyped_int_flag' is defined as one type and declared "
|
||||
"as another");
|
||||
EXPECT_DEATH_IF_SUPPORTED(
|
||||
absl::SetFlag(&FLAGS_mistyped_string_flag, std::vector<std::string>{}),
|
||||
"Flag 'mistyped_string_flag' is defined as one type and declared as "
|
||||
"another");
|
||||
|
|
|
@ -556,9 +556,6 @@ class Flag {
|
|||
impl_.AssertValidType(base_internal::FastTypeId<T>(), &GenRuntimeTypeId<T>);
|
||||
impl_.Write(&v);
|
||||
}
|
||||
void SetCallback(const FlagCallbackFunc mutation_callback) {
|
||||
impl_.SetCallback(mutation_callback);
|
||||
}
|
||||
|
||||
// CommandLineFlag interface
|
||||
absl::string_view Name() const { return impl_.Name(); }
|
||||
|
@ -651,8 +648,8 @@ class FlagRegistrar {
|
|||
if (do_register) flags_internal::RegisterCommandLineFlag(&flag_->impl_);
|
||||
}
|
||||
|
||||
FlagRegistrar& OnUpdate(FlagCallbackFunc cb) && {
|
||||
flag_->SetCallback(cb);
|
||||
FlagRegistrar OnUpdate(FlagCallbackFunc cb) && {
|
||||
flag_->impl_.SetCallback(cb);
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -103,8 +103,9 @@ TEST_F(UsageReportingDeathTest, TestSetProgramUsageMessage) {
|
|||
|
||||
#ifndef _WIN32
|
||||
// TODO(rogeeff): figure out why this does not work on Windows.
|
||||
EXPECT_DEATH(absl::SetProgramUsageMessage("custom usage message"),
|
||||
".*SetProgramUsageMessage\\(\\) called twice.*");
|
||||
EXPECT_DEATH_IF_SUPPORTED(
|
||||
absl::SetProgramUsageMessage("custom usage message"),
|
||||
".*SetProgramUsageMessage\\(\\) called twice.*");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -481,21 +481,22 @@ TEST_F(ParseDeathTest, TestUndefinedArg) {
|
|||
"testbin",
|
||||
"--undefined_flag",
|
||||
};
|
||||
EXPECT_DEATH(InvokeParse(in_args1),
|
||||
"Unknown command line flag 'undefined_flag'");
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args1),
|
||||
"Unknown command line flag 'undefined_flag'");
|
||||
|
||||
const char* in_args2[] = {
|
||||
"testbin",
|
||||
"--noprefixed_flag",
|
||||
};
|
||||
EXPECT_DEATH(InvokeParse(in_args2),
|
||||
"Unknown command line flag 'noprefixed_flag'");
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args2),
|
||||
"Unknown command line flag 'noprefixed_flag'");
|
||||
|
||||
const char* in_args3[] = {
|
||||
"testbin",
|
||||
"--Int_flag=1",
|
||||
};
|
||||
EXPECT_DEATH(InvokeParse(in_args3), "Unknown command line flag 'Int_flag'");
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args3),
|
||||
"Unknown command line flag 'Int_flag'");
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
@ -505,7 +506,7 @@ TEST_F(ParseDeathTest, TestInvalidBoolFlagFormat) {
|
|||
"testbin",
|
||||
"--bool_flag=",
|
||||
};
|
||||
EXPECT_DEATH(
|
||||
EXPECT_DEATH_IF_SUPPORTED(
|
||||
InvokeParse(in_args1),
|
||||
"Missing the value after assignment for the boolean flag 'bool_flag'");
|
||||
|
||||
|
@ -513,7 +514,7 @@ TEST_F(ParseDeathTest, TestInvalidBoolFlagFormat) {
|
|||
"testbin",
|
||||
"--nobool_flag=true",
|
||||
};
|
||||
EXPECT_DEATH(InvokeParse(in_args2),
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args2),
|
||||
"Negative form with assignment is not valid for the boolean "
|
||||
"flag 'bool_flag'");
|
||||
}
|
||||
|
@ -525,14 +526,14 @@ TEST_F(ParseDeathTest, TestInvalidNonBoolFlagFormat) {
|
|||
"testbin",
|
||||
"--nostring_flag",
|
||||
};
|
||||
EXPECT_DEATH(InvokeParse(in_args1),
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args1),
|
||||
"Negative form is not valid for the flag 'string_flag'");
|
||||
|
||||
const char* in_args2[] = {
|
||||
"testbin",
|
||||
"--int_flag",
|
||||
};
|
||||
EXPECT_DEATH(InvokeParse(in_args2),
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args2),
|
||||
"Missing the value for the flag 'int_flag'");
|
||||
}
|
||||
|
||||
|
@ -543,7 +544,7 @@ TEST_F(ParseDeathTest, TestInvalidUDTFlagFormat) {
|
|||
"testbin",
|
||||
"--udt_flag=1",
|
||||
};
|
||||
EXPECT_DEATH(InvokeParse(in_args1),
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args1),
|
||||
"Illegal value '1' specified for flag 'udt_flag'; Use values A, "
|
||||
"AAA instead");
|
||||
|
||||
|
@ -552,7 +553,7 @@ TEST_F(ParseDeathTest, TestInvalidUDTFlagFormat) {
|
|||
"--udt_flag",
|
||||
"AA",
|
||||
};
|
||||
EXPECT_DEATH(InvokeParse(in_args2),
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args2),
|
||||
"Illegal value 'AA' specified for flag 'udt_flag'; Use values "
|
||||
"A, AAA instead");
|
||||
}
|
||||
|
@ -658,7 +659,7 @@ TEST_F(ParseDeathTest, TestInvalidFlagfiles) {
|
|||
GetFlagfileFlag({{"parse_test.ff4",
|
||||
absl::MakeConstSpan(ff4_data)}}, &flagfile_flag),
|
||||
};
|
||||
EXPECT_DEATH(InvokeParse(in_args1),
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args1),
|
||||
"Unknown command line flag 'unknown_flag'");
|
||||
|
||||
constexpr const char* const ff5_data[] = {
|
||||
|
@ -670,7 +671,7 @@ TEST_F(ParseDeathTest, TestInvalidFlagfiles) {
|
|||
GetFlagfileFlag({{"parse_test.ff5",
|
||||
absl::MakeConstSpan(ff5_data)}}, &flagfile_flag),
|
||||
};
|
||||
EXPECT_DEATH(InvokeParse(in_args2),
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args2),
|
||||
"Unknown command line flag 'int_flag 10'");
|
||||
|
||||
constexpr const char* const ff6_data[] = {
|
||||
|
@ -682,14 +683,15 @@ TEST_F(ParseDeathTest, TestInvalidFlagfiles) {
|
|||
GetFlagfileFlag({{"parse_test.ff6", absl::MakeConstSpan(ff6_data)}},
|
||||
&flagfile_flag),
|
||||
};
|
||||
EXPECT_DEATH(InvokeParse(in_args3),
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args3),
|
||||
"Flagfile can't contain position arguments or --");
|
||||
|
||||
const char* in_args4[] = {
|
||||
"testbin",
|
||||
"--flagfile=invalid_flag_file",
|
||||
};
|
||||
EXPECT_DEATH(InvokeParse(in_args4), "Can't open flagfile invalid_flag_file");
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args4),
|
||||
"Can't open flagfile invalid_flag_file");
|
||||
|
||||
constexpr const char* const ff7_data[] = {
|
||||
"--int_flag=10",
|
||||
|
@ -702,7 +704,7 @@ TEST_F(ParseDeathTest, TestInvalidFlagfiles) {
|
|||
GetFlagfileFlag({{"parse_test.ff7", absl::MakeConstSpan(ff7_data)}},
|
||||
&flagfile_flag),
|
||||
};
|
||||
EXPECT_DEATH(InvokeParse(in_args5),
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args5),
|
||||
"Unexpected line in the flagfile .*: \\*bin\\*");
|
||||
}
|
||||
|
||||
|
@ -724,7 +726,7 @@ TEST_F(ParseTest, TestReadingRequiredFlagsFromEnv) {
|
|||
TEST_F(ParseDeathTest, TestReadingUnsetRequiredFlagsFromEnv) {
|
||||
const char* in_args1[] = {"testbin", "--fromenv=int_flag"};
|
||||
|
||||
EXPECT_DEATH(InvokeParse(in_args1),
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args1),
|
||||
"FLAGS_int_flag not found in environment");
|
||||
}
|
||||
|
||||
|
@ -735,7 +737,8 @@ TEST_F(ParseDeathTest, TestRecursiveFlagsFromEnv) {
|
|||
|
||||
ScopedSetEnv set_tryfromenv("FLAGS_tryfromenv", "int_flag");
|
||||
|
||||
EXPECT_DEATH(InvokeParse(in_args1), "Infinite recursion on flag tryfromenv");
|
||||
EXPECT_DEATH_IF_SUPPORTED(InvokeParse(in_args1),
|
||||
"Infinite recursion on flag tryfromenv");
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
|
|
@ -544,7 +544,6 @@ absl_cc_library(
|
|||
COPTS
|
||||
${ABSL_DEFAULT_COPTS}
|
||||
DEPS
|
||||
absl::strings_internal
|
||||
absl::base
|
||||
absl::base_internal
|
||||
absl::core_headers
|
||||
|
@ -555,6 +554,7 @@ absl_cc_library(
|
|||
absl::optional
|
||||
absl::raw_logging_internal
|
||||
absl::strings
|
||||
absl::strings_internal
|
||||
absl::type_traits
|
||||
PUBLIC
|
||||
)
|
||||
|
|
|
@ -1051,7 +1051,7 @@ TEST(optionalTest, Value) {
|
|||
#ifdef ABSL_HAVE_EXCEPTIONS
|
||||
EXPECT_THROW((void)empty.value(), absl::bad_optional_access);
|
||||
#else
|
||||
EXPECT_DEATH((void)empty.value(), "Bad optional access");
|
||||
EXPECT_DEATH_IF_SUPPORTED((void)empty.value(), "Bad optional access");
|
||||
#endif
|
||||
|
||||
// test constexpr value()
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
#else
|
||||
|
||||
#define ABSL_VARIANT_TEST_EXPECT_FAIL(expr, exception_t, text) \
|
||||
EXPECT_DEATH(expr, text)
|
||||
EXPECT_DEATH_IF_SUPPORTED(expr, text)
|
||||
|
||||
#endif // ABSL_HAVE_EXCEPTIONS
|
||||
|
||||
|
|
Loading…
Reference in a new issue