Dakons blog

Erstellt: 24. 10. 2007, 17:09
Geändert: 24. 10. 2007, 17:23

Bug des Tages: int64

Tags:

Seit Wochen beschäftige ich mich auf der Arbeit mit der Realtime-Seuche. Irgendwie wollte eine Funktion nicht so wie sie sollte. Schließlich stellte sich raus das der Compiler an einigen Stellen etwas seltsam optimiert:

void func(uint64_t);

void a(unsigned int i)
{
	func(i);
}

void b(unsigned int i)
{
	uint64_t j = i;

	func(j);
}

Variante b tut genau was man von ihr erwartet, in Variante a hingegen löscht der Compiler offensichtlich nicht die nächstfolgende Stelle auf dem Stack. Das ganze ist im konkreten Fall mit einem gcc 3.3.5 aufgetreten, allerdings habe ich ähnliches Verhalten auch schon mit M$ Visual Studio 6 erlebt. Keine Ahnung ob das konform zu irgendwelchen Standards ist oder nicht, auf jeden Fall ist sowas reichlich schwer zu debuggen.

Anbieterkennzeichnung