Skip to content

Commit 15b08b6

Browse files
author
git apple-llvm automerger
committed
Merge commit '19e2174d5435' from llvm.org/main into next
2 parents e113439 + 19e2174 commit 15b08b6

14 files changed

+2
-165
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -802,11 +802,6 @@ Bug Fixes to C++ Support
802802
- Fix crash when parsing nested requirement. Fixes:
803803
(`#73112 <https://github.com/llvm/llvm-project/issues/73112>`_)
804804

805-
- Clang now immediately instantiates function template specializations
806-
at the end of the definition of the corresponding function template
807-
when the definition appears after the first point of instantiation.
808-
(`#73232 <https://github.com/llvm/llvm-project/issues/73232>`_)
809-
810805
Bug Fixes to AST Handling
811806
^^^^^^^^^^^^^^^^^^^^^^^^^
812807
- Fixed an import failure of recursive friend class template.

clang/include/clang/Sema/ExternalSemaSource.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,6 @@ class ExternalSemaSource : public ExternalASTSource {
181181
SmallVectorImpl<std::pair<ValueDecl *,
182182
SourceLocation> > &Pending) {}
183183

184-
virtual void ReadPendingInstantiationsOfConstexprEntity(
185-
const NamedDecl *D, llvm::SmallSetVector<NamedDecl *, 4> &Decls){};
186-
187184
/// Read the set of late parsed template functions for this source.
188185
///
189186
/// The external source should insert its own late parsed template functions

