Fortran 2003 (corrigendum 5, ftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1815.pdf) has now:
Subclause 12.6 Following constraint C1271, add the following new constraint: C1271a The designator of a variable with the VOLATILE attribute shall not appear in a pure subprogram. "A designator is a name followed by zero or more component selectors, array section selectors, array element selectors, and substring selectors." My understanding is that thus the following program is invalid: pure subroutine foo(a, c, d) integer, volatile, intent(inout) :: a, c ! OK integer, volatile :: b ! OK integer :: d b = 4 ! Invalid LHS as "b" is volatile d = b ! Invalid RHS end subroutine -- Summary: Missed constraint C1271a: Referrencing VOLATILE variable in PURE subprogram Product: gcc Version: 4.5.0 Status: UNCONFIRMED Keywords: accepts-invalid Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: burnus at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43289