[PATCH] D102244: [llvm][AsmPrinter] Restore source location to register clobber warning
David Spickett via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu May 13 02:16:35 PDT 2021
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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D102244.345073.patch
Type: text/x-patch
Size: 2803 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210513/fa0d74c9/attachment-0001.bin>
More information about the cfe-commits
mailing list