File: subclass.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (71 lines) | stat: -rw-r--r-- 2,845 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// RUN: %target-swift-frontend -enable-objc-interop -primary-file %s -emit-ir | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-%target-import-type

// REQUIRES: CPU=x86_64

// CHECK-DAG: %swift.refcounted = type {
// CHECK-DAG: [[TYPE:%swift.type]] = type
// CHECK-DAG: [[OBJC_CLASS:%objc_class]] = type {
// CHECK-DAG: [[OPAQUE:%swift.opaque]] = type
// CHECK-DAG: [[A:%T8subclass1AC]] = type <{ [[REF:%swift.refcounted]], %TSi, %TSi }>
// CHECK-DAG: [[INT:%TSi]] = type <{ i64 }>
// CHECK-DAG: [[B:%T8subclass1BC]] = type <{ [[REF]], [[INT]], [[INT]], [[INT]] }>

// CHECK: @_DATA__TtC8subclass1A = internal constant {{.* } }}{
// CHECK: @"$s8subclass1ACMf" = internal global [[A_METADATA:<{.* }>]] <{
// CHECK-SAME:   ptr @"$s8subclass1ACfD",
// CHECK-DIRECT-SAME:   ptr @"$sBoWV",
// CHECK-INDIRECT-SAME:   ptr null,
// CHECK-SAME:   i64 ptrtoint (ptr @"$s8subclass1ACMm" to i64),
// CHECK-DIRECT-SAME:   ptr @"OBJC_CLASS_$_{{(_TtCs12_)?}}SwiftObject",
// CHECK-INDIRECT-SAME:   ptr null,
// CHECK-SAME:   ptr @_objc_empty_cache,
// CHECK-SAME:   ptr null,
// CHECK-SAME:   i64 add (i64 ptrtoint (ptr @_DATA__TtC8subclass1A to i64), i64 [[IS_SWIFT_BIT:1|2]]),
// CHECK-SAME:   ptr @"$s8subclass1AC1fSiyF",
// CHECK-SAME:   ptr @"$s8subclass1AC1gACyFZ"
// CHECK-SAME: }>
// CHECK: @_DATA__TtC8subclass1B = internal constant {{.* } }}{
// CHECK: @"$s8subclass1BCMf" = internal global <{ {{.*}} }> <{
// CHECK-SAME:   ptr @"$s8subclass1BCfD",
// CHECK-DIRECT-SAME:   ptr @"$sBoWV",
// CHECK-INDIRECT-SAME:   ptr null,
// CHECK-SAME:   i64 ptrtoint (ptr @"$s8subclass1BCMm" to i64),
// CHECK-DIRECT-SAME:   ptr {{.*}} @"$s8subclass1ACMf",
// CHECK-INDIRECT-SAME:   ptr null,
// CHECK-SAME:   ptr @_objc_empty_cache,
// CHECK-SAME:   ptr null,
// CHECK-SAME:   i64 add (i64 ptrtoint (ptr @_DATA__TtC8subclass1B to i64), i64 [[IS_SWIFT_BIT]]),
// CHECK-SAME:   ptr @"$s8subclass1BC1fSiyF",
// CHECK-SAME:   ptr @"$s8subclass1AC1gACyFZ"
// CHECK-SAME: }>

// CHECK-DIRECT: @"objc_classes_$s8subclass1ACN" = internal global ptr {{.*}}@"$s8subclass1ACN"
// CHECK-DIRECT: @"objc_classes_$s8subclass1BCN" = internal global ptr {{.*}}@"$s8subclass1BCN"

class A {
  var x = 0
  var y = 0

  func f() -> Int { return x }
  class func g() -> A { return A() }
  init() { }
}

class B : A {
  var z : Int = 10
  override func f() -> Int { return z }
}

class G<T> : A {
}

// Ensure that downcasts to generic types instantiate generic metadata instead
// of trying to reference global metadata. <rdar://problem/14265663>

// CHECK: define hidden swiftcc ptr @"$s8subclass9a_to_gint1aAA1GCySiGAA1AC_tF"(ptr %0) {{.*}} {
func a_to_gint(a: A) -> G<Int> {
  // CHECK: call {{.*}} @__swift_instantiateConcreteTypeFromMangledName({{.*}} @"$s8subclass1GCySiGMD")
  // CHECK: call ptr @swift_dynamicCastClassUnconditional
  return a as! G<Int>
}
// CHECK: }