<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Tue, Jul 31, 2018 at 3:59 PM <<a href="mailto:scott@scottlinder.com">scott@scottlinder.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">What might be missing is the impl of CreateMemberType:<br>
<br>
llvm::DIType *CGDebugInfo::CreateMemberType(llvm::DIFile *Unit, QualType <br>
FType,<br>
                                             StringRef Name, uint64_t <br>
*Offset) {<br>
   llvm::DIType *FieldTy = CGDebugInfo::getOrCreateType(FType, Unit);<br>
   uint64_t FieldSize = CGM.getContext().getTypeSize(FType);<br>
   auto FieldAlign = getTypeAlignIfRequired(FType, CGM.getContext());<br>
   llvm::DIType *Ty =<br>
       DBuilder.createMemberType(Unit, Name, Unit, 0, FieldSize, <br>
FieldAlign,<br>
                                 *Offset, llvm::DINode::FlagZero, <br>
FieldTy);<br>
   *Offset += FieldSize;<br>
   return Ty;<br>
}<br>
<br>
The FieldOffset is advanced twice in the OpenCL case, each time by<br>
getTypeSize(IntTy). I'm not certain why CreateMemberType is not used<br>
for __descriptor in the non-OpenCL case; it looks like it is<br>
because it needs to handle FieldTy in a special way?<br>
<br></blockquote><div><br></div><div>I'd either forgotten or blocked that the code does that. Also, why on earth.</div><div>And probably.</div><div><br></div><div>Anyhow, if you don't mind commenting the OpenCL part of the code when you get a chance to do the rest of the cleanup I'd appreciate it.</div><div><br></div><div>-eric</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Scott<br>
<br>
On 2018-07-31 18:03, Eric Christopher wrote:<br>
> I'm probably missing something, from looking here:<br>
> <br>
>   FieldOffset = 0;<br>
>   if (CGM.getLangOpts().OpenCL) {<br>
>     FType = CGM.getContext().IntTy;<br>
>     EltTys.push_back(CreateMemberType(Unit, FType, "__size",<br>
> &FieldOffset));<br>
>     EltTys.push_back(CreateMemberType(Unit, FType, "__align",<br>
> &FieldOffset));<br>
>   } else {<br>
>     FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);<br>
>     EltTys.push_back(CreateMemberType(Unit, FType, "__isa",<br>
> &FieldOffset));<br>
>     FType = CGM.getContext().IntTy;<br>
>     EltTys.push_back(CreateMemberType(Unit, FType, "__flags",<br>
> &FieldOffset));<br>
>     EltTys.push_back(CreateMemberType(Unit, FType, "__reserved",<br>
> &FieldOffset));<br>
>     FType = CGM.getContext().getPointerType(Ty->getPointeeType());<br>
>     EltTys.push_back(CreateMemberType(Unit, FType, "__FuncPtr",<br>
> &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,<br>
> FieldOffset,<br>
>         llvm::DINode::FlagZero, DescTy));<br>
>     FieldOffset += FieldSize;<br>
>   }<br>
> <br>
> FieldOffset is only advanced for non opencl blocks. And then just used<br>
> in the type.<br>
> <br>
> I'll be honest none of that makes any particular sense, but in<br>
> particular these two definitely don't match for the type.<br>
> <br>
> Thoughts? At any rate if you could document what the intended code is<br>
> here I'd appreciate it.<br>
> <br>
> -eric<br>
> <br>
> On Tue, Jul 31, 2018 at 9:18 AM <<a href="mailto:scott@scottlinder.com" target="_blank">scott@scottlinder.com</a>> wrote:<br>
> <br>
>> I think this version is right; the FieldOffset for OpenCL here will<br>
>> be 2<br>
>> * getTypeSize(IntTy). The final `FieldOffset += FieldSize` that was<br>
>> moved only applies to the non-OpenCL "__descriptor" field.<br>
>> <br>
>> Scott<br>
>> <br>
>> On 2018-07-30 19:22, Eric Christopher wrote:<br>
>>> Is 0 right for FieldOffset for OpenCL here? Seems a little odd.<br>
>>> <br>
>>> -eric<br>
>>> <br>
>>> On Mon, Jul 30, 2018 at 3:56 PM Scott Linder via cfe-commits<br>
>>> <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>> wrote:<br>
>>> <br>
>>>> Author: scott.linder<br>
>>>> Date: Mon Jul 30 15:52:07 2018<br>
>>>> New Revision: 338321<br>
>>>> <br>
>>>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=338321&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=338321&view=rev</a> [1]<br>
>> [1]<br>
>>>> Log:<br>
>>>> Fix use of uninitialized variable in r338299<br>
>>>> <br>
>>>> Modified:<br>
>>>> cfe/trunk/lib/CodeGen/CGDebugInfo.cpp<br>
>>>> <br>
>>>> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp<br>
>>>> URL:<br>
>>>> <br>
>>> <br>
>> <br>
> <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=338321&r1=338320&r2=338321&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=338321&r1=338320&r2=338321&view=diff</a><br>
>> [2]<br>
>>>> [2]<br>
>>>> <br>
>>> <br>
>> <br>
> ==============================================================================<br>
>>>> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)<br>
>>>> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Mon Jul 30 15:52:07<br>
>> 2018<br>
>>>> @@ -989,9 +989,9 @@ llvm::DIType *CGDebugInfo::CreateType(co<br>
>>>> EltTys.push_back(DBuilder.createMemberType(<br>
>>>> Unit, "__descriptor", nullptr, LineNo, FieldSize,<br>
>>>> FieldAlign, FieldOffset,<br>
>>>> llvm::DINode::FlagZero, DescTy));<br>
>>>> + FieldOffset += FieldSize;<br>
>>>> }<br>
>>>> <br>
>>>> - FieldOffset += FieldSize;<br>
>>>> Elements = DBuilder.getOrCreateArray(EltTys);<br>
>>>> <br>
>>>> // The __block_literal_generic structs are marked with a special<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> [3]<br>
>> [3]<br>
>>> <br>
>>> <br>
>>> Links:<br>
>>> ------<br>
>>> [1] <a href="http://llvm.org/viewvc/llvm-project?rev=338321&amp;view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=338321&amp;view=rev</a><br>
>> [4]<br>
>>> [2]<br>
>>> <br>
>> <br>
> <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=338321&amp;r1=338320&amp;r2=338321&amp;view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=338321&amp;r1=338320&amp;r2=338321&amp;view=diff</a><br>
>> [5]<br>
>>> [3] <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> [3]<br>
> <br>
> <br>
> Links:<br>
> ------<br>
> [1] <a href="http://llvm.org/viewvc/llvm-project?rev=338321&amp;view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=338321&amp;view=rev</a><br>
> [2]<br>
> <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=338321&amp;r1=338320&amp;r2=338321&amp;view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=338321&amp;r1=338320&amp;r2=338321&amp;view=diff</a><br>
> [3] <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>
> [4] <a href="http://llvm.org/viewvc/llvm-project?rev=338321&amp;amp;view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=338321&amp;amp;view=rev</a><br>
> [5]<br>
> <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=338321&amp;amp;r1=338320&amp;amp;r2=338321&amp;amp;view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=338321&amp;amp;r1=338320&amp;amp;r2=338321&amp;amp;view=diff</a><br>
</blockquote></div></div>