Index: flang/docs/Extensions.md =================================================================== --- flang/docs/Extensions.md +++ flang/docs/Extensions.md @@ -199,6 +199,10 @@ * Objects in blank COMMON may be initialized. * Multiple specifications of the SAVE attribute on the same object are allowed, with a warning. +* A `POINTER` component's type need not be a sequence type when + the component appears in a derived type with `SEQUENCE`. + (This case should probably be an exception to constraint C740 in + the standard.) ### Extensions supported when enabled by options Index: flang/include/flang/Common/Fortran-features.h =================================================================== --- flang/include/flang/Common/Fortran-features.h +++ flang/include/flang/Common/Fortran-features.h @@ -31,7 +31,7 @@ OldLabelDoEndStatements, LogicalIntegerAssignment, EmptySourceFile, ProgramReturn, ImplicitNoneTypeNever, ImplicitNoneTypeAlways, ForwardRefDummyImplicitNone, OpenAccessAppend, BOZAsDefaultInteger, - DistinguishableSpecifics, DefaultSave) + DistinguishableSpecifics, DefaultSave, PointerInSeqType) using LanguageFeatures = EnumSet; Index: flang/lib/Semantics/resolve-names.cpp =================================================================== --- flang/lib/Semantics/resolve-names.cpp +++ flang/lib/Semantics/resolve-names.cpp @@ -4296,8 +4296,14 @@ if (derivedTypeInfo_.sequence) { // C740 if (const auto *declType{GetDeclTypeSpec()}) { if (!declType->AsIntrinsic() && !declType->IsSequenceType()) { - Say("A sequence type data component must either be of an" - " intrinsic type or a derived sequence type"_err_en_US); + if (GetAttrs().test(Attr::POINTER) && + context().IsEnabled(common::LanguageFeature::PointerInSeqType)) { + if (context().ShouldWarn(common::LanguageFeature::PointerInSeqType)) { + Say("A sequence type data component that is a pointer to a non-sequence type is not standard"_en_US); + } + } else { + Say("A sequence type data component must either be of an intrinsic type or a derived sequence type"_err_en_US); + } } } } Index: flang/test/Semantics/resolve31.f90 =================================================================== --- flang/test/Semantics/resolve31.f90 +++ flang/test/Semantics/resolve31.f90 @@ -83,6 +83,8 @@ class(*), allocatable :: typeStarField !ERROR: A sequence type data component must either be of an intrinsic type or a derived sequence type type(plainType) :: testField1 + !Pointers are ok as an extension + type(plainType), pointer :: testField1p type(sequenceType) :: testField2 procedure(real), pointer, nopass :: procField end type testType