================ @@ -5347,13 +5347,16 @@ static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, case NestedNameSpecifier::TypeSpec: case NestedNameSpecifier::TypeSpecWithTemplate: - ClsType = QualType(NNS->getAsType(), 0); + const Type *NNSType = NNS->getAsType(); + ClsType = QualType(NNSType, 0); // Note: if the NNS has a prefix and ClsType is a nondependent - // TemplateSpecializationType, then the NNS prefix is NOT included - // in ClsType; hence we wrap ClsType into an ElaboratedType. - // NOTE: in particular, no wrap occurs if ClsType already is an - // Elaborated, DependentName, or DependentTemplateSpecialization. - if (isa<TemplateSpecializationType>(NNS->getAsType())) + // TemplateSpecializationType or a RecordType, then the NNS prefix is + // NOT included in ClsType; hence we wrap ClsType into an + // ElaboratedType. NOTE: in particular, no wrap occurs if ClsType + // already is an Elaborated, DependentName, or + // DependentTemplateSpecialization. + if (isa<TemplateSpecializationType>(NNSType) || + (NNSPrefix && isa<RecordType>(NNSType))) ---------------- mizvekov wrote:
Yes exactly, this test change is correct, because the type was written as 'Derived' and not 'test1::Derived', and the diagnostics are supposed to print the type as written. It would be inconsistent to print the type as written when it has any qualifier, but print it fully qualified when it does not have any. We started doing this consistently since this patch: https://reviews.llvm.org/D112374 https://github.com/llvm/llvm-project/pull/118236 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits