| ! 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 |