> Here's what I had in mind:
> 
> diff --git lib/CodeGen/CGDebugInfo.cpp lib/CodeGen/CGDebugInfo.cpp
> index 8240c08..8a1b1c8 100644
> --- lib/CodeGen/CGDebugInfo.cpp
> +++ lib/CodeGen/CGDebugInfo.cpp
> @@ -1938,8 +1938,15 @@ llvm::DIType
> CGDebugInfo::getOrCreateType(QualType Ty, llvm::DIFile Unit,
> 
>   llvm::DIType T = getCompletedTypeOrNull(Ty);
> 
> -  if (T.Verify())
> +  if (T.Verify()) {
> +    // If we're looking for a definition, make sure we have definitions of 
> any
> +    // underlying types.
> +    if (const TypedefType* TTy = dyn_cast<TypedefType>(Ty))
> +      getOrCreateType(TTy->getDecl()->getUnderlyingType(), Unit, 
> Declaration);
> +    if (Ty.hasLocalQualifiers())
> +      getOrCreateType(QualType(Ty.getTypePtr(), 0), Unit, Declaration);
>     return T;
> +  }
> 
>   // Otherwise create the type.
>   llvm::DIType Res = CreateTypeNode(Ty, Unit, Declaration);

Oh, that’s actually not all that different from my (original) patch, just that 
you regenerate the underlying types for all TypedefTypes instead of only those 
that typedef’d to a forward declaration. I don’t have any strong feelings about 
my implementation.. so, if that also works with my two test cases, feel free to 
do something like this instead of my patch.

cheers,
adrian
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to