r220060 - Rename TemplateArgument::getTypeForDecl to getParamTypeForDecl for clarity

David Blaikie dblaikie at gmail.com
Mon Oct 20 10:31:11 PDT 2014


On Mon, Oct 20, 2014 at 10:28 AM, Yaron Keren <yaron.keren at gmail.com> wrote:

> Here is the failing code, an example from boost::multiprecision. The boost
> version is 1.56 (the latest). Compiled with -c -g, nothing special. Maybe
> you'd like to add this as a test? boost::multiprecision is very demanding
> code.
>

It'd be helpful if you could provide the preprocessed source (or the
include-processed source) - the Clang crash handler should've mentioned two
files (foo-42.sh and foo-42.cpp) that make it easy to reproduce crashers
without the need to install external dependencies, etc.

- David


>
> Yaron
>
>
> 2014-10-20 19:59 GMT+03:00 David Blaikie <dblaikie at gmail.com>:
>
>>
>>
>> On Mon, Oct 20, 2014 at 9:32 AM, Yaron Keren <yaron.keren at gmail.com>
>> wrote:
>>
>>> Hi David,
>>>
>>> Beyond renaming getTypeForDecl(), this revision also introduced
>>> functionality changes in CGDebugInfo.cpp,
>>>
>>
>> Yep, sorry - I could've separated those patches.
>>
>>
>>> specifically the
>>>
>>>   if (InstanceMember) {
>>>
>>> test was removed, leading to
>>>
>>>   http://llvm.org/bugs/show_bug.cgi?id=21312
>>>
>>> Was the condition removed by mistake?
>>>
>>
>> Not exactly - I intentionally removed it, but of course causing bugs was
>> a mistake.
>>
>> Do you have a (preferably minimized) reproduction of this crash?
>>
>>
>>>
>>> Yaron
>>>
>>>
>>>
>>> 2014-10-17 21:00 GMT+03:00 David Blaikie <dblaikie at gmail.com>:
>>>
>>>> Author: dblaikie
>>>> Date: Fri Oct 17 13:00:12 2014
>>>> New Revision: 220060
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=220060&view=rev
>>>> Log:
>>>> Rename TemplateArgument::getTypeForDecl to getParamTypeForDecl for
>>>> clarity
>>>>
>>>> Code review feedback from Richard Smith on r219900.
>>>>
>>>> Modified:
>>>>     cfe/trunk/include/clang/AST/TemplateBase.h
>>>>     cfe/trunk/lib/AST/ASTContext.cpp
>>>>     cfe/trunk/lib/AST/ASTImporter.cpp
>>>>     cfe/trunk/lib/AST/ItaniumMangle.cpp
>>>>     cfe/trunk/lib/AST/MicrosoftMangle.cpp
>>>>     cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>>>>     cfe/trunk/lib/Serialization/ASTWriter.cpp
>>>>
>>>> Modified: cfe/trunk/include/clang/AST/TemplateBase.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/TemplateBase.h?rev=220060&r1=220059&r2=220060&view=diff
>>>>
>>>> ==============================================================================
>>>> --- cfe/trunk/include/clang/AST/TemplateBase.h (original)
>>>> +++ cfe/trunk/include/clang/AST/TemplateBase.h Fri Oct 17 13:00:12 2014
>>>> @@ -249,7 +249,7 @@ public:
>>>>      return DeclArg.D;
>>>>    }
>>>>
>>>> -  QualType getTypeForDecl() const {
>>>> +  QualType getParamTypeForDecl() const {
>>>>      assert(getKind() == Declaration && "Unexpected kind");
>>>>      return QualType::getFromOpaquePtr(DeclArg.QT);
>>>>    }
>>>>
>>>> Modified: cfe/trunk/lib/AST/ASTContext.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=220060&r1=220059&r2=220060&view=diff
>>>>
>>>> ==============================================================================
>>>> --- cfe/trunk/lib/AST/ASTContext.cpp (original)
>>>> +++ cfe/trunk/lib/AST/ASTContext.cpp Fri Oct 17 13:00:12 2014
>>>> @@ -4099,7 +4099,7 @@ ASTContext::getCanonicalTemplateArgument
>>>>
>>>>      case TemplateArgument::Declaration: {
>>>>        ValueDecl *D =
>>>> cast<ValueDecl>(Arg.getAsDecl()->getCanonicalDecl());
>>>> -      return TemplateArgument(D, Arg.getTypeForDecl());
>>>> +      return TemplateArgument(D, Arg.getParamTypeForDecl());
>>>>      }
>>>>
>>>>      case TemplateArgument::NullPtr:
>>>>
>>>> Modified: cfe/trunk/lib/AST/ASTImporter.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=220060&r1=220059&r2=220060&view=diff
>>>>
>>>> ==============================================================================
>>>> --- cfe/trunk/lib/AST/ASTImporter.cpp (original)
>>>> +++ cfe/trunk/lib/AST/ASTImporter.cpp Fri Oct 17 13:00:12 2014
>>>> @@ -2094,7 +2094,7 @@ ASTNodeImporter::ImportTemplateArgument(
>>>>    case TemplateArgument::Declaration: {
>>>>      ValueDecl *FromD = From.getAsDecl();
>>>>      if (ValueDecl *To =
>>>> cast_or_null<ValueDecl>(Importer.Import(FromD)))
>>>> -      return TemplateArgument(To, From.getTypeForDecl());
>>>> +      return TemplateArgument(To, From.getParamTypeForDecl());
>>>>      return TemplateArgument();
>>>>    }
>>>>
>>>>
>>>> Modified: cfe/trunk/lib/AST/ItaniumMangle.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ItaniumMangle.cpp?rev=220060&r1=220059&r2=220060&view=diff
>>>>
>>>> ==============================================================================
>>>> --- cfe/trunk/lib/AST/ItaniumMangle.cpp (original)
>>>> +++ cfe/trunk/lib/AST/ItaniumMangle.cpp Fri Oct 17 13:00:12 2014
>>>> @@ -3403,7 +3403,7 @@ void CXXNameMangler::mangleTemplateArg(T
>>>>      // and pointer-to-function expressions are represented as a
>>>> declaration not
>>>>      // an expression. We compensate for it here to produce the correct
>>>> mangling.
>>>>      ValueDecl *D = A.getAsDecl();
>>>> -    bool compensateMangling = !A.getTypeForDecl()->isReferenceType();
>>>> +    bool compensateMangling =
>>>> !A.getParamTypeForDecl()->isReferenceType();
>>>>      if (compensateMangling) {
>>>>        Out << 'X';
>>>>        mangleOperatorName(OO_Amp, 1);
>>>>
>>>> Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=220060&r1=220059&r2=220060&view=diff
>>>>
>>>> ==============================================================================
>>>> --- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original)
>>>> +++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Fri Oct 17 13:00:12 2014
>>>> @@ -1139,7 +1139,7 @@ void MicrosoftCXXNameMangler::mangleTemp
>>>>        else
>>>>          mangle(FD, "$1?");
>>>>      } else {
>>>> -      mangle(ND, TA.getTypeForDecl()->isReferenceType() ? "$E?" :
>>>> "$1?");
>>>> +      mangle(ND, TA.getParamTypeForDecl()->isReferenceType() ? "$E?" :
>>>> "$1?");
>>>>      }
>>>>      break;
>>>>    }
>>>>
>>>> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=220060&r1=220059&r2=220060&view=diff
>>>>
>>>> ==============================================================================
>>>> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
>>>> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Fri Oct 17 13:00:12 2014
>>>> @@ -1255,32 +1255,29 @@ CollectTemplateParams(const TemplatePara
>>>>      } break;
>>>>      case TemplateArgument::Declaration: {
>>>>        const ValueDecl *D = TA.getAsDecl();
>>>> -      bool InstanceMember = D->isCXXInstanceMember();
>>>> -      QualType T = TA.getTypeForDecl();
>>>> +      QualType T = TA.getParamTypeForDecl();
>>>>        llvm::DIType TTy = getOrCreateType(T, Unit);
>>>>        llvm::Value *V = nullptr;
>>>>        // Variable pointer template parameters have a value that is the
>>>> address
>>>>        // of the variable.
>>>> -      if (const VarDecl *VD = dyn_cast<VarDecl>(D))
>>>> +      if (const auto *VD = dyn_cast<VarDecl>(D))
>>>>          V = CGM.GetAddrOfGlobalVar(VD);
>>>>        // Member function pointers have special support for building
>>>> them, though
>>>>        // this is currently unsupported in LLVM CodeGen.
>>>> -      if (InstanceMember) {
>>>> -        if (const CXXMethodDecl *method = dyn_cast<CXXMethodDecl>(D))
>>>> +      else if (const auto *method = dyn_cast<CXXMethodDecl>(D))
>>>>            V = CGM.getCXXABI().EmitMemberPointer(method);
>>>> -      } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D))
>>>> +      else if (const auto *FD = dyn_cast<FunctionDecl>(D))
>>>>          V = CGM.GetAddrOfFunction(FD);
>>>>        // Member data pointers have special handling too to compute the
>>>> fixed
>>>>        // offset within the object.
>>>> -      if (isa<FieldDecl>(D) || isa<IndirectFieldDecl>(D)) {
>>>> +      else if (const auto *MPT =
>>>> dyn_cast<MemberPointerType>(T.getTypePtr())) {
>>>>          // These five lines (& possibly the above member function
>>>> pointer
>>>>          // handling) might be able to be refactored to use similar
>>>> code in
>>>>          // CodeGenModule::getMemberPointerConstant
>>>>          uint64_t fieldOffset = CGM.getContext().getFieldOffset(D);
>>>>          CharUnits chars =
>>>>              CGM.getContext().toCharUnitsFromBits((int64_t)
>>>> fieldOffset);
>>>> -        V = CGM.getCXXABI().EmitMemberDataPointer(
>>>> -            cast<MemberPointerType>(T.getTypePtr()), chars);
>>>> +        V = CGM.getCXXABI().EmitMemberDataPointer(MPT, chars);
>>>>        }
>>>>        llvm::DITemplateValueParameter TVP =
>>>>            DBuilder.createTemplateValueParameter(TheCU, Name, TTy,
>>>>
>>>> Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=220060&r1=220059&r2=220060&view=diff
>>>>
>>>> ==============================================================================
>>>> --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original)
>>>> +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Fri Oct 17 13:00:12 2014
>>>> @@ -5372,7 +5372,7 @@ void ASTWriter::AddTemplateArgument(cons
>>>>      break;
>>>>    case TemplateArgument::Declaration:
>>>>      AddDeclRef(Arg.getAsDecl(), Record);
>>>> -    AddTypeRef(Arg.getTypeForDecl(), Record);
>>>> +    AddTypeRef(Arg.getParamTypeForDecl(), Record);
>>>>      break;
>>>>    case TemplateArgument::NullPtr:
>>>>      AddTypeRef(Arg.getNullPtrType(), Record);
>>>>
>>>>
>>>> _______________________________________________
>>>> cfe-commits mailing list
>>>> cfe-commits at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>>>
>>>
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141020/fceb598b/attachment.html>


More information about the cfe-commits mailing list