forked from OSchip/llvm-project
Add InlineAsmDiagnosticHandler for bitcode input
Summary: This patch installs an InlineAsmDiagnosticsHandler to avoid the crash report when the input is bitcode and the bitcode contains invalid inline assembly. The handler will simply print the same error message that will print from the backend. Add CHECK in test-case Reviewers: echristo, rafael Reviewed By: rafael Subscribers: rafael, cfe-commits Differential Revision: http://reviews.llvm.org/D7568 llvm-svn: 228898
This commit is contained in:
parent
3c567fce46
commit
15b385f854
|
@ -667,6 +667,12 @@ CodeGenAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) {
|
|||
return std::move(Result);
|
||||
}
|
||||
|
||||
static void BitcodeInlineAsmDiagHandler(const llvm::SMDiagnostic &SM,
|
||||
void *Context,
|
||||
unsigned LocCookie) {
|
||||
SM.print(nullptr, llvm::errs());
|
||||
}
|
||||
|
||||
void CodeGenAction::ExecuteAction() {
|
||||
// If this is an IR file, we have to treat it specially.
|
||||
if (getCurrentFileKind() == IK_LLVM_IR) {
|
||||
|
@ -715,6 +721,8 @@ void CodeGenAction::ExecuteAction() {
|
|||
TheModule->setTargetTriple(TargetOpts.Triple);
|
||||
}
|
||||
|
||||
LLVMContext &Ctx = TheModule->getContext();
|
||||
Ctx.setInlineAsmDiagnosticHandler(BitcodeInlineAsmDiagHandler);
|
||||
EmitBackendOutput(CI.getDiagnostics(), CI.getCodeGenOpts(), TargetOpts,
|
||||
CI.getLangOpts(), CI.getTarget().getTargetDescription(),
|
||||
TheModule.get(), BA, OS);
|
||||
|
|
|
@ -3,6 +3,12 @@
|
|||
// RUN: true
|
||||
// UN: not %clang_cc1 -triple i386-apple-darwin10 -emit-obj %s -o /dev/null > %t 2>&1
|
||||
// UN: FileCheck %s < %t
|
||||
// RUN: %clang_cc1 -triple i386-apple-darwin10 -emit-llvm-bc %s -o %t.bc
|
||||
// RUN: %clang_cc1 -triple i386-apple-darwin10 -emit-obj %t.bc -o /dev/null 2>&1 | \
|
||||
// RUN: FileCheck --check-prefix=CRASH-REPORT %s
|
||||
// CRASH-REPORT: <inline asm>:
|
||||
// CRASH-REPORT: error: invalid instruction mnemonic 'abc'
|
||||
// CRASH-REPORT-NOT: note: diagnostic msg:
|
||||
|
||||
int test1(int X) {
|
||||
// CHECK: error: invalid instruction mnemonic 'abc'
|
||||
|
|
Loading…
Reference in New Issue