Skip to content

Commit 6e5d6f1

Browse files
committed
ExistentialTypeSyntaxChecker: Fix any fix-it for IUO
1 parent 704244b commit 6e5d6f1

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

lib/Sema/TypeCheckType.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6037,6 +6037,7 @@ class ExistentialTypeSyntaxChecker : public ASTWalker {
60376037
static bool anySyntaxNeedsParens(TypeRepr *parent) {
60386038
switch (parent->getKind()) {
60396039
case TypeReprKind::Optional:
6040+
case TypeReprKind::ImplicitlyUnwrappedOptional:
60406041
case TypeReprKind::Protocol:
60416042
return true;
60426043
case TypeReprKind::Metatype:
@@ -6051,7 +6052,6 @@ class ExistentialTypeSyntaxChecker : public ASTWalker {
60516052
case TypeReprKind::UnqualifiedIdent:
60526053
case TypeReprKind::QualifiedIdent:
60536054
case TypeReprKind::Dictionary:
6054-
case TypeReprKind::ImplicitlyUnwrappedOptional:
60556055
case TypeReprKind::Inverse:
60566056
case TypeReprKind::Tuple:
60576057
case TypeReprKind::Fixed:

test/type/explicit_existential.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,13 @@ func testAnyFixIt() {
419419
let _: (HasAssoc)?
420420
// expected-error@+1 {{constraint that suppresses conformance requires 'any'}}{{11-20=any ~Copyable}}
421421
let _: (~Copyable)?
422+
// expected-error@+1 {{use of protocol 'HasAssoc' as a type must be written 'any HasAssoc'}}{{10-18=(any HasAssoc)}}
423+
let _: HasAssoc!
424+
// expected-error@+2 {{type '(any Copyable)?' cannot be suppressed}}
425+
// expected-warning@+1 {{using '!' is not allowed here; treating this as '?' instead}}
426+
let _: ~Copyable!
427+
// expected-error@+1 {{constraint that suppresses conformance requires 'any'}}{{11-20=any ~Copyable}}
428+
let _: (~Copyable)!
422429
// expected-error@+1 {{use of protocol 'HasAssoc' as a type must be written 'any HasAssoc'}}{{10-23=(any HasAssoc.Type)}}
423430
let _: HasAssoc.Type?
424431
// expected-error@+1 {{constraint that suppresses conformance requires 'any'}}{{10-26=(any (~Copyable).Type)}}

test/type/explicit_existential_swift6.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,13 @@ func testAnyFixIt() {
451451
let _: (HasAssoc)?
452452
// expected-error@+1 {{constraint that suppresses conformance requires 'any'}}{{11-20=any ~Copyable}}
453453
let _: (~Copyable)?
454+
// expected-error@+1 {{use of protocol 'HasAssoc' as a type must be written 'any HasAssoc'}}{{10-18=(any HasAssoc)}}
455+
let _: HasAssoc!
456+
// expected-error@+2 {{type '(any Copyable)?' cannot be suppressed}}
457+
// expected-warning@+1 {{using '!' is not allowed here; treating this as '?' instead}}
458+
let _: ~Copyable!
459+
// expected-error@+1 {{constraint that suppresses conformance requires 'any'}}{{11-20=any ~Copyable}}
460+
let _: (~Copyable)!
454461
// expected-error@+1 {{use of protocol 'HasAssoc' as a type must be written 'any HasAssoc'}}{{10-23=(any HasAssoc.Type)}}
455462
let _: HasAssoc.Type?
456463
// expected-error@+1 {{constraint that suppresses conformance requires 'any'}}{{10-26=(any (~Copyable).Type)}}

0 commit comments

Comments
 (0)