[llvm] r296465 - [Assembler] Add test for !srcloc references in assembler diags
Sanne Wouda via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 28 02:34:48 PST 2017
Author: sanwou01
Date: Tue Feb 28 04:34:48 2017
New Revision: 296465
URL: http://llvm.org/viewvc/llvm-project?rev=296465&view=rev
Log:
[Assembler] Add test for !srcloc references in assembler diags
Summary:
clang adds !srcloc metadata to inline assembly in LLVM bitcode generated
for inline assembly in C. The value of this !srcloc is passed to the
diagnostics handler if the inline assembly generates a diagnostic.
clang is able to turn this cookie back to a location in the C source
file.
To test this functionality without a dependency, make llc print the
!srcloc metadata if it is present. The added test uses this mechanism
to test that the correct !srclocs are passed to the diag handler.
Reviewers: rengolin, rnk, echristo, grosbach, mehdi_amini
Reviewed By: mehdi_amini
Subscribers: mehdi_amini, llvm-commits
Differential Revision: https://reviews.llvm.org/D30167
Added:
llvm/trunk/test/MC/ARM/inline-asm-srcloc.ll
Modified:
llvm/trunk/tools/llc/llc.cpp
Added: llvm/trunk/test/MC/ARM/inline-asm-srcloc.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/inline-asm-srcloc.ll?rev=296465&view=auto
==============================================================================
--- llvm/trunk/test/MC/ARM/inline-asm-srcloc.ll (added)
+++ llvm/trunk/test/MC/ARM/inline-asm-srcloc.ll Tue Feb 28 04:34:48 2017
@@ -0,0 +1,37 @@
+; RUN: not llc -filetype=obj 2>&1 -o /dev/null < %s | FileCheck %s
+
+; ModuleID = '/scratch/llvm/master/tools/clang/test/Misc/inline-asm-diags.c'
+source_filename = "/scratch/llvm/master/tools/clang/test/Misc/inline-asm-diags.c"
+target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
+target triple = "armv7-arm-none-eabi"
+
+; Function Attrs: noinline nounwind
+define void @foo2() #0 {
+entry:
+ call void asm sideeffect " wibble", ""() #1, !srcloc !3
+; CHECK: note: !srcloc = 107
+ ret void
+}
+
+; Function Attrs: noinline nounwind
+define void @foo() #0 {
+entry:
+ call void asm sideeffect " .word -bar", ""() #1, !srcloc !4
+; CHECK: note: !srcloc = 181
+ call void asm sideeffect " .word -foo", ""() #1, !srcloc !5
+; CHECK: note: !srcloc = 257
+ ret void
+}
+
+attributes #0 = { noinline nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="cortex-a8" "target-features"="+dsp,+neon,+strict-align,+vfp3" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #1 = { nounwind }
+
+!llvm.module.flags = !{!0, !1}
+!llvm.ident = !{!2}
+
+!0 = !{i32 1, !"wchar_size", i32 4}
+!1 = !{i32 1, !"min_enum_size", i32 4}
+!2 = !{!"clang version 5.0.0 "}
+!3 = !{i32 107}
+!4 = !{i32 181}
+!5 = !{i32 257}
Modified: llvm/trunk/tools/llc/llc.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/llc.cpp?rev=296465&r1=296464&r2=296465&view=diff
==============================================================================
--- llvm/trunk/tools/llc/llc.cpp (original)
+++ llvm/trunk/tools/llc/llc.cpp Tue Feb 28 04:34:48 2017
@@ -254,12 +254,16 @@ static void DiagnosticHandler(const Diag
}
static void InlineAsmDiagHandler(const SMDiagnostic &SMD, void *Context,
- unsigned) {
+ unsigned LocCookie) {
bool *HasError = static_cast<bool *>(Context);
if (SMD.getKind() == SourceMgr::DK_Error)
*HasError = true;
SMD.print(nullptr, errs());
+
+ // For testing purposes, we print the LocCookie here.
+ if (LocCookie)
+ errs() << "note: !srcloc = " << LocCookie << "\n";
}
// main - Entry point for the llc compiler.
More information about the llvm-commits
mailing list