Something is marking random_seed as noreturn.
As far as I understand, symbols are marked as noreturn by use of TREE_THIS_VOLATILE, which is done on a few selected trees and is also done whenever a symbol has the noreturn attribute. This noreturn attribute can be set to 1 by make_noreturn, but nothing ever sets it to 0, which is probably why we're experiencing this problem.
I have to go and not enough time to check it in detail, but perhaps we should change that here:
Index: intrinsic.c =================================================================== --- intrinsic.c (revision 114340) +++ intrinsic.c (working copy) @@ -254,6 +254,7 @@ next_sym->resolve = resolve; next_sym->specific = 0; next_sym->generic = 0; + next_sym->attr.noreturn = 0; break; default: