http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45742
--- Comment #8 from Tobias Burnus <burnus at gcc dot gnu.org> 2010-11-12 23:55:06 UTC --- The issue with the dummy is: Volatile will be set in gfc_get_symbol_decl - but only if there is no backend declaration. For DUMMY arguments there is. Thus, one needs to handle them differently. Patch: --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -1944,10 +1945,19 @@ create_function_arglist (gfc_symbol * sym) if (f->sym->attr.proc_pointer) type = build_pointer_type (type); + if (f->sym->attr.volatile_) + type = build_qualified_type (type, TYPE_QUAL_VOLATILE); + /* Build the argument declaration. */ parm = build_decl (input_location, PARM_DECL, gfc_sym_identifier (f->sym), type); + if (f->sym->attr.volatile_) + { + TREE_THIS_VOLATILE (parm) = 1; + TREE_SIDE_EFFECTS (parm) = 1; + } + /* Fill in arg stuff. */ DECL_CONTEXT (parm) = fndecl; DECL_ARG_TYPE (parm) = TREE_VALUE (typelist);