Skip to content

Commit b49487c

Browse files
authored
Merge pull request #10386 from github/redsun82/swift-do-not-extract-inactive-ifconfig-clauses
Swift: do not extract unresolved things from `IfConfigDecl`
2 parents 0f74674 + b4df557 commit b49487c

File tree

55 files changed

+222
-378
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+222
-378
lines changed

swift/codegen/schema.yml

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ Element:
1717
_pragma: cpp_skip # this is emitted using trap entries directly
1818
_pragma: qltest_skip
1919

20+
UnresolvedElement:
21+
_pragma: [ qltest_collapse_hierarchy, qltest_skip ]
22+
2023
File:
2124
name: string
2225
_pragma: qltest_collapse_hierarchy
@@ -27,7 +30,7 @@ DbFile:
2730
UnknownFile:
2831
_extends: File
2932
_synth:
30-
on: {}
33+
on: { }
3134

3235
Locatable:
3336
location:
@@ -41,15 +44,15 @@ Location:
4144
start_column: int
4245
end_line: int
4346
end_column: int
44-
_pragma: [qltest_skip, qltest_collapse_hierarchy]
47+
_pragma: [ qltest_skip, qltest_collapse_hierarchy ]
4548

4649
DbLocation:
4750
_extends: Location
4851

4952
UnknownLocation:
5053
_extends: Location
5154
_synth:
52-
on: {}
55+
on: { }
5356

5457
Comment:
5558
_extends: Locatable
@@ -179,7 +182,9 @@ TypeVariableType:
179182
_extends: Type
180183

181184
UnresolvedType:
182-
_extends: Type
185+
_extends:
186+
- Type
187+
- UnresolvedElement
183188

184189
ClassDecl:
185190
_extends: NominalTypeDecl
@@ -209,7 +214,7 @@ Stmt:
209214

210215
TypeRepr:
211216
_extends: AstNode
212-
type: Type? # type can be absent on unresolved entities
217+
type: Type
213218

214219
FunctionType:
215220
_extends: AnyFunctionType
@@ -299,15 +304,7 @@ EnumCaseDecl:
299304
IfConfigDecl:
300305
_extends: Decl
301306
_children:
302-
clauses: IfConfigClause*
303-
304-
IfConfigClause:
305-
_extends: Locatable
306-
_children:
307-
condition: Expr?
308-
elements: AstNode*
309-
is_active: predicate
310-
_dir: decl
307+
active_elements: AstNode*
311308

312309
ImportDecl:
313310
_extends: Decl
@@ -581,28 +578,36 @@ TypeExpr:
581578
type_repr: TypeRepr?
582579

583580
UnresolvedDeclRefExpr:
584-
_extends: Expr
581+
_extends:
582+
- Expr
583+
- UnresolvedElement
585584
name: string?
586585

587586
UnresolvedDotExpr:
588-
_extends: Expr
587+
_extends:
588+
- Expr
589+
- UnresolvedElement
589590
_children:
590591
base: Expr
591592
name: string
592593

593594
UnresolvedMemberExpr:
594-
_extends: Expr
595+
_extends:
596+
- Expr
597+
- UnresolvedElement
595598
name: string
596-
_pragma: qltest_skip # we should really never extract these
597599

598600
UnresolvedPatternExpr:
599-
_extends: Expr
601+
_extends:
602+
- Expr
603+
- UnresolvedElement
600604
_children:
601605
sub_pattern: Pattern
602606

603607
UnresolvedSpecializeExpr:
604-
_extends: Expr
605-
_pragma: qltest_skip # we should really never extract these
608+
_extends:
609+
- Expr
610+
- UnresolvedElement
606611

607612
VarargExpansionExpr:
608613
_extends: Expr
@@ -864,7 +869,9 @@ ParenExpr:
864869
_extends: IdentityExpr
865870

866871
UnresolvedMemberChainResultExpr:
867-
_extends: IdentityExpr
872+
_extends:
873+
- IdentityExpr
874+
- UnresolvedElement
868875

869876
AnyHashableErasureExpr:
870877
_extends: ImplicitConversionExpr
@@ -960,7 +967,9 @@ UnevaluatedInstanceExpr:
960967
_extends: ImplicitConversionExpr
961968

962969
UnresolvedTypeConversionExpr:
963-
_extends: ImplicitConversionExpr
970+
_extends:
971+
- ImplicitConversionExpr
972+
- UnresolvedElement
964973

965974
BuiltinLiteralExpr:
966975
_extends: LiteralExpr

swift/extractor/infra/SwiftDispatcher.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ class SwiftDispatcher {
2929
const swift::Pattern*,
3030
const swift::TypeRepr*,
3131
const swift::TypeBase*,
32-
const swift::IfConfigClause*,
3332
FilePath>;
3433

3534
template <typename E>
@@ -323,7 +322,6 @@ class SwiftDispatcher {
323322
// as we don't expect `nullptr` here. However `swift::ASTVisitor` and `swift::TypeVisitor` do not
324323
// accept const pointers
325324
virtual void visit(swift::Decl* decl) = 0;
326-
virtual void visit(const swift::IfConfigClause* clause) = 0;
327325
virtual void visit(swift::Stmt* stmt) = 0;
328326
virtual void visit(const swift::StmtCondition* cond) = 0;
329327
virtual void visit(const swift::StmtConditionElement* cond) = 0;

swift/extractor/infra/SwiftTagTraits.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ MAP_TAG(Argument);
4949
#include <swift/AST/ExprNodes.def>
5050

5151
MAP_TAG(Decl);
52-
MAP_TAG(IfConfigClause);
5352
#define ABSTRACT_DECL(CLASS, PARENT) MAP_SUBTAG(CLASS##Decl, PARENT)
5453
#define DECL(CLASS, PARENT) ABSTRACT_DECL(CLASS, PARENT)
5554
#include <swift/AST/DeclNodes.def>

swift/extractor/visitors/DeclVisitor.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -380,15 +380,9 @@ void DeclVisitor::fillAbstractStorageDecl(const swift::AbstractStorageDecl& decl
380380

381381
codeql::IfConfigDecl DeclVisitor::translateIfConfigDecl(const swift::IfConfigDecl& decl) {
382382
auto entry = createEntry(decl);
383-
entry.clauses = dispatcher_.fetchRepeatedLabels(decl.getClauses());
384-
return entry;
385-
}
386-
387-
codeql::IfConfigClause DeclVisitor::translateIfConfigClause(const swift::IfConfigClause& clause) {
388-
auto entry = dispatcher_.createEntry(clause);
389-
entry.condition = dispatcher_.fetchOptionalLabel(clause.Cond);
390-
entry.elements = dispatcher_.fetchRepeatedLabels(clause.Elements);
391-
entry.is_active = clause.isActive;
383+
if (auto activeClause = decl.getActiveClause()) {
384+
entry.active_elements = dispatcher_.fetchRepeatedLabels(activeClause->Elements);
385+
}
392386
return entry;
393387
}
394388

swift/extractor/visitors/DeclVisitor.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ class DeclVisitor : public AstVisitorBase<DeclVisitor> {
1616
using AstVisitorBase<DeclVisitor>::AstVisitorBase;
1717
using AstVisitorBase<DeclVisitor>::visit;
1818

19-
void visit(const swift::IfConfigClause* clause) {
20-
dispatcher_.emit(translateIfConfigClause(*clause));
21-
}
22-
2319
std::optional<codeql::ConcreteFuncDecl> translateFuncDecl(const swift::FuncDecl& decl);
2420
std::optional<codeql::ConstructorDecl> translateConstructorDecl(
2521
const swift::ConstructorDecl& decl);
@@ -50,7 +46,6 @@ class DeclVisitor : public AstVisitorBase<DeclVisitor> {
5046
codeql::ImportDecl translateImportDecl(const swift::ImportDecl& decl);
5147
std::optional<codeql::ModuleDecl> translateModuleDecl(const swift::ModuleDecl& decl);
5248
codeql::IfConfigDecl translateIfConfigDecl(const swift::IfConfigDecl& decl);
53-
codeql::IfConfigClause translateIfConfigClause(const swift::IfConfigClause& clause);
5449

5550
private:
5651
std::string mangledName(const swift::ValueDecl& decl);

swift/extractor/visitors/SwiftVisitor.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ class SwiftVisitor : private SwiftDispatcher {
2222

2323
private:
2424
void visit(swift::Decl* decl) override { declVisitor.visit(decl); }
25-
void visit(const swift::IfConfigClause* clause) override { declVisitor.visit(clause); }
2625
void visit(swift::Stmt* stmt) override { stmtVisitor.visit(stmt); }
2726
void visit(const swift::StmtCondition* cond) override {
2827
emit(stmtVisitor.translateStmtCondition(*cond));

swift/extractor/visitors/TypeVisitor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ void TypeVisitor::visit(swift::TypeBase* type) {
1111

1212
codeql::TypeRepr TypeVisitor::translateTypeRepr(const swift::TypeRepr& typeRepr, swift::Type type) {
1313
auto entry = dispatcher_.createEntry(typeRepr);
14-
entry.type = dispatcher_.fetchOptionalLabel(type);
14+
entry.type = dispatcher_.fetchLabel(type);
1515
return entry;
1616
}
1717

swift/ql/lib/codeql/swift/elements.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import codeql.swift.elements.Locatable
1010
import codeql.swift.elements.Location
1111
import codeql.swift.elements.UnknownFile
1212
import codeql.swift.elements.UnknownLocation
13+
import codeql.swift.elements.UnresolvedElement
1314
import codeql.swift.elements.decl.AbstractFunctionDecl
1415
import codeql.swift.elements.decl.AbstractStorageDecl
1516
import codeql.swift.elements.decl.AbstractTypeParamDecl
@@ -29,7 +30,6 @@ import codeql.swift.elements.decl.FuncDecl
2930
import codeql.swift.elements.decl.GenericContext
3031
import codeql.swift.elements.decl.GenericTypeDecl
3132
import codeql.swift.elements.decl.GenericTypeParamDecl
32-
import codeql.swift.elements.decl.IfConfigClause
3333
import codeql.swift.elements.decl.IfConfigDecl
3434
import codeql.swift.elements.decl.ImportDecl
3535
import codeql.swift.elements.decl.InfixOperatorDecl
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
2+
private import codeql.swift.generated.UnresolvedElement
3+
4+
class UnresolvedElement extends UnresolvedElementBase { }

swift/ql/lib/codeql/swift/elements/decl/IfConfigClause.qll

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

0 commit comments

Comments
 (0)