diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -2901,10 +2901,6 @@ } FormatStyle Style = getLLVMStyle(guessLanguage(FileName, Code)); - FormatStyle FallbackStyle = getNoStyle(); - if (!getPredefinedStyle(FallbackStyleName, Style.Language, &FallbackStyle)) - return make_string_error("Invalid fallback style \"" + FallbackStyleName); - if (StyleName.startswith("{")) { // Parse YAML/JSON style from the command line. if (std::error_code ec = parseConfiguration( @@ -2974,6 +2970,10 @@ return make_string_error("Configuration file(s) do(es) not support " + getLanguageName(Style.Language) + ": " + UnsuitableConfigFiles); + + FormatStyle FallbackStyle = getNoStyle(); + if (!getPredefinedStyle(FallbackStyleName, Style.Language, &FallbackStyle)) + return make_string_error("Invalid fallback style \"" + FallbackStyleName); return FallbackStyle; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -17861,11 +17861,17 @@ ASSERT_TRUE((bool)Style3); ASSERT_EQ(*Style3, getGoogleStyle()); - // Test 4: error on invalid fallback style + // Test 4.1: error on invalid fallback style auto Style4 = getStyle("file", "a.h", "KungFu", "", &FS); ASSERT_FALSE((bool)Style4); llvm::consumeError(Style4.takeError()); + // Test 4.2: don't error on invalid fallback style, if it is not going to be + // used. + Style4 = getStyle("file", "/a/a.h", "KungFu", "", &FS); + ASSERT_TRUE((bool)Style4); + ASSERT_EQ(*Style4, getLLVMStyle()); + // Test 5: error on invalid yaml on command line auto Style5 = getStyle("{invalid_key=invalid_value}", "a.h", "LLVM", "", &FS); ASSERT_FALSE((bool)Style5);