Fix landed in r325722. On Wed, Feb 21, 2018 at 1:53 PM Ben Hamilton <benhamil...@google.com> wrote:
> Thanks for the report, and sorry for the breakage. > > Here's the fix: https://reviews.llvm.org/D43590 > > Ben > > On Wed, Feb 21, 2018 at 1:47 PM <douglas.y...@sony.com> wrote: > >> Hi Ben, >> >> Your change is causing a test failure on one of the bots, can you take a >> look? >> >> >> http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/builds/25515 >> >> FAIL: Clang Tools :: clang-apply-replacements/format.cpp (12526 of 38114) >> ******************** TEST 'Clang Tools :: >> clang-apply-replacements/format.cpp' FAILED ******************** >> Script: >> -- >> mkdir -p >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format >> grep -Ev "// *[A-Z-]+:" >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/clang/tools/extra/test/clang-apply-replacements/Inputs/format/yes.cpp >> > >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format/yes.cpp >> grep -Ev "// *[A-Z-]+:" >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/clang/tools/extra/test/clang-apply-replacements/Inputs/format/no.cpp >> > >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format/no.cpp >> sed >> "s#\$(path)#/home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format#" >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/clang/tools/extra/test/clang-apply-replacements/Inputs/format/yes.yaml >> > >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format/yes.yaml >> sed >> "s#\$(path)#/home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format#" >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/clang/tools/extra/test/clang-apply-replacements/Inputs/format/no.yaml >> > >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format/no.yaml >> clang-apply-replacements -format >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format >> FileCheck --strict-whitespace >> -input-file=/home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format/yes.cpp >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/clang/tools/extra/test/clang-apply-replacements/Inputs/format/yes.cpp >> FileCheck --strict-whitespace >> -input-file=/home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format/no.cpp >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/clang/tools/extra/test/clang-apply-replacements/Inputs/format/no.cpp >> -- >> Exit Code: 134 >> >> Command Output (stderr): >> -- >> clang-apply-replacements: >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/clang/lib/Basic/SourceManager.cpp:393: >> const clang::SrcMgr::ContentCache >> *clang::SourceManager::getOrCreateContentCache(const clang::FileEntry *, >> bool): Assertion `FileEnt && "Didn't specify a file entry to use?"' failed. >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/format.cpp.script: >> line 8: 49680 Aborted (core dumped) >> clang-apply-replacements -format >> /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format >> >> -- >> >> ******************** >> >> Douglas Yung >> >> >> > -----Original Message----- >> > From: cfe-commits [mailto:cfe-commits-boun...@lists.llvm.org] On >> Behalf Of Ben >> > Hamilton via cfe-commits >> > Sent: Wednesday, February 21, 2018 7:55 >> > To: cfe-commits@lists.llvm.org >> > Subject: r325691 - [clang-format] New API guessLanguage() >> > >> > Author: benhamilton >> > Date: Wed Feb 21 07:54:31 2018 >> > New Revision: 325691 >> > >> > URL: http://llvm.org/viewvc/llvm-project?rev=325691&view=rev >> > Log: >> > [clang-format] New API guessLanguage() >> > >> > Summary: >> > For clients which don't have a filesystem, calling getStyle() doesn't >> make >> > much sense (there's no .clang-format files to search for). >> > >> > In this diff, I hoist out the language-guessing logic from getStyle() >> and move >> > it into a new API guessLanguage(). >> > >> > I also added support for guessing the language of files which have no >> > extension (they could be C++ or ObjC). >> > >> > Test Plan: New tests added. Ran tests with: >> > % make -j12 FormatTests && ./tools/clang/unittests/Format/FormatTests >> > >> > Reviewers: jolesiak, krasimir >> > >> > Reviewed By: jolesiak, krasimir >> > >> > Subscribers: klimek, cfe-commits, sammccall >> > >> > Differential Revision: https://reviews.llvm.org/D43522 >> > >> > Modified: >> > cfe/trunk/include/clang/Format/Format.h >> > cfe/trunk/lib/Format/Format.cpp >> > cfe/trunk/unittests/Format/FormatTest.cpp >> > >> > Modified: cfe/trunk/include/clang/Format/Format.h >> > URL: http://llvm.org/viewvc/llvm- >> > >> project/cfe/trunk/include/clang/Format/Format.h?rev=325691&r1=325690&r2=325691 >> > &view=diff >> > >> ============================================================================== >> > --- cfe/trunk/include/clang/Format/Format.h (original) >> > +++ cfe/trunk/include/clang/Format/Format.h Wed Feb 21 07:54:31 2018 >> > @@ -1981,6 +1981,10 @@ llvm::Expected<FormatStyle> getStyle(Str >> > StringRef Code = "", >> > vfs::FileSystem *FS = nullptr); >> > >> > +// \brief Guesses the language from the ``FileName`` and ``Code`` to be >> > formatted. >> > +// Defaults to FormatStyle::LK_Cpp. >> > +FormatStyle::LanguageKind guessLanguage(StringRef FileName, StringRef >> > +Code); >> > + >> > // \brief Returns a string representation of ``Language``. >> > inline StringRef getLanguageName(FormatStyle::LanguageKind Language) { >> > switch (Language) { >> > >> > Modified: cfe/trunk/lib/Format/Format.cpp >> > URL: http://llvm.org/viewvc/llvm- >> > >> project/cfe/trunk/lib/Format/Format.cpp?rev=325691&r1=325690&r2=325691&view=di >> > ff >> > >> ============================================================================== >> > --- cfe/trunk/lib/Format/Format.cpp (original) >> > +++ cfe/trunk/lib/Format/Format.cpp Wed Feb 21 07:54:31 2018 >> > @@ -2294,6 +2294,25 @@ static FormatStyle::LanguageKind getLang >> > return FormatStyle::LK_Cpp; >> > } >> > >> > +FormatStyle::LanguageKind guessLanguage(StringRef FileName, StringRef >> > +Code) { >> > + FormatStyle::LanguageKind result = getLanguageByFileName(FileName); >> > + if (result == FormatStyle::LK_Cpp) { >> > + auto extension = llvm::sys::path::extension(FileName); >> > + // If there's no file extension (or it's .h), we need to check the >> > contents >> > + // of the code to see if it contains Objective-C. >> > + if (extension.empty() || extension == ".h") { >> > + std::unique_ptr<Environment> Env = >> > + Environment::CreateVirtualEnvironment(Code, FileName, >> > /*Ranges=*/{}); >> > + ObjCHeaderStyleGuesser Guesser(*Env, getLLVMStyle()); >> > + Guesser.process(); >> > + if (Guesser.isObjC()) { >> > + result = FormatStyle::LK_ObjC; >> > + } >> > + } >> > + } >> > + return result; >> > +} >> > + >> > llvm::Expected<FormatStyle> getStyle(StringRef StyleName, StringRef >> FileName, >> > StringRef FallbackStyleName, >> > StringRef Code, vfs::FileSystem >> *FS) { >> > @@ -2301,17 +2320,7 @@ llvm::Expected<FormatStyle> getStyle(Str >> > FS = vfs::getRealFileSystem().get(); >> > } >> > FormatStyle Style = getLLVMStyle(); >> > - Style.Language = getLanguageByFileName(FileName); >> > - >> > - if (Style.Language == FormatStyle::LK_Cpp && >> FileName.endswith(".h")) { >> > - std::unique_ptr<Environment> Env = >> > - Environment::CreateVirtualEnvironment(Code, FileName, >> /*Ranges=*/{}); >> > - ObjCHeaderStyleGuesser Guesser(*Env, Style); >> > - Guesser.process(); >> > - if (Guesser.isObjC()) { >> > - Style.Language = FormatStyle::LK_ObjC; >> > - } >> > - } >> > + Style.Language = guessLanguage(FileName, Code); >> > >> > FormatStyle FallbackStyle = getNoStyle(); >> > if (!getPredefinedStyle(FallbackStyleName, Style.Language, >> &FallbackStyle)) >> > >> > Modified: cfe/trunk/unittests/Format/FormatTest.cpp >> > URL: http://llvm.org/viewvc/llvm- >> > >> project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=325691&r1=325690&r2=3256 >> > 91&view=diff >> > >> ============================================================================== >> > --- cfe/trunk/unittests/Format/FormatTest.cpp (original) >> > +++ cfe/trunk/unittests/Format/FormatTest.cpp Wed Feb 21 07:54:31 2018 >> > @@ -11952,6 +11952,34 @@ TEST_F(FormatTest, StructuredBindings) { >> > verifyFormat("auto const &[ a, b ] = f();", Spaces); } >> > >> > +struct GuessLanguageTestCase { >> > + const char *const FileName; >> > + const char *const Code; >> > + const FormatStyle::LanguageKind ExpectedResult; }; >> > + >> > +class GuessLanguageTest >> > + : public FormatTest, >> > + public ::testing::WithParamInterface<GuessLanguageTestCase> {}; >> > + >> > +TEST_P(GuessLanguageTest, FileAndCode) { >> > + auto TestCase = GetParam(); >> > + EXPECT_EQ(TestCase.ExpectedResult, >> > + guessLanguage(TestCase.FileName, TestCase.Code)); } >> > + >> > +static const GuessLanguageTestCase TestCases[] = { >> > + {"foo.cc", "", FormatStyle::LK_Cpp}, >> > + {"foo.m", "", FormatStyle::LK_ObjC}, >> > + {"foo.mm", "", FormatStyle::LK_ObjC}, >> > + {"foo.h", "", FormatStyle::LK_Cpp}, >> > + {"foo.h", "@interface Foo\n@end\n", FormatStyle::LK_ObjC}, >> > + {"foo", "", FormatStyle::LK_Cpp}, >> > + {"foo", "@interface Foo\n@end\n", FormatStyle::LK_ObjC}, }; >> > +INSTANTIATE_TEST_CASE_P(ValidLanguages, GuessLanguageTest, >> > + ::testing::ValuesIn(TestCases)); >> > + >> > } // end namespace >> > } // end namespace format >> > } // end namespace clang >> > >> > >> > _______________________________________________ >> > cfe-commits mailing list >> > cfe-commits@lists.llvm.org >> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits