Reject TF_XLA_FLAGS if any entries are not recognized.
Previously, we'd silently ignore unrecognized flags. PiperOrigin-RevId: 219226600
This commit is contained in:
parent
43fa3ee96e
commit
e0af1577de
@ -174,6 +174,16 @@ bool ParseFlagsFromEnv(const std::vector<tensorflow::Flag>& flag_list) {
|
|||||||
SetArgvFromEnv(env_argv); // a no-op if already initialized
|
SetArgvFromEnv(env_argv); // a no-op if already initialized
|
||||||
bool result =
|
bool result =
|
||||||
tensorflow::Flags::Parse(&env_argv->argc, &env_argv->argv[0], flag_list);
|
tensorflow::Flags::Parse(&env_argv->argc, &env_argv->argv[0], flag_list);
|
||||||
|
|
||||||
|
// Fail if any flags were not recognized, ignoring argv[0], which
|
||||||
|
// SetArgvFromEnv ensures is always present.
|
||||||
|
if (result && env_argv->argc > 1) {
|
||||||
|
result = false;
|
||||||
|
for (int64 i = 1; i < env_argv->argc; ++i) {
|
||||||
|
LOG(ERROR) << "Unrecognized TF_XLA_FLAGS flag: " << env_argv->argv[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
env_argv_mu.unlock();
|
env_argv_mu.unlock();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -40,19 +40,6 @@ static void TestParseFlagsFromEnv(const char* msg) {
|
|||||||
std::vector<char*>* pargv;
|
std::vector<char*>* pargv;
|
||||||
ResetFlagsFromEnvForTesting(&pargc, &pargv);
|
ResetFlagsFromEnvForTesting(&pargc, &pargv);
|
||||||
|
|
||||||
// Ensure that environment variable can be parsed when
|
|
||||||
// no flags are expected.
|
|
||||||
std::vector<tensorflow::Flag> empty_flag_list;
|
|
||||||
bool parsed_ok = ParseFlagsFromEnv(empty_flag_list);
|
|
||||||
CHECK(parsed_ok) << msg;
|
|
||||||
const std::vector<char*>& argv_first = *pargv;
|
|
||||||
CHECK_NE(argv_first[0], nullptr) << msg;
|
|
||||||
int i = 0;
|
|
||||||
while (argv_first[i] != nullptr) {
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
CHECK_EQ(i, *pargc) << msg;
|
|
||||||
|
|
||||||
// Check that actual flags can be parsed.
|
// Check that actual flags can be parsed.
|
||||||
bool simple = false;
|
bool simple = false;
|
||||||
string with_value;
|
string with_value;
|
||||||
@ -66,7 +53,7 @@ static void TestParseFlagsFromEnv(const char* msg) {
|
|||||||
tensorflow::Flag("single_quoted", &single_quoted, ""),
|
tensorflow::Flag("single_quoted", &single_quoted, ""),
|
||||||
tensorflow::Flag("double_quoted", &double_quoted, ""),
|
tensorflow::Flag("double_quoted", &double_quoted, ""),
|
||||||
};
|
};
|
||||||
parsed_ok = ParseFlagsFromEnv(flag_list);
|
bool parsed_ok = ParseFlagsFromEnv(flag_list);
|
||||||
CHECK_EQ(*pargc, 1) << msg;
|
CHECK_EQ(*pargc, 1) << msg;
|
||||||
const std::vector<char*>& argv_second = *pargv;
|
const std::vector<char*>& argv_second = *pargv;
|
||||||
CHECK_NE(argv_second[0], nullptr) << msg;
|
CHECK_NE(argv_second[0], nullptr) << msg;
|
||||||
@ -94,6 +81,21 @@ TEST(ParseFlagsFromEnv, Basic) {
|
|||||||
TestParseFlagsFromEnv("(flags in environment variable)");
|
TestParseFlagsFromEnv("(flags in environment variable)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test that the environent variable is parsed correctly.
|
||||||
|
TEST(ParseFlagsFromEnv, UnrecognizedFlag) {
|
||||||
|
// Prepare environment.
|
||||||
|
setenv("TF_XLA_FLAGS", "--simple=xyz --foobar", true /*overwrite*/);
|
||||||
|
int* pargc;
|
||||||
|
std::vector<char*>* pargv;
|
||||||
|
ResetFlagsFromEnvForTesting(&pargc, &pargv);
|
||||||
|
|
||||||
|
string simple;
|
||||||
|
std::vector<tensorflow::Flag> flag_list = {
|
||||||
|
tensorflow::Flag("simple", &simple, ""),
|
||||||
|
};
|
||||||
|
EXPECT_FALSE(ParseFlagsFromEnv(flag_list));
|
||||||
|
}
|
||||||
|
|
||||||
// Test that a file named by the environent variable is parsed correctly.
|
// Test that a file named by the environent variable is parsed correctly.
|
||||||
TEST(ParseFlagsFromEnv, File) {
|
TEST(ParseFlagsFromEnv, File) {
|
||||||
// environment variables where tmp dir may be specified.
|
// environment variables where tmp dir may be specified.
|
||||||
|
Loading…
Reference in New Issue
Block a user