This file includes <fenv.h> inside the function NA_checkFPErrors, and then later
undefines _FENV_H and includes <fenv.h> again inside the function
int_overflow_error. It looks to me like gcc is now remembering the function
(and possibly type) declarations after the function that they first appeared in,
which contradicts the seventh item listed in gcc's "Incompatibilities" info node.

Then it is broken. See ISO C99, 7.1.2. fenv.h is an ISO C99 standard header,
so following applies to it:
If used, a header shall be included outside of any external declaration or
definition, and it shall first be included before the first reference to any of
the functions or objects it declares, or to any of the types or macros it
defines.
void foo (void)
{
typedef struct { int i; } T;
extern void baz (T *);
}
void bar (void)
{
typedef struct { int i; } T;
extern void baz (T *);
}
which is what happens if you violate this in fenv.h case is invalid too, the two
baz declarations are incompatible. See ISO C99, 6.2.7. The 2 structs are in
the same translation unit, so the rule about comparing their tags and members
doesn't apply.
GCC included in FC3 release had a bug in same_translation_unit_p and
mistakenly handled this as if they were in different translation units because
of that bug.