From: Joey Gouly Date: Thu, 5 Jun 2014 21:23:42 +0000 (+0000) Subject: When an inline-asm diagnostic is reported by the backend, report it with the X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9266985b619ddd85632a0616af41f0e917646c24;p=clang When an inline-asm diagnostic is reported by the backend, report it with the correct severity. Previously all inline-asm diagnostics were reported as errors. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@210286 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CodeGenAction.cpp b/lib/CodeGen/CodeGenAction.cpp index a197faece1..f593ccf431 100644 --- a/lib/CodeGen/CodeGenAction.cpp +++ b/lib/CodeGen/CodeGenAction.cpp @@ -297,13 +297,24 @@ void BackendConsumer::InlineAsmDiagHandler2(const llvm::SMDiagnostic &D, FullSourceLoc Loc; if (D.getLoc() != SMLoc()) Loc = ConvertBackendLocation(D, Context->getSourceManager()); - + unsigned DiagID; + switch (D.getKind()) { + case llvm::SourceMgr::DK_Error: + DiagID = diag::err_fe_inline_asm; + break; + case llvm::SourceMgr::DK_Warning: + DiagID = diag::warn_fe_inline_asm; + break; + case llvm::SourceMgr::DK_Note: + DiagID = diag::note_fe_inline_asm; + break; + } // If this problem has clang-level source location information, report the - // issue as being an error in the source with a note showing the instantiated + // issue in the source with a note showing the instantiated // code. if (LocCookie.isValid()) { - Diags.Report(LocCookie, diag::err_fe_inline_asm).AddString(Message); + Diags.Report(LocCookie, DiagID).AddString(Message); if (D.getLoc().isValid()) { DiagnosticBuilder B = Diags.Report(Loc, diag::note_fe_inline_asm_here); @@ -319,10 +330,10 @@ void BackendConsumer::InlineAsmDiagHandler2(const llvm::SMDiagnostic &D, return; } - // Otherwise, report the backend error as occurring in the generated .s file. - // If Loc is invalid, we still need to report the error, it just gets no + // Otherwise, report the backend issue as occurring in the generated .s file. + // If Loc is invalid, we still need to report the issue, it just gets no // location info. - Diags.Report(Loc, diag::err_fe_inline_asm).AddString(Message); + Diags.Report(Loc, DiagID).AddString(Message); } #define ComputeDiagID(Severity, GroupName, DiagID) \ diff --git a/test/CodeGen/arm-asm-deprecated.c b/test/CodeGen/arm-asm-deprecated.c new file mode 100644 index 0000000000..d3229a65bb --- /dev/null +++ b/test/CodeGen/arm-asm-deprecated.c @@ -0,0 +1,8 @@ +// REQUIRES: arm-registered-target +// RUN: %clang_cc1 -triple armv8 -target-feature +neon %s -S -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK-v8 +// RUN: not %clang_cc1 -triple armv8 -target-feature +neon %s -S -o /dev/null -Werror 2>&1 | FileCheck %s --check-prefix=CHECK-v8-Werror + +void set_endian() { + asm("setend be"); // CHECK-v8: warning: deprecated + // CHECK-v8-Werror: error: deprecated +} diff --git a/test/CodeGen/x86-64-inline-asm.c b/test/CodeGen/x86-64-inline-asm.c new file mode 100644 index 0000000000..666d4c0822 --- /dev/null +++ b/test/CodeGen/x86-64-inline-asm.c @@ -0,0 +1,7 @@ +// REQUIRES: x86-registered-target +// RUN: %clang_cc1 -triple x86_64 %s -S -o /dev/null 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -triple x86_64 %s -S -o /dev/null -Werror 2>&1 | FileCheck %s --check-prefix=CHECK-Werror +void f() { + asm("movaps %xmm3, (%esi, 2)"); // CHECK: warning: scale factor without index register is ignored + // CHECK-Werror: error: scale factor without index register is ignored +}