mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 14:57:13 +00:00

This PR adds a test to ensure deterministic ordering in `.mod` files. It also includes related changes to prevent non-deterministic symbol ordering caused by pointers outside the cooked source. This issue is particularly noticeable when using Flang as a library and compiling the same files multiple times.
29 lines
893 B
Fortran
29 lines
893 B
Fortran
! This test verifies that both invocations produce a consistent order in the
|
|
! generated `.mod` file. Previous versions of Flang exhibited non-deterministic
|
|
! behavior due to pointers outside the cooked source being used to order symbols
|
|
! in the `.mod` file.
|
|
|
|
! RUN: rm -rf %t && mkdir -p %t
|
|
! RUN: %flang_fc1 -fsyntax-only -J%t %S/Inputs/modfile72.f90
|
|
! RUN: %flang_fc1 -fsyntax-only -J%t %s
|
|
! RUN: cat %t/bar.mod | FileCheck %s
|
|
|
|
! RUN: rm -rf %t && mkdir -p %t
|
|
! RUN: %flang_fc1 -fsyntax-only -J%t %S/Inputs/modfile72.f90 %s
|
|
! RUN: cat %t/bar.mod | FileCheck %s
|
|
|
|
module bar
|
|
use foo, only : do_foo
|
|
use foo, only : do_bar
|
|
contains
|
|
subroutine do_baz()
|
|
call do_foo()
|
|
call do_bar()
|
|
end
|
|
end
|
|
|
|
! CHECK: use foo,only:do_foo
|
|
! CHECK-NEXT: use foo,only:do_bar
|
|
! CHECK-NEXT: use foo,only:foo$foo$do_bar_impl=>do_bar_impl
|
|
! CHECK-NEXT: use foo,only:foo$foo$do_foo_impl=>do_foo_impl
|