Author: Yuanfang Chen Date: 2022-08-10T10:51:39-07:00 New Revision: ec0811413375bfe75a9361264f98ad9b5dab85b6
URL: https://github.com/llvm/llvm-project/commit/ec0811413375bfe75a9361264f98ad9b5dab85b6 DIFF: https://github.com/llvm/llvm-project/commit/ec0811413375bfe75a9361264f98ad9b5dab85b6.diff LOG: [NFC][Clang] make AtomicConstraint::ParameterMapping const It was not const due to the way it is initialized. This is needed for a following patch. Added: Modified: clang/include/clang/Sema/SemaConcept.h clang/lib/Sema/SemaConcept.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Sema/SemaConcept.h b/clang/include/clang/Sema/SemaConcept.h index b73a152533d11..a5b65f2edf940 100644 --- a/clang/include/clang/Sema/SemaConcept.h +++ b/clang/include/clang/Sema/SemaConcept.h @@ -28,7 +28,7 @@ class Sema; struct AtomicConstraint { const Expr *ConstraintExpr; - Optional<MutableArrayRef<TemplateArgumentLoc>> ParameterMapping; + Optional<ArrayRef<TemplateArgumentLoc>> ParameterMapping; AtomicConstraint(Sema &S, const Expr *ConstraintExpr) : ConstraintExpr(ConstraintExpr) { }; diff --git a/clang/lib/Sema/SemaConcept.cpp b/clang/lib/Sema/SemaConcept.cpp index f0ccc0710cfb4..7545b7974ce49 100644 --- a/clang/lib/Sema/SemaConcept.cpp +++ b/clang/lib/Sema/SemaConcept.cpp @@ -754,14 +754,13 @@ static bool substituteParameterMappings(Sema &S, NormalizedConstraint &N, llvm::SmallBitVector OccurringIndices(TemplateParams->size()); S.MarkUsedTemplateParameters(Atomic.ConstraintExpr, /*OnlyDeduced=*/false, /*Depth=*/0, OccurringIndices); - Atomic.ParameterMapping.emplace( - MutableArrayRef<TemplateArgumentLoc>( - new (S.Context) TemplateArgumentLoc[OccurringIndices.count()], - OccurringIndices.count())); + TemplateArgumentLoc *TempArgs = + new (S.Context) TemplateArgumentLoc[OccurringIndices.count()]; for (unsigned I = 0, J = 0, C = TemplateParams->size(); I != C; ++I) if (OccurringIndices[I]) - new (&(*Atomic.ParameterMapping)[J++]) TemplateArgumentLoc( - S.getIdentityTemplateArgumentLoc(TemplateParams->begin()[I], + new (&(TempArgs)[J++]) + TemplateArgumentLoc(S.getIdentityTemplateArgumentLoc( + TemplateParams->begin()[I], // Here we assume we do not support things like // template<typename A, typename B> // concept C = ...; @@ -770,9 +769,10 @@ static bool substituteParameterMappings(Sema &S, NormalizedConstraint &N, // struct S { }; // The above currently yields a diagnostic. // We still might have default arguments for concept parameters. - ArgsAsWritten->NumTemplateArgs > I ? - ArgsAsWritten->arguments()[I].getLocation() : - SourceLocation())); + ArgsAsWritten->NumTemplateArgs > I + ? ArgsAsWritten->arguments()[I].getLocation() + : SourceLocation())); + Atomic.ParameterMapping.emplace(TempArgs, OccurringIndices.count()); } Sema::InstantiatingTemplate Inst( S, ArgsAsWritten->arguments().front().getSourceRange().getBegin(), @@ -781,12 +781,12 @@ static bool substituteParameterMappings(Sema &S, NormalizedConstraint &N, ArgsAsWritten->arguments().back().getSourceRange().getEnd())); if (S.SubstTemplateArguments(*Atomic.ParameterMapping, MLTAL, SubstArgs)) return true; - Atomic.ParameterMapping.emplace( - MutableArrayRef<TemplateArgumentLoc>( - new (S.Context) TemplateArgumentLoc[SubstArgs.size()], - SubstArgs.size())); + + TemplateArgumentLoc *TempArgs = + new (S.Context) TemplateArgumentLoc[SubstArgs.size()]; std::copy(SubstArgs.arguments().begin(), SubstArgs.arguments().end(), - N.getAtomicConstraint()->ParameterMapping->begin()); + TempArgs); + Atomic.ParameterMapping.emplace(TempArgs, SubstArgs.size()); return false; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits