@@ -322,7 +322,54 @@ struct Subscripts<T> {
322
322
}
323
323
}
324
324
325
- // CHECK-LABEL: sil hidden [ossa] @{{.*}}10subscripts
325
+ struct SubscriptDefaults1 {
326
+ subscript( x: Int = 0 ) -> Int {
327
+ get { fatalError ( ) }
328
+ set { fatalError ( ) }
329
+ }
330
+ subscript( x: Int , y: Int , z: Int = 0 ) -> Int {
331
+ get { fatalError ( ) }
332
+ set { fatalError ( ) }
333
+ }
334
+ subscript( x: Bool , bool y: Bool = false ) -> Bool {
335
+ get { fatalError ( ) }
336
+ set { fatalError ( ) }
337
+ }
338
+ subscript( bool x: Bool , y: Int , z: Int = 0 ) -> Int {
339
+ get { fatalError ( ) }
340
+ set { fatalError ( ) }
341
+ }
342
+ }
343
+
344
+ struct SubscriptDefaults2 {
345
+ subscript( x: Int ? = nil ) -> Int {
346
+ get { fatalError ( ) }
347
+ set { fatalError ( ) }
348
+ }
349
+ }
350
+
351
+ struct SubscriptDefaults3 {
352
+ subscript( x: Int = #line) -> Int {
353
+ get { fatalError ( ) }
354
+ set { fatalError ( ) }
355
+ }
356
+ }
357
+
358
+ struct SubscriptDefaults4 {
359
+ subscript< T : Numeric > ( x x: T , y y: T = 0 ) -> T {
360
+ get { fatalError ( ) }
361
+ set { fatalError ( ) }
362
+ }
363
+ }
364
+
365
+ struct SubscriptDefaults5 {
366
+ subscript< T : ExpressibleByStringLiteral > ( x x: T , y y: T = #function) -> T {
367
+ get { fatalError ( ) }
368
+ set { fatalError ( ) }
369
+ }
370
+ }
371
+
372
+ // CHECK-LABEL: sil hidden [ossa] @{{.*}}10subscripts1x1y1syx_q_SStSHRzSHR_r0_lF
326
373
func subscripts< T: Hashable , U: Hashable > ( x: T , y: U , s: String ) {
327
374
_ = \Subscripts < T > . [ ]
328
375
_ = \Subscripts < T > . [ generic: x]
@@ -352,6 +399,57 @@ func subscripts<T: Hashable, U: Hashable>(x: T, y: U, s: String) {
352
399
353
400
_ = \Subscripts < T > . [ Bass ( ) ]
354
401
_ = \Subscripts < T > . [ Treble ( ) ]
402
+
403
+ _ = \SubscriptDefaults1 . [ ]
404
+ _ = \SubscriptDefaults1 . [ 0 ]
405
+ _ = \SubscriptDefaults1 . [ 0 , 0 ]
406
+ _ = \SubscriptDefaults1 . [ 0 , 0 , 0 ]
407
+ _ = \SubscriptDefaults1 . [ false ]
408
+ _ = \SubscriptDefaults1 . [ false , bool: false ]
409
+ _ = \SubscriptDefaults1 . [ bool: false , 0 ]
410
+ _ = \SubscriptDefaults1 . [ bool: false , 0 , 0 ]
411
+
412
+ _ = \SubscriptDefaults2 . [ ]
413
+ _ = \SubscriptDefaults2 . [ 0 ]
414
+ _ = \SubscriptDefaults3 . [ ]
415
+ _ = \SubscriptDefaults3 . [ 0 ]
416
+ _ = \SubscriptDefaults4 . [ x: 0 ]
417
+ _ = \SubscriptDefaults4 . [ x: 0 , y: 0 ]
418
+ _ = \SubscriptDefaults5 . [ x: " " ]
419
+ _ = \SubscriptDefaults5 . [ x: " " , y: " " ]
420
+ }
421
+
422
+ // CHECK-LABEL: sil hidden [ossa] @{{.*}}check_default_subscripts
423
+ func check_default_subscripts( ) {
424
+ // CHECK: [[INTX:%[0-9]+]] = integer_literal $Builtin.IntLiteral, 0
425
+ // CHECK: [[IX:%[0-9]+]] = apply %{{[0-9]+}}([[INTX]], {{.*}}
426
+ // CHECK: [[INTY:%[0-9]+]] = integer_literal $Builtin.IntLiteral, 0
427
+ // CHECK: [[IY:%[0-9]+]] = apply %{{[0-9]+}}([[INTY]], {{.*}}
428
+ // CHECK: [[KEYPATH:%[0-9]+]] = keypath $WritableKeyPath<SubscriptDefaults4, Int>, (root $SubscriptDefaults4; settable_property $Int, id @$s8keypaths18SubscriptDefaults4V1x1yxx_xtcSjRzluig : $@convention(method) <τ_0_0 where τ_0_0 : Numeric> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, SubscriptDefaults4) -> @out τ_0_0, getter @$s8keypaths18SubscriptDefaults4V1x1yxx_xtcSjRzluipACSiTK : $@convention(thin) (@in_guaranteed SubscriptDefaults4, UnsafeRawPointer) -> @out Int, setter @$s8keypaths18SubscriptDefaults4V1x1yxx_xtcSjRzluipACSiTk : $@convention(thin) (@in_guaranteed Int, @inout SubscriptDefaults4, UnsafeRawPointer) -> (), indices [%$0 : $Int : $Int, %$1 : $Int : $Int], indices_equals @$sS2iTH : $@convention(thin) (UnsafeRawPointer, UnsafeRawPointer) -> Bool, indices_hash @$sS2iTh : $@convention(thin) (UnsafeRawPointer) -> Int) ([[IX]], [[IY]])
429
+ _ = \SubscriptDefaults4 . [ x: 0 , y: 0 ]
430
+
431
+ // CHECK: [[INTINIT:%[0-9]+]] = integer_literal $Builtin.IntLiteral, 0
432
+ // CHECK: [[I:%[0-9]+]] = apply %{{[0-9]+}}([[INTINIT]], {{.*}}
433
+ // CHECK: [[DFN:%[0-9]+]] = function_ref @$s8keypaths18SubscriptDefaults4V1x1yxx_xtcSjRzluipfA0_ : $@convention(thin) <τ_0_0 where τ_0_0 : Numeric> () -> @out τ_0_0
434
+ // CHECK: [[ALLOC:%[0-9]+]] = alloc_stack $Int
435
+ // CHECK: apply [[DFN]]<Int>([[ALLOC]]) : $@convention(thin) <τ_0_0 where τ_0_0 : Numeric> () -> @out τ_0_0
436
+ // CHECK: [[LOAD:%[0-9]+]] = load [trivial] [[ALLOC]] : $*Int
437
+ // CHECK: [[KEYPATH:%[0-9]+]] = keypath $WritableKeyPath<SubscriptDefaults4, Int>, (root $SubscriptDefaults4; settable_property $Int, id @$s8keypaths18SubscriptDefaults4V1x1yxx_xtcSjRzluig : $@convention(method) <τ_0_0 where τ_0_0 : Numeric> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, SubscriptDefaults4) -> @out τ_0_0, getter @$s8keypaths18SubscriptDefaults4V1x1yxx_xtcSjRzluipACSiTK : $@convention(thin) (@in_guaranteed SubscriptDefaults4, UnsafeRawPointer) -> @out Int, setter @$s8keypaths18SubscriptDefaults4V1x1yxx_xtcSjRzluipACSiTk : $@convention(thin) (@in_guaranteed Int, @inout SubscriptDefaults4, UnsafeRawPointer) -> (), indices [%$0 : $Int : $Int, %$1 : $Int : $Int], indices_equals @$sS2iTH : $@convention(thin) (UnsafeRawPointer, UnsafeRawPointer) -> Bool, indices_hash @$sS2iTh : $@convention(thin) (UnsafeRawPointer) -> Int) ([[I]], [[LOAD]])
438
+ _ = \SubscriptDefaults4 . [ x: 0 ]
439
+
440
+ // CHECK: [[STRX_LIT:%[0-9]+]] = string_literal utf8 ""
441
+ // CHECK: [[STRX:%[0-9]+]] = apply %{{[0-9]+}}([[STRX_LIT]], {{.*}}
442
+ // CHECK: [[STRY_LIT:%[0-9]+]] = string_literal utf8 "check_default_subscripts()"
443
+ // CHECK: [[DEF_ARG:%[0-9]+]] = apply %{{[0-9]+}}([[STRY_LIT]], {{.*}}
444
+ // CHECK: keypath $WritableKeyPath<SubscriptDefaults5, String>, (root $SubscriptDefaults5; settable_property $String, id @$s8keypaths18SubscriptDefaults5V1x1yxx_xtcs26ExpressibleByStringLiteralRzluig : $@convention(method) <τ_0_0 where τ_0_0 : ExpressibleByStringLiteral> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, SubscriptDefaults5) -> @out τ_0_0, getter @$s8keypaths18SubscriptDefaults5V1x1yxx_xtcs26ExpressibleByStringLiteralRzluipACSSTK : $@convention(thin) (@in_guaranteed SubscriptDefaults5, UnsafeRawPointer) -> @out String, setter @$s8keypaths18SubscriptDefaults5V1x1yxx_xtcs26ExpressibleByStringLiteralRzluipACSSTk : $@convention(thin) (@in_guaranteed String, @inout SubscriptDefaults5, UnsafeRawPointer) -> (), indices [%$0 : $String : $String, %$1 : $String : $String], indices_equals @$sS2STH : $@convention(thin) (UnsafeRawPointer, UnsafeRawPointer) -> Bool, indices_hash @$sS2STh : $@convention(thin) (UnsafeRawPointer) -> Int) ([[STRX]], [[DEF_ARG]])
445
+ _ = \SubscriptDefaults5 . [ x: " " ]
446
+
447
+ // CHECK: [[STRX_LIT:%[0-9]+]] = string_literal utf8 ""
448
+ // CHECK: [[STRX:%[0-9]+]] = apply %{{[0-9]+}}([[STRX_LIT]], {{.*}}
449
+ // CHECK: [[STRY_LIT:%[0-9]+]] = string_literal utf8 ""
450
+ // CHECK: [[STRY:%[0-9]+]] = apply %{{[0-9]+}}([[STRY_LIT]], {{.*}}
451
+ // CHECK: keypath $WritableKeyPath<SubscriptDefaults5, String>, (root $SubscriptDefaults5; settable_property $String, id @$s8keypaths18SubscriptDefaults5V1x1yxx_xtcs26ExpressibleByStringLiteralRzluig : $@convention(method) <τ_0_0 where τ_0_0 : ExpressibleByStringLiteral> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0, SubscriptDefaults5) -> @out τ_0_0, getter @$s8keypaths18SubscriptDefaults5V1x1yxx_xtcs26ExpressibleByStringLiteralRzluipACSSTK : $@convention(thin) (@in_guaranteed SubscriptDefaults5, UnsafeRawPointer) -> @out String, setter @$s8keypaths18SubscriptDefaults5V1x1yxx_xtcs26ExpressibleByStringLiteralRzluipACSSTk : $@convention(thin) (@in_guaranteed String, @inout SubscriptDefaults5, UnsafeRawPointer) -> (), indices [%$0 : $String : $String, %$1 : $String : $String], indices_equals @$sS2STH : $@convention(thin) (UnsafeRawPointer, UnsafeRawPointer) -> Bool, indices_hash @$sS2STh : $@convention(thin) (UnsafeRawPointer) -> Int) ([[STRX]], [[STRY]])
452
+ _ = \SubscriptDefaults5 . [ x: " " , y: " " ]
355
453
}
356
454
357
455
// CHECK-LABEL: sil hidden [ossa] @{{.*}}subclass_generics
0 commit comments