[flang-commits] [flang] [flang]Accept directive inside type definition (PR #87804)

Mats Petersson via flang-commits flang-commits at lists.llvm.org
Mon Apr 8 10:52:17 PDT 2024


https://github.com/Leporacanthicus updated https://github.com/llvm/llvm-project/pull/87804

>From b40ba856b660ab97a3c6d5d0093fea19d649da05 Mon Sep 17 00:00:00 2001
From: Mats Petersson <mats.petersson at arm.com>
Date: Fri, 5 Apr 2024 17:27:14 +0100
Subject: [PATCH 1/3] [flang]Accept directive inside type definition

---
 flang/include/flang/Parser/parse-tree.h | 3 ++-
 flang/lib/Parser/Fortran-parsers.cpp    | 4 +++-
 2 files changed, 5 insertions(+), 2 deletions(-)

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..36510f7cd1ab6e 100644
--- a/flang/lib/Parser/Fortran-parsers.cpp
+++ b/flang/lib/Parser/Fortran-parsers.cpp
@@ -437,7 +437,9 @@ 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(Parser<CompilerDirective>{})))),
     construct<ComponentDefStmt>(inStmtErrorRecovery)))
 
 // R737 data-component-def-stmt ->

>From 57c1458dd772b1d6b62c9c527e4e87fe5e0d00e5 Mon Sep 17 00:00:00 2001
From: Mats Petersson <mats.petersson at arm.com>
Date: Mon, 8 Apr 2024 11:17:23 +0100
Subject: [PATCH 2/3] Add test for directive in type declaration

---
 flang/test/Parser/compiler-directives.f90 | 4 ++++
 1 file changed, 4 insertions(+)

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

>From 938731180730dc46852b750abdb28ece19a08c37 Mon Sep 17 00:00:00 2001
From: Mats Petersson <mats.petersson at arm.com>
Date: Mon, 8 Apr 2024 18:47:03 +0100
Subject: [PATCH 3/3] Fix review comment

---
 flang/lib/Parser/Fortran-parsers.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/flang/lib/Parser/Fortran-parsers.cpp b/flang/lib/Parser/Fortran-parsers.cpp
index 36510f7cd1ab6e..5186d3baa54c30 100644
--- a/flang/lib/Parser/Fortran-parsers.cpp
+++ b/flang/lib/Parser/Fortran-parsers.cpp
@@ -438,8 +438,7 @@ TYPE_PARSER(recovery(
     withMessage("expected component definition"_err_en_US,
         first(construct<ComponentDefStmt>(Parser<DataComponentDefStmt>{}),
             construct<ComponentDefStmt>(Parser<ProcComponentDefStmt>{}),
-            construct<ComponentDefStmt>(
-                indirect(Parser<CompilerDirective>{})))),
+            construct<ComponentDefStmt>(indirect(compilerDirective)))),
     construct<ComponentDefStmt>(inStmtErrorRecovery)))
 
 // R737 data-component-def-stmt ->



More information about the flang-commits mailing list