[flang-commits] [PATCH] D117158: [flang] Allow pointers to non-sequence types in sequence types
Peter Klausler via Phabricator via flang-commits
flang-commits at lists.llvm.org
Thu Jan 13 17:10:07 PST 2022
klausler updated this revision to Diff 399844.
klausler added a comment.
Rebase (fixing build issue).
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D117158/new/
https://reviews.llvm.org/D117158
Files:
flang/docs/Extensions.md
flang/include/flang/Common/Fortran-features.h
flang/lib/Semantics/resolve-names.cpp
flang/test/Semantics/resolve31.f90
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
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/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<LanguageFeature, LanguageFeature_enumSize>;
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D117158.399844.patch
Type: text/x-patch
Size: 2848 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20220114/e011c352/attachment.bin>
More information about the flang-commits
mailing list