diff --git a/flang/include/flang/Evaluate/constant.h b/flang/include/flang/Evaluate/constant.h index 611ee7772d2a1..73e4271cc28ad 100644 --- a/flang/include/flang/Evaluate/constant.h +++ b/flang/include/flang/Evaluate/constant.h @@ -225,6 +225,7 @@ class Constant std::optional 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 *dimOrder); diff --git a/flang/lib/Evaluate/constant.cpp b/flang/lib/Evaluate/constant.cpp index 1a4d30cf9d142..c94b198fdaf2e 100644 --- a/flang/lib/Evaluate/constant.cpp +++ b/flang/lib/Evaluate/constant.cpp @@ -346,6 +346,12 @@ StructureConstructor Constant::At( return {result().derivedTypeSpec(), values_.at(SubscriptsToOffset(index))}; } +bool Constant::operator==( + const Constant &that) const { + return result().derivedTypeSpec() == that.result().derivedTypeSpec() && + shape() == that.shape() && values_ == that.values_; +} + auto Constant::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 ef33ffe450b0f..33a658fb61cd1 100644 --- a/flang/test/Lower/constant-literal-mangling.f90 +++ b/flang/test/Lower/constant-literal-mangling.f90 @@ -9,6 +9,12 @@ 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 @@ 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}>> {