------- Comment #3 from fxcoudert at gcc dot gnu dot org 2008-02-01 22:54
-------
I've tried the following "trivial" patch (which should handle both common
blocks and equivalences):
Index: trans-common.c
===================================================================
--- trans-common.c (revision 131944)
+++ trans-common.c (working copy)
@@ -678,6 +678,14 @@ create_common (gfc_common_head *com, seg
/* This is a fake variable just for debugging purposes. */
TREE_ASM_WRITTEN (var_decl) = 1;
+ if (s->sym->attr.volatile_)
+ {
+ tree new;
+ TREE_THIS_VOLATILE (var_decl) = 1;
+ new = build_qualified_type (TREE_TYPE (var_decl),
TYPE_QUAL_VOLATILE);
+ TREE_TYPE (var_decl) = new;
+ }
+
if (com)
var_decl = pushdecl_top_level (var_decl);
else
But it looks like it doesn't work. Actually, even without the common block, it
doesn't seem to work:
subroutine wait4it ()
logical event
volatile event
do
if (event) exit
end do
end subroutine
But I'm useless at reading assembly (the tree dump doesn't have these
attributes written out) and I'm not too sure if the code above is legal, so I'd
be glad for someone to help.
--
fxcoudert at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |fxcoudert at gcc dot gnu dot
| |org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35037