[flang-commits] [flang] [flang] [test] add tests for FIRToSCF (PR #176026)

Susan Tan ス-ザン タン via flang-commits flang-commits at lists.llvm.org
Thu Jan 15 08:21:36 PST 2026


================
@@ -937,13 +937,39 @@ emitCtorDtorPair(mlir::OpBuilder &modBuilder, fir::FirOpBuilder &builder,
       modBuilder, builder, operandLocation, globalOp, clause, ctorName,
       /*implicit=*/false, asFortran);
 
-  std::stringstream dtorName;
-  dtorName << globalOp.getSymName().str() << "_acc_dtor";
-  createDeclareGlobalOp<mlir::acc::GlobalDestructorOp,
-                        mlir::acc::GetDevicePtrOp, mlir::acc::DeclareExitOp,
-                        ExitOp>(modBuilder, builder, operandLocation, globalOp,
-                                clause, dtorName.str(),
-                                /*implicit=*/false, asFortran);
+  // `declare link` is registration-only: it does not need any teardown, so it
+  // uses a constructor only.
+  if constexpr (!std::is_same_v<ExitOp, mlir::acc::DeclareLinkOp>) {
+    std::stringstream dtorName;
+    dtorName << globalOp.getSymName().str() << "_acc_dtor";
+    createDeclareGlobalOp<mlir::acc::GlobalDestructorOp,
+                          mlir::acc::GetDevicePtrOp, mlir::acc::DeclareExitOp,
+                          ExitOp>(modBuilder, builder, operandLocation,
+                                  globalOp, clause, dtorName.str(),
+                                  /*implicit=*/false, asFortran);
+  }
+}
+
+/// Return true iff this OpenACC clause is valid for lowering a global/COMMON
+/// symbol via module-level global ctor/dtor. Other clauses must be handled
+/// through structured declare lowering (e.g. `present`, `deviceptr`, `copy`).
+///
+/// OpenACC 3.0:
+/// - 3000: In a Fortran module declaration section, only create, copyin,
+///         device_resident clauses are allowed.
+/// - 3001: link is also allowed.
+static bool isValidClauseForGlobalDeclare(mlir::acc::DataClause clause) {
+  switch (clause) {
+  case mlir::acc::DataClause::acc_create:
+  case mlir::acc::DataClause::acc_create_zero:
+  case mlir::acc::DataClause::acc_copyin:
+  case mlir::acc::DataClause::acc_copyin_readonly:
+  case mlir::acc::DataClause::acc_declare_device_resident:
+  case mlir::acc::DataClause::acc_declare_link:
+    return true;
+  default:
+    return false;
+  }
----------------
SusanTan wrote:

oh oops, these are changes related to a different PR that I messed up merging. Thank you for catching them! I'll change them

https://github.com/llvm/llvm-project/pull/176026


More information about the flang-commits mailing list