Sorry in advance if this is a dup or known issue. While writing a patch for IRA, I came across a hang in libgomp.fortran/do2.f90. The problem is that gomp_loop_ordered_static_next & friends return a C _Bool, which on i686-pc-linux-gnu is a single byte (i.e. it has QImode). But omp-builtins.def says that the function returns a BT_BOOL, which means boolean_type_node. boolean_type_node is logical(kind=4) for Fortran (i.e. it maps to SImode), so the upper 24 bits of the return value can be tested uninitialised.
We get lucky on trunk because %eax happens to be zero before the "sete %al" instruction in gomp_loop_ordered_static_next. This is not deliberate; it just so happens that the locking code always leaves it that way. The patch I'm working on swaps the allocation of %eax and %edx for two allocnos, such that %edx is accidentally zero instead. Richard -- Summary: Boolean type discrepancy between gfortran and libgomp Product: gcc Version: 4.4.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: libgomp AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rsandifo at gcc dot gnu dot org GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36208