| ! RUN: %python %S/test_errors.py %s %flang_fc1 |
| ! Test semantic checking of F_C_STRING from ISO_C_BINDING |
| |
| program test |
| use iso_c_binding |
| implicit none |
| |
| character(len=20) :: str |
| character(len=:), allocatable :: result |
| logical :: flag |
| integer :: n |
| real :: x |
| character(len=20), dimension(2) :: str_array |
| |
| ! Valid usages |
| result = f_c_string('hello') |
| result = f_c_string(str) |
| result = f_c_string(str, .true.) |
| result = f_c_string(str, .false.) |
| result = f_c_string(str, flag) |
| result = f_c_string(string=str) |
| result = f_c_string(string=str, asis=.true.) |
| result = f_c_string(asis=.false., string=str) |
| |
| ! Invalid: missing required argument |
| !ERROR: missing mandatory 'string=' argument |
| result = f_c_string() |
| |
| ! Invalid: non-character first argument |
| !ERROR: Actual argument for 'string=' has bad type 'INTEGER(4)' |
| result = f_c_string(n) |
| |
| ! Invalid: non-character first argument (real) |
| !ERROR: Actual argument for 'string=' has bad type 'REAL(4)' |
| result = f_c_string(x) |
| |
| ! Invalid: non-logical second argument |
| !ERROR: Actual argument for 'asis=' has bad type 'INTEGER(4)' |
| result = f_c_string(str, n) |
| |
| ! Invalid: too many arguments |
| !ERROR: too many actual arguments for intrinsic '__builtin_f_c_string' |
| result = f_c_string(str, .true., .false.) |
| |
| ! Invalid: array argument (must be scalar) |
| !ERROR: 'string=' argument has unacceptable rank 1 |
| result = f_c_string(str_array) |
| |
| end program |