diff --git a/tensorflow/compiler/xla/legacy_flags/parse_flags_from_env.cc b/tensorflow/compiler/xla/legacy_flags/parse_flags_from_env.cc index 2a4e49b05aa..bf75fb24a56 100644 --- a/tensorflow/compiler/xla/legacy_flags/parse_flags_from_env.cc +++ b/tensorflow/compiler/xla/legacy_flags/parse_flags_from_env.cc @@ -174,6 +174,16 @@ bool ParseFlagsFromEnv(const std::vector& flag_list) { SetArgvFromEnv(env_argv); // a no-op if already initialized bool result = 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(); return result; } diff --git a/tensorflow/compiler/xla/legacy_flags/parse_flags_from_env_test.cc b/tensorflow/compiler/xla/legacy_flags/parse_flags_from_env_test.cc index 138c0c852e2..ba888b1bdca 100644 --- a/tensorflow/compiler/xla/legacy_flags/parse_flags_from_env_test.cc +++ b/tensorflow/compiler/xla/legacy_flags/parse_flags_from_env_test.cc @@ -40,19 +40,6 @@ static void TestParseFlagsFromEnv(const char* msg) { std::vector* pargv; ResetFlagsFromEnvForTesting(&pargc, &pargv); - // Ensure that environment variable can be parsed when - // no flags are expected. - std::vector empty_flag_list; - bool parsed_ok = ParseFlagsFromEnv(empty_flag_list); - CHECK(parsed_ok) << msg; - const std::vector& 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. bool simple = false; string with_value; @@ -66,7 +53,7 @@ static void TestParseFlagsFromEnv(const char* msg) { tensorflow::Flag("single_quoted", &single_quoted, ""), tensorflow::Flag("double_quoted", &double_quoted, ""), }; - parsed_ok = ParseFlagsFromEnv(flag_list); + bool parsed_ok = ParseFlagsFromEnv(flag_list); CHECK_EQ(*pargc, 1) << msg; const std::vector& argv_second = *pargv; CHECK_NE(argv_second[0], nullptr) << msg; @@ -94,6 +81,21 @@ TEST(ParseFlagsFromEnv, Basic) { 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* pargv; + ResetFlagsFromEnvForTesting(&pargc, &pargv); + + string simple; + std::vector flag_list = { + tensorflow::Flag("simple", &simple, ""), + }; + EXPECT_FALSE(ParseFlagsFromEnv(flag_list)); +} + // Test that a file named by the environent variable is parsed correctly. TEST(ParseFlagsFromEnv, File) { // environment variables where tmp dir may be specified.