r220060 - Rename TemplateArgument::getTypeForDecl to getParamTypeForDecl for clarity

Yaron Keren yaron.keren at gmail.com
Mon Oct 20 10:28:24 PDT 2014


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.

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/297dfee9/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: airy_zeros_example.cpp
Type: text/x-c++src
Size: 6571 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141020/297dfee9/attachment.cpp>


More information about the cfe-commits mailing list