diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Frontend/ASTUnit.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 5 | ||||
| -rw-r--r-- | clang/lib/Frontend/FrontendAction.cpp | 19 | ||||
| -rw-r--r-- | clang/lib/Frontend/FrontendOptions.cpp | 1 | 
4 files changed, 25 insertions, 2 deletions
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index 28000bbb67c..68e7ac17eae 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/lib/Frontend/ASTUnit.cpp @@ -334,6 +334,8 @@ ASTUnit *ASTUnit::LoadFromCompilerInvocation(CompilerInvocation *CI,           "Invocation must have exactly one source file!");    assert(Clang.getFrontendOpts().Inputs[0].first != IK_AST &&           "FIXME: AST inputs not yet supported here!"); +  assert(Clang.getFrontendOpts().Inputs[0].first != IK_LLVM_IR && +         "IR inputs not support here!");    // Create the AST unit.    AST.reset(new ASTUnit(false)); diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index df2bb28c9b5..026a92c7f67 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -287,6 +287,7 @@ static const char *getInputKindName(InputKind Kind) {    case IK_Asm:               return "assembler-with-cpp";    case IK_C:                 return "c";    case IK_CXX:               return "c++"; +  case IK_LLVM_IR:           return "ir";    case IK_ObjC:              return "objective-c";    case IK_ObjCXX:            return "objective-c++";    case IK_OpenCL:            return "cl"; @@ -1022,6 +1023,7 @@ static InputKind ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args,        .Case("c++-header", IK_CXX)        .Case("objective-c++-header", IK_ObjCXX)        .Case("ast", IK_AST) +      .Case("ir", IK_LLVM_IR)        .Default(IK_None);      if (DashX == IK_None)        Diags.Report(diag::err_drv_invalid_value) @@ -1141,6 +1143,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,      switch (IK) {      case IK_None:      case IK_AST: +    case IK_LLVM_IR:        assert(0 && "Invalid input kind!");      case IK_OpenCL:        LangStd = LangStandard::lang_opencl; @@ -1401,7 +1404,7 @@ void CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,    ParseDiagnosticArgs(Res.getDiagnosticOpts(), *Args, Diags);    InputKind DashX = ParseFrontendArgs(Res.getFrontendOpts(), *Args, Diags);    ParseHeaderSearchArgs(Res.getHeaderSearchOpts(), *Args); -  if (DashX != IK_AST) +  if (DashX != IK_AST && DashX != IK_LLVM_IR)      ParseLangArgs(Res.getLangOpts(), *Args, DashX, Diags);    ParsePreprocessorArgs(Res.getPreprocessorOpts(), *Args, Diags);    ParsePreprocessorOutputArgs(Res.getPreprocessorOutputOpts(), *Args); diff --git a/clang/lib/Frontend/FrontendAction.cpp b/clang/lib/Frontend/FrontendAction.cpp index 56676e1ef93..b761f30adf4 100644 --- a/clang/lib/Frontend/FrontendAction.cpp +++ b/clang/lib/Frontend/FrontendAction.cpp @@ -75,11 +75,28 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI,      return true;    } -  // Setup the file and source managers, if needed, and the preprocessor. +  // Set up the file and source managers, if needed.    if (!CI.hasFileManager())      CI.createFileManager();    if (!CI.hasSourceManager())      CI.createSourceManager(); + +  // IR files bypass the rest of initialization. +  if (InputKind == IK_LLVM_IR) { +    assert(hasIRSupport() && +           "This action does not have IR file support!"); + +    // Inform the diagnostic client we are processing a source file. +    CI.getDiagnosticClient().BeginSourceFile(CI.getLangOpts(), 0); + +    // Initialize the action. +    if (!BeginSourceFileAction(CI, Filename)) +      goto failure; + +    return true; +  } + +  // Set up the preprocessor.    CI.createPreprocessor();    // Inform the diagnostic client we are processing a source file. diff --git a/clang/lib/Frontend/FrontendOptions.cpp b/clang/lib/Frontend/FrontendOptions.cpp index ef4c3fa23c2..9dfee244ea3 100644 --- a/clang/lib/Frontend/FrontendOptions.cpp +++ b/clang/lib/Frontend/FrontendOptions.cpp @@ -26,5 +26,6 @@ InputKind FrontendOptions::getInputKindForExtension(llvm::StringRef Extension) {      .Cases("C", "cc", "cp", IK_CXX)      .Cases("cpp", "CPP", "c++", "cxx", "hpp", IK_CXX)      .Case("cl", IK_OpenCL) +    .Cases("ll", "bc", IK_LLVM_IR)      .Default(IK_C);  }  | 

