<div dir="ltr">This appears to be causing assertion failures in the Chromium build:<br><div><a href="https://ci.chromium.org/buildbot/chromium.clang/ToTLinux/2328">https://ci.chromium.org/buildbot/chromium.clang/ToTLinux/2328</a><br></div><div><br></div><div>The LLVM revision window is:</div><div>good: 330945</div><div>bad: 330975</div><div><br></div><div>I'll prepare a revert and get a repro.</div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Apr 26, 2018 at 11:20 AM Adrian Prantl via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: adrian<br>
Date: Thu Apr 26 11:17:04 2018<br>
New Revision: 330970<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=330970&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=330970&view=rev</a><br>
Log:<br>
Fix a bug that prevents global variables from having a DW_OP_deref.<br>
<br>
For local variables the first DW_OP_deref is consumed by turning the<br>
location kind into a memeory location, but that only makes sense for<br>
values that are in a register to begin with, which cannot happen for<br>
global variables that are attached to a symbol.<br>
<br>
rdar://problem/39741860<br>
<br>
Added:<br>
    llvm/trunk/test/DebugInfo/X86/global-expression.ll<br>
Modified:<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=330970&r1=330969&r2=330970&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=330970&r1=330969&r2=330970&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp Thu Apr 26 11:17:04 2018<br>
@@ -230,8 +230,9 @@ DIE *DwarfCompileUnit::getOrCreateGlobal<br>
         addOpAddress(*Loc, Sym);<br>
       }<br>
     }<br>
-    if (Expr)<br>
-      DwarfExpr->addExpression(Expr);<br>
+    // Global variables attached to symbols are memory locations.<br>
+    DwarfExpr->setMemoryLocationKind();<br>
+    DwarfExpr->addExpression(Expr);<br>
   }<br>
   if (Loc)<br>
     addBlock(*VariableDIE, dwarf::DW_AT_location, DwarfExpr->finalize());<br>
<br>
Added: llvm/trunk/test/DebugInfo/X86/global-expression.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/global-expression.ll?rev=330970&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/global-expression.ll?rev=330970&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/global-expression.ll (added)<br>
+++ llvm/trunk/test/DebugInfo/X86/global-expression.ll Thu Apr 26 11:17:04 2018<br>
@@ -0,0 +1,38 @@<br>
+; RUN: llc -mtriple=x86_64-apple-darwin %s -o - -filetype=obj | \<br>
+; RUN:     llvm-dwarfdump --name i --name indirect - | FileCheck %s<br>
+;<br>
+; This is a hand-crafted testcase generated from:<br>
+;   int i = 23;<br>
+;   int *indirect = &i;<br>
+<br>
+; CHECK: DW_TAG_variable<br>
+; CHECK:   DW_AT_name  ("i")<br>
+; CHECK:   DW_AT_location      (DW_OP_addr 0x8, DW_OP_deref)<br>
+; CHECK: DW_TAG_variable<br>
+; CHECK:   DW_AT_name  ("indirect")<br>
+; CHECK:   DW_AT_location      (DW_OP_addr 0x8)<br>
+<br>
+source_filename = "global-deref.c"<br>
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"<br>
+target triple = "x86_64-apple-macosx10.13.0"<br>
+<br>
+@i = global i32 23, align 4<br>
+@indirect = global i32* @i, align 8, !dbg !6, !dbg !0<br>
+<br>
+!<a href="http://llvm.dbg.cu" rel="noreferrer" target="_blank">llvm.dbg.cu</a> = !{!2}<br>
+!llvm.module.flags = !{!10, !11, !12, !13}<br>
+<br>
+!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression(DW_OP_deref))<br>
+!1 = distinct !DIGlobalVariable(name: "i", scope: !2, file: !3, line: 1, type: !9, isLocal: false, isDefinition: true)<br>
+!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5)<br>
+!3 = !DIFile(filename: "global-deref.c", directory: "/")<br>
+!4 = !{}<br>
+!5 = !{!0, !6}<br>
+!6 = !DIGlobalVariableExpression(var: !7, expr: !DIExpression())<br>
+!7 = distinct !DIGlobalVariable(name: "indirect", scope: !2, file: !3, line: 2, type: !8, isLocal: false, isDefinition: true)<br>
+!8 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !9, size: 64)<br>
+!9 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)<br>
+!10 = !{i32 2, !"Dwarf Version", i32 4}<br>
+!11 = !{i32 2, !"Debug Info Version", i32 3}<br>
+!12 = !{i32 1, !"wchar_size", i32 4}<br>
+!13 = !{i32 7, !"PIC Level", i32 2}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>