Author: Vlad Serebrennikov Date: 2025-05-02T13:20:41+03:00 New Revision: 4ba27780d34916d4a856e6593035b15a5cace56e
URL: https://github.com/llvm/llvm-project/commit/4ba27780d34916d4a856e6593035b15a5cace56e DIFF: https://github.com/llvm/llvm-project/commit/4ba27780d34916d4a856e6593035b15a5cace56e.diff LOG: [clang][NFC] Convert `Sema::CorrectTypoKind` to scoped enum Added: Modified: clang/include/clang/Sema/Sema.h clang/lib/Sema/SemaCXXScopeSpec.cpp clang/lib/Sema/SemaDecl.cpp clang/lib/Sema/SemaDeclCXX.cpp clang/lib/Sema/SemaDeclObjC.cpp clang/lib/Sema/SemaExpr.cpp clang/lib/Sema/SemaExprMember.cpp clang/lib/Sema/SemaExprObjC.cpp clang/lib/Sema/SemaInit.cpp clang/lib/Sema/SemaLookup.cpp clang/lib/Sema/SemaOpenMP.cpp clang/lib/Sema/SemaTemplate.cpp clang/lib/Sema/SemaTemplateVariadic.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index 0ea07e2ab4cd4..9896caaf41a5f 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -799,6 +799,11 @@ enum class IfExistsResult { Error }; +enum class CorrectTypoKind { + NonError, // CorrectTypo used in a non error recovery situation. + ErrorRecovery // CorrectTypo used in normal error recovery. +}; + /// Sema - This implements semantic analysis and AST building for C. /// \nosubgrouping class Sema final : public SemaBase { @@ -9593,11 +9598,6 @@ class Sema final : public SemaBase { bool IncludeDependentBases = false, bool LoadExternal = true); - enum CorrectTypoKind { - CTK_NonError, // CorrectTypo used in a non error recovery situation. - CTK_ErrorRecovery // CorrectTypo used in normal error recovery. - }; - /// Try to "correct" a typo in the source code by finding /// visible declarations whose names are similar to the name that was /// present in the source code. diff --git a/clang/lib/Sema/SemaCXXScopeSpec.cpp b/clang/lib/Sema/SemaCXXScopeSpec.cpp index f497106223df4..ab83f625d2849 100644 --- a/clang/lib/Sema/SemaCXXScopeSpec.cpp +++ b/clang/lib/Sema/SemaCXXScopeSpec.cpp @@ -542,7 +542,7 @@ bool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, NestedNameSpecifierValidatorCCC CCC(*this); if (TypoCorrection Corrected = CorrectTypo( Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, CCC, - CTK_ErrorRecovery, LookupCtx, EnteringContext)) { + CorrectTypoKind::ErrorRecovery, LookupCtx, EnteringContext)) { if (LookupCtx) { bool DroppedSpecifier = Corrected.WillReplaceSpecifier() && diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 6d0d07fe124a3..329013471c934 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -422,8 +422,9 @@ ParsedType Sema::getTypeName(const IdentifierInfo &II, SourceLocation NameLoc, if (CorrectedII) { TypeNameValidatorCCC CCC(/*AllowInvalid=*/true, isClassName, AllowDeducedTemplate); - TypoCorrection Correction = CorrectTypo(Result.getLookupNameInfo(), Kind, - S, SS, CCC, CTK_ErrorRecovery); + TypoCorrection Correction = + CorrectTypo(Result.getLookupNameInfo(), Kind, S, SS, CCC, + CorrectTypoKind::ErrorRecovery); IdentifierInfo *NewII = Correction.getCorrectionAsIdentifierInfo(); TemplateTy Template; bool MemberOfUnknownSpecialization; @@ -711,7 +712,7 @@ void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, /*AllowNonTemplates=*/!IsTemplateName); if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, - CCC, CTK_ErrorRecovery)) { + CCC, CorrectTypoKind::ErrorRecovery)) { // FIXME: Support error recovery for the template-name case. bool CanRecover = !IsTemplateName; if (Corrected.isKeyword()) { @@ -979,7 +980,7 @@ Sema::NameClassification Sema::ClassifyName(Scope *S, CXXScopeSpec &SS, SecondTry = true; if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, - &SS, *CCC, CTK_ErrorRecovery)) { + &SS, *CCC, CorrectTypoKind::ErrorRecovery)) { unsigned UnqualifiedDiag = diag::err_undeclared_var_use_suggest; unsigned QualifiedDiag = diag::err_no_member_suggest; @@ -9174,7 +9175,8 @@ static NamedDecl *DiagnoseInvalidRedeclaration( // If the qualified name lookup yielded nothing, try typo correction } else if ((Correction = SemaRef.CorrectTypo( Prev.getLookupNameInfo(), Prev.getLookupKind(), S, - &ExtraArgs.D.getCXXScopeSpec(), CCC, Sema::CTK_ErrorRecovery, + &ExtraArgs.D.getCXXScopeSpec(), CCC, + CorrectTypoKind::ErrorRecovery, IsLocalFriend ? nullptr : NewDC))) { // Set up everything for the call to ActOnFunctionDeclarator ExtraArgs.D.SetIdentifier(Correction.getCorrectionAsIdentifierInfo(), @@ -16759,7 +16761,7 @@ NamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc, (Diags.getDiagnosticLevel(diag_id, Loc) >= DiagnosticsEngine::Error)) { DeclFilterCCC<FunctionDecl> CCC{}; Corrected = CorrectTypo(DeclarationNameInfo(&II, Loc), LookupOrdinaryName, - S, nullptr, CCC, CTK_NonError); + S, nullptr, CCC, CorrectTypoKind::NonError); } Diag(Loc, diag_id) << &II; diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 55dc321b690e2..55e2129bf46a2 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -4521,8 +4521,9 @@ Sema::BuildMemInitializer(Decl *ConstructorD, TypoCorrection Corr; MemInitializerValidatorCCC CCC(ClassDecl); if (R.empty() && BaseType.isNull() && - (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, - CCC, CTK_ErrorRecovery, ClassDecl))) { + (Corr = + CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, + CCC, CorrectTypoKind::ErrorRecovery, ClassDecl))) { if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) { // We have found a non-static data member with a similar // name to what was typed; complain and initialize that @@ -12399,7 +12400,7 @@ static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc, NamespaceValidatorCCC CCC{}; if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), Sc, &SS, CCC, - Sema::CTK_ErrorRecovery)) { + CorrectTypoKind::ErrorRecovery)) { // Generally we find it is confusing more than helpful to diagnose the // invisible namespace. // See https://github.com/llvm/llvm-project/issues/73893. @@ -13193,7 +13194,7 @@ NamedDecl *Sema::BuildUsingDeclaration( dyn_cast<CXXRecordDecl>(CurContext)); if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, - CTK_ErrorRecovery)) { + CorrectTypoKind::ErrorRecovery)) { // We reject candidates where DroppedSpecifier == true, hence the // literal '0' below. diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest) diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp index 501d44180e3eb..a4698f76af4eb 100644 --- a/clang/lib/Sema/SemaDeclObjC.cpp +++ b/clang/lib/Sema/SemaDeclObjC.cpp @@ -565,7 +565,7 @@ void SemaObjC::ActOnSuperClassOfClassInterface( ObjCInterfaceValidatorCCC CCC(IDecl); if (TypoCorrection Corrected = SemaRef.CorrectTypo( DeclarationNameInfo(SuperName, SuperLoc), Sema::LookupOrdinaryName, - SemaRef.TUScope, nullptr, CCC, Sema::CTK_ErrorRecovery)) { + SemaRef.TUScope, nullptr, CCC, CorrectTypoKind::ErrorRecovery)) { SemaRef.diagnoseTypo(Corrected, PDiag(diag::err_undef_superclass_suggest) << SuperName << ClassName); PrevDecl = Corrected.getCorrectionDeclAs<ObjCInterfaceDecl>(); @@ -1320,7 +1320,7 @@ void SemaObjC::FindProtocolDeclaration(bool WarnOnDeclarations, TypoCorrection Corrected = SemaRef.CorrectTypo( DeclarationNameInfo(Pair.getIdentifierInfo(), Pair.getLoc()), Sema::LookupObjCProtocolName, SemaRef.TUScope, nullptr, CCC, - Sema::CTK_ErrorRecovery); + CorrectTypoKind::ErrorRecovery); if ((PDecl = Corrected.getCorrectionDeclAs<ObjCProtocolDecl>())) SemaRef.diagnoseTypo(Corrected, PDiag(diag::err_undeclared_protocol_suggest) @@ -1701,7 +1701,7 @@ void SemaObjC::actOnObjCTypeArgsOrProtocolQualifiers( ObjCTypeArgOrProtocolValidatorCCC CCC(Context, lookupKind); TypoCorrection corrected = SemaRef.CorrectTypo( DeclarationNameInfo(identifiers[i], identifierLocs[i]), lookupKind, S, - nullptr, CCC, Sema::CTK_ErrorRecovery); + nullptr, CCC, CorrectTypoKind::ErrorRecovery); if (corrected) { // Did we find a protocol? if (auto proto = corrected.getCorrectionDeclAs<ObjCProtocolDecl>()) { @@ -2005,7 +2005,7 @@ ObjCImplementationDecl *SemaObjC::ActOnStartClassImplementation( ObjCInterfaceValidatorCCC CCC{}; TypoCorrection Corrected = SemaRef.CorrectTypo( DeclarationNameInfo(ClassName, ClassLoc), Sema::LookupOrdinaryName, - SemaRef.TUScope, nullptr, CCC, Sema::CTK_NonError); + SemaRef.TUScope, nullptr, CCC, CorrectTypoKind::NonError); if (Corrected.getCorrectionDeclAs<ObjCInterfaceDecl>()) { // Suggest the (potentially) correct interface name. Don't provide a // code-modification hint or use the typo name for recovery, because @@ -5439,7 +5439,7 @@ ObjCInterfaceDecl *SemaObjC::getObjCInterfaceDecl(const IdentifierInfo *&Id, DeclFilterCCC<ObjCInterfaceDecl> CCC{}; if (TypoCorrection C = SemaRef.CorrectTypo( DeclarationNameInfo(Id, IdLoc), Sema::LookupOrdinaryName, - SemaRef.TUScope, nullptr, CCC, Sema::CTK_ErrorRecovery)) { + SemaRef.TUScope, nullptr, CCC, CorrectTypoKind::ErrorRecovery)) { SemaRef.diagnoseTypo(C, PDiag(diag::err_undef_interface_suggest) << Id); IDecl = C.getCorrectionDeclAs<ObjCInterfaceDecl>(); Id = IDecl->getIdentifier(); diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 8258e2bccb5e7..d72d97addfac2 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -2546,12 +2546,12 @@ bool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, emitEmptyLookupTypoDiagnostic(TC, *this, SS, Name, NameRange, diagnostic, diagnostic_suggest); }, - nullptr, CTK_ErrorRecovery, LookupCtx); + nullptr, CorrectTypoKind::ErrorRecovery, LookupCtx); if (*Out) return true; - } else if (S && (Corrected = - CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, - &SS, CCC, CTK_ErrorRecovery, LookupCtx))) { + } else if (S && (Corrected = CorrectTypo( + R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, + CorrectTypoKind::ErrorRecovery, LookupCtx))) { std::string CorrectedStr(Corrected.getAsString(getLangOpts())); bool DroppedSpecifier = Corrected.WillReplaceSpecifier() && Name.getAsString() == CorrectedStr; @@ -5829,7 +5829,7 @@ static TypoCorrection TryTypoCorrectionForCall(Sema &S, Expr *Fn, if (TypoCorrection Corrected = S.CorrectTypo( DeclarationNameInfo(FuncName, NameLoc), Sema::LookupOrdinaryName, S.getScopeForContext(S.CurContext), nullptr, CCC, - Sema::CTK_ErrorRecovery)) { + CorrectTypoKind::ErrorRecovery)) { if (NamedDecl *ND = Corrected.getFoundDecl()) { if (Corrected.isOverloaded()) { OverloadCandidateSet OCS(NameLoc, OverloadCandidateSet::CSK_Normal); diff --git a/clang/lib/Sema/SemaExprMember.cpp b/clang/lib/Sema/SemaExprMember.cpp index b0872122ed740..053414ff7a1a7 100644 --- a/clang/lib/Sema/SemaExprMember.cpp +++ b/clang/lib/Sema/SemaExprMember.cpp @@ -772,7 +772,7 @@ static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, BaseExpr, BaseExpr->getType(), OpLoc, IsArrow, SS, SourceLocation(), nullptr, R, nullptr, nullptr); }, - Sema::CTK_ErrorRecovery, DC); + CorrectTypoKind::ErrorRecovery, DC); return false; } @@ -1457,7 +1457,7 @@ static ExprResult LookupMemberExpr(Sema &S, LookupResult &R, Validator.IsObjCIvarLookup = IsArrow; if (TypoCorrection Corrected = S.CorrectTypo( R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, - Validator, Sema::CTK_ErrorRecovery, IDecl)) { + Validator, CorrectTypoKind::ErrorRecovery, IDecl)) { IV = Corrected.getCorrectionDeclAs<ObjCIvarDecl>(); S.diagnoseTypo( Corrected, diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index a148759ed52b7..abed95d3eacfc 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/lib/Sema/SemaExprObjC.cpp @@ -2103,7 +2103,8 @@ ExprResult SemaObjC::HandleExprPropertyRefExpr( DeclFilterCCC<ObjCPropertyDecl> CCC{}; if (TypoCorrection Corrected = SemaRef.CorrectTypo( DeclarationNameInfo(MemberName, MemberLoc), Sema::LookupOrdinaryName, - nullptr, nullptr, CCC, Sema::CTK_ErrorRecovery, IFace, false, OPT)) { + nullptr, nullptr, CCC, CorrectTypoKind::ErrorRecovery, IFace, false, + OPT)) { DeclarationName TypoResult = Corrected.getCorrection(); if (TypoResult.isIdentifier() && TypoResult.getAsIdentifierInfo() == Member) { @@ -2353,7 +2354,7 @@ SemaObjC::getObjCMessageKind(Scope *S, IdentifierInfo *Name, ObjCInterfaceOrSuperCCC CCC(SemaRef.getCurMethodDecl()); if (TypoCorrection Corrected = SemaRef.CorrectTypo( Result.getLookupNameInfo(), Result.getLookupKind(), S, nullptr, CCC, - Sema::CTK_ErrorRecovery, nullptr, false, nullptr, false)) { + CorrectTypoKind::ErrorRecovery, nullptr, false, nullptr, false)) { if (Corrected.isKeyword()) { // If we've found the keyword "super" (the only keyword that would be // returned by CorrectTypo), this is a send to super. diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index 29635b035ffcb..db8ba8f0c9823 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -2913,7 +2913,7 @@ InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, if (TypoCorrection Corrected = SemaRef.CorrectTypo( DeclarationNameInfo(FieldName, D->getFieldLoc()), Sema::LookupMemberName, /*Scope=*/nullptr, /*SS=*/nullptr, CCC, - Sema::CTK_ErrorRecovery, RD)) { + CorrectTypoKind::ErrorRecovery, RD)) { SemaRef.diagnoseTypo( Corrected, SemaRef.PDiag(diag::err_field_designator_unknown_suggest) diff --git a/clang/lib/Sema/SemaLookup.cpp b/clang/lib/Sema/SemaLookup.cpp index 80edc3c1bf3ce..29bf274f8a39f 100644 --- a/clang/lib/Sema/SemaLookup.cpp +++ b/clang/lib/Sema/SemaLookup.cpp @@ -5341,9 +5341,9 @@ TypoCorrection Sema::CorrectTypo(const DeclarationNameInfo &TypoName, bool ObjCMessageReceiver = CCC.WantObjCSuper && !CCC.WantRemainingKeywords; IdentifierInfo *Typo = TypoName.getName().getAsIdentifierInfo(); - auto Consumer = makeTypoCorrectionConsumer(TypoName, LookupKind, S, SS, CCC, - MemberContext, EnteringContext, - OPT, Mode == CTK_ErrorRecovery); + auto Consumer = makeTypoCorrectionConsumer( + TypoName, LookupKind, S, SS, CCC, MemberContext, EnteringContext, OPT, + Mode == CorrectTypoKind::ErrorRecovery); if (!Consumer) return TypoCorrection(); @@ -5419,9 +5419,9 @@ TypoExpr *Sema::CorrectTypoDelayed( TypoDiagnosticGenerator TDG, TypoRecoveryCallback TRC, CorrectTypoKind Mode, DeclContext *MemberContext, bool EnteringContext, const ObjCObjectPointerType *OPT) { - auto Consumer = makeTypoCorrectionConsumer(TypoName, LookupKind, S, SS, CCC, - MemberContext, EnteringContext, - OPT, Mode == CTK_ErrorRecovery); + auto Consumer = makeTypoCorrectionConsumer( + TypoName, LookupKind, S, SS, CCC, MemberContext, EnteringContext, OPT, + Mode == CorrectTypoKind::ErrorRecovery); // Give the external sema source a chance to correct the typo. TypoCorrection ExternalTypo; diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index a6ee114a2a803..dada1778b9c15 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -3074,7 +3074,7 @@ ExprResult SemaOpenMP::ActOnOpenMPIdExpression(Scope *CurScope, VarDeclFilterCCC CCC(SemaRef); if (TypoCorrection Corrected = SemaRef.CorrectTypo(Id, Sema::LookupOrdinaryName, CurScope, nullptr, - CCC, Sema::CTK_ErrorRecovery)) { + CCC, CorrectTypoKind::ErrorRecovery)) { SemaRef.diagnoseTypo( Corrected, SemaRef.PDiag(Lookup.empty() ? diag::err_undeclared_var_use_suggest @@ -22893,7 +22893,7 @@ NamedDecl *SemaOpenMP::lookupOpenMPDeclareTargetName( VarOrFuncDeclFilterCCC CCC(SemaRef); if (TypoCorrection Corrected = SemaRef.CorrectTypo(Id, Sema::LookupOrdinaryName, CurScope, nullptr, - CCC, Sema::CTK_ErrorRecovery)) { + CCC, CorrectTypoKind::ErrorRecovery)) { SemaRef.diagnoseTypo(Corrected, SemaRef.PDiag(diag::err_undeclared_var_use_suggest) << Id.getName()); diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp index 466e6b5a10457..a367349d943bf 100644 --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -514,9 +514,9 @@ bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, FilterCCC.WantExpressionKeywords = false; FilterCCC.WantRemainingKeywords = false; FilterCCC.WantCXXNamedCasts = true; - if (TypoCorrection Corrected = - CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, - &SS, FilterCCC, CTK_ErrorRecovery, LookupCtx)) { + if (TypoCorrection Corrected = CorrectTypo( + Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, FilterCCC, + CorrectTypoKind::ErrorRecovery, LookupCtx)) { if (auto *ND = Corrected.getFoundDecl()) Found.addDecl(ND); FilterAcceptableTemplateNames(Found); @@ -686,8 +686,9 @@ void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, DeclarationName Name = NameInfo.getName(); TemplateCandidateFilter CCC(*this); - if (TypoCorrection Corrected = CorrectTypo(NameInfo, LookupKind, S, &SS, CCC, - CTK_ErrorRecovery, LookupCtx)) { + if (TypoCorrection Corrected = + CorrectTypo(NameInfo, LookupKind, S, &SS, CCC, + CorrectTypoKind::ErrorRecovery, LookupCtx)) { auto *ND = Corrected.getFoundDecl(); if (ND) ND = getAsTemplateNameDecl(ND); @@ -3735,7 +3736,7 @@ bool Sema::resolveAssumedTemplateNameAsType(Scope *S, TemplateName &Name, TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, - FilterCCC, CTK_ErrorRecovery); + FilterCCC, CorrectTypoKind::ErrorRecovery); if (Corrected && Corrected.getFoundDecl()) { diagnoseTypo(Corrected, PDiag(diag::err_no_template_suggest) << ATN->getDeclName()); diff --git a/clang/lib/Sema/SemaTemplateVariadic.cpp b/clang/lib/Sema/SemaTemplateVariadic.cpp index cfa8d4d6a2fb4..f876312490208 100644 --- a/clang/lib/Sema/SemaTemplateVariadic.cpp +++ b/clang/lib/Sema/SemaTemplateVariadic.cpp @@ -1158,7 +1158,7 @@ ExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, ParameterPackValidatorCCC CCC{}; if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, - CCC, CTK_ErrorRecovery)) { + CCC, CorrectTypoKind::ErrorRecovery)) { diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here)); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits