diff --git a/mypy/messages.py b/mypy/messages.py
--- a/mypy/messages.py
+++ b/mypy/messages.py
@@ -2658,6 +2658,7 @@ def get_bad_protocol_flags(
         if (
             IS_CLASSVAR in subflags
             and IS_CLASSVAR not in superflags
+            and IS_SETTABLE in superflags
             or IS_CLASSVAR in superflags
             and IS_CLASSVAR not in subflags
             or IS_SETTABLE in superflags
diff --git a/mypy/subtypes.py b/mypy/subtypes.py
--- a/mypy/subtypes.py
+++ b/mypy/subtypes.py
@@ -1027,7 +1027,10 @@ def named_type(fullname: str) -> Instance:
                 if not is_subtype(supertype, subtype):
                     return False
             if not class_obj:
-                if (IS_CLASSVAR in subflags) != (IS_CLASSVAR in superflags):
+                if IS_SETTABLE not in superflags:
+                    if IS_CLASSVAR in superflags and IS_CLASSVAR not in subflags:
+                        return False
+                elif (IS_CLASSVAR in subflags) != (IS_CLASSVAR in superflags):
                     return False
             else:
                 if IS_VAR in superflags and IS_CLASSVAR not in subflags:

diff --git a/test-data/unit/check-protocols.test b/test-data/unit/check-protocols.test
--- a/test-data/unit/check-protocols.test
+++ b/test-data/unit/check-protocols.test
@@ -1153,6 +1153,25 @@ x2 = y2 # E: Incompatible types in assignment (expression has type "PP", variabl
         # N: Protocol member P.attr expected settable variable, got read-only attribute
 [builtins fixtures/property.pyi]
 
+[case testClassVarProtocolImmutable]
+from typing import Protocol, ClassVar
+
+class P(Protocol):
+    @property
+    def x(self) -> int: ...
+
+class C:
+    x: ClassVar[int]
+
+class Bad:
+    x: ClassVar[str]
+
+x: P = C()
+y: P = Bad()  # E: Incompatible types in assignment (expression has type "Bad", variable has type "P") \
+              # N: Following member(s) of "Bad" have conflicts: \
+              # N:     x: expected "int", got "str"
+[builtins fixtures/property.pyi]
+
 [case testSettablePropertyInProtocols]
 from typing import Protocol
 

Protocol member expected instance variable, got class variable
**Bug Report**

This program ought to be valid, because all the protocol `Foo` is declaring is that the attribute `foo` is readable and returns an `int`.   This requirement is met by `Bar`'s class variable.

```
from typing import *

class Foo(Protocol):
    @property
    def foo(self) -> int:
        ...

class Bar:
    foo : ClassVar[int] = 42

x : Foo = Bar()
```

However, mypy says `Protocol member Foo.foo expected instance variable, got class variablemypy`.

if you just declare `foo : int  = 42`, mypy accepts it, so clearly it understands that variables qualify as read-only properties, just not *class* variables.


**Your Environment**

- Mypy version used: 0.812
- Mypy configuration options from `mypy.ini` (and other config files):
    ```
    [mypy]
    ignore_missing_imports = True
    follow_imports = silent
    show_column_numbers = True
    check_untyped_defs = True
    ```
- Python version used: 3.8.2


mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testCannotAssignNormalToProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testCannotInstantiateProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testGenericMethodWithProtocol2 mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testUnrealtedGenericProtolsEquivalent mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testIndependentProtocolSubtyping mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testSimpleProtocolOneMethod mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testAutomaticProtocolVariance mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testNoneDisablesProtocolImplementation mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testGenericSubProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolAttrAccessDecoratedGetAttrDunder mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolVarianceWithCallableAndList mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testNoneDisablesProtocolSubclassingWithStrictOptional mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testGenericSubProtocolsExtensionInvariant mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolConstraintsUnsolvableWithSelfAnnotation1 mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testSimpleProtocolOneAbstractMethod mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolsWithNoneAndStrictOptional mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testGenericSubProtocolsExtensionCovariant mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolConstraintsUnsolvableWithSelfAnnotation2 mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolMethodBodies mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testBasicSemanalErrorsInProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolConstraintsUnsolvableWithSelfAnnotation3 mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testSelfTypesWithProtocolsBehaveAsWithNominal mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testSimpleProtocolOneMethodOverride mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProhibitSelfDefinitionInProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolVarianceWithUnusedVariable mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testBadVarianceInProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testSimpleProtocolTwoMethodsMerge mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testSubtleBadVarianceInProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testSimpleProtocolTwoMethodsExtend mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testGenericProtocolsInference1 mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolAndRuntimeAreDefinedAlsoInTypingExtensions mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolMethodVsAttributeErrors mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testRecursiveProtocols1 mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolGenericInference2 mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolsCannotInheritFromNormal mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolMethodVsAttributeErrors2 mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolGenericInferenceCovariant mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testGenericMethodWithProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testRecursiveProtocols2 mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolsWithIdenticalOverloads mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testPropertyInProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testRecursiveProtocolSubtleMismatch mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testMutuallyRecursiveProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolsWithIncompatibleOverloads mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testInferProtocolFromProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testMutuallyRecursiveProtocolsTypesWithSubteMismatch mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testJoinProtocolWithProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testMutuallyRecursiveProtocolsTypesWithSubteMismatchWriteable mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testSettablePropertyInProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testJoinOfIncompatibleProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testFinalAttributeProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testTwoUncomfortablyIncompatibleProtocolsWithoutRunningInIssue9771 mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testOverloadOnProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testJoinProtocolWithNormal mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testStaticAndClassMethodsInProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testBasicUnionsOfProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testMeetProtocolWithProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testOverloadedMethodsInProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testHashable mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testUnionsOfNormalClassesWithProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testMeetOfIncompatibleProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testCannotInstantiateProtocolWithOverloadedUnimplementedMethod mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testInstantiationProtocolInTypeForFunctions mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testCannotInstantiateAbstractMethodExplicitProtocolSubtypes mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testMeetProtocolWithNormal mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testCannotInstantiateAbstractVariableExplicitProtocolSubtypes mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testInstantiationProtocolInTypeForAliases mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testCanUseOverloadedImplementationsInProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testInstantiationProtocolInTypeForClassMethods mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testClassVarsInProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testInstantiationProtocolInTypeForVariables mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolIncompatibilityWithGenericMethod mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testBasicCallableStructuralSubtyping mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testAnyWithProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolIncompatibilityWithGenericMethodBounded mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testSimpleRuntimeProtocolCheck mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testErrorsForProtocolsInDifferentPlaces mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolIncompatibilityWithGenericRestricted mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolIncompatibilityWithManyOverloads mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testIterableProtocolOnClass mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testMoreComplexCallableStructuralSubtyping mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolIncompatibilityWithManyConflicts mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testIterableProtocolOnMetaclass mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testRuntimeIterableProtocolCheck mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testStructuralSupportForPartial mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolIncompatibilityWithUnionType mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testClassesGetattrWithProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testStructuralInferenceForCallable mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testImplicitTypesInProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testDontShowNotesForTupleAndIterableProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testNoneSubtypeOfEmptyProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testBasicSizedProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testNotManyFlagConflitsShownInProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testConcreteClassesInProtocolsIsInstance mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testNoneSubtypeOfAllProtocolsWithoutStrictOptional mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testBasicSupportsIntProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testNoneSubtypeOfEmptyProtocolStrict mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolsMoreConflictsNotShown mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testCallableImplementsProtocolGeneric mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolNotesForComplexSignatures mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testConcreteClassesUnionInProtocolsIsInstance mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testCallableImplementsProtocolGenericTight mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testOnlyMethodProtocolUsableWithIsSubclass mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testObjectAllowedInProtocolBases mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testBasicTupleStructuralSubtyping mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testCallableImplementsProtocolGenericNotGeneric mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testCallableImplementsProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testCallableImplementsProtocolOverload mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testCallableImplementsProtocolArgName mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testBasicNamedTupleStructuralSubtyping mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolsAlwaysABCs mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testCallableProtocolVsProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testCallableImplementsProtocolExtraNote mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolVarianceAfterDecorators mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testJoinProtocolCallback mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testNamedTupleWithNoArgsCallableField mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testPartialTypeProtocolHashable mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testNamedTupleWithManyArgsCallableField mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testMeetProtocolCallback mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testLiteralsAgainstProtocols mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testEmptyBodyImplicitlyAbstractProtocolProperty mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolWithSlots mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testPartialAttributeNoneType mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testEmptyBodyImplicitlyAbstractProtocolStub mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testEmptyBodyVariationsImplicitlyAbstractProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testMatchProtocolAgainstOverloadWithAmbiguity mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testNoneVsProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testMatchProtocolAgainstOverloadWithMultipleMatchingItems mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testPartialAttributeNoneTypeStrictOptional mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testEmptyBodyNoneCompatibleProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testPartialTypeProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testEmptyBodyImplicitlyAbstractProtocol mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolAndTypeVariableSpecialCase mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testEmptyBodyWithFinal mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolClassObjectAttribute mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolClassObjectPropertyRejected mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolClassObjectInstanceMethodArg mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolWithNestedClass mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolClassObjectClassVarRejected mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolClassObjectInstanceMethod mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolClassObjectClassMethod mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolClassObjectStaticMethod mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolClassObjectInstanceMethodOverloaded mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolClassObjectSelfTypeInstanceMethod mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolClassObjectGenericInstanceMethod mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolClassObjectSelfTypeClassMethod mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolClassObjectGenericClassMethod mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolTypeTypeAttribute mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolClassObjectAttributeAndCall mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolTypeTypeInstanceMethod mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolTypeTypeClassMethod mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolClassObjectInference mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolTypeTypeSelfTypeInstanceMethod mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testProtocolTypeTypeInference mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testTypeVarInProtocolBody mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testTypeAliasInProtocolBody mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testModuleAsProtocolImplementationInference mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testModuleAsProtocolImplementation mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testModuleAsProtocolImplementationClassVar mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testModuleAsProtocolImplementationClassObject mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testModuleAsProtocolImplementationTypeAlias mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testModuleAsProtocolImplementationFinal mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testModuleAsProtocolRedefinitionTopLevel mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testModuleAsProtocolRedefinitionImportFrom
mypy/test/testcheck.py::TypeCheckSuite::check-protocols.test::testClassVarProtocolImmutable