| ! PR fortran/102745 |
| |
| implicit none |
| |
| type t |
| end type t |
| |
| type, extends(t) :: t2 |
| end type t2 |
| |
| type t3 |
| end type t3 |
| |
| type(t), allocatable :: var |
| type(t2), allocatable :: v2ar |
| type(t3), allocatable :: v3ar |
| class(t), allocatable :: cvar |
| class(t2), allocatable :: c2var |
| class(t3), allocatable :: c3var |
| |
| call f(var) |
| call f(v2ar) ! { dg-error "passed TYPE.t2. to TYPE.t." } |
| call f(v2ar%t) |
| call f(cvar) |
| call f(c2var) ! { dg-error "passed CLASS.t2. to TYPE.t." } |
| call f(c2var%t) |
| |
| call f2(var) ! { dg-error "passed TYPE.t. to TYPE.t2." } |
| call f2(v2ar) |
| call f2(cvar) ! { dg-error "passed CLASS.t. to TYPE.t2." } |
| call f2(c2var) |
| |
| |
| var = var |
| var = v2ar ! { dg-error "TYPE.t2. to TYPE.t." } |
| var = cvar |
| var = c2var ! { dg-error "TYPE.t2. to TYPE.t." } |
| |
| v2ar = var ! { dg-error "Cannot convert TYPE.t. to TYPE.t2." } |
| v2ar = v2ar |
| v2ar = cvar ! { dg-error "Cannot convert TYPE.t. to TYPE.t2." } |
| v2ar = c2var |
| |
| cvar = var |
| cvar = v2ar |
| cvar = cvar |
| cvar = c2var |
| |
| c2var = var ! { dg-error "Cannot convert TYPE.t. to CLASS.t2." } |
| c2var = v3ar ! { dg-error "Cannot convert TYPE.t3. to CLASS.t2." } |
| c2var = v2ar |
| c2var = cvar ! { dg-error "Cannot convert CLASS.t. to CLASS.t2." } |
| c2var = c3var ! { dg-error "Cannot convert CLASS.t3. to CLASS.t2." } |
| c2var = c2var |
| |
| allocate (var, source=var) |
| allocate (var, source=v2ar) ! { dg-error "incompatible with source-expr" } |
| allocate (var, source=cvar) |
| allocate (var, source=c2var) ! { dg-error "incompatible with source-expr" } |
| |
| allocate (v2ar, source=var) ! { dg-error "incompatible with source-expr" } |
| allocate (v2ar, source=v2ar) |
| allocate (v2ar, source=cvar) ! { dg-error "incompatible with source-expr" } |
| allocate (v2ar, source=c2var) |
| |
| allocate (cvar, source=var) |
| allocate (cvar, source=v2ar) |
| allocate (cvar, source=cvar) |
| allocate (cvar, source=c2var) |
| |
| allocate (c2var, source=var) ! { dg-error "incompatible with source-expr" } |
| allocate (c2var, source=v2ar) |
| allocate (c2var, source=cvar) ! { dg-error "incompatible with source-expr" } |
| allocate (c2var, source=c2var) |
| |
| contains |
| subroutine f(x) |
| type(t) :: x |
| end |
| subroutine f2(x) |
| type(t2) :: x |
| end |
| end |