<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Mon, Jul 30, 2018 at 10:37 PM Scott Linder via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: scott.linder<br>
Date: Mon Jul 30 13:31:11 2018<br>
New Revision: 338299<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=338299&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=338299&view=rev</a><br>
Log:<br>
[DebugInfo][OpenCL] Generate correct block literal debug info for OpenCL<br>
<br>
OpenCL block literal structs have different fields which are now correctly<br>
identified in the debug info.<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D49930" rel="noreferrer" target="_blank">https://reviews.llvm.org/D49930</a><br>
<br>
Modified:<br>
    cfe/trunk/lib/CodeGen/CGDebugInfo.cpp<br>
    cfe/trunk/test/CodeGenOpenCL/<a href="http://blocks.cl" rel="noreferrer" target="_blank">blocks.cl</a><br>
<br>
Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=338299&r1=338298&r2=338299&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=338299&r1=338298&r2=338299&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Mon Jul 30 13:31:11 2018<br>
@@ -971,20 +971,25 @@ llvm::DIType *CGDebugInfo::CreateType(co<br>
   auto *DescTy = DBuilder.createPointerType(EltTy, Size);<br>
<br>
   FieldOffset = 0;<br>
-  FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);<br>
-  EltTys.push_back(CreateMemberType(Unit, FType, "__isa", &FieldOffset));<br>
-  FType = CGM.getContext().IntTy;<br>
-  EltTys.push_back(CreateMemberType(Unit, FType, "__flags", &FieldOffset));<br>
-  EltTys.push_back(CreateMemberType(Unit, FType, "__reserved", &FieldOffset));<br>
-  FType = CGM.getContext().getPointerType(Ty->getPointeeType());<br>
-  EltTys.push_back(CreateMemberType(Unit, FType, "__FuncPtr", &FieldOffset));<br>
-<br>
-  FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);<br>
-  FieldSize = CGM.getContext().getTypeSize(Ty);<br>
-  FieldAlign = CGM.getContext().getTypeAlign(Ty);<br>
-  EltTys.push_back(DBuilder.createMemberType(<br>
-      Unit, "__descriptor", nullptr, LineNo, FieldSize, FieldAlign, FieldOffset,<br>
-      llvm::DINode::FlagZero, DescTy));<br>
+  if (CGM.getLangOpts().OpenCL) {<br>
+    FType = CGM.getContext().IntTy;<br>
+    EltTys.push_back(CreateMemberType(Unit, FType, "__size", &FieldOffset));<br>
+    EltTys.push_back(CreateMemberType(Unit, FType, "__align", &FieldOffset));<br>
+  } else {<br>
+    FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);<br>
+    EltTys.push_back(CreateMemberType(Unit, FType, "__isa", &FieldOffset));<br>
+    FType = CGM.getContext().IntTy;<br>
+    EltTys.push_back(CreateMemberType(Unit, FType, "__flags", &FieldOffset));<br>
+    EltTys.push_back(CreateMemberType(Unit, FType, "__reserved", &FieldOffset));<br>
+    FType = CGM.getContext().getPointerType(Ty->getPointeeType());<br>
+    EltTys.push_back(CreateMemberType(Unit, FType, "__FuncPtr", &FieldOffset));<br>
+    FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);<br>
+    FieldSize = CGM.getContext().getTypeSize(Ty);<br>
+    FieldAlign = CGM.getContext().getTypeAlign(Ty);<br>
+    EltTys.push_back(DBuilder.createMemberType(<br>
+        Unit, "__descriptor", nullptr, LineNo, FieldSize, FieldAlign, FieldOffset,<br>
+        llvm::DINode::FlagZero, DescTy));<br>
+  }<br></blockquote><div> </div><div><div>llvm/tools/clang/lib/CodeGen/CGDebugInfo.cpp:974:7: error: variable 'FieldSize' is used uninitialized whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized]</div><div>  if (CGM.getLangOpts().OpenCL) {</div><div>      ^~~~~~~~~~~~~~~~~~~~~~~~</div><div>llvm/tools/clang/lib/CodeGen/CGDebugInfo.cpp:994:18: note: uninitialized use occurs here</div><div>  FieldOffset += FieldSize;</div><div>                 ^~~~~~~~~</div><div>llvm/tools/clang/lib/CodeGen/CGDebugInfo.cpp:974:3: note: remove the 'if' if its condition is always false</div><div>  if (CGM.getLangOpts().OpenCL) {</div><div>  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</div><div>llvm/tools/clang/lib/CodeGen/CGDebugInfo.cpp:949:21: note: initialize the variable 'FieldSize' to silence this warning</div><div>  uint64_t FieldSize, FieldOffset;</div><div>                    ^</div><div>                     = 0</div><div>1 error generated.</div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
   FieldOffset += FieldSize;<br>
   Elements = DBuilder.getOrCreateArray(EltTys);<br>
@@ -3847,26 +3852,35 @@ void CGDebugInfo::EmitDeclareOfBlockLite<br>
       CGM.getDataLayout().getStructLayout(block.StructureType);<br>
<br>
   SmallVector<llvm::Metadata *, 16> fields;<br>
-  fields.push_back(createFieldType("__isa", C.VoidPtrTy, loc, AS_public,<br>
-                                   blockLayout->getElementOffsetInBits(0),<br>
-                                   tunit, tunit));<br>
-  fields.push_back(createFieldType("__flags", C.IntTy, loc, AS_public,<br>
-                                   blockLayout->getElementOffsetInBits(1),<br>
-                                   tunit, tunit));<br>
-  fields.push_back(createFieldType("__reserved", C.IntTy, loc, AS_public,<br>
-                                   blockLayout->getElementOffsetInBits(2),<br>
-                                   tunit, tunit));<br>
-  auto *FnTy = block.getBlockExpr()->getFunctionType();<br>
-  auto FnPtrType = CGM.getContext().getPointerType(FnTy->desugar());<br>
-  fields.push_back(createFieldType("__FuncPtr", FnPtrType, loc, AS_public,<br>
-                                   blockLayout->getElementOffsetInBits(3),<br>
-                                   tunit, tunit));<br>
-  fields.push_back(createFieldType(<br>
-      "__descriptor",<br>
-      C.getPointerType(block.NeedsCopyDispose<br>
-                           ? C.getBlockDescriptorExtendedType()<br>
-                           : C.getBlockDescriptorType()),<br>
-      loc, AS_public, blockLayout->getElementOffsetInBits(4), tunit, tunit));<br>
+  if (CGM.getLangOpts().OpenCL) {<br>
+    fields.push_back(createFieldType("__size", C.IntTy, loc, AS_public,<br>
+                                     blockLayout->getElementOffsetInBits(0),<br>
+                                     tunit, tunit));<br>
+    fields.push_back(createFieldType("__align", C.IntTy, loc, AS_public,<br>
+                                     blockLayout->getElementOffsetInBits(1),<br>
+                                     tunit, tunit));<br>
+  } else {<br>
+    fields.push_back(createFieldType("__isa", C.VoidPtrTy, loc, AS_public,<br>
+                                     blockLayout->getElementOffsetInBits(0),<br>
+                                     tunit, tunit));<br>
+    fields.push_back(createFieldType("__flags", C.IntTy, loc, AS_public,<br>
+                                     blockLayout->getElementOffsetInBits(1),<br>
+                                     tunit, tunit));<br>
+    fields.push_back(createFieldType("__reserved", C.IntTy, loc, AS_public,<br>
+                                     blockLayout->getElementOffsetInBits(2),<br>
+                                     tunit, tunit));<br>
+    auto *FnTy = block.getBlockExpr()->getFunctionType();<br>
+    auto FnPtrType = CGM.getContext().getPointerType(FnTy->desugar());<br>
+    fields.push_back(createFieldType("__FuncPtr", FnPtrType, loc, AS_public,<br>
+                                     blockLayout->getElementOffsetInBits(3),<br>
+                                     tunit, tunit));<br>
+    fields.push_back(createFieldType(<br>
+        "__descriptor",<br>
+        C.getPointerType(block.NeedsCopyDispose<br>
+                             ? C.getBlockDescriptorExtendedType()<br>
+                             : C.getBlockDescriptorType()),<br>
+        loc, AS_public, blockLayout->getElementOffsetInBits(4), tunit, tunit));<br>
+  }<br>
<br>
   // We want to sort the captures by offset, not because DWARF<br>
   // requires this, but because we're paranoid about debuggers.<br>
<br>
Modified: cfe/trunk/test/CodeGenOpenCL/<a href="http://blocks.cl" rel="noreferrer" target="_blank">blocks.cl</a><br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/blocks.cl?rev=338299&r1=338298&r2=338299&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/blocks.cl?rev=338299&r1=338298&r2=338299&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGenOpenCL/<a href="http://blocks.cl" rel="noreferrer" target="_blank">blocks.cl</a> (original)<br>
+++ cfe/trunk/test/CodeGenOpenCL/<a href="http://blocks.cl" rel="noreferrer" target="_blank">blocks.cl</a> Mon Jul 30 13:31:11 2018<br>
@@ -1,5 +1,5 @@<br>
-// RUN: %clang_cc1 %s -cl-std=CL2.0 -emit-llvm -o - -O0 -triple spir-unknown-unknown | FileCheck -check-prefixes=COMMON,SPIR %s<br>
-// RUN: %clang_cc1 %s -cl-std=CL2.0 -emit-llvm -o - -O0 -triple amdgcn-amd-amdhsa | FileCheck -check-prefixes=COMMON,AMDGCN %s<br>
+// RUN: %clang_cc1 %s -cl-std=CL2.0 -emit-llvm -o - -O0 -debug-info-kind=limited -triple spir-unknown-unknown | FileCheck -check-prefixes=COMMON,SPIR %s<br>
+// RUN: %clang_cc1 %s -cl-std=CL2.0 -emit-llvm -o - -O0 -debug-info-kind=limited -triple amdgcn-amd-amdhsa | FileCheck -check-prefixes=COMMON,AMDGCN %s<br>
<br>
 // COMMON: @__block_literal_global = internal addrspace(1) constant { i32, i32 } { i32 8, i32 4 }<br>
 // COMMON-NOT: .str<br>
@@ -60,3 +60,11 @@ void foo(){<br>
 // AMDGCN:  %[[block_capture:.*]] = load i32, i32* %[[block_capture_addr]]<br>
<br>
 // COMMON-NOT: define{{.*}}@__foo_block_invoke_kernel<br>
+<br>
+// COMMON: !DIDerivedType(tag: DW_TAG_member, name: "__size"<br>
+// COMMON: !DIDerivedType(tag: DW_TAG_member, name: "__align"<br>
+<br>
+// COMMON-NOT: !DIDerivedType(tag: DW_TAG_member, name: "__isa"<br>
+// COMMON-NOT: !DIDerivedType(tag: DW_TAG_member, name: "__flags"<br>
+// COMMON-NOT: !DIDerivedType(tag: DW_TAG_member, name: "__reserved"<br>
+// COMMON-NOT: !DIDerivedType(tag: DW_TAG_member, name: "__FuncPtr"<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div></div>