diff options
-rw-r--r-- | flang/include/flang/Evaluate/constant.h | 1 | ||||
-rw-r--r-- | flang/lib/Evaluate/constant.cpp | 6 | ||||
-rw-r--r-- | flang/test/Lower/constant-literal-mangling.f90 | 8 |
3 files changed, 15 insertions, 0 deletions
diff --git a/flang/include/flang/Evaluate/constant.h b/flang/include/flang/Evaluate/constant.h index 611ee7772d2a..73e4271cc28a 100644 --- a/flang/include/flang/Evaluate/constant.h +++ b/flang/include/flang/Evaluate/constant.h @@ -225,6 +225,7 @@ public: std::optional<StructureConstructor> GetScalarValue() const; StructureConstructor At(const ConstantSubscripts &) const; + bool operator==(const Constant &) const; Constant Reshape(ConstantSubscripts &&) const; std::size_t CopyFrom(const Constant &source, std::size_t count, ConstantSubscripts &resultSubscripts, const std::vector<int> *dimOrder); diff --git a/flang/lib/Evaluate/constant.cpp b/flang/lib/Evaluate/constant.cpp index 1a4d30cf9d14..c94b198fdaf2 100644 --- a/flang/lib/Evaluate/constant.cpp +++ b/flang/lib/Evaluate/constant.cpp @@ -346,6 +346,12 @@ StructureConstructor Constant<SomeDerived>::At( return {result().derivedTypeSpec(), values_.at(SubscriptsToOffset(index))}; } +bool Constant<SomeDerived>::operator==( + const Constant<SomeDerived> &that) const { + return result().derivedTypeSpec() == that.result().derivedTypeSpec() && + shape() == that.shape() && values_ == that.values_; +} + auto Constant<SomeDerived>::Reshape(ConstantSubscripts &&dims) const -> Constant { return {result().derivedTypeSpec(), Base::Reshape(dims), std::move(dims)}; diff --git a/flang/test/Lower/constant-literal-mangling.f90 b/flang/test/Lower/constant-literal-mangling.f90 index ef33ffe450b0..33a658fb61cd 100644 --- a/flang/test/Lower/constant-literal-mangling.f90 +++ b/flang/test/Lower/constant-literal-mangling.f90 @@ -9,6 +9,12 @@ type otherType integer :: i end type +type emptyType1 +end type emptyType1 + +type emptyType2 +end type emptyType2 + print *, [42, 42] ! CHECK: fir.address_of(@_QQro.2xi4.0) @@ -68,6 +74,8 @@ end type print *, [otherType(42)] ! CHECK: fir.address_of(@_QQro.1x_QFTothertype.14) + print *, [emptyType1()] + print *, [emptyType2()] end ! CHECK: fir.global internal @_QQro.1x_QFTsometype.10 constant : !fir.array<1x!fir.type<_QFTsometype{i:i32}>> { |