clang/include/clang/Sema/MultiplexExternalSemaSource.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -319,9 +319,6 @@ class MultiplexExternalSemaSource : public ExternalSemaSource {
319319
void ReadPendingInstantiations(
320320
SmallVectorImpl<std::pair<ValueDecl*, SourceLocation> >& Pending) override;
321321

322-
virtual void ReadPendingInstantiationsOfConstexprEntity(
323-
const NamedDecl *D, llvm::SmallSetVector<NamedDecl *, 4> &Decls) override;
324-
325322
/// Read the set of late parsed template functions for this source.
326323
///
327324
/// The external source should insert its own late parsed template functions

clang/include/clang/Sema/Sema.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@
5959
#include "clang/Sema/TypoCorrection.h"
6060
#include "clang/Sema/Weak.h"
6161
#include "llvm/ADT/ArrayRef.h"
62-
#include "llvm/ADT/DenseMap.h"
6362
#include "llvm/ADT/SetVector.h"
6463
#include "llvm/ADT/SmallBitVector.h"
6564
#include "llvm/ADT/SmallPtrSet.h"
@@ -10133,12 +10132,6 @@ class Sema final {
1013310132
/// but have not yet been performed.
1013410133
std::deque<PendingImplicitInstantiation> PendingInstantiations;
1013510134

10136-
/// Track constexpr functions referenced before they are (lexically) defined.
10137-
/// The key is the pattern, associated with a list of specialisations that
10138-
/// need to be instantiated when the pattern is defined.
10139-
llvm::DenseMap<NamedDecl *, SmallVector<NamedDecl *>>
10140-
PendingInstantiationsOfConstexprEntities;
10141-
1014210135
/// Queue of implicit template instantiations that cannot be performed
1014310136
/// eagerly.
1014410137
SmallVector<PendingImplicitInstantiation, 1> LateParsedInstantiations;
@@ -10457,9 +10450,6 @@ class Sema final {
1045710450
bool Recursive = false,
1045810451
bool DefinitionRequired = false,
1045910452
bool AtEndOfTU = false);
10460-
10461-
void PerformPendingInstantiationsOfConstexprFunctions(FunctionDecl *Template);
10462-
1046310453
VarTemplateSpecializationDecl *BuildVarTemplateInstantiation(
1046410454
VarTemplateDecl *VarTemplate, VarDecl *FromVar,
1046510455
const TemplateArgumentList &TemplateArgList,

clang/include/clang/Serialization/ASTBitCodes.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -706,10 +706,6 @@ enum ASTRecordTypes {
706706
/// Record code for an unterminated \#pragma clang assume_nonnull begin
707707
/// recorded in a preamble.
708708
PP_ASSUME_NONNULL_LOC = 67,
709-
710-
/// Record code for constexpr templated entities that have been used but not
711-
/// yet instantiated.
712-
PENDING_INSTANTIATIONS_OF_CONSTEXPR_ENTITIES = 68,
713709
};
714710

715711
/// Record types used within a source manager block.

clang/include/clang/Serialization/ASTReader.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -831,9 +831,6 @@ class ASTReader
831831
/// is the instantiation location.
832832
SmallVector<serialization::DeclID, 64> PendingInstantiations;
833833

834-
llvm::DenseMap<serialization::DeclID, std::set<serialization::DeclID>>
835-
PendingInstantiationsOfConstexprEntities;
836-
837834
//@}
838835

839836
/// \name DiagnosticsEngine-relevant special data
@@ -2118,9 +2115,6 @@ class ASTReader
21182115
SmallVectorImpl<std::pair<ValueDecl *,
21192116
SourceLocation>> &Pending) override;
21202117

2121-
virtual void ReadPendingInstantiationsOfConstexprEntity(
2122-
const NamedDecl *D, llvm::SmallSetVector<NamedDecl *, 4> &Decls) override;
2123-
21242118
void ReadLateParsedTemplates(
21252119
llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
21262120
&LPTMap) override;

clang/lib/Sema/MultiplexExternalSemaSource.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -310,12 +310,6 @@ void MultiplexExternalSemaSource::ReadPendingInstantiations(
310310
Sources[i]->ReadPendingInstantiations(Pending);
311311
}
312312

313-
void MultiplexExternalSemaSource::ReadPendingInstantiationsOfConstexprEntity(
314-
const NamedDecl *D, llvm::SmallSetVector<NamedDecl *, 4> &Decls) {
315-
for (size_t i = 0; i < Sources.size(); ++i)
316-
Sources[i]->ReadPendingInstantiationsOfConstexprEntity(D, Decls);
317-
}
318-
319313
void MultiplexExternalSemaSource::ReadLateParsedTemplates(
320314
llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
321315
&LPTMap) {

clang/lib/Sema/SemaDecl.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16310,9 +16310,6 @@ Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body,
1631016310
if (FD && !FD->isDeleted())
1631116311
checkTypeSupport(FD->getType(), FD->getLocation(), FD);
1631216312

16313-
if (FD && FD->isConstexpr() && FD->isTemplated())
16314-
PerformPendingInstantiationsOfConstexprFunctions(FD);
16315-
1631616313
return dcl;
1631716314
}
1631816315

clang/lib/Sema/SemaExpr.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19123,17 +19123,12 @@ void Sema::MarkFunctionReferenced(SourceLocation Loc, FunctionDecl *Func,
1912319123
CodeSynthesisContexts.size())
1912419124
PendingLocalImplicitInstantiations.push_back(
1912519125
std::make_pair(Func, PointOfInstantiation));
19126-
else if (Func->isConstexpr()) {
19126+
else if (Func->isConstexpr())
1912719127
// Do not defer instantiations of constexpr functions, to avoid the
1912819128
// expression evaluator needing to call back into Sema if it sees a
1912919129
// call to such a function.
1913019130
InstantiateFunctionDefinition(PointOfInstantiation, Func);
19131-
if (!Func->isDefined()) {
19132-
PendingInstantiationsOfConstexprEntities
19133-
[Func->getTemplateInstantiationPattern()->getCanonicalDecl()]
19134-
.push_back(Func);
19135-
}
19136-
} else {
19131+
else {
1913719132
Func->setInstantiationIsPending(true);
1913819133
PendingInstantiations.push_back(
1913919134
std::make_pair(Func, PointOfInstantiation));

clang/lib/Sema/SemaTemplateInstantiateDecl.cpp

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6495,34 +6495,6 @@ void Sema::PerformPendingInstantiations(bool LocalOnly) {
64956495
PendingInstantiations.swap(delayedPCHInstantiations);
64966496
}
64976497

6498-
// Instantiate all referenced specializations of the given function template
6499-
// definition. This make sure that constexpr function templates that are defined
6500-
// after the point of instantiation of their use can be evaluated after they
6501-
// are defined. see CWG2497.
6502-
void Sema::PerformPendingInstantiationsOfConstexprFunctions(FunctionDecl *Tpl) {
6503-
6504-
auto InstantiateAll = [&](const auto &Range) {
6505-
for (NamedDecl *D : Range) {
6506-
FunctionDecl *Fun = cast<FunctionDecl>(D);
6507-
InstantiateFunctionDefinition(Fun->getPointOfInstantiation(), Fun);
6508-
}
6509-
};
6510-
6511-
auto It =
6512-
PendingInstantiationsOfConstexprEntities.find(Tpl->getCanonicalDecl());
6513-
if (It != PendingInstantiationsOfConstexprEntities.end()) {
6514-
auto Decls = std::move(It->second);
6515-
PendingInstantiationsOfConstexprEntities.erase(It);
6516-
InstantiateAll(Decls);
6517-
}
6518-
6519-
llvm::SmallSetVector<NamedDecl *, 4> Decls;
6520-
if (ExternalSource) {
6521-
ExternalSource->ReadPendingInstantiationsOfConstexprEntity(Tpl, Decls);
6522-
InstantiateAll(Decls);
6523-
}
6524-
}
6525-
65266498
void Sema::PerformDependentDiagnostics(const DeclContext *Pattern,
65276499
const MultiLevelTemplateArgumentList &TemplateArgs) {
65286500
for (auto *DD : Pattern->ddiags()) {

clang/lib/Serialization/ASTReader.cpp

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3757,19 +3757,6 @@ llvm::Error ASTReader::ReadASTBlock(ModuleFile &F,
37573757
}
37583758
break;
37593759

3760-
case PENDING_INSTANTIATIONS_OF_CONSTEXPR_ENTITIES:
3761-
if (Record.size() % 2 != 0)
3762-
return llvm::createStringError(
3763-
std::errc::illegal_byte_sequence,
3764-
"Invalid PENDING_INSTANTIATIONS_OF_CONSTEXPR_ENTITIES block");
3765-
3766-
for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3767-
DeclID Key = getGlobalDeclID(F, Record[I++]);
3768-
DeclID Value = getGlobalDeclID(F, Record[I++]);
3769-
PendingInstantiationsOfConstexprEntities[Key].insert(Value);
3770-
}
3771-
break;
3772-
37733760
case SEMA_DECL_REFS:
37743761
if (Record.size() != 3)
37753762
return llvm::createStringError(std::errc::illegal_byte_sequence,
@@ -8778,20 +8765,6 @@ void ASTReader::ReadPendingInstantiations(
87788765
PendingInstantiations.clear();
87798766
}
87808767

8781-
void ASTReader::ReadPendingInstantiationsOfConstexprEntity(
8782-
const NamedDecl *D, llvm::SmallSetVector<NamedDecl *, 4> &Decls) {
8783-
for (auto *Redecl : D->redecls()) {
8784-
if (!Redecl->isFromASTFile())
8785-
continue;
8786-
DeclID Id = Redecl->getGlobalID();
8787-
auto It = PendingInstantiationsOfConstexprEntities.find(Id);
8788-
if (It == PendingInstantiationsOfConstexprEntities.end())
8789-
continue;
8790-
for (DeclID InstantiationId : It->second)
8791-
Decls.insert(cast<NamedDecl>(GetDecl(InstantiationId)));
8792-
}
8793-
}
8794-
87958768
void ASTReader::ReadLateParsedTemplates(
87968769
llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
87978770
&LPTMap) {

clang/lib/Serialization/ASTWriter.cpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -850,7 +850,6 @@ void ASTWriter::WriteBlockInfoBlock() {
850850
RECORD(SEMA_DECL_REFS);
851851
RECORD(WEAK_UNDECLARED_IDENTIFIERS);
852852
RECORD(PENDING_IMPLICIT_INSTANTIATIONS);
853-
RECORD(PENDING_INSTANTIATIONS_OF_CONSTEXPR_ENTITIES);
854853
RECORD(UPDATE_VISIBLE);
855854
RECORD(DECL_UPDATE_OFFSETS);
856855
RECORD(DECL_UPDATES);
@@ -4824,16 +4823,6 @@ ASTFileSignature ASTWriter::WriteASTCore(Sema &SemaRef, StringRef isysroot,
48244823
assert(SemaRef.PendingLocalImplicitInstantiations.empty() &&
48254824
"There are local ones at end of translation unit!");
48264825

4827-
// Build a record containing all pending instantiations of constexpr
4828-
// entities.
4829-
RecordData PendingInstantiationsOfConstexprEntities;
4830-
for (const auto &I : SemaRef.PendingInstantiationsOfConstexprEntities) {
4831-
for (const auto &Elem : I.second) {
4832-
AddDeclRef(I.first, PendingInstantiationsOfConstexprEntities);
4833-
AddDeclRef(Elem, PendingInstantiationsOfConstexprEntities);
4834-
}
4835-
}
4836-
48374826
// Build a record containing some declaration references.
48384827
RecordData SemaDeclRefs;
48394828
if (SemaRef.StdNamespace || SemaRef.StdBadAlloc || SemaRef.StdAlignValT) {
@@ -5151,11 +5140,6 @@ ASTFileSignature ASTWriter::WriteASTCore(Sema &SemaRef, StringRef isysroot,
51515140
if (!PendingInstantiations.empty())
51525141
Stream.EmitRecord(PENDING_IMPLICIT_INSTANTIATIONS, PendingInstantiations);
51535142

5154-
// Write the record containing pending instantiations of constexpr entities.
5155-
if (!PendingInstantiationsOfConstexprEntities.empty())
5156-
Stream.EmitRecord(PENDING_INSTANTIATIONS_OF_CONSTEXPR_ENTITIES,
5157-
PendingInstantiationsOfConstexprEntities);
5158-
51595143
// Write the record containing declaration references of Sema.
51605144
if (!SemaDeclRefs.empty())
51615145
Stream.EmitRecord(SEMA_DECL_REFS, SemaDeclRefs);

clang/test/PCH/instantiate-used-constexpr-function.cpp

Lines changed: 0 additions & 17 deletions
This file was deleted.

clang/test/SemaTemplate/instantiate-used-constexpr-function.cpp

Lines changed: 0 additions & 30 deletions
This file was deleted.

0 commit comments

Comments
 (0)