================ @@ -71,12 +73,17 @@ inline std::pair<unsigned, unsigned> getDepthAndIndex(const NamedDecl *ND) { } /// Retrieve the depth and index of an unexpanded parameter pack. -inline std::pair<unsigned, unsigned> +/// Returns nullopt when the unexpanded packs do not correspond to template +/// parameters, e.g. __builtin_dedup_types. +inline std::optional<std::pair<unsigned, unsigned>> getDepthAndIndex(UnexpandedParameterPack UPP) { if (const auto *TTP = dyn_cast<const TemplateTypeParmType *>(UPP.first)) return std::make_pair(TTP->getDepth(), TTP->getIndex()); - - return getDepthAndIndex(cast<NamedDecl *>(UPP.first)); + if (isa<NamedDecl *>(UPP.first)) + return getDepthAndIndex(cast<NamedDecl *>(UPP.first)); + assert(isa<const TemplateSpecializationType *>(UPP.first) || ---------------- erichkeane wrote:
```suggestion assert(isa<const TemplateSpecializationType *, const SubstBuiltinTemplatePackType *>(UPP.first)); ``` Pretty sure this works? https://github.com/llvm/llvm-project/pull/106730 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits