On Mon, Oct 20, 2014 at 10:28 AM, Yaron Keren <[email protected]> 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 <[email protected]>: > >> >> >> On Mon, Oct 20, 2014 at 9:32 AM, Yaron Keren <[email protected]> >> 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 <[email protected]>: >>> >>>> 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 >>>> [email protected] >>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >>>> >>> >>> >>
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
