Skip to content

Commit e8cbe9f

Browse files
committed
Sema: Move -debug-generic-signatures behavior to TypeCheckDeclPrimary.cpp
1 parent 143a1b8 commit e8cbe9f

File tree

2 files changed

+50
-45
lines changed

2 files changed

+50
-45
lines changed

lib/Sema/TypeCheckDeclPrimary.cpp

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2064,6 +2064,27 @@ static void checkProtocolRefinementRequirements(ProtocolDecl *proto) {
20642064
}
20652065
}
20662066

2067+
static void dumpGenericSignature(ASTContext &ctx, GenericContext *GC) {
2068+
if (ctx.TypeCheckerOpts.DebugGenericSignatures) {
2069+
llvm::errs() << "\n";
2070+
if (auto *VD = dyn_cast_or_null<ValueDecl>(GC->getAsDecl())) {
2071+
VD->dumpRef(llvm::errs());
2072+
llvm::errs() << "\n";
2073+
} else {
2074+
GC->printContext(llvm::errs());
2075+
}
2076+
auto sig = GC->getGenericSignature();
2077+
llvm::errs() << "Generic signature: ";
2078+
PrintOptions Opts;
2079+
Opts.ProtocolQualifiedDependentMemberTypes = true;
2080+
sig->print(llvm::errs(), Opts);
2081+
llvm::errs() << "\n";
2082+
llvm::errs() << "Canonical generic signature: ";
2083+
sig.getCanonicalSignature()->print(llvm::errs(), Opts);
2084+
llvm::errs() << "\n";
2085+
}
2086+
}
2087+
20672088
namespace {
20682089
class DeclChecker : public DeclVisitor<DeclChecker> {
20692090
public:
@@ -2711,9 +2732,12 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
27112732
void visitSubscriptDecl(SubscriptDecl *SD) {
27122733
auto *DC = SD->getDeclContext();
27132734

2735+
// Force creation of the generic signature.
2736+
(void) SD->getGenericSignature();
2737+
dumpGenericSignature(Ctx, SD);
2738+
27142739
// Force requests that can emit diagnostics.
27152740
(void) SD->getInterfaceType();
2716-
(void) SD->getGenericSignature();
27172741

27182742
if (!SD->isInvalid()) {
27192743
TypeChecker::checkReferencedGenericParams(SD);
@@ -2803,8 +2827,11 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
28032827
}
28042828

28052829
void visitTypeAliasDecl(TypeAliasDecl *TAD) {
2806-
// Force requests that can emit diagnostics.
2830+
// Force creation of the generic signature.
28072831
(void) TAD->getGenericSignature();
2832+
dumpGenericSignature(Ctx, TAD);
2833+
2834+
// Force requests that can emit diagnostics.
28082835
(void) TAD->getUnderlyingType();
28092836

28102837
// Make sure to check the underlying type.
@@ -2930,6 +2957,10 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
29302957
void visitEnumDecl(EnumDecl *ED) {
29312958
checkUnsupportedNestedType(ED);
29322959

2960+
// Force creation of the generic signature.
2961+
(void) ED->getGenericSignature();
2962+
dumpGenericSignature(Ctx, ED);
2963+
29332964
// Temporary restriction until we figure out pattern matching and
29342965
// enum case construction with packs.
29352966
if (auto genericSig = ED->getGenericSignature()) {
@@ -3012,6 +3043,10 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
30123043
void visitStructDecl(StructDecl *SD) {
30133044
checkUnsupportedNestedType(SD);
30143045

3046+
// Force creation of the generic signature.
3047+
(void) SD->getGenericSignature();
3048+
dumpGenericSignature(Ctx, SD);
3049+
30153050
checkGenericParams(SD);
30163051

30173052
// Force lowering of stored properties.
@@ -3206,6 +3241,7 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
32063241

32073242
// Force creation of the generic signature.
32083243
(void) CD->getGenericSignature();
3244+
dumpGenericSignature(Ctx, CD);
32093245

32103246
checkGenericParams(CD);
32113247

@@ -3317,7 +3353,7 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
33173353
auto *superFile = Super->getModuleScopeContext();
33183354
if (auto *serialized = dyn_cast<SerializedASTFile>(superFile)) {
33193355
const auto effVersion =
3320-
CD->getASTContext().LangOpts.EffectiveLanguageVersion;
3356+
Ctx.LangOpts.EffectiveLanguageVersion;
33213357
if (serialized->getLanguageVersionBuiltWith() != effVersion) {
33223358
CD->diagnose(
33233359
diag::
@@ -3433,6 +3469,8 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
34333469
llvm::errs() << "\n";
34343470
}
34353471

3472+
dumpGenericSignature(Ctx, PD);
3473+
34363474
if (!reqSig.getErrors()) {
34373475
// Always verify signatures, even if building without asserts.
34383476
//
@@ -3463,6 +3501,8 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
34633501
(void) FD->getOperatorDecl();
34643502
(void) FD->getDynamicallyReplacedDecl();
34653503

3504+
dumpGenericSignature(Ctx, FD);
3505+
34663506
if (!isa<AccessorDecl>(FD)) {
34673507
if (!FD->isInvalid()) {
34683508
checkGenericParams(FD);
@@ -3875,9 +3915,12 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
38753915
}
38763916

38773917
void visitConstructorDecl(ConstructorDecl *CD) {
3878-
(void) CD->getInterfaceType();
3918+
// Force creation of the generic signature.
3919+
(void) CD->getGenericSignature();
3920+
dumpGenericSignature(Ctx, CD);
38793921

38803922
// Compute these requests in case they emit diagnostics.
3923+
(void) CD->getInterfaceType();
38813924
(void) CD->getInitKind();
38823925

38833926
if (!CD->isInvalid()) {

lib/Sema/TypeCheckGeneric.cpp

Lines changed: 3 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -643,23 +643,7 @@ GenericSignatureRequest::evaluate(Evaluator &evaluator,
643643
auto req =
644644
Requirement(RequirementKind::Conformance, self,
645645
PD->getDeclaredInterfaceType());
646-
auto sig = GenericSignature::get({self}, {req});
647-
648-
// Debugging of the generic signature builder and generic signature
649-
// generation.
650-
if (ctx.TypeCheckerOpts.DebugGenericSignatures) {
651-
llvm::errs() << "\n";
652-
PD->printContext(llvm::errs());
653-
llvm::errs() << "Generic signature: ";
654-
PrintOptions Opts;
655-
Opts.ProtocolQualifiedDependentMemberTypes = true;
656-
sig->print(llvm::errs(), Opts);
657-
llvm::errs() << "\n";
658-
llvm::errs() << "Canonical generic signature: ";
659-
sig.getCanonicalSignature()->print(llvm::errs(), Opts);
660-
llvm::errs() << "\n";
661-
}
662-
return sig;
646+
return GenericSignature::get({self}, {req});
663647
}
664648

665649
if (auto accessor = dyn_cast<AccessorDecl>(GC))
@@ -824,30 +808,8 @@ GenericSignatureRequest::evaluate(Evaluator &evaluator,
824808
genericParams, WhereClauseOwner(GC),
825809
extraReqs, inferenceSources,
826810
allowConcreteGenericParams};
827-
auto sig = evaluateOrDefault(ctx.evaluator, request,
828-
GenericSignatureWithError()).getPointer();
829-
830-
// Debugging of the generic signature builder and generic signature
831-
// generation.
832-
if (ctx.TypeCheckerOpts.DebugGenericSignatures) {
833-
llvm::errs() << "\n";
834-
if (auto *VD = dyn_cast_or_null<ValueDecl>(GC->getAsDecl())) {
835-
VD->dumpRef(llvm::errs());
836-
llvm::errs() << "\n";
837-
} else {
838-
GC->printContext(llvm::errs());
839-
}
840-
llvm::errs() << "Generic signature: ";
841-
PrintOptions Opts;
842-
Opts.ProtocolQualifiedDependentMemberTypes = true;
843-
sig->print(llvm::errs(), Opts);
844-
llvm::errs() << "\n";
845-
llvm::errs() << "Canonical generic signature: ";
846-
sig.getCanonicalSignature()->print(llvm::errs(), Opts);
847-
llvm::errs() << "\n";
848-
}
849-
850-
return sig;
811+
return evaluateOrDefault(ctx.evaluator, request,
812+
GenericSignatureWithError()).getPointer();
851813
}
852814

853815
///

0 commit comments

Comments
 (0)