[flang-commits] [flang] [flang] Ensure that the integer for Cray pointer is sized correctly (PR #140822)

Eugene Epshteyn via flang-commits flang-commits at lists.llvm.org
Wed May 21 03:27:51 PDT 2025


https://github.com/eugeneepshteyn updated https://github.com/llvm/llvm-project/pull/140822

>From 0083c965ba32de46babcb0e633d54b1ba0121365 Mon Sep 17 00:00:00 2001
From: Eugene Epshteyn <eepshteyn at nvidia.com>
Date: Tue, 20 May 2025 19:48:48 -0400
Subject: [PATCH 1/2] [flang] Ensure that the integer for Cray pointer is sized
 correctly

The integer used for Cray pointers should have the size equivalent to
platform's pointer size.

	modified:   flang/include/flang/Evaluate/target.h
	modified:   flang/include/flang/Tools/TargetSetup.h
	modified:   flang/lib/Semantics/resolve-names.cpp
---
 flang/include/flang/Evaluate/target.h   | 6 ++++++
 flang/include/flang/Tools/TargetSetup.h | 3 +++
 flang/lib/Semantics/resolve-names.cpp   | 2 +-
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/flang/include/flang/Evaluate/target.h b/flang/include/flang/Evaluate/target.h
index cc6172b492b3c..281e42d5285fb 100644
--- a/flang/include/flang/Evaluate/target.h
+++ b/flang/include/flang/Evaluate/target.h
@@ -131,6 +131,11 @@ class TargetCharacteristics {
   IeeeFeatures &ieeeFeatures() { return ieeeFeatures_; }
   const IeeeFeatures &ieeeFeatures() const { return ieeeFeatures_; }
 
+  std::size_t pointerSize() { return pointerSize_; }
+  void set_pointerSize(std::size_t pointerSize) {
+    pointerSize_ = pointerSize;
+  }
+
 private:
   static constexpr int maxKind{common::maxKind};
   std::uint8_t byteSize_[common::TypeCategory_enumSize][maxKind + 1]{};
@@ -156,6 +161,7 @@ class TargetCharacteristics {
       IeeeFeature::Io, IeeeFeature::NaN, IeeeFeature::Rounding,
       IeeeFeature::Sqrt, IeeeFeature::Standard, IeeeFeature::Subnormal,
       IeeeFeature::UnderflowControl};
+  std::size_t pointerSize_{8 /* bytes */};
 };
 
 } // namespace Fortran::evaluate
diff --git a/flang/include/flang/Tools/TargetSetup.h b/flang/include/flang/Tools/TargetSetup.h
index de3fb0519cf6b..a30c725e21fb4 100644
--- a/flang/include/flang/Tools/TargetSetup.h
+++ b/flang/include/flang/Tools/TargetSetup.h
@@ -94,6 +94,9 @@ namespace Fortran::tools {
   if (targetTriple.isOSWindows())
     targetCharacteristics.set_isOSWindows(true);
 
+  targetCharacteristics.set_pointerSize(
+    targetTriple.getArchPointerBitWidth() / 8);
+
   // TODO: use target machine data layout to set-up the target characteristics
   // type size and alignment info.
 }
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index 92a3277191ae0..2f6fe4fea4da2 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -6690,7 +6690,7 @@ void DeclarationVisitor::Post(const parser::BasedPointer &bp) {
   }
   pointer->set(Symbol::Flag::CrayPointer);
   const DeclTypeSpec &pointerType{MakeNumericType(
-      TypeCategory::Integer, context().defaultKinds().subscriptIntegerKind())};
+      TypeCategory::Integer, context().targetCharacteristics().pointerSize())};
   const auto *type{pointer->GetType()};
   if (!type) {
     pointer->SetType(pointerType);

>From 30477b842ae64fb1c94f520136956cc4685648a7 Mon Sep 17 00:00:00 2001
From: Eugene Epshteyn <eepshteyn at nvidia.com>
Date: Tue, 20 May 2025 19:59:20 -0400
Subject: [PATCH 2/2] clang-format

---
 flang/include/flang/Evaluate/target.h   | 4 +---
 flang/include/flang/Tools/TargetSetup.h | 2 +-
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/flang/include/flang/Evaluate/target.h b/flang/include/flang/Evaluate/target.h
index 281e42d5285fb..e8b9fedc38f48 100644
--- a/flang/include/flang/Evaluate/target.h
+++ b/flang/include/flang/Evaluate/target.h
@@ -132,9 +132,7 @@ class TargetCharacteristics {
   const IeeeFeatures &ieeeFeatures() const { return ieeeFeatures_; }
 
   std::size_t pointerSize() { return pointerSize_; }
-  void set_pointerSize(std::size_t pointerSize) {
-    pointerSize_ = pointerSize;
-  }
+  void set_pointerSize(std::size_t pointerSize) { pointerSize_ = pointerSize; }
 
 private:
   static constexpr int maxKind{common::maxKind};
diff --git a/flang/include/flang/Tools/TargetSetup.h b/flang/include/flang/Tools/TargetSetup.h
index a30c725e21fb4..24ab65f740ec6 100644
--- a/flang/include/flang/Tools/TargetSetup.h
+++ b/flang/include/flang/Tools/TargetSetup.h
@@ -95,7 +95,7 @@ namespace Fortran::tools {
     targetCharacteristics.set_isOSWindows(true);
 
   targetCharacteristics.set_pointerSize(
-    targetTriple.getArchPointerBitWidth() / 8);
+      targetTriple.getArchPointerBitWidth() / 8);
 
   // TODO: use target machine data layout to set-up the target characteristics
   // type size and alignment info.



More information about the flang-commits mailing list