r338321 - Fix use of uninitialized variable in r338299

via cfe-commits cfe-commits at lists.llvm.org
Tue Jul 31 15:59:41 PDT 2018


What might be missing is the impl of CreateMemberType:

llvm::DIType *CGDebugInfo::CreateMemberType(llvm::DIFile *Unit, QualType 
FType,
                                             StringRef Name, uint64_t 
*Offset) {
   llvm::DIType *FieldTy = CGDebugInfo::getOrCreateType(FType, Unit);
   uint64_t FieldSize = CGM.getContext().getTypeSize(FType);
   auto FieldAlign = getTypeAlignIfRequired(FType, CGM.getContext());
   llvm::DIType *Ty =
       DBuilder.createMemberType(Unit, Name, Unit, 0, FieldSize, 
FieldAlign,
                                 *Offset, llvm::DINode::FlagZero, 
FieldTy);
   *Offset += FieldSize;
   return Ty;
}

The FieldOffset is advanced twice in the OpenCL case, each time by
getTypeSize(IntTy). I'm not certain why CreateMemberType is not used
for __descriptor in the non-OpenCL case; it looks like it is
because it needs to handle FieldTy in a special way?

Scott

On 2018-07-31 18:03, Eric Christopher wrote:
> I'm probably missing something, from looking here:
> 
>   FieldOffset = 0;
>   if (CGM.getLangOpts().OpenCL) {
>     FType = CGM.getContext().IntTy;
>     EltTys.push_back(CreateMemberType(Unit, FType, "__size",
> &FieldOffset));
>     EltTys.push_back(CreateMemberType(Unit, FType, "__align",
> &FieldOffset));
>   } else {
>     FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
>     EltTys.push_back(CreateMemberType(Unit, FType, "__isa",
> &FieldOffset));
>     FType = CGM.getContext().IntTy;
>     EltTys.push_back(CreateMemberType(Unit, FType, "__flags",
> &FieldOffset));
>     EltTys.push_back(CreateMemberType(Unit, FType, "__reserved",
> &FieldOffset));
>     FType = CGM.getContext().getPointerType(Ty->getPointeeType());
>     EltTys.push_back(CreateMemberType(Unit, FType, "__FuncPtr",
> &FieldOffset));
>     FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy);
>     FieldSize = CGM.getContext().getTypeSize(Ty);
>     FieldAlign = CGM.getContext().getTypeAlign(Ty);
>     EltTys.push_back(DBuilder.createMemberType(
>         Unit, "__descriptor", nullptr, LineNo, FieldSize, FieldAlign,
> FieldOffset,
>         llvm::DINode::FlagZero, DescTy));
>     FieldOffset += FieldSize;
>   }
> 
> FieldOffset is only advanced for non opencl blocks. And then just used
> in the type.
> 
> I'll be honest none of that makes any particular sense, but in
> particular these two definitely don't match for the type.
> 
> Thoughts? At any rate if you could document what the intended code is
> here I'd appreciate it.
> 
> -eric
> 
> On Tue, Jul 31, 2018 at 9:18 AM <scott at scottlinder.com> wrote:
> 
>> I think this version is right; the FieldOffset for OpenCL here will
>> be 2
>> * getTypeSize(IntTy). The final `FieldOffset += FieldSize` that was
>> moved only applies to the non-OpenCL "__descriptor" field.
>> 
>> Scott
>> 
>> On 2018-07-30 19:22, Eric Christopher wrote:
>>> Is 0 right for FieldOffset for OpenCL here? Seems a little odd.
>>> 
>>> -eric
>>> 
>>> On Mon, Jul 30, 2018 at 3:56 PM Scott Linder via cfe-commits
>>> <cfe-commits at lists.llvm.org> wrote:
>>> 
>>>> Author: scott.linder
>>>> Date: Mon Jul 30 15:52:07 2018
>>>> New Revision: 338321
>>>> 
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=338321&view=rev [1]
>> [1]
>>>> Log:
>>>> Fix use of uninitialized variable in r338299
>>>> 
>>>> Modified:
>>>> cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>>>> 
>>>> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>>>> URL:
>>>> 
>>> 
>> 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=338321&r1=338320&r2=338321&view=diff
>> [2]
>>>> [2]
>>>> 
>>> 
>> 
> ==============================================================================
>>>> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
>>>> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Mon Jul 30 15:52:07
>> 2018
>>>> @@ -989,9 +989,9 @@ llvm::DIType *CGDebugInfo::CreateType(co
>>>> EltTys.push_back(DBuilder.createMemberType(
>>>> Unit, "__descriptor", nullptr, LineNo, FieldSize,
>>>> FieldAlign, FieldOffset,
>>>> llvm::DINode::FlagZero, DescTy));
>>>> + FieldOffset += FieldSize;
>>>> }
>>>> 
>>>> - FieldOffset += FieldSize;
>>>> Elements = DBuilder.getOrCreateArray(EltTys);
>>>> 
>>>> // The __block_literal_generic structs are marked with a special
>>>> 
>>>> _______________________________________________
>>>> cfe-commits mailing list
>>>> cfe-commits at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits [3]
>> [3]
>>> 
>>> 
>>> Links:
>>> ------
>>> [1] http://llvm.org/viewvc/llvm-project?rev=338321&view=rev
>> [4]
>>> [2]
>>> 
>> 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=338321&r1=338320&r2=338321&view=diff
>> [5]
>>> [3] http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits [3]
> 
> 
> Links:
> ------
> [1] http://llvm.org/viewvc/llvm-project?rev=338321&view=rev
> [2]
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=338321&r1=338320&r2=338321&view=diff
> [3] http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
> [4] http://llvm.org/viewvc/llvm-project?rev=338321&amp;view=rev
> [5]
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=338321&amp;r1=338320&amp;r2=338321&amp;view=diff


More information about the cfe-commits mailing list