diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp index dd818759cf0ce..17c6393cc9e39 100644 --- a/flang/lib/Lower/Bridge.cpp +++ b/flang/lib/Lower/Bridge.cpp @@ -1916,7 +1916,10 @@ class FirConverter : public Fortran::lower::AbstractConverter { } void genFIR(const Fortran::parser::FormatStmt &) { - TODO(toLocation(), "FormatStmt lowering"); + // do nothing. + + // FORMAT statements have no semantics. They may be lowered if used by a + // data transfer statement. } void genFIR(const Fortran::parser::PauseStmt &stmt) { diff --git a/flang/test/Lower/format-statement.f90 b/flang/test/Lower/format-statement.f90 new file mode 100644 index 0000000000000..8f8d86e9dd759 --- /dev/null +++ b/flang/test/Lower/format-statement.f90 @@ -0,0 +1,59 @@ +! RUN: bbc %s -o - | FileCheck %s + +! CHECK-LABEL: func @_QPformatassign +subroutine formatAssign(flag1, flag2, flag3) + real :: pi + integer :: label + logical :: flag1, flag2, flag3 + + ! CHECK-DAG: %[[ONE:.*]] = arith.constant 100 : i32 + ! CHECK-DAG: %[[TWO:.*]] = arith.constant 200 : i32 + if (flag1) then + assign 100 to label + else + assign 200 to label + end if + + ! CHECK: cond_br %{{.*}}, ^bb[[BLK1:.*]], ^bb[[BLK2:.*]] + ! CHECK: ^bb[[BLK1]]: + ! CHECK: fir.store %[[ONE]] + ! CHECK: br ^bb[[END_BLOCK:.*]] + ! CHECK: ^bb[[BLK2]]: + ! CHECK: fir.store %[[TWO]] + ! CHECK: br ^bb[[END_BLOCK]] + ! CHECK: ^bb[[END_BLOCK]] + ! CHECK: fir.call @{{.*}}BeginExternalFormattedOutput + ! CHECK: fir.call @{{.*}}OutputAscii + ! CHECK: fir.call @{{.*}}OutputReal32 + ! CHECK: fir.call @{{.*}}EndIoStatement + pi = 3.141592653589 + write(*, label) " PI=", pi + ! CHECK: fir.call @{{.*}}BeginExternalFormattedOutput + ! CHECK: fir.call @{{.*}}OutputAscii + ! CHECK: fir.call @{{.*}}OutputReal32 + ! CHECK: fir.call @{{.*}}EndIoStatement + if (flag2) write(*, label) "2PI=", 2*pi + if (flag1 .and. flag2 .and. flag3) then + assign 100 to label + else + assign 200 to label + end if + if (flag3) then + ! CHECK: fir.call @{{.*}}BeginExternalFormattedOutput + ! CHECK: fir.call @{{.*}}OutputAscii + ! CHECK: fir.call @{{.*}}OutputReal32 + ! CHECK: fir.call @{{.*}}EndIoStatement + write(*, label) "3PI=", 3*pi + endif + +100 format (A, F10.3) +200 format (A,E8.1) +300 format (A, E4.2) + +end subroutine + +! CHECK-LABEL: func @_QQmain + call formatAssign(.true., .true., .true.) + print* + call formatAssign(.true., .false., .true.) +end