<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Sep 3, 2014 at 4:24 PM, Kostya Serebryany <span dir="ltr"><<a href="mailto:kcc@google.com" target="_blank">kcc@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: kcc<br>
Date: Wed Sep  3 18:24:18 2014<br>
New Revision: 217106<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=217106&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=217106&view=rev</a><br>
Log:<br>
[asan] fix debug info produced for asan-coverage=2<br>
<br>
Added:<br>
    llvm/trunk/test/Instrumentation/AddressSanitizer/coverage2-dbg.ll<br>
Modified:<br>
    llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp<br>
<br>
Modified: llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp?rev=217106&r1=217105&r2=217106&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp?rev=217106&r1=217105&r2=217106&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp Wed Sep  3 18:24:18 2014<br>
@@ -1321,7 +1321,9 @@ void AddressSanitizer::InjectCoverageAtB<br>
       break;<br>
   }<br>
<br>
-  DebugLoc EntryLoc = IP->getDebugLoc().getFnDebugLoc(*C);<br>
+  DebugLoc EntryLoc = &BB == &F.getEntryBlock()<br>
+                          ? IP->getDebugLoc().getFnDebugLoc(*C)<br>
+                          : IP->getDebugLoc();<br></blockquote><div><br></div><div>What's the need for the conditional/special case? (is there a reason IP->getDebugLoc() doesn't work in the general case?)</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
   IRBuilder<> IRB(IP);<br>
   IRB.SetCurrentDebugLocation(EntryLoc);<br>
   Type *Int8Ty = IRB.getInt8Ty();<br>
<br>
Added: llvm/trunk/test/Instrumentation/AddressSanitizer/coverage2-dbg.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/AddressSanitizer/coverage2-dbg.ll?rev=217106&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/AddressSanitizer/coverage2-dbg.ll?rev=217106&view=auto</a><br>

==============================================================================<br>
--- llvm/trunk/test/Instrumentation/AddressSanitizer/coverage2-dbg.ll (added)<br>
+++ llvm/trunk/test/Instrumentation/AddressSanitizer/coverage2-dbg.ll Wed Sep  3 18:24:18 2014<br>
@@ -0,0 +1,75 @@<br>
+; Test that coverage instrumentation does not lose debug location.<br>
+<br>
+; RUN: opt < %s -asan -asan-module -asan-coverage=2 -S | FileCheck %s<br>
+<br>
+; C++ source:<br>
+; 1: void foo(int *a) {<br>
+; 2:     if (a)<br>
+; 3:         *a = 0;<br>
+; 4: }<br>
+; clang++ if.cc -O3 -g -S -emit-llvm<br>
+; and add sanitize_address to @_Z3fooPi<br></blockquote><div><br></div><div>Can this attribute be added in the original source? Or is it not utterable at the moment? (will/should it be? or is this by design?)</div><div>
 </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+<br>
+<br>
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"<br>
+target triple = "x86_64-unknown-linux-gnu"<br>
+<br>
+; Check that __sanitizer_cov call has !dgb pointing to the beginning<br>
+; of appropriate basic blocks.<br>
+; CHECK-LABEL:_Z3fooPi<br>
+; CHECK: call void @__sanitizer_cov(), !dbg [[A:!.*]]<br>
+; CHECK: call void @__sanitizer_cov(), !dbg [[B:!.*]]<br>
+; CHECK: call void @__sanitizer_cov(), !dbg [[C:!.*]]<br>
+; CHECK: ret void<br>
+; CHECK: [[A]] = metadata !{i32 1, i32 0, metadata !{{.*}}, null}<br>
+; CHECK: [[B]] = metadata !{i32 3, i32 5, metadata !{{.*}}, null}<br>
+; CHECK: [[C]] = metadata !{i32 4, i32 1, metadata !{{.*}}, null}<br>
+<br>
+define void @_Z3fooPi(i32* %a) #0 {<br>
+entry:<br>
+  tail call void @llvm.dbg.value(metadata !{i32* %a}, i64 0, metadata !11), !dbg !15<br>
+  %tobool = icmp eq i32* %a, null, !dbg !16<br>
+  br i1 %tobool, label %if.end, label %if.then, !dbg !16<br>
+<br>
+if.then:                                          ; preds = %entry<br>
+  store i32 0, i32* %a, align 4, !dbg !18, !tbaa !19<br>
+  br label %if.end, !dbg !18<br>
+<br>
+if.end:                                           ; preds = %entry, %if.then<br>
+  ret void, !dbg !23<br>
+}<br>
+<br>
+; Function Attrs: nounwind readnone<br>
+declare void @llvm.dbg.value(metadata, i64, metadata) #1<br>
+<br>
+attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" sanitize_address}<br>

+attributes #1 = { nounwind readnone }<br>
+<br>
+!<a href="http://llvm.dbg.cu" target="_blank">llvm.dbg.cu</a> = !{!0}<br>
+!llvm.module.flags = !{!12, !13}<br>
+!llvm.ident = !{!14}<br>
+<br>
+!0 = metadata !{i32 786449, metadata !1, i32 4, metadata !"clang version 3.6.0 (217079)", i1 true, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !"", i32 1} ; [ DW_TAG_compile_unit ] [FOO/if.cc] [DW_LANG_C_plus_plus]<br>

+!1 = metadata !{metadata !"if.cc", metadata !"FOO"}<br>
+!2 = metadata !{}<br>
+!3 = metadata !{metadata !4}<br>
+!4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"foo", metadata !"foo", metadata !"_Z3fooPi", i32 1, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 true, void (i32*)* @_Z3fooPi, null, null, metadata !10, i32 1} ; [ DW_TAG_subprogram ] [line 1] [def] [foo]<br>

+!5 = metadata !{i32 786473, metadata !1}          ; [ DW_TAG_file_type ] [FOO/if.cc]<br>
+!6 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !7, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]<br>

+!7 = metadata !{null, metadata !8}<br>
+!8 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 0, metadata !9} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from int]<br>
+!9 = metadata !{i32 786468, null, null, metadata !"int", i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed]<br>
+!10 = metadata !{metadata !11}<br>
+!11 = metadata !{i32 786689, metadata !4, metadata !"a", metadata !5, i32 16777217, metadata !8, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [a] [line 1]<br>
+!12 = metadata !{i32 2, metadata !"Dwarf Version", i32 4}<br>
+!13 = metadata !{i32 2, metadata !"Debug Info Version", i32 1}<br>
+!14 = metadata !{metadata !"clang version 3.6.0 (217079)"}<br>
+!15 = metadata !{i32 1, i32 15, metadata !4, null}<br>
+!16 = metadata !{i32 2, i32 7, metadata !17, null}<br>
+!17 = metadata !{i32 786443, metadata !1, metadata !4, i32 2, i32 7, i32 0} ; [ DW_TAG_lexical_block ] [FOO/if.cc]<br>
+!18 = metadata !{i32 3, i32 5, metadata !17, null}<br>
+!19 = metadata !{metadata !20, metadata !20, i64 0}<br>
+!20 = metadata !{metadata !"int", metadata !21, i64 0}<br>
+!21 = metadata !{metadata !"omnipotent char", metadata !22, i64 0}<br>
+!22 = metadata !{metadata !"Simple C/C++ TBAA"}<br>
+!23 = metadata !{i32 4, i32 1, metadata !4, null}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>