# Bug with particular inline if statement

This topic is 3046 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

I just found a strange bug with a particular arrangement of operations and an inline if:
void advance(bool full) {
nextThink = gameTime + ( (full ? 10.0 : 1.0) * 30.0 );
}
Expected: nextThink = 300 or 30, depending on the argument. Result: 900. (tested with different values, always the square of the last value) The function is a method in a class. nextThink is a member of that class. gameTime is a global property accessor. Removing this operation eliminates the bug. Similarly:
void advance(bool full) {
nextThink = gameTime + ( 30.0 * (full ? 10.0 : 1.0) );
}
Expected: nextThink = 300 or 30, depending on the argument. Result: 100 (full was true in this case, so it used the result of the inline if twice)

##### Share on other sites
POST DELETED BY THE USER!

##### Share on other sites
Looks like a bug in the compiler. It is probably overwriting a temporary variable too soon.

I'll have this fixed as soon as possible. In the meantime I suggest you break up this expression in multiple statements, which should work around the bug.

Regards,
Andreas

##### Share on other sites
I've reproduced the problem. For some reason it only happens when using double types. If you use float, the expression works correctly.

I'll have a solution soon.

##### Share on other sites
I've checked in the fix in the SVN now (rev 555).

Diff for as_compiler.cpp.

Thanks for reporting this.

Thank you.

• 48
• 12
• 10
• 10
• 9
• ### Forum Statistics

• Total Topics
631378
• Total Posts
2999665
×