diff --git a/lib/Sema/TypeCheckType.cpp b/lib/Sema/TypeCheckType.cpp index a0a7b53286d1..900b79ef7d23 100644 --- a/lib/Sema/TypeCheckType.cpp +++ b/lib/Sema/TypeCheckType.cpp @@ -5391,10 +5391,10 @@ TypeResolver::resolveOwnershipTypeRepr(OwnershipTypeRepr *repr, NeverNullType TypeResolver::resolveIsolatedTypeRepr(IsolatedTypeRepr *repr, TypeResolutionOptions options) { - // isolated is only value for non-EnumCaseDecl parameters. + // isolated is only valid for non-EnumCaseDecl parameters. if ((!options.is(TypeResolverContext::FunctionInput) || - options.hasBase(TypeResolverContext::EnumElementDecl)) && - !options.is(TypeResolverContext::Inherited)) { + (options.hasBase(TypeResolverContext::EnumElementDecl) && + !options.is(TypeResolverContext::Inherited)) || options.is(TypeResolverContext::Inherited))) { diagnoseInvalid( repr, repr->getSpecifierLoc(), diag::attr_only_on_parameters, "isolated"); diff --git a/test/Concurrency/isolated_parameters.swift b/test/Concurrency/isolated_parameters.swift index 531c91e69944..31e99fb79d42 100644 --- a/test/Concurrency/isolated_parameters.swift +++ b/test/Concurrency/isolated_parameters.swift @@ -343,3 +343,8 @@ struct WritableActorKeyPath: Sendable { nonmutating set { setter(root, newValue) } } } + +protocol P {} +struct S: isolated P {} // expected-error {{'isolated' may only be used on parameters}} + +