================ @@ -6998,6 +7007,31 @@ namespace { else return C.getRValueReferenceType(New); } + case Elaborated: { + auto *ET = cast<ElaboratedType>(Old); + return C.getElaboratedType(ET->getKeyword(), ET->getQualifier(), + wrap(C, ET->getNamedType(), I)); + } + case TypeAlias: { + auto *ET = cast<TypedefType>(Old); + QualType Underlying = wrap(C, ET->desugar(), I); + TypedefNameDecl *Typedef; + if (auto *TD = dyn_cast<TypedefDecl>(ET->getDecl())) { + Typedef = TypedefDecl::Create(C, TD->getDeclContext(), + TD->getBeginLoc(), TD->getLocation(), + TD->getIdentifier(), nullptr); + Typedef->setModedTypeSourceInfo(TD->getTypeSourceInfo(), Underlying); + } else { + auto *Alias = cast<TypeAliasDecl>(ET->getDecl()); + Typedef = TypedefDecl::Create( + C, Alias->getDeclContext(), Alias->getBeginLoc(), + Alias->getLocation(), Alias->getIdentifier(), nullptr); + Typedef->setModedTypeSourceInfo(Alias->getTypeSourceInfo(), + Underlying); + } + Typedef->setPreviousDecl(ET->getDecl()); + return C.getTypedefType(Typedef, Underlying); ---------------- mizvekov wrote:
Yeah, but the new function type is still the same as the original one, it's just not identical (different sugar). If that's the case, that's still under contract with getTypedefType. If that's not the case, I think it would be possible to remove that assert, you just need to investigate and deal with the consequences elsewhere. https://github.com/llvm/llvm-project/pull/143143 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits