[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
Tue May 27 03:19:00 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/4] [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/4] 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.
>From e1f91c83680d72fc1463a8db97a77298141286d9 Mon Sep 17 00:00:00 2001
From: Eugene Epshteyn <eepshteyn at nvidia.com>
Date: Wed, 21 May 2025 23:41:48 -0400
Subject: [PATCH 3/4] Renaming to integerKindForPointer
---
flang/include/flang/Evaluate/target.h | 8 +++++---
flang/include/flang/Tools/TargetSetup.h | 3 ++-
flang/lib/Semantics/resolve-names.cpp | 2 +-
3 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/flang/include/flang/Evaluate/target.h b/flang/include/flang/Evaluate/target.h
index e8b9fedc38f48..7b38db2db1956 100644
--- a/flang/include/flang/Evaluate/target.h
+++ b/flang/include/flang/Evaluate/target.h
@@ -131,8 +131,10 @@ 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; }
+ std::size_t integerKindForPointer() { return integerKindForPointer_; }
+ void set_integerKindForPointer(std::size_t newKind) {
+ integerKindForPointer_ = newKind;
+ }
private:
static constexpr int maxKind{common::maxKind};
@@ -159,7 +161,7 @@ class TargetCharacteristics {
IeeeFeature::Io, IeeeFeature::NaN, IeeeFeature::Rounding,
IeeeFeature::Sqrt, IeeeFeature::Standard, IeeeFeature::Subnormal,
IeeeFeature::UnderflowControl};
- std::size_t pointerSize_{8 /* bytes */};
+ std::size_t integerKindForPointer_{8}; /* For 64 bit pointer */
};
} // namespace Fortran::evaluate
diff --git a/flang/include/flang/Tools/TargetSetup.h b/flang/include/flang/Tools/TargetSetup.h
index 24ab65f740ec6..002e82aa72484 100644
--- a/flang/include/flang/Tools/TargetSetup.h
+++ b/flang/include/flang/Tools/TargetSetup.h
@@ -94,7 +94,8 @@ namespace Fortran::tools {
if (targetTriple.isOSWindows())
targetCharacteristics.set_isOSWindows(true);
- targetCharacteristics.set_pointerSize(
+ // Currently the integer kind happens to be the same as the byte size
+ targetCharacteristics.set_integerKindForPointer(
targetTriple.getArchPointerBitWidth() / 8);
// TODO: use target machine data layout to set-up the target characteristics
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index 88114bfe84af3..5fd5ea8f9bc5c 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().targetCharacteristics().pointerSize())};
+ TypeCategory::Integer, context().targetCharacteristics().integerKindForPointer())};
const auto *type{pointer->GetType()};
if (!type) {
pointer->SetType(pointerType);
>From 940ff38d0abba9d1b0ab415e42474629284962d8 Mon Sep 17 00:00:00 2001
From: Eugene Epshteyn <eepshteyn at nvidia.com>
Date: Wed, 21 May 2025 23:51:53 -0400
Subject: [PATCH 4/4] clang-format
---
flang/lib/Semantics/resolve-names.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index 5fd5ea8f9bc5c..a8dbf61c8fd68 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -6689,8 +6689,8 @@ void DeclarationVisitor::Post(const parser::BasedPointer &bp) {
"'%s' cannot be a Cray pointer as it is already a Cray pointee"_err_en_US);
}
pointer->set(Symbol::Flag::CrayPointer);
- const DeclTypeSpec &pointerType{MakeNumericType(
- TypeCategory::Integer, context().targetCharacteristics().integerKindForPointer())};
+ const DeclTypeSpec &pointerType{MakeNumericType(TypeCategory::Integer,
+ context().targetCharacteristics().integerKindForPointer())};
const auto *type{pointer->GetType()};
if (!type) {
pointer->SetType(pointerType);
More information about the flang-commits
mailing list