void TemplateArgToInt::handleOneTemplateArgumentLoc( const TemplateArgumentLoc &ArgLoc) { if (ArgLoc.getLocation().isInvalid() || isInIncludedFile(ArgLoc.getLocation())) return; const TemplateArgument &Arg = ArgLoc.getArgument(); if (Arg.getKind() != TemplateArgument::Type) return; const Type *Ty = Arg.getAsType().getTypePtr(); if (!Ty->getAsCXXRecordDecl() && !Ty->getPointeeCXXRecordDecl()) return; ValidInstanceNum++; if (ValidInstanceNum == TransformationCounter) TheTypeSourceInfo = ArgLoc.getTypeSourceInfo(); }
bool TraverseTemplateArgumentLoc(const TemplateArgumentLoc &ArgLoc) { std::string ArgStr; llvm::raw_string_ostream Stream(ArgStr); const TemplateArgument &Arg = ArgLoc.getArgument(); Arg.print(Context->getPrintingPolicy(), Stream); Match(Stream.str(), ArgLoc.getLocation()); return ExpectedLocationVisitor<TemplateArgumentLocTraverser>:: TraverseTemplateArgumentLoc(ArgLoc); }
bool Sema::DiagnoseUnexpandedParameterPack(TemplateArgumentLoc Arg, UnexpandedParameterPackContext UPPC) { if (Arg.getArgument().isNull() || !Arg.getArgument().containsUnexpandedParameterPack()) return false; SmallVector<UnexpandedParameterPack, 2> Unexpanded; CollectUnexpandedParameterPacksVisitor(Unexpanded) .TraverseTemplateArgumentLoc(Arg); assert(!Unexpanded.empty() && "Unable to find unexpanded parameter packs"); return DiagnoseUnexpandedParameterPacks(Arg.getLocation(), UPPC, Unexpanded); }
void TemplateNonTypeArgToInt::handleOneTemplateArgumentLoc( const TemplateArgumentLoc &ArgLoc) { if (ArgLoc.getLocation().isInvalid()) return; const TemplateArgument &Arg = ArgLoc.getArgument(); if (!isValidTemplateArgument(Arg)) return; ValidInstanceNum++; if (ValidInstanceNum == TransformationCounter) { TheExpr = ArgLoc.getLocInfo().getAsExpr(); llvm::APSInt Result; if (!TheExpr->isValueDependent() && TheExpr->EvaluateAsInt(Result, *Context)) { IntString = Result.toString(10); } } }