Does it mean that Token(token).transfer() returns false on out of gas?
– medvedev1088Oct 28 '17 at 21:26

You are right, if a call to a subcontract runs out of gas, it will cause an exception, and it will propagate to the caller.
– IsmaelOct 28 '17 at 21:48

So in this case it has nothing to do with the throw statement?
– medvedev1088Oct 28 '17 at 22:09

Yes, you are right again. The trace shows depth=2, meaning it is inside de transfer function. It tries to execute SSTORE with 435 gas remaining, but it needs 5000, this causes out of gas exception. Transfer doesn't return false because it is a direct call instead it will propagate the exception.
– IsmaelOct 29 '17 at 0:34

I guess the culprit is the compiler version. Apparently in earlier versions it used 0xfe for out of gas?
– medvedev1088Oct 29 '17 at 2:45