diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp --- a/flang/lib/Parser/unparse.cpp +++ b/flang/lib/Parser/unparse.cpp @@ -1903,8 +1903,8 @@ EndOpenACC(); Walk(std::get>(x.t)); BeginOpenACC(); - Walk("!$ACC END ", std::get>(x.t)); - Put("\n"); + Walk("!$ACC END ", std::get>(x.t), + "\n"); EndOpenACC(); } void Unparse(const OpenACCRoutineConstruct &x) { diff --git a/flang/test/Parser/acc-unparse.f90 b/flang/test/Parser/acc-unparse.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Parser/acc-unparse.f90 @@ -0,0 +1,19 @@ +! RUN: %f18 -fopenacc -funparse %s | FileCheck %s + +! Test unparse does not crash with OpenACC directives. + +! Test bug 47659 +program bug47659 + integer :: i, j + label1: do i = 1, 10 + !$acc parallel loop + do j = 1, 10 + if (j == 2) then + exit label1 + end if + end do + end do label1 +end program + +!CHECK-LABEL: PROGRAM bug47659 +!CHECK: !$ACC PARALLEL LOOP