Skip to content

Commit a30ed9e

Browse files
jPaolantonioJames Paolantonio
andauthored
[Const Extract] Fix nil default argument being extracted as nil raw literal (#82339)
This was missed in #78511. Resolves rdar://153563086 Co-authored-by: James Paolantonio <[email protected]>
1 parent bf61199 commit a30ed9e

File tree

2 files changed

+72
-15
lines changed

2 files changed

+72
-15
lines changed

lib/ConstExtract/ConstExtract.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ extractCompileTimeValue(Expr *expr, const DeclContext *declContext) {
414414
assert(!decl->hasDefaultExpr());
415415
switch (decl->getDefaultArgumentKind()) {
416416
case DefaultArgumentKind::NilLiteral:
417-
return std::make_shared<RawLiteralValue>("nil");
417+
return std::make_shared<NilLiteralValue>();
418418
case DefaultArgumentKind::EmptyArray:
419419
return std::make_shared<ArrayValue>(
420420
std::vector<std::shared_ptr<CompileTimeValue>>());

test/ConstExtraction/ExtractCalls.swift

Lines changed: 71 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77
protocol MyProto {}
88

99
public struct Foo : MyProto {
10-
let init1 = Bar()
11-
let init2: Bat = .init()
12-
let init3 = Bat(buz: "hello", fuz: adder(2, 3))
13-
static var init4: Bar? = Bar()
10+
let init1 = Bar()
11+
let init2: Bat = .init()
12+
let init3 = Bat(buz: "hello", fuz: adder(2, 3))
13+
static var init4: Bar? = Bar()
1414

15-
let func1: Int = adder(2, 3)
15+
let init5 = Hux()
16+
let init6 = Hux(fuz: 42)
17+
18+
let func1: Int = adder(2, 3)
1619
}
1720

1821
extension Foo {
@@ -26,16 +29,19 @@ func adder(_ x: Int, _ y: Int) -> Int {
2629
}
2730

2831
public struct Bar {}
29-
public struct Bat {
30-
let buz: String
32+
33+
public class Bat {
34+
let buz: String?
3135
let fuz: Int
3236

33-
init(buz: String = "", fuz: Int = 0) {
37+
init(buz: String? = nil, fuz: Int = 0) {
3438
self.buz = buz
3539
self.fuz = fuz
3640
}
3741
}
3842

43+
public class Hux: Bat {}
44+
3945
// CHECK: [
4046
// CHECK-NEXT: {
4147
// CHECK-NEXT: "typeName": "ExtractCalls.Foo",
@@ -82,9 +88,8 @@ public struct Bat {
8288
// CHECK-NEXT: "arguments": [
8389
// CHECK-NEXT: {
8490
// CHECK-NEXT: "label": "buz",
85-
// CHECK-NEXT: "type": "Swift.String",
86-
// CHECK-NEXT: "valueKind": "RawLiteral",
87-
// CHECK-NEXT: "value": ""
91+
// CHECK-NEXT: "type": "Swift.Optional<Swift.String>",
92+
// CHECK-NEXT: "valueKind": "NilLiteral"
8893
// CHECK-NEXT: },
8994
// CHECK-NEXT: {
9095
// CHECK-NEXT: "label": "fuz",
@@ -109,7 +114,7 @@ public struct Bat {
109114
// CHECK-NEXT: "arguments": [
110115
// CHECK-NEXT: {
111116
// CHECK-NEXT: "label": "buz",
112-
// CHECK-NEXT: "type": "Swift.String",
117+
// CHECK-NEXT: "type": "Swift.Optional<Swift.String>",
113118
// CHECK-NEXT: "valueKind": "RawLiteral",
114119
// CHECK-NEXT: "value": "hello"
115120
// CHECK-NEXT: },
@@ -139,13 +144,65 @@ public struct Bat {
139144
// CHECK-NEXT: }
140145
// CHECK-NEXT: },
141146
// CHECK-NEXT: {
147+
// CHECK-NEXT: "label": "init5",
148+
// CHECK-NEXT: "type": "ExtractCalls.Hux",
149+
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
150+
// CHECK-NEXT: "isStatic": "false",
151+
// CHECK-NEXT: "isComputed": "false",
152+
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractCalls.swift",
153+
// CHECK-NEXT: "line": 15,
154+
// CHECK-NEXT: "valueKind": "InitCall",
155+
// CHECK-NEXT: "value": {
156+
// CHECK-NEXT: "type": "ExtractCalls.Hux",
157+
// CHECK-NEXT: "arguments": [
158+
// CHECK-NEXT: {
159+
// CHECK-NEXT: "label": "buz",
160+
// CHECK-NEXT: "type": "Swift.Optional<Swift.String>",
161+
// CHECK-NEXT: "valueKind": "NilLiteral"
162+
// CHECK-NEXT: },
163+
// CHECK-NEXT: {
164+
// CHECK-NEXT: "label": "fuz",
165+
// CHECK-NEXT: "type": "Swift.Int",
166+
// CHECK-NEXT: "valueKind": "RawLiteral",
167+
// CHECK-NEXT: "value": "0"
168+
// CHECK-NEXT: }
169+
// CHECK-NEXT: ]
170+
// CHECK-NEXT: }
171+
// CHECK-NEXT: },
172+
// CHECK-NEXT: {
173+
// CHECK-NEXT: "label": "init6",
174+
// CHECK-NEXT: "type": "ExtractCalls.Hux",
175+
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
176+
// CHECK-NEXT: "isStatic": "false",
177+
// CHECK-NEXT: "isComputed": "false",
178+
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractCalls.swift",
179+
// CHECK-NEXT: "line": 16,
180+
// CHECK-NEXT: "valueKind": "InitCall",
181+
// CHECK-NEXT: "value": {
182+
// CHECK-NEXT: "type": "ExtractCalls.Hux",
183+
// CHECK-NEXT: "arguments": [
184+
// CHECK-NEXT: {
185+
// CHECK-NEXT: "label": "buz",
186+
// CHECK-NEXT: "type": "Swift.Optional<Swift.String>",
187+
// CHECK-NEXT: "valueKind": "NilLiteral"
188+
// CHECK-NEXT: },
189+
// CHECK-NEXT: {
190+
// CHECK-NEXT: "label": "fuz",
191+
// CHECK-NEXT: "type": "Swift.Int",
192+
// CHECK-NEXT: "valueKind": "RawLiteral",
193+
// CHECK-NEXT: "value": "42"
194+
// CHECK-NEXT: }
195+
// CHECK-NEXT: ]
196+
// CHECK-NEXT: }
197+
// CHECK-NEXT: },
198+
// CHECK-NEXT: {
142199
// CHECK-NEXT: "label": "func1",
143200
// CHECK-NEXT: "type": "Swift.Int",
144201
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
145202
// CHECK-NEXT: "isStatic": "false",
146203
// CHECK-NEXT: "isComputed": "false",
147204
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractCalls.swift",
148-
// CHECK-NEXT: "line": 15,
205+
// CHECK-NEXT: "line": 18,
149206
// CHECK-NEXT: "valueKind": "FunctionCall",
150207
// CHECK-NEXT: "value": {
151208
// CHECK-NEXT: "name": "adder",
@@ -186,7 +243,7 @@ public struct Bat {
186243
// CHECK-NEXT: "isStatic": "false",
187244
// CHECK-NEXT: "isComputed": "true",
188245
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractCalls.swift",
189-
// CHECK-NEXT: "line": 21,
246+
// CHECK-NEXT: "line": 24,
190247
// CHECK-NEXT: "valueKind": "InitCall",
191248
// CHECK-NEXT: "value": {
192249
// CHECK-NEXT: "type": "ExtractCalls.Foo.Boo",

0 commit comments

Comments
 (0)