That's undefined behavior. Aka the compiler/linker is allowed to break all the rules or make up their own.
However the typical function call ABI will put the return value into EAX if it fits (which both bool and int will). With bool either being defined as 0 for false and non zero for true or as zero for false and a specific value (like 0xffffffff or 1) for true.
So after the function call the return register will contain 0x100
but the compiler could assume it was a specific value (if the ABI said so) and then use that assumption for further optimization.
For example if true was defined as 0xffffffff then a ternary returnDummy()?val1:val2
can be implemented as
int mask = returnDummy();
res = (mask&val1) | (~mask&val2);