File tree 2 files changed +6
-14
lines changed 2 files changed +6
-14
lines changed Original file line number Diff line number Diff line change @@ -660,6 +660,11 @@ static bool needEndFinalization(const Fortran::lower::pft::Variable &var) {
660
660
if (!var.hasSymbol ())
661
661
return false ;
662
662
const Fortran::semantics::Symbol &sym = var.getSymbol ();
663
+ const Fortran::semantics::Scope &owner = sym.owner ();
664
+ if (owner.kind () == Fortran::semantics::Scope::Kind::MainProgram) {
665
+ // The standard does not require finalizing main program variables.
666
+ return false ;
667
+ }
663
668
if (!Fortran::semantics::IsPointer (sym) &&
664
669
!Fortran::semantics::IsAllocatable (sym) &&
665
670
!Fortran::semantics::IsDummy (sym) &&
Original file line number Diff line number Diff line change @@ -248,20 +248,7 @@ subroutine local_t4()
248
248
program p
249
249
use derived_type_finalization
250
250
type (t1) :: t
251
- if (t% a == 10 ) return
252
- print * , ' end of program'
253
251
end program
254
252
255
253
! CHECK-LABEL: func.func @_QQmain() attributes {fir.bindc_name = "p"} {
256
- ! CHECK: %[[T:.*]] = fir.alloca !fir.type<_QMderived_type_finalizationTt1{a:i32}> {bindc_name = "t", uniq_name = "_QFEt"}
257
- ! CHECK: cf.cond_br %{{.*}}, ^bb1, ^bb2
258
- ! CHECK: ^bb1:
259
- ! CHECK: %[[EMBOX:.*]] = fir.embox %[[T]] : (!fir.ref<!fir.type<_QMderived_type_finalizationTt1{a:i32}>>) -> !fir.box<!fir.type<_QMderived_type_finalizationTt1{a:i32}>>
260
- ! CHECK: %[[BOX_NONE:.*]] = fir.convert %[[EMBOX]] : (!fir.box<!fir.type<_QMderived_type_finalizationTt1{a:i32}>>) -> !fir.box<none>
261
- ! CHECK: %{{.*}} = fir.call @_FortranADestroy(%[[BOX_NONE]]) {{.*}} : (!fir.box<none>) -> none
262
- ! CHECK: return
263
- ! CHECK: ^bb2:
264
- ! CHECK: %[[EMBOX:.*]] = fir.embox %[[T]] : (!fir.ref<!fir.type<_QMderived_type_finalizationTt1{a:i32}>>) -> !fir.box<!fir.type<_QMderived_type_finalizationTt1{a:i32}>>
265
- ! CHECK: %[[BOX_NONE:.*]] = fir.convert %[[EMBOX]] : (!fir.box<!fir.type<_QMderived_type_finalizationTt1{a:i32}>>) -> !fir.box<none>
266
- ! CHECK: %{{.*}} = fir.call @_FortranADestroy(%[[BOX_NONE]]) {{.*}} : (!fir.box<none>) -> none
267
- ! CHECK: return
254
+ ! CHECK-NOT: fir.call @_FortranADestroy
You can’t perform that action at this time.
0 commit comments