Fix regression with LLVM 13+: some errors in inline assembly don't stop compilation (#4331)

Based on Luís' #4302; fixes #4293.
This commit is contained in:
Martin Kinkelin 2023-02-26 13:01:42 +01:00 committed by GitHub
parent d89c00c097
commit 7d3f5bae2a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 2 deletions

View file

@ -8,6 +8,7 @@
- Supports LLVM 9.0 - 15.0. - Supports LLVM 9.0 - 15.0.
#### Bug fixes #### Bug fixes
- Fix regression with LLVM 13+: some errors in inline assembly don't stop compilation. (#4293, #4331)
# LDC 1.31.0 (2022-02-11) # LDC 1.31.0 (2022-02-11)

View file

@ -161,8 +161,13 @@ bool inlineAsmDiagnostic(IRState *irs, const llvm::SMDiagnostic &d,
#if LDC_LLVM_VER < 1300 #if LDC_LLVM_VER < 1300
void inlineAsmDiagnosticHandler(const llvm::SMDiagnostic &d, void *context, void inlineAsmDiagnosticHandler(const llvm::SMDiagnostic &d, void *context,
unsigned locCookie) { unsigned locCookie) {
if (d.getKind() == llvm::SourceMgr::DK_Error) if (d.getKind() == llvm::SourceMgr::DK_Error) {
++global.errors; ++global.errors;
} else if (global.params.warnings == DIAGNOSTICerror &&
d.getKind() == llvm::SourceMgr::DK_Warning) {
++global.warnings;
}
inlineAsmDiagnostic(static_cast<IRState *>(context), d, locCookie); inlineAsmDiagnostic(static_cast<IRState *>(context), d, locCookie);
} }
#else #else
@ -176,8 +181,15 @@ struct InlineAsmDiagnosticHandler : public llvm::DiagnosticHandler {
return false; return false;
const auto &DISM = llvm::cast<llvm::DiagnosticInfoSrcMgr>(DI); const auto &DISM = llvm::cast<llvm::DiagnosticInfoSrcMgr>(DI);
if (DISM.getKind() == llvm::SourceMgr::DK_Error) if (DISM.getKind() == llvm::SourceMgr::DK_Error ||
DISM.getSeverity() == llvm::DS_Error) {
++global.errors; ++global.errors;
} else if (global.params.warnings == DIAGNOSTICerror &&
(DISM.getKind() == llvm::SourceMgr::DK_Warning ||
DISM.getSeverity() == llvm::DS_Warning)) {
++global.warnings;
}
return inlineAsmDiagnostic(irs, DISM.getSMDiag(), DISM.getLocCookie()); return inlineAsmDiagnostic(irs, DISM.getSMDiag(), DISM.getLocCookie());
} }
}; };

View file

@ -0,0 +1,11 @@
// Make sure an invalid asm instruction causes a non-zero exit code.
// RUN: not %ldc -c %s 2> %t.stderr
// RUN: FileCheck %s < %t.stderr
void main()
{
asm { "some_garbage"; }
}
// CHECK: error: