DavidSpickett updated this revision to Diff 345073. DavidSpickett added a comment.
- Use diagnose instead of adding methods to LLVMContext - clang-format the test file Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D102244/new/ https://reviews.llvm.org/D102244 Files: clang/test/Misc/inline-asm-clobber-warning.c llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp Index: llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp =================================================================== --- llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp +++ llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp @@ -21,6 +21,7 @@ #include "llvm/CodeGen/TargetRegisterInfo.h" #include "llvm/IR/Constants.h" #include "llvm/IR/DataLayout.h" +#include "llvm/IR/DiagnosticInfo.h" #include "llvm/IR/InlineAsm.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" @@ -527,11 +528,6 @@ } if (!RestrRegs.empty()) { - unsigned BufNum = addInlineAsmDiagBuffer(OS.str(), LocMD); - auto &SrcMgr = *MMI->getContext().getInlineSourceManager(); - SMLoc Loc = SMLoc::getFromPointer( - SrcMgr.getMemoryBuffer(BufNum)->getBuffer().begin()); - std::string Msg = "inline asm clobber list contains reserved registers: "; ListSeparator LS; for (const Register &RR : RestrRegs) { @@ -542,8 +538,10 @@ "Reserved registers on the clobber list may not be " "preserved across the asm statement, and clobbering them may " "lead to undefined behaviour."; - SrcMgr.PrintMessage(Loc, SourceMgr::DK_Warning, Msg); - SrcMgr.PrintMessage(Loc, SourceMgr::DK_Note, Note); + MMI->getModule()->getContext().diagnose(DiagnosticInfoInlineAsm( + LocCookie, Msg.c_str(), DiagnosticSeverity::DS_Warning)); + MMI->getModule()->getContext().diagnose( + DiagnosticInfoInlineAsm(LocCookie, Note, DiagnosticSeverity::DS_Note)); } emitInlineAsm(OS.str(), getSubtargetInfo(), TM.Options.MCOptions, LocMD, Index: clang/test/Misc/inline-asm-clobber-warning.c =================================================================== --- /dev/null +++ clang/test/Misc/inline-asm-clobber-warning.c @@ -0,0 +1,21 @@ +/// This test checks that the warning includes the location in the C source +/// file that contains the inline asm. Instead of saying <inline asm> for both. +/// Although this warning is emitted in llvm it cannot be tested from IR as +/// it does not have that location information at that stage. + +// RUN: %clang -target arm-arm-none-eabi -march=armv7-m -c %s -o /dev/null \ +// RUN: 2>&1 | FileCheck %s + +// REQUIRES: arm-registered-target + +void bar(void) { + __asm__ __volatile__("nop" + : + : + : "sp"); +} + +// CHECK: inline-asm-clobber-warning.c:12:24: warning: inline asm clobber list contains reserved registers: SP [-Winline-asm] +// CHECK-NEXT: __asm__ __volatile__("nop" +// CHECK-NEXT: ^ +// CHECK-NEXT: inline-asm-clobber-warning.c:12:24: note: Reserved registers on the clobber list may not be preserved across the asm statement, and clobbering them may lead to undefined behaviour.
Index: llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp =================================================================== --- llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp +++ llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp @@ -21,6 +21,7 @@ #include "llvm/CodeGen/TargetRegisterInfo.h" #include "llvm/IR/Constants.h" #include "llvm/IR/DataLayout.h" +#include "llvm/IR/DiagnosticInfo.h" #include "llvm/IR/InlineAsm.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" @@ -527,11 +528,6 @@ } if (!RestrRegs.empty()) { - unsigned BufNum = addInlineAsmDiagBuffer(OS.str(), LocMD); - auto &SrcMgr = *MMI->getContext().getInlineSourceManager(); - SMLoc Loc = SMLoc::getFromPointer( - SrcMgr.getMemoryBuffer(BufNum)->getBuffer().begin()); - std::string Msg = "inline asm clobber list contains reserved registers: "; ListSeparator LS; for (const Register &RR : RestrRegs) { @@ -542,8 +538,10 @@ "Reserved registers on the clobber list may not be " "preserved across the asm statement, and clobbering them may " "lead to undefined behaviour."; - SrcMgr.PrintMessage(Loc, SourceMgr::DK_Warning, Msg); - SrcMgr.PrintMessage(Loc, SourceMgr::DK_Note, Note); + MMI->getModule()->getContext().diagnose(DiagnosticInfoInlineAsm( + LocCookie, Msg.c_str(), DiagnosticSeverity::DS_Warning)); + MMI->getModule()->getContext().diagnose( + DiagnosticInfoInlineAsm(LocCookie, Note, DiagnosticSeverity::DS_Note)); } emitInlineAsm(OS.str(), getSubtargetInfo(), TM.Options.MCOptions, LocMD, Index: clang/test/Misc/inline-asm-clobber-warning.c =================================================================== --- /dev/null +++ clang/test/Misc/inline-asm-clobber-warning.c @@ -0,0 +1,21 @@ +/// This test checks that the warning includes the location in the C source +/// file that contains the inline asm. Instead of saying <inline asm> for both. +/// Although this warning is emitted in llvm it cannot be tested from IR as +/// it does not have that location information at that stage. + +// RUN: %clang -target arm-arm-none-eabi -march=armv7-m -c %s -o /dev/null \ +// RUN: 2>&1 | FileCheck %s + +// REQUIRES: arm-registered-target + +void bar(void) { + __asm__ __volatile__("nop" + : + : + : "sp"); +} + +// CHECK: inline-asm-clobber-warning.c:12:24: warning: inline asm clobber list contains reserved registers: SP [-Winline-asm] +// CHECK-NEXT: __asm__ __volatile__("nop" +// CHECK-NEXT: ^ +// CHECK-NEXT: inline-asm-clobber-warning.c:12:24: note: Reserved registers on the clobber list may not be preserved across the asm statement, and clobbering them may lead to undefined behaviour.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits