1! { dg-do compile }
2! Tests the fix for PR30554, the USE statements in potential_energy
3! would cause a segfault because the pointer_info for nfree coming
4! from constraint would not find the existing symtree coming directly
5! from atom.
6!
7! The last two modules came up subsequently to the original fix.  The
8! PRIVATE statement caused a revival of the original problem.  This
9! was tracked down to an interaction between the symbols being set
10! referenced during module read and the application of the access
11! attribute.
12!
13! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
14
15MODULE ATOMS
16INTEGER :: NFREE = 0
17END MODULE ATOMS
18
19MODULE CONSTRAINT
20USE ATOMS, ONLY: NFREE
21CONTAINS
22   SUBROUTINE ENERGY_CONSTRAINT ( HESSIAN )
23   REAL , DIMENSION(1:(3*NFREE*(3*NFREE+1))/2):: HESSIAN
24   END SUBROUTINE ENERGY_CONSTRAINT
25END MODULE CONSTRAINT
26
27MODULE POTENTIAL_ENERGY
28USE ATOMS
29USE CONSTRAINT,         ONLY : ENERGY_CONSTRAINT
30END MODULE POTENTIAL_ENERGY
31
32MODULE P_CONSTRAINT
33USE ATOMS, ONLY: NFREE
34PRIVATE
35PUBLIC :: ENERGY_CONSTRAINT
36CONTAINS
37   SUBROUTINE ENERGY_CONSTRAINT ( HESSIAN )
38   REAL , DIMENSION(1:(3*NFREE*(3*NFREE+1))/2):: HESSIAN
39   END SUBROUTINE ENERGY_CONSTRAINT
40END MODULE P_CONSTRAINT
41
42MODULE P_POTENTIAL_ENERGY
43USE ATOMS
44USE CONSTRAINT,         ONLY : ENERGY_CONSTRAINT
45END MODULE P_POTENTIAL_ENERGY
46