blob: 35a5d559efa5ea7d79a2bacd72863f49a92bf6ec [file] [log] [blame] [edit]
! Test -skip-external-rtti-definition option
!RUN: rm -rf %t && mkdir -p %t
!RUN: %flang_fc1 -fsyntax-only -DSTEP=1 -J%t %s
!RUN: %flang_fc1 -emit-llvm -J%t %s -o - | FileCheck %s -check-prefix=LINKONCE
!RUN: %flang_fc1 -emit-llvm -J%t -mllvm -skip-external-rtti-definition %s -o - | FileCheck %s -check-prefix=EXTERNAL
#if STEP == 1
module module_external_type_definition
type t1
end type
end module
#else
module module_same_unit_type_definition
type t2
end type
end module
subroutine test
use module_external_type_definition
use module_same_unit_type_definition
interface
subroutine needs_descriptor(x)
class(*) :: x
end subroutine
end interface
type(t1) :: x1
type(t2) :: x2
call needs_descriptor(x1)
call needs_descriptor(x2)
end subroutine
#endif
! LINKONCE-DAG: @_QMmodule_external_type_definitionEXnXt1 = linkonce_odr constant [2 x i8] c"t1"
! LINKONCE-DAG: @_QMmodule_external_type_definitionEXdtXt1 = linkonce_odr constant {{.*}} {
! LINKONCE-DAG: @_QMmodule_same_unit_type_definitionEXnXt2 = linkonce_odr constant [2 x i8] c"t2"
! LINKONCE-DAG: @_QMmodule_same_unit_type_definitionEXdtXt2 = linkonce_odr constant {{.*}} {
! EXTERNAL-NOT: @_QMmodule_external_type_definitionEXnXt1
! EXTERNAL: @_QMmodule_same_unit_type_definitionEXnXt2 = constant [2 x i8] c"t2"
! EXTERNAL-NOT: @_QMmodule_external_type_definitionEXnXt1
! EXTERNAL: @_QMmodule_same_unit_type_definitionEXdtXt2 = constant {{.*}} {
! EXTERNAL-NOT: @_QMmodule_external_type_definitionEXnXt1
! EXTERNAL: @_QMmodule_external_type_definitionEXdtXt1 = external constant ptr
! EXTERNAL-NOT: @_QMmodule_external_type_definitionEXnXt1