xref: /llvm-project/flang/test/Lower/stop-statement.f90 (revision 12ba74e181bd6641b532e271f3bfabf53066b1c0)
1f35f863aSjeanPerier! RUN: bbc %s -emit-fir -hlfir=false --canonicalize -o - | FileCheck %s
2aab4263aSValentin Clement
3e217ebccSKiran Chandramohan! CHECK-LABEL: stop_test
4aab4263aSValentin Clementsubroutine stop_test()
5aab4263aSValentin Clement ! CHECK-DAG: %[[c0:.*]] = arith.constant 0 : i32
6aab4263aSValentin Clement ! CHECK-DAG: %[[false:.*]] = arith.constant false
7aab4263aSValentin Clement ! CHECK: fir.call @_Fortran{{.*}}StopStatement(%[[c0]], %[[false]], %[[false]])
8aab4263aSValentin Clement ! CHECK-NEXT: fir.unreachable
9aab4263aSValentin Clement stop
10aab4263aSValentin Clementend subroutine
11aab4263aSValentin Clement
12e217ebccSKiran Chandramohan! CHECK-LABEL: stop_code
13ca53e049SValentin Clementsubroutine stop_code()
14ca53e049SValentin Clement  stop 42
15ca53e049SValentin Clement ! CHECK-DAG: %[[c42:.*]] = arith.constant 42 : i32
16ca53e049SValentin Clement ! CHECK-DAG: %[[false:.*]] = arith.constant false
17ca53e049SValentin Clement ! CHECK: fir.call @_Fortran{{.*}}StopStatement(%[[c42]], %[[false]], %[[false]])
18ca53e049SValentin Clement ! CHECK-NEXT: fir.unreachable
19ca53e049SValentin Clementend subroutine
20cc306740SValentin Clement
213348c083SValentin Clement! CHECK-LABEL: stop_error
223348c083SValentin Clementsubroutine stop_error()
233348c083SValentin Clement  error stop
24ea88bb16SjeanPerier ! CHECK-DAG: %[[c_1:.*]] = arith.constant 1 : i32
25cc306740SValentin Clement ! CHECK-DAG: %[[true:.*]] = arith.constant true
26cc306740SValentin Clement ! CHECK-DAG: %[[false:.*]] = arith.constant false
27ea88bb16SjeanPerier ! CHECK: fir.call @_Fortran{{.*}}StopStatement(%[[c_1]], %[[true]], %[[false]])
28cc306740SValentin Clement ! CHECK-NEXT: fir.unreachable
29cc306740SValentin Clementend subroutine
306518c409SValentin Clement
31e217ebccSKiran Chandramohan! CHECK-LABEL: stop_quiet
326518c409SValentin Clementsubroutine stop_quiet()
336518c409SValentin Clement  logical :: b
346518c409SValentin Clement  stop, quiet = b
356518c409SValentin Clement ! CHECK-DAG: %[[c0:.*]] = arith.constant 0 : i32
366518c409SValentin Clement ! CHECK-DAG: %[[false:.*]] = arith.constant false
376518c409SValentin Clement ! CHECK: %[[ALLOCA:.*]] = fir.alloca !fir.logical<4> {bindc_name = "b", uniq_name = "_QFstop_quietEb"}
386518c409SValentin Clement ! CHECK: %[[b:.*]] = fir.load %[[ALLOCA]]
396518c409SValentin Clement ! CHECK: %[[bi1:.*]] = fir.convert %[[b]] : (!fir.logical<4>) -> i1
406518c409SValentin Clement ! CHECK: fir.call @_Fortran{{.*}}StopStatement(%[[c0]], %[[false]], %[[bi1]])
416518c409SValentin Clement ! CHECK-NEXT: fir.unreachable
426518c409SValentin Clementend subroutine
43a8d48fe0SValentin Clement
443348c083SValentin Clement! CHECK-LABEL: stop_quiet_constant
453348c083SValentin Clementsubroutine stop_quiet_constant()
463348c083SValentin Clement  stop, quiet = .true.
473348c083SValentin Clement ! CHECK-DAG: %[[true:.*]] = arith.constant true
483348c083SValentin Clement ! CHECK-DAG: %[[false:.*]] = arith.constant false
493348c083SValentin Clement ! CHECK-DAG: %[[c0:.*]] = arith.constant 0 : i32
503348c083SValentin Clement ! CHECK: fir.call @_Fortran{{.*}}StopStatement(%[[c0]], %[[false]], %[[true]])
513348c083SValentin Clement ! CHECK-NEXT: fir.unreachable
523348c083SValentin Clementend subroutine
533348c083SValentin Clement
543348c083SValentin Clement! CHECK-LABEL: stop_error_code_quiet
553348c083SValentin Clementsubroutine stop_error_code_quiet(b)
563348c083SValentin Clement  logical :: b
573348c083SValentin Clement  error stop 66, quiet = b
583348c083SValentin Clement ! CHECK-DAG: %[[c66:.*]] = arith.constant 66 : i32
593348c083SValentin Clement ! CHECK-DAG: %[[true:.*]] = arith.constant true
603348c083SValentin Clement ! CHECK-DAG: %[[b:.*]] = fir.load %arg0
613348c083SValentin Clement ! CHECK-DAG: %[[bi1:.*]] = fir.convert %[[b]] : (!fir.logical<4>) -> i1
623348c083SValentin Clement ! CHECK: fir.call @_Fortran{{.*}}StopStatement(%[[c66]], %[[true]], %[[bi1]])
633348c083SValentin Clement ! CHECK-NEXT: fir.unreachable
643348c083SValentin Clementend subroutine
653348c083SValentin Clement
66e217ebccSKiran Chandramohan! CHECK-LABEL: stop_char_lit
67a8d48fe0SValentin Clementsubroutine stop_char_lit
68a8d48fe0SValentin Clement  ! CHECK-DAG: %[[false:.*]] = arith.constant false
69a8d48fe0SValentin Clement  ! CHECK-DAG: %[[five:.*]] = arith.constant 5 : index
70a8d48fe0SValentin Clement  ! CHECK-DAG: %[[lit:.*]] = fir.address_of(@_QQ{{.*}}) : !fir.ref<!fir.char<1,5>>
71a8d48fe0SValentin Clement  ! CHECK-DAG: %[[buff:.*]] = fir.convert %[[lit]] : (!fir.ref<!fir.char<1,5>>) -> !fir.ref<i8>
72a8d48fe0SValentin Clement  ! CHECK-DAG: %[[len:.*]] = fir.convert %[[five]] : (index) -> i64
734cc9437aSTom Eccles  ! CHECK: fir.call @{{.*}}StopStatementText(%[[buff]], %[[len]], %[[false]], %[[false]]) {{.*}}:
74a8d48fe0SValentin Clement  ! CHECK-NEXT: fir.unreachable
75a8d48fe0SValentin Clement  stop 'crash'
76a8d48fe0SValentin Clementend subroutine stop_char_lit
773348c083SValentin Clement
78*12ba74e1SValentin Clement (バレンタイン クレメン)! CHECK-DAG: func private @_Fortran{{.*}}StopStatement(i32, i1, i1)
79*12ba74e1SValentin Clement (バレンタイン クレメン)! CHECK-DAG: func private @_Fortran{{.*}}StopStatementText(!fir.ref<i8>, i64, i1, i1)
80