[flang-commits] [flang] 040e0d4 - [flang]Accept directive inside type definition (#87804)
via flang-commits
flang-commits at lists.llvm.org
Tue Apr 9 04:54:28 PDT 2024
Author: Mats Petersson
Date: 2024-04-09T12:54:24+01:00
New Revision: 040e0d4fa45f3606fb584c2923dd111cca675feb
URL: https://github.com/llvm/llvm-project/commit/040e0d4fa45f3606fb584c2923dd111cca675feb
DIFF: https://github.com/llvm/llvm-project/commit/040e0d4fa45f3606fb584c2923dd111cca675feb.diff
LOG: [flang]Accept directive inside type definition (#87804)
Some applications have alignment directives for members inside types.
This allows those to be present, but generally getting ignored [with a warning]
later on in the processing. This is just to allow the compilation to complete.
Added:
Modified:
flang/include/flang/Parser/parse-tree.h
flang/lib/Parser/Fortran-parsers.cpp
flang/test/Parser/compiler-directives.f90
Removed:
################################################################################
diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h
index 26b2e5f4e34b06..be59e3912a36fe 100644
--- a/flang/include/flang/Parser/parse-tree.h
+++ b/flang/include/flang/Parser/parse-tree.h
@@ -1097,7 +1097,8 @@ struct ProcComponentDefStmt {
// R736 component-def-stmt -> data-component-def-stmt | proc-component-def-stmt
struct ComponentDefStmt {
UNION_CLASS_BOILERPLATE(ComponentDefStmt);
- std::variant<DataComponentDefStmt, ProcComponentDefStmt, ErrorRecovery
+ std::variant<DataComponentDefStmt, ProcComponentDefStmt,
+ common::Indirection<CompilerDirective>, ErrorRecovery
// , TypeParamDefStmt -- PGI accidental extension, not enabled
>
u;
diff --git a/flang/lib/Parser/Fortran-parsers.cpp b/flang/lib/Parser/Fortran-parsers.cpp
index 21185694227d98..5186d3baa54c30 100644
--- a/flang/lib/Parser/Fortran-parsers.cpp
+++ b/flang/lib/Parser/Fortran-parsers.cpp
@@ -437,7 +437,8 @@ TYPE_PARSER(construct<TypeParamDecl>(name, maybe("=" >> scalarIntConstantExpr)))
TYPE_PARSER(recovery(
withMessage("expected component definition"_err_en_US,
first(construct<ComponentDefStmt>(Parser<DataComponentDefStmt>{}),
- construct<ComponentDefStmt>(Parser<ProcComponentDefStmt>{}))),
+ construct<ComponentDefStmt>(Parser<ProcComponentDefStmt>{}),
+ construct<ComponentDefStmt>(indirect(compilerDirective)))),
construct<ComponentDefStmt>(inStmtErrorRecovery)))
// R737 data-component-def-stmt ->
diff --git a/flang/test/Parser/compiler-directives.f90 b/flang/test/Parser/compiler-directives.f90
index 67e8d5b292aa07..d4c99ae12f14ea 100644
--- a/flang/test/Parser/compiler-directives.f90
+++ b/flang/test/Parser/compiler-directives.f90
@@ -23,4 +23,8 @@ module m
!dir$ optimize : 1
!dir$ loop count (10000)
!dir$ loop count (1, 500, 5000, 10000)
+ type stuff
+ real(8), allocatable :: d(:)
+ !dir$ align : 1024 :: d
+ end type stuff
end
More information about the flang-commits
mailing list