Erm, the revert was actually r293032, sorry about the confusion.
On 25 January 2017 at 09:34, Diana Picus <diana.pi...@linaro.org> wrote: > Hi David, > > Sorry, but I had to revert this (r283029) because it was breaking the > non-x86 buildbots (arm, powerpc, hexagon), with errors along the lines > of: > error: unknown target CPU 'cortex-a8' > > Please recommit after you've fixed the issue. > > Thanks, > Diana > > PS: I tried to fix it in r293024, but that broke on Green Dragon. I'll > let you come up with a more principled fix. > > On 25 January 2017 at 03:55, David Callahan via cfe-commits > <cfe-commits@lists.llvm.org> wrote: >> Author: david2050 >> Date: Tue Jan 24 19:55:28 2017 >> New Revision: 293004 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=293004&view=rev >> Log: >> Use filename in linemarker when compiling preprocessed source >> >> Summary: >> Clang appears to always use name as specified on the command >> line, whereas gcc uses the name as specified in the linemarker at the >> first line when compiling a preprocessed source. This results mismatch >> between two compilers in FILE symbol table entry. This patch makes clang >> to resemble gcc's behavior in finding the original source file name and >> use it as an input file name. >> >> Even with this patch, values of FILE symbol table entry may still be >> different because clang uses dirname+basename for the entry whlie gcc >> uses basename only. I'll write a patch for that once this patch is >> committed. >> >> Reviewers: dblaikie, inglorion >> >> Reviewed By: inglorion >> >> Subscribers: inglorion, aprantl, bruno >> >> Differential Revision: https://reviews.llvm.org/D28796 >> >> Added: >> cfe/trunk/test/Frontend/preprocessed-input.c >> Modified: >> cfe/trunk/include/clang/Frontend/FrontendOptions.h >> cfe/trunk/lib/Frontend/FrontendAction.cpp >> >> Modified: cfe/trunk/include/clang/Frontend/FrontendOptions.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/FrontendOptions.h?rev=293004&r1=293003&r2=293004&view=diff >> ============================================================================== >> --- cfe/trunk/include/clang/Frontend/FrontendOptions.h (original) >> +++ cfe/trunk/include/clang/Frontend/FrontendOptions.h Tue Jan 24 19:55:28 >> 2017 >> @@ -81,7 +81,7 @@ enum InputKind { >> IK_LLVM_IR >> }; >> >> - >> + >> /// \brief An input file for the front end. >> class FrontendInputFile { >> /// \brief The file name, or "-" to read from standard input. >> @@ -109,6 +109,13 @@ public: >> bool isEmpty() const { return File.empty() && Buffer == nullptr; } >> bool isFile() const { return !isBuffer(); } >> bool isBuffer() const { return Buffer != nullptr; } >> + bool isPreprocessed() const { >> + return Kind == IK_PreprocessedC || >> + Kind == IK_PreprocessedCXX || >> + Kind == IK_PreprocessedObjC || >> + Kind == IK_PreprocessedObjCXX || >> + Kind == IK_PreprocessedCuda; >> + } >> >> StringRef getFile() const { >> assert(isFile()); >> >> Modified: cfe/trunk/lib/Frontend/FrontendAction.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendAction.cpp?rev=293004&r1=293003&r2=293004&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Frontend/FrontendAction.cpp (original) >> +++ cfe/trunk/lib/Frontend/FrontendAction.cpp Tue Jan 24 19:55:28 2017 >> @@ -19,6 +19,7 @@ >> #include "clang/Frontend/MultiplexConsumer.h" >> #include "clang/Frontend/Utils.h" >> #include "clang/Lex/HeaderSearch.h" >> +#include "clang/Lex/LiteralSupport.h" >> #include "clang/Lex/Preprocessor.h" >> #include "clang/Lex/PreprocessorOptions.h" >> #include "clang/Parse/ParseAST.h" >> @@ -187,6 +188,42 @@ FrontendAction::CreateWrappedASTConsumer >> return llvm::make_unique<MultiplexConsumer>(std::move(Consumers)); >> } >> >> +// For preprocessed files, if the first line is the linemarker and specifies >> +// the original source file name, use that name as the input file name. >> +static bool ReadOriginalFileName(CompilerInstance &CI, std::string >> &InputFile) >> +{ >> + bool Invalid = false; >> + auto &SourceMgr = CI.getSourceManager(); >> + auto MainFileID = SourceMgr.getMainFileID(); >> + const auto *MainFileBuf = SourceMgr.getBuffer(MainFileID, &Invalid); >> + if (Invalid) >> + return false; >> + >> + std::unique_ptr<Lexer> RawLexer( >> + new Lexer(MainFileID, MainFileBuf, SourceMgr, CI.getLangOpts())); >> + >> + // If the first line has the syntax of >> + // >> + // # NUM "FILENAME" >> + // >> + // we use FILENAME as the input file name. >> + Token T; >> + if (RawLexer->LexFromRawLexer(T) || T.getKind() != tok::hash) >> + return false; >> + if (RawLexer->LexFromRawLexer(T) || T.isAtStartOfLine() || >> + T.getKind() != tok::numeric_constant) >> + return false; >> + RawLexer->LexFromRawLexer(T); >> + if (T.isAtStartOfLine() || T.getKind() != tok::string_literal) >> + return false; >> + >> + StringLiteralParser Literal(T, CI.getPreprocessor()); >> + if (Literal.hadError) >> + return false; >> + InputFile = Literal.GetString().str(); >> + return true; >> +} >> + >> bool FrontendAction::BeginSourceFile(CompilerInstance &CI, >> const FrontendInputFile &Input) { >> assert(!Instance && "Already processing a source file!"); >> @@ -335,6 +372,13 @@ bool FrontendAction::BeginSourceFile(Com >> if (!isModelParsingAction()) >> CI.createASTContext(); >> >> + // For preprocessed files, check if the first line specifies the >> original >> + // source file name with a linemarker. >> + std::string OrigFile; >> + if (Input.isPreprocessed()) >> + if (ReadOriginalFileName(CI, OrigFile)) >> + InputFile = OrigFile; >> + >> std::unique_ptr<ASTConsumer> Consumer = >> CreateWrappedASTConsumer(CI, InputFile); >> if (!Consumer) >> @@ -421,9 +465,9 @@ bool FrontendAction::BeginSourceFile(Com >> >> // If there is a layout overrides file, attach an external AST source that >> // provides the layouts from that file. >> - if (!CI.getFrontendOpts().OverrideRecordLayoutsFile.empty() && >> + if (!CI.getFrontendOpts().OverrideRecordLayoutsFile.empty() && >> CI.hasASTContext() && !CI.getASTContext().getExternalSource()) { >> - IntrusiveRefCntPtr<ExternalASTSource> >> + IntrusiveRefCntPtr<ExternalASTSource> >> Override(new LayoutOverrideSource( >> CI.getFrontendOpts().OverrideRecordLayoutsFile)); >> CI.getASTContext().setExternalSource(Override); >> >> Added: cfe/trunk/test/Frontend/preprocessed-input.c >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/preprocessed-input.c?rev=293004&view=auto >> ============================================================================== >> --- cfe/trunk/test/Frontend/preprocessed-input.c (added) >> +++ cfe/trunk/test/Frontend/preprocessed-input.c Tue Jan 24 19:55:28 2017 >> @@ -0,0 +1,4 @@ >> +// RUN: %clang -E -o %t.i %s >> +// RUN: %clang -Xclang -triple -Xclang i686-linux-gnu -c -o %t.o %t.i >> +// RUN: llvm-objdump -t %t.o | FileCheck %s >> +// CHECK: l{{ +}}df{{ +}}*ABS*{{ +}}{{0+}}{{.+}}preprocessed-input.c{{$}} >> >> >> _______________________________________________ >> 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