alexander-shaposhnikov added inline comments.
================ Comment at: clang/lib/Sema/SemaTemplateInstantiate.cpp:133 } +Response HandlePartialClassTemplateSpec( ---------------- alexander-shaposhnikov wrote: > alexander-shaposhnikov wrote: > > alexander-shaposhnikov wrote: > > > HandlePartialClassTemplateSpec is from Erich's diff > > > (https://reviews.llvm.org/D147722) > > @erichkeane : previously (see https://reviews.llvm.org/D147722) we were > > producing a real layer of arguments (if the depth is greater than 1), to > > the best of my knowledge this is incorrect since it'd trigger unexpected > > depth adjustment, we should produce retained layers instead. > (depth adjustment during the substitution) to make it a bit easier to reason about I've changed the names in the test case: ``` //enum class Enum { E1 }; template <typename T1> concept some_concept = true; //inline constexpr bool some_concept = true; template <typename T1, int> struct S { template <typename T2> requires(some_concept<T2>) void func(const T2 &); }; template <typename T11> struct S<T11, 0> { template <typename T22> requires(some_concept<T22>) void func(const T22 &); }; template <typename T111> template <typename T222> requires (some_concept<T222>) inline void S<T111, 0>::func(const T222 &) {} ``` Previously the code was doing the following: ``` PartialClassTemplSpec->getTemplateDepth() = 1 NumRetainedOuterLevels: 0 0: <> before subst: ParenExpr 0x558fb90be6a8 '_Bool' `-ConceptSpecializationExpr 0x558fb90be640 '_Bool' Concept 0x558fb909fbd8 'some_concept' |-ImplicitConceptSpecializationDecl 0x558fb90be5d0 | `-TemplateArgument type 'type-parameter-1-0' | `-TemplateTypeParmType 0x558fb90a01d0 'type-parameter-1-0' dependent depth 1 index 0 `-TemplateArgument type 'T22' `-TemplateTypeParmType 0x558fb90be590 'T22' dependent depth 1 index 0 `-TemplateTypeParm 0x558fb90be540 'T22' after subst: ParenExpr 0x558fb90bf168 '_Bool' `-ConceptSpecializationExpr 0x558fb90bf100 '_Bool' Concept 0x558fb909fbd8 'some_concept' |-ImplicitConceptSpecializationDecl 0x558fb90bf090 | `-TemplateArgument type 'type-parameter-0-0' | `-TemplateTypeParmType 0x558fb909fb50 'type-parameter-0-0' dependent depth 0 index 0 `-TemplateArgument type 'T22' `-TemplateTypeParmType 0x558fb90bf050 'T22' dependent depth 0 index 0 `-TemplateTypeParm 0x558fb90be540 'T22' ``` (as one can see the depths have changed) now: ``` PartialClassTemplSpec->getTemplateDepth() = 1 NumRetainedOuterLevels: 1 before subst: ParenExpr 0x55f7813ae6a8 '_Bool' `-ConceptSpecializationExpr 0x55f7813ae640 '_Bool' Concept 0x55f78138fbd8 'some_concept' |-ImplicitConceptSpecializationDecl 0x55f7813ae5d0 | `-TemplateArgument type 'type-parameter-1-0' | `-TemplateTypeParmType 0x55f7813901d0 'type-parameter-1-0' dependent depth 1 index 0 `-TemplateArgument type 'T22' `-TemplateTypeParmType 0x55f7813ae590 'T22' dependent depth 1 index 0 `-TemplateTypeParm 0x55f7813ae540 'T22' after subst: ParenExpr 0x55f7813af138 '_Bool' `-ConceptSpecializationExpr 0x55f7813af0d0 '_Bool' Concept 0x55f78138fbd8 'some_concept' |-ImplicitConceptSpecializationDecl 0x55f7813af060 | `-TemplateArgument type 'type-parameter-1-0' | `-TemplateTypeParmType 0x55f7813901d0 'type-parameter-1-0' dependent depth 1 index 0 `-TemplateArgument type 'T22' `-TemplateTypeParmType 0x55f7813ae590 'T22' dependent depth 1 index 0 `-TemplateTypeParm 0x55f7813ae540 'T22' ``` Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D146178/new/ https://reviews.llvm.org/D146178 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits