Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions include/swift/AST/Attr.def
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,10 @@ SIMPLE_DECL_ATTR(_forbidSerializingReference, ForbidSerializingReference,
OnAnyDecl |
LongAttribute | RejectByParser | UserInaccessible | NotSerialized,
77)
SIMPLE_DECL_ATTR(_hasInitialValue, HasInitialValue,
OnVar |
UserInaccessible,
78)

#undef TYPE_ATTR
#undef DECL_ATTR_ALIAS
Expand Down
2 changes: 2 additions & 0 deletions lib/Sema/TypeCheckAttr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ class AttributeEarlyChecker : public AttributeVisitor<AttributeEarlyChecker> {

#define IGNORED_ATTR(X) void visit##X##Attr(X##Attr *) {}
IGNORED_ATTR(Available)
IGNORED_ATTR(HasInitialValue)
IGNORED_ATTR(CDecl)
IGNORED_ATTR(ClangImporterSynthesizedType)
IGNORED_ATTR(Convenience)
Expand Down Expand Up @@ -774,6 +775,7 @@ class AttributeChecker : public AttributeVisitor<AttributeChecker> {
void visit##CLASS##Attr(CLASS##Attr *) {}

IGNORED_ATTR(Alignment)
IGNORED_ATTR(HasInitialValue)
IGNORED_ATTR(ClangImporterSynthesizedType)
IGNORED_ATTR(Consuming)
IGNORED_ATTR(Convenience)
Expand Down
8 changes: 8 additions & 0 deletions lib/Sema/TypeCheckConstraints.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2494,6 +2494,7 @@ bool TypeChecker::typeCheckBinding(Pattern *&pattern, Expr *&initializer,
bool TypeChecker::typeCheckPatternBinding(PatternBindingDecl *PBD,
unsigned patternNumber,
bool skipApplyingSolution) {
auto &ctx = PBD->getASTContext();
const auto &pbe = PBD->getPatternList()[patternNumber];
Pattern *pattern = PBD->getPattern(patternNumber);
Expr *init = PBD->getInit(patternNumber);
Expand All @@ -2516,6 +2517,13 @@ bool TypeChecker::typeCheckPatternBinding(PatternBindingDecl *PBD,
PBD->setPattern(patternNumber, pattern, initContext);
PBD->setInit(patternNumber, init);

// Add the attribute that preserves the "has an initializer" value across
// module generation, as required for TBDGen.
PBD->getPattern(patternNumber)->forEachVariable([&](VarDecl *VD) {
if (VD->hasStorage())
VD->getAttrs().add(new (ctx) HasInitialValueAttr(/*IsImplicit=*/true));
});

if (!hadError) {
// If we're performing an binding to a weak or unowned variable from a
// constructor call, emit a warning that the instance will be immediately
Expand Down
1 change: 1 addition & 0 deletions lib/Sema/TypeCheckDeclOverride.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1169,6 +1169,7 @@ namespace {
UNINTERESTING_ATTR(ClangImporterSynthesizedType)
UNINTERESTING_ATTR(WeakLinked)
UNINTERESTING_ATTR(Frozen)
UNINTERESTING_ATTR(HasInitialValue)
#undef UNINTERESTING_ATTR

void visitAvailableAttr(AvailableAttr *attr) {
Expand Down
34 changes: 16 additions & 18 deletions lib/TBDGen/TBDGen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,21 +41,6 @@ static bool isGlobalOrStaticVar(VarDecl *VD) {
return VD->isStatic() || VD->getDeclContext()->isModuleScopeContext();
}

void TBDGenVisitor::visitPatternBindingDecl(PatternBindingDecl *PBD) {
for (auto &entry : PBD->getPatternList()) {
auto *var = entry.getAnchoringVarDecl();

// Non-global variables might have an explicit initializer symbol.
if (entry.getNonLazyInit() && !isGlobalOrStaticVar(var)) {
auto declRef =
SILDeclRef(var, SILDeclRef::Kind::StoredPropertyInitializer);
// Stored property initializers for public properties are currently
// public.
addSymbol(declRef);
}
}
}

void TBDGenVisitor::addSymbol(SILDeclRef declRef) {
auto linkage = effectiveLinkageForClassMember(
declRef.getLinkage(ForDefinition),
Expand Down Expand Up @@ -169,11 +154,24 @@ void TBDGenVisitor::visitAbstractStorageDecl(AbstractStorageDecl *ASD) {
}

void TBDGenVisitor::visitVarDecl(VarDecl *VD) {
// Non-global variables might have an explicit initializer symbol, in
// non-resilient modules.
if (VD->getAttrs().hasAttribute<HasInitialValueAttr>() &&
SwiftModule->getResilienceStrategy() == ResilienceStrategy::Default &&
!isGlobalOrStaticVar(VD)) {
auto declRef = SILDeclRef(VD, SILDeclRef::Kind::StoredPropertyInitializer);
// Stored property initializers for public properties are currently
// public.
addSymbol(declRef);
}

// statically/globally stored variables have some special handling.
if (VD->hasStorage() && isGlobalOrStaticVar(VD)) {
// The actual variable has a symbol.
Mangle::ASTMangler mangler;
addSymbol(mangler.mangleEntity(VD, false));
if (getDeclLinkage(VD) == FormalLinkage::PublicUnique) {
// The actual variable has a symbol.
Mangle::ASTMangler mangler;
addSymbol(mangler.mangleEntity(VD, false));
}

// Top-level variables (*not* statics) in the main file don't get accessors,
// despite otherwise looking like globals.
Expand Down
2 changes: 0 additions & 2 deletions lib/TBDGen/TBDGenVisitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,6 @@ class TBDGenVisitor : public ASTVisitor<TBDGenVisitor> {
/// \brief Adds the global symbols associated with the first file.
void addFirstFileSymbols();

void visitPatternBindingDecl(PatternBindingDecl *PBD);

void visitAbstractFunctionDecl(AbstractFunctionDecl *AFD);

void visitAccessorDecl(AccessorDecl *AD);
Expand Down
96 changes: 48 additions & 48 deletions test/IDE/print_ast_tc_decls.swift
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ struct d0100_FooStruct {
// PASS_COMMON-LABEL: {{^}}struct d0100_FooStruct {{{$}}

var instanceVar1: Int = 0
// PASS_COMMON-NEXT: {{^}} var instanceVar1: Int{{$}}
// PASS_COMMON-NEXT: {{^}} @_hasInitialValue var instanceVar1: Int{{$}}

var computedProp1: Int {
get {
Expand Down Expand Up @@ -207,7 +207,7 @@ struct d0100_FooStruct {
// PASS_COMMON-NEXT: {{^}} typealias NestedTypealias = Int{{$}}

static var staticVar1: Int = 42
// PASS_COMMON-NEXT: {{^}} static var staticVar1: Int{{$}}
// PASS_COMMON-NEXT: {{^}} @_hasInitialValue static var staticVar1: Int{{$}}

static var computedStaticProp1: Int {
get {
Expand Down Expand Up @@ -303,7 +303,7 @@ extension d0100_FooStruct.ExtNestedStruct {
// PASS_COMMON-NEXT: {{^}}}{{$}}

var fooObject: d0100_FooStruct = d0100_FooStruct()
// PASS_ONE_LINE-DAG: {{^}}var fooObject: d0100_FooStruct{{$}}
// PASS_ONE_LINE-DAG: {{^}}@_hasInitialValue var fooObject: d0100_FooStruct{{$}}

struct d0110_ReadWriteProperties {
// PASS_RW_PROP_GET_SET-LABEL: {{^}}struct d0110_ReadWriteProperties {{{$}}
Expand Down Expand Up @@ -432,7 +432,7 @@ class d0120_TestClassBase {
final class var baseClassVar3: Int { return 0 }
// PASS_COMMON-NEXT: {{^}} final class var baseClassVar3: Int { get }{{$}}
static var baseClassVar4: Int = 0
// PASS_COMMON-NEXT: {{^}} static var baseClassVar4: Int{{$}}
// PASS_COMMON-NEXT: {{^}} @_hasInitialValue static var baseClassVar4: Int{{$}}
static var baseClassVar5: Int { return 0 }
// PASS_COMMON-NEXT: {{^}} static var baseClassVar5: Int { get }{{$}}

Expand Down Expand Up @@ -541,35 +541,35 @@ class d0170_TestAvailability {
// PASS_EXPLODE_PATTERN-LABEL: {{^}}@objc class d0181_TestIBAttrs {{{$}}

@IBOutlet weak var anOutlet: d0181_TestIBAttrs!
// PASS_EXPLODE_PATTERN-NEXT: {{^}} @objc @IBOutlet @_implicitly_unwrapped_optional weak var anOutlet: @sil_weak d0181_TestIBAttrs!{{$}}
// PASS_EXPLODE_PATTERN-NEXT: {{^}} @objc @IBOutlet @_implicitly_unwrapped_optional @_hasInitialValue weak var anOutlet: @sil_weak d0181_TestIBAttrs!{{$}}

@IBInspectable var inspectableProp: Int = 0
// PASS_EXPLODE_PATTERN-NEXT: {{^}} @objc @IBInspectable var inspectableProp: Int{{$}}
// PASS_EXPLODE_PATTERN-NEXT: {{^}} @objc @IBInspectable @_hasInitialValue var inspectableProp: Int{{$}}

@GKInspectable var inspectableProp2: Int = 0
// PASS_EXPLODE_PATTERN-NEXT: {{^}} @objc @GKInspectable var inspectableProp2: Int{{$}}
// PASS_EXPLODE_PATTERN-NEXT: {{^}} @objc @GKInspectable @_hasInitialValue var inspectableProp2: Int{{$}}
}

struct d0190_LetVarDecls {
// PASS_PRINT_AST-LABEL: {{^}}struct d0190_LetVarDecls {{{$}}
// PASS_PRINT_MODULE_INTERFACE-LABEL: {{^}}struct d0190_LetVarDecls {{{$}}

let instanceVar1: Int = 0
// PASS_PRINT_AST-NEXT: {{^}} let instanceVar1: Int{{$}}
// PASS_PRINT_MODULE_INTERFACE-NEXT: {{^}} let instanceVar1: Int{{$}}
// PASS_PRINT_AST-NEXT: {{^}} @_hasInitialValue let instanceVar1: Int{{$}}
// PASS_PRINT_MODULE_INTERFACE-NEXT: {{^}} @_hasInitialValue let instanceVar1: Int{{$}}

let instanceVar2 = 0
// PASS_PRINT_AST-NEXT: {{^}} let instanceVar2: Int{{$}}
// PASS_PRINT_MODULE_INTERFACE-NEXT: {{^}} let instanceVar2: Int{{$}}
// PASS_PRINT_AST-NEXT: {{^}} @_hasInitialValue let instanceVar2: Int{{$}}
// PASS_PRINT_MODULE_INTERFACE-NEXT: {{^}} @_hasInitialValue let instanceVar2: Int{{$}}

static let staticVar1: Int = 42
// PASS_PRINT_AST-NEXT: {{^}} static let staticVar1: Int{{$}}
// PASS_PRINT_MODULE_INTERFACE-NEXT: {{^}} static let staticVar1: Int{{$}}
// PASS_PRINT_AST-NEXT: {{^}} @_hasInitialValue static let staticVar1: Int{{$}}
// PASS_PRINT_MODULE_INTERFACE-NEXT: {{^}} @_hasInitialValue static let staticVar1: Int{{$}}

static let staticVar2 = 42
// FIXME: PRINTED_WITHOUT_TYPE
// PASS_PRINT_AST-NEXT: {{^}} static let staticVar2: Int{{$}}
// PASS_PRINT_MODULE_INTERFACE-NEXT: {{^}} static let staticVar2: Int{{$}}
// PASS_PRINT_AST-NEXT: {{^}} @_hasInitialValue static let staticVar2: Int{{$}}
// PASS_PRINT_MODULE_INTERFACE-NEXT: {{^}} @_hasInitialValue static let staticVar2: Int{{$}}
}

struct d0200_EscapedIdentifiers {
Expand Down Expand Up @@ -612,7 +612,7 @@ struct d0200_EscapedIdentifiers {
// PASS_COMMON-NEXT: {{^}} func `func`<`let`, `where`>(class: Int, struct: {{(d0200_EscapedIdentifiers.)?}}`protocol`, foo: `let`, bar: `where`) where `let` : {{(d0200_EscapedIdentifiers.)?}}`protocol`, `where` : {{(d0200_EscapedIdentifiers.)?}}`protocol`{{$}}

var `var`: `struct` = `struct`()
// PASS_COMMON-NEXT: {{^}} var `var`: {{(d0200_EscapedIdentifiers.)?}}`struct`{{$}}
// PASS_COMMON-NEXT: {{^}} @_hasInitialValue var `var`: {{(d0200_EscapedIdentifiers.)?}}`struct`{{$}}

var tupleType: (`var`: Int, `let`: `struct`)
// PASS_COMMON-NEXT: {{^}} var tupleType: (`var`: Int, `let`: {{(d0200_EscapedIdentifiers.)?}}`struct`){{$}}
Expand All @@ -635,16 +635,16 @@ struct d0210_Qualifications {
// PASS_QUAL_IF_AMBIGUOUS: {{^}}struct d0210_Qualifications {{{$}}

var propFromStdlib1: Int = 0
// PASS_QUAL_UNQUAL-NEXT: {{^}} var propFromStdlib1: Int{{$}}
// PASS_QUAL_IF_AMBIGUOUS-NEXT: {{^}} var propFromStdlib1: Int{{$}}
// PASS_QUAL_UNQUAL-NEXT: {{^}} @_hasInitialValue var propFromStdlib1: Int{{$}}
// PASS_QUAL_IF_AMBIGUOUS-NEXT: {{^}} @_hasInitialValue var propFromStdlib1: Int{{$}}

var propFromSwift1: FooSwiftStruct = FooSwiftStruct()
// PASS_QUAL_UNQUAL-NEXT: {{^}} var propFromSwift1: FooSwiftStruct{{$}}
// PASS_QUAL_IF_AMBIGUOUS-NEXT: {{^}} var propFromSwift1: foo_swift_module.FooSwiftStruct{{$}}
// PASS_QUAL_UNQUAL-NEXT: {{^}} @_hasInitialValue var propFromSwift1: FooSwiftStruct{{$}}
// PASS_QUAL_IF_AMBIGUOUS-NEXT: {{^}} @_hasInitialValue var propFromSwift1: foo_swift_module.FooSwiftStruct{{$}}

var propFromClang1: FooStruct1 = FooStruct1(x: 0, y: 0.0)
// PASS_QUAL_UNQUAL-NEXT: {{^}} var propFromClang1: FooStruct1{{$}}
// PASS_QUAL_IF_AMBIGUOUS-NEXT: {{^}} var propFromClang1: FooStruct1{{$}}
// PASS_QUAL_UNQUAL-NEXT: {{^}} @_hasInitialValue var propFromClang1: FooStruct1{{$}}
// PASS_QUAL_IF_AMBIGUOUS-NEXT: {{^}} @_hasInitialValue var propFromClang1: FooStruct1{{$}}


func instanceFuncFromStdlib1(a: Int) -> Float {
Expand Down Expand Up @@ -678,43 +678,43 @@ class d0250_ExplodePattern {
var instanceVar1 = 0
var instanceVar2 = 0.0
var instanceVar3 = ""
// PASS_EXPLODE_PATTERN: {{^}} var instanceVar1: Int{{$}}
// PASS_EXPLODE_PATTERN: {{^}} var instanceVar2: Double{{$}}
// PASS_EXPLODE_PATTERN: {{^}} var instanceVar3: String{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue var instanceVar1: Int{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue var instanceVar2: Double{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue var instanceVar3: String{{$}}

var instanceVar4 = FooStruct()
var (instanceVar5, instanceVar6) = (FooStruct(), FooStruct())
var (instanceVar7, instanceVar8) = (FooStruct(), FooStruct())
var (instanceVar9, instanceVar10) : (FooStruct, FooStruct) = (FooStruct(), FooStruct())
final var (instanceVar11, instanceVar12) = (FooStruct(), FooStruct())
// PASS_EXPLODE_PATTERN: {{^}} var instanceVar4: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} var instanceVar5: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} var instanceVar6: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} var instanceVar7: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} var instanceVar8: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} var instanceVar9: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} var instanceVar10: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} final var instanceVar11: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} final var instanceVar12: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue var instanceVar4: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue var instanceVar5: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue var instanceVar6: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue var instanceVar7: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue var instanceVar8: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue var instanceVar9: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue var instanceVar10: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue final var instanceVar11: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue final var instanceVar12: FooStruct{{$}}

let instanceLet1 = 0
let instanceLet2 = 0.0
let instanceLet3 = ""
// PASS_EXPLODE_PATTERN: {{^}} final let instanceLet1: Int{{$}}
// PASS_EXPLODE_PATTERN: {{^}} final let instanceLet2: Double{{$}}
// PASS_EXPLODE_PATTERN: {{^}} final let instanceLet3: String{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue final let instanceLet1: Int{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue final let instanceLet2: Double{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue final let instanceLet3: String{{$}}

let instanceLet4 = FooStruct()
let (instanceLet5, instanceLet6) = (FooStruct(), FooStruct())
let (instanceLet7, instanceLet8) = (FooStruct(), FooStruct())
let (instanceLet9, instanceLet10) : (FooStruct, FooStruct) = (FooStruct(), FooStruct())
// PASS_EXPLODE_PATTERN: {{^}} final let instanceLet4: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} final let instanceLet5: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} final let instanceLet6: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} final let instanceLet7: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} final let instanceLet8: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} final let instanceLet9: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} final let instanceLet10: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue final let instanceLet4: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue final let instanceLet5: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue final let instanceLet6: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue final let instanceLet7: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue final let instanceLet8: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue final let instanceLet9: FooStruct{{$}}
// PASS_EXPLODE_PATTERN: {{^}} @_hasInitialValue final let instanceLet10: FooStruct{{$}}
}

class d0260_ExplodePattern_TestClassBase {
Expand Down Expand Up @@ -879,11 +879,11 @@ protocol AssociatedType1 {
//===---

var d0300_topLevelVar1: Int = 42
// PASS_COMMON: {{^}}var d0300_topLevelVar1: Int{{$}}
// PASS_COMMON: {{^}}@_hasInitialValue var d0300_topLevelVar1: Int{{$}}
// PASS_COMMON-NOT: d0300_topLevelVar1

var d0400_topLevelVar2: Int = 42
// PASS_COMMON: {{^}}var d0400_topLevelVar2: Int{{$}}
// PASS_COMMON: {{^}}@_hasInitialValue var d0400_topLevelVar2: Int{{$}}
// PASS_COMMON-NOT: d0400_topLevelVar2

var d0500_topLevelVar2: Int {
Expand All @@ -902,13 +902,13 @@ class d0600_InClassVar1 {
// PASS_COMMON-NOT: instanceVar1

var instanceVar2: Int = 42
// PASS_COMMON: {{^}} var instanceVar2: Int{{$}}
// PASS_COMMON: {{^}} @_hasInitialValue var instanceVar2: Int{{$}}
// PASS_COMMON-NOT: instanceVar2

// FIXME: this is sometimes printed without a type, see PASS_EXPLODE_PATTERN.
// FIXME: PRINTED_WITHOUT_TYPE
var instanceVar3 = 42
// PASS_COMMON: {{^}} var instanceVar3
// PASS_COMMON: {{^}} @_hasInitialValue var instanceVar3
// PASS_COMMON-NOT: instanceVar3

var instanceVar4: Int {
Expand Down
12 changes: 6 additions & 6 deletions test/IDE/reconstruct_type_from_mangled_name.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ struct Mystruct1 {
func s1f1() -> Int { return 0 }
// CHECK: decl: func s1f1() -> Int
var intField = 3
// CHECK: decl: var intField: Int
// CHECK: decl: @_hasInitialValue var intField: Int
// CHECK: decl: init(intField: Int)
// CHECK: decl: init()
}
Expand All @@ -22,22 +22,22 @@ struct MyStruct2 {
class Myclass1 {
// CHECK: decl: class Myclass1
var intField = 4
// CHECK: decl: var intField: Int
// CHECK: decl: @_hasInitialValue var intField: Int
// CHECK: decl: init()
}

func f1() {
// CHECK: decl: func f1()
var s1ins = Mystruct1() // Implicit ctor
// CHECK: decl: var s1ins: Mystruct1
// CHECK: decl: @_hasInitialValue var s1ins: Mystruct1
_ = Mystruct1(intField: 1) // Implicit ctor

s1ins.intField = 34
// CHECK: type: Mystruct1
// CHECK: type: Int

var c1ins = Myclass1()
// CHECK: decl: var c1ins: Myclass1
// CHECK: decl: @_hasInitialValue var c1ins: Myclass1
// CHECK: type: Myclass1

c1ins.intField = 3
Expand All @@ -59,7 +59,7 @@ class Myclass2 {
// CHECK: decl: func f1()

var arr1 = [1, 2]
// CHECK: decl: var arr1: [Int]
// CHECK: decl: @_hasInitialValue var arr1: [Int]
// CHECK: type: Array<Int>

arr1.append(1)
Expand Down Expand Up @@ -151,7 +151,7 @@ struct MyGenStruct1<T, U: ExpressibleByStringLiteral, V: Sequence> {
}

let genstruct1 = MyGenStruct1<Int, String, [Float]>(x: 1, y: "", z: [1.0])
// CHECK: decl: let genstruct1: MyGenStruct1<Int, String, [Float]>
// CHECK: decl: @_hasInitialValue let genstruct1: MyGenStruct1<Int, String, [Float]>

func test001() {
// CHECK: decl: func test001()
Expand Down
4 changes: 2 additions & 2 deletions test/SIL/Parser/final.swift
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
// RUN: %target-swift-frontend %s -emit-silgen | %FileCheck %s

// CHECK: final class Rect
// CHECK: @sil_stored final var orgx: Double
// CHECK: @sil_stored @_hasInitialValue final var orgx: Double
final class Rect {
var orgx = 0.0
}

protocol P { }
// CHECK: struct Rect2 : P {
// CHECK: @sil_stored var orgx: Double
// CHECK: @sil_stored @_hasInitialValue var orgx: Double
struct Rect2 : P {
var orgx = 0.0
}
Loading