1*038b42baSPeter Klausler!RUN: %flang_fc1 -fsyntax-only -fhermetic-module-files -DSTEP=1 %s 2*038b42baSPeter Klausler!RUN: %flang_fc1 -fsyntax-only -DSTEP=2 %s 3*038b42baSPeter Klausler!RUN: not %flang_fc1 -fsyntax-only -pedantic %s 2>&1 | FileCheck %s 4*038b42baSPeter Klausler 5*038b42baSPeter Klausler! Tests that a module captured in a hermetic module file is compatible when 6*038b42baSPeter Klausler! USE'd with a module of the same name USE'd directly. 7*038b42baSPeter Klausler 8*038b42baSPeter Klausler#if STEP == 1 9*038b42baSPeter Klauslermodule modfile71a 10*038b42baSPeter Klausler ! not errors 11*038b42baSPeter Klausler integer, parameter :: good_named_const = 123 12*038b42baSPeter Klausler integer :: good_var = 1 13*038b42baSPeter Klausler type :: good_derived 14*038b42baSPeter Klausler integer component 15*038b42baSPeter Klausler end type 16*038b42baSPeter Klausler procedure(), pointer :: good_proc_ptr 17*038b42baSPeter Klausler generic :: gen => bad_subroutine 18*038b42baSPeter Klausler ! bad, but okay if unused 19*038b42baSPeter Klausler integer, parameter :: unused_bad_named_const = 123 20*038b42baSPeter Klausler integer :: unused_bad_var = 1 21*038b42baSPeter Klausler type :: unused_bad_derived 22*038b42baSPeter Klausler integer component 23*038b42baSPeter Klausler end type 24*038b42baSPeter Klausler procedure(), pointer :: unused_bad_proc_ptr 25*038b42baSPeter Klausler ! errors 26*038b42baSPeter Klausler integer, parameter :: bad_named_const = 123 27*038b42baSPeter Klausler integer :: bad_var = 1 28*038b42baSPeter Klausler type :: bad_derived 29*038b42baSPeter Klausler integer component 30*038b42baSPeter Klausler end type 31*038b42baSPeter Klausler procedure(), pointer :: bad_proc_ptr 32*038b42baSPeter Klausler contains 33*038b42baSPeter Klausler subroutine good_subroutine 34*038b42baSPeter Klausler end 35*038b42baSPeter Klausler subroutine unused_bad_subroutine(x) 36*038b42baSPeter Klausler integer x 37*038b42baSPeter Klausler end 38*038b42baSPeter Klausler subroutine bad_subroutine(x) 39*038b42baSPeter Klausler integer x 40*038b42baSPeter Klausler end 41*038b42baSPeter Klauslerend 42*038b42baSPeter Klausler 43*038b42baSPeter Klauslermodule modfile71b 44*038b42baSPeter Klausler use modfile71a ! capture hermetically 45*038b42baSPeter Klauslerend 46*038b42baSPeter Klausler 47*038b42baSPeter Klausler#elif STEP == 2 48*038b42baSPeter Klauslermodule modfile71a 49*038b42baSPeter Klausler ! not errors 50*038b42baSPeter Klausler integer, parameter :: good_named_const = 123 51*038b42baSPeter Klausler integer :: good_var = 1 52*038b42baSPeter Klausler type :: good_derived 53*038b42baSPeter Klausler integer component 54*038b42baSPeter Klausler end type 55*038b42baSPeter Klausler procedure(), pointer :: good_proc_ptr 56*038b42baSPeter Klausler generic :: gen => bad_subroutine 57*038b42baSPeter Klausler ! bad, but okay if unused 58*038b42baSPeter Klausler integer, parameter :: unused_bad_named_const = 666 59*038b42baSPeter Klausler real :: unused_bad_var = 1. 60*038b42baSPeter Klausler type :: unused_bad_derived 61*038b42baSPeter Klausler real component 62*038b42baSPeter Klausler end type 63*038b42baSPeter Klausler real, pointer :: unused_bad_proc_ptr 64*038b42baSPeter Klausler ! errors 65*038b42baSPeter Klausler integer, parameter :: bad_named_const = 666 66*038b42baSPeter Klausler real :: bad_var = 1. 67*038b42baSPeter Klausler type :: bad_derived 68*038b42baSPeter Klausler real component 69*038b42baSPeter Klausler end type 70*038b42baSPeter Klausler real, pointer :: bad_proc_ptr 71*038b42baSPeter Klausler contains 72*038b42baSPeter Klausler subroutine good_subroutine 73*038b42baSPeter Klausler end 74*038b42baSPeter Klausler subroutine unused_bad_subroutine(x) 75*038b42baSPeter Klausler real x 76*038b42baSPeter Klausler end 77*038b42baSPeter Klausler subroutine bad_subroutine(x) 78*038b42baSPeter Klausler real x 79*038b42baSPeter Klausler end 80*038b42baSPeter Klauslerend 81*038b42baSPeter Klausler 82*038b42baSPeter Klausler#else 83*038b42baSPeter Klausler 84*038b42baSPeter Klausler!CHECK: warning: 'bad_derived' is use-associated from 'bad_derived' in two distinct instances of module 'modfile71a' 85*038b42baSPeter Klausler!CHECK: warning: 'bad_named_const' is use-associated from 'bad_named_const' in two distinct instances of module 'modfile71a' 86*038b42baSPeter Klausler!CHECK: warning: 'bad_proc_ptr' is use-associated from 'bad_proc_ptr' in two distinct instances of module 'modfile71a' 87*038b42baSPeter Klausler!CHECK: warning: 'bad_subroutine' is use-associated from 'bad_subroutine' in two distinct instances of module 'modfile71a' 88*038b42baSPeter Klausler!CHECK: warning: 'bad_var' is use-associated from 'bad_var' in two distinct instances of module 'modfile71a' 89*038b42baSPeter Klausler!CHECK: warning: 'good_derived' is use-associated from 'good_derived' in two distinct instances of module 'modfile71a' 90*038b42baSPeter Klausler!CHECK: warning: 'good_named_const' is use-associated from 'good_named_const' in two distinct instances of module 'modfile71a' 91*038b42baSPeter Klausler!CHECK: warning: 'good_proc_ptr' is use-associated from 'good_proc_ptr' in two distinct instances of module 'modfile71a' 92*038b42baSPeter Klausler!CHECK: warning: 'good_subroutine' is use-associated from 'good_subroutine' in two distinct instances of module 'modfile71a' 93*038b42baSPeter Klausler!CHECK: warning: 'good_var' is use-associated from 'good_var' in two distinct instances of module 'modfile71a' 94*038b42baSPeter Klausler!CHECK: warning: 'unused_bad_derived' is use-associated from 'unused_bad_derived' in two distinct instances of module 'modfile71a' 95*038b42baSPeter Klausler!CHECK: warning: 'unused_bad_named_const' is use-associated from 'unused_bad_named_const' in two distinct instances of module 'modfile71a' 96*038b42baSPeter Klausler!CHECK: warning: 'unused_bad_proc_ptr' is use-associated from 'unused_bad_proc_ptr' in two distinct instances of module 'modfile71a' 97*038b42baSPeter Klausler!CHECK: warning: 'unused_bad_subroutine' is use-associated from 'unused_bad_subroutine' in two distinct instances of module 'modfile71a' 98*038b42baSPeter Klausler!CHECK: warning: 'unused_bad_var' is use-associated from 'unused_bad_var' in two distinct instances of module 'modfile71a' 99*038b42baSPeter Klausler!CHECK: error: Reference to 'bad_derived' is ambiguous 100*038b42baSPeter Klausler!CHECK: error: Reference to 'bad_named_const' is ambiguous 101*038b42baSPeter Klausler!CHECK: error: Reference to 'bad_var' is ambiguous 102*038b42baSPeter Klausler!CHECK: error: Reference to 'bad_proc_ptr' is ambiguous 103*038b42baSPeter Klausler!CHECK: error: Reference to 'bad_subroutine' is ambiguous 104*038b42baSPeter Klausler!CHECK-NOT: error: 105*038b42baSPeter Klausler!CHECK-NOT: warning: 106*038b42baSPeter Klausler 107*038b42baSPeter Klauslerprogram main 108*038b42baSPeter Klausler use modfile71a 109*038b42baSPeter Klausler use modfile71b 110*038b42baSPeter Klausler type(good_derived) goodx 111*038b42baSPeter Klausler type(bad_derived) badx 112*038b42baSPeter Klausler print *, good_named_const 113*038b42baSPeter Klausler good_var = 1 114*038b42baSPeter Klausler good_proc_ptr => null() 115*038b42baSPeter Klausler call good_subroutine 116*038b42baSPeter Klausler print *, bad_named_const 117*038b42baSPeter Klausler print *, bad_var 118*038b42baSPeter Klausler bad_proc_ptr => null() 119*038b42baSPeter Klausler call bad_subroutine(1) 120*038b42baSPeter Klauslerend 121*038b42baSPeter Klausler#endif 122