forked from OSchip/llvm-project
Revert "Use filename in linemarker when compiling preprocessed source"
This reverts commit r293004 because it broke the buildbots with "unknown CPU" errors. I tried to fix it in r293026, but that broke on Green Dragon with this kind of error: error: expected string not found in input // CHECK: l{{ +}}df{{ +}}*ABS*{{ +}}{{0+}}{{.+}}preprocessed-input.c{{$}} ^ <stdin>:2:1: note: scanning from here /Users/buildslave/jenkins/sharedspace/incremental@2/clang-build/tools/clang/test/Frontend/Output/preprocessed-input.c.tmp.o: file format Mach-O 64-bit x86-64 ^ <stdin>:2:67: note: possible intended match here /Users/buildslave/jenkins/sharedspace/incremental@2/clang-build/tools/clang/test/Frontend/Output/preprocessed-input.c.tmp.o: file format Mach-O 64-bit x86-64 I suppose this means that llvm-objdump doesn't support Mach-O, so the test should indeed check for linux (but not for x86). I'll leave it to someone that knows better. llvm-svn: 293032
This commit is contained in:
parent
d09bf194fa
commit
ac03b4b924
|
@ -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,13 +109,6 @@ 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());
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
#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"
|
||||
|
@ -188,42 +187,6 @@ FrontendAction::CreateWrappedASTConsumer(CompilerInstance &CI,
|
|||
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!");
|
||||
|
@ -372,13 +335,6 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI,
|
|||
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)
|
||||
|
@ -465,9 +421,9 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI,
|
|||
|
||||
// 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);
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
// RUN: %clang -E -o %t.i %s
|
||||
// RUN: %clang -c -o %t.o %t.i
|
||||
// RUN: llvm-objdump -t %t.o | FileCheck %s
|
||||
// CHECK: l{{ +}}df{{ +}}*ABS*{{ +}}{{0+}}{{.+}}preprocessed-input.c{{$}}
|
Loading…
Reference in New Issue