//===-- flang/unittests/Runtime/Pointer.cpp--------- -------------*- C++-*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "gtest/gtest.h" #include "tools.h" #include "flang/Runtime/derived-api.h" #include "flang/Runtime/descriptor.h" using namespace Fortran::runtime; TEST(Derived, SameTypeAs) { // INTEGER, POINTER :: i1 auto i1{ Descriptor::Create(TypeCode{Fortran::common::TypeCategory::Integer, 4}, 4, nullptr, 0, nullptr, CFI_attribute_pointer)}; EXPECT_TRUE(RTNAME(SameTypeAs)(*i1, *i1)); auto r1{Descriptor::Create(TypeCode{Fortran::common::TypeCategory::Real, 4}, 4, nullptr, 0, nullptr, CFI_attribute_pointer)}; EXPECT_FALSE(RTNAME(SameTypeAs)(*i1, *r1)); // CLASS(*), ALLOCATABLE :: a1 auto a1{Descriptor::Create(TypeCode{Fortran::common::TypeCategory::Real, 4}, 4, nullptr, 0, nullptr, CFI_attribute_allocatable)}; a1->raw().elem_len = 0; a1->raw().type = CFI_type_other; EXPECT_FALSE(RTNAME(SameTypeAs)(*i1, *a1)); EXPECT_FALSE(RTNAME(SameTypeAs)(*a1, *i1)); EXPECT_FALSE(RTNAME(SameTypeAs)(*r1, *a1)); // CLASS(*), ALLOCATABLE :: a2 auto a2{Descriptor::Create(TypeCode{Fortran::common::TypeCategory::Real, 4}, 4, nullptr, 0, nullptr, CFI_attribute_allocatable)}; a2->raw().elem_len = 0; a2->raw().type = CFI_type_other; EXPECT_FALSE(RTNAME(SameTypeAs)(*a1, *a2)); // CLASS(*), POINTER :: p1 auto p1{Descriptor::Create(TypeCode{Fortran::common::TypeCategory::Real, 4}, 4, nullptr, 0, nullptr, CFI_attribute_pointer)}; p1->raw().elem_len = 0; p1->raw().type = CFI_type_other; EXPECT_FALSE(RTNAME(SameTypeAs)(*i1, *p1)); EXPECT_FALSE(RTNAME(SameTypeAs)(*p1, *i1)); } TEST(Derived, ExtendsTypeOf) { // CLASS(*), POINTER :: i1 - INTEGER dynamic type auto i1{ Descriptor::Create(TypeCode{Fortran::common::TypeCategory::Integer, 4}, 4, nullptr, 0, nullptr, CFI_attribute_pointer)}; EXPECT_TRUE(RTNAME(ExtendsTypeOf)(*i1, *i1)); // CLASS(*), POINTER :: r1 - REAL dynamic type auto r1{Descriptor::Create(TypeCode{Fortran::common::TypeCategory::Real, 4}, 4, nullptr, 0, nullptr, CFI_attribute_pointer)}; EXPECT_FALSE(RTNAME(SameTypeAs)(*i1, *r1)); }