Skip to content

Commit 0083c96

Browse files
[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
1 parent 838ddc2 commit 0083c96

File tree

3 files changed

+10
-1
lines changed

3 files changed

+10
-1
lines changed

flang/include/flang/Evaluate/target.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ class TargetCharacteristics {
131131
IeeeFeatures &ieeeFeatures() { return ieeeFeatures_; }
132132
const IeeeFeatures &ieeeFeatures() const { return ieeeFeatures_; }
133133

134+
std::size_t pointerSize() { return pointerSize_; }
135+
void set_pointerSize(std::size_t pointerSize) {
136+
pointerSize_ = pointerSize;
137+
}
138+
134139
private:
135140
static constexpr int maxKind{common::maxKind};
136141
std::uint8_t byteSize_[common::TypeCategory_enumSize][maxKind + 1]{};
@@ -156,6 +161,7 @@ class TargetCharacteristics {
156161
IeeeFeature::Io, IeeeFeature::NaN, IeeeFeature::Rounding,
157162
IeeeFeature::Sqrt, IeeeFeature::Standard, IeeeFeature::Subnormal,
158163
IeeeFeature::UnderflowControl};
164+
std::size_t pointerSize_{8 /* bytes */};
159165
};
160166

161167
} // namespace Fortran::evaluate

flang/include/flang/Tools/TargetSetup.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ namespace Fortran::tools {
9494
if (targetTriple.isOSWindows())
9595
targetCharacteristics.set_isOSWindows(true);
9696

97+
targetCharacteristics.set_pointerSize(
98+
targetTriple.getArchPointerBitWidth() / 8);
99+
97100
// TODO: use target machine data layout to set-up the target characteristics
98101
// type size and alignment info.
99102
}

flang/lib/Semantics/resolve-names.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6690,7 +6690,7 @@ void DeclarationVisitor::Post(const parser::BasedPointer &bp) {
66906690
}
66916691
pointer->set(Symbol::Flag::CrayPointer);
66926692
const DeclTypeSpec &pointerType{MakeNumericType(
6693-
TypeCategory::Integer, context().defaultKinds().subscriptIntegerKind())};
6693+
TypeCategory::Integer, context().targetCharacteristics().pointerSize())};
66946694
const auto *type{pointer->GetType()};
66956695
if (!type) {
66966696
pointer->SetType(pointerType);

0 commit comments

Comments
 (0)