| ! { dg-do compile } |
| ! |
| ! PR fortran/34112 |
| ! |
| ! Check for calling convention consitency |
| ! in procedure-pointer assignments. |
| |
| program test |
| interface |
| subroutine sub1() |
| end subroutine sub1 |
| subroutine sub2() |
| !GCC$ ATTRIBUTES CDECL :: sub2 |
| end subroutine sub2 |
| subroutine sub3() |
| !GCC$ ATTRIBUTES STDCALL :: sub3 |
| end subroutine sub3 |
| subroutine sub4() |
| !GCC$ ATTRIBUTES FASTCALL :: sub4 |
| end subroutine sub4 |
| end interface |
| |
| !gcc$ attributes cdecl :: cdecl |
| !gcc$ attributes stdcall :: stdcall |
| procedure(), pointer :: ptr |
| procedure(), pointer :: cdecl |
| procedure(), pointer :: stdcall |
| procedure(), pointer :: fastcall |
| !gcc$ attributes fastcall :: fastcall |
| |
| ! Valid: |
| ptr => sub1 |
| cdecl => sub2 |
| stdcall => sub3 |
| fastcall => sub4 |
| |
| ! Invalid: |
| ptr => sub3 ! { dg-error "mismatch in the calling convention" } |
| ptr => sub4 ! { dg-error "mismatch in the calling convention" } |
| cdecl => sub3 ! { dg-error "mismatch in the calling convention" } |
| cdecl => sub4 ! { dg-error "mismatch in the calling convention" } |
| stdcall => sub1 ! { dg-error "mismatch in the calling convention" } |
| stdcall => sub2 ! { dg-error "mismatch in the calling convention" } |
| stdcall => sub4 ! { dg-error "mismatch in the calling convention" } |
| fastcall => sub1 ! { dg-error "mismatch in the calling convention" } |
| fastcall => sub2 ! { dg-error "mismatch in the calling convention" } |
| fastcall => sub3 ! { dg-error "mismatch in the calling convention" } |
| end program |