------- Comment #5 from spark at gcc dot gnu dot org 2007-02-01 17:47 ------- -O1 error problem is due to constant assignment of var. If you replace: long var = 42; with something like: long var = func();
It compiles without an error (though it still has the #3 problem of using %ebp even though it's marked clobbered). This is a corner case for reload, because it knows the register contains a constant, and thinks there will be at least some scratch register to load it to. Unfortunately, due to the problematic asm statement having clobbers for all registers (except %ebp, but %ebp is not available for general allocation without -fomit-frame-pointer) there's no register available to load the constant to. So, the workaround for this problem is to have a local variable that's not initialized from a constant. So I'm deferring this #2 problem, and will take a look at #3 now. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28686