[clang] ec08114 - [NFC][Clang] make AtomicConstraint::ParameterMapping const
Yuanfang Chen via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 10 10:51:49 PDT 2022
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;
}
More information about the cfe-commits
mailing list