Hi all,
Max found something that is important to know.
Apparently, gcc accepts "false" as a value for a pointer. So it is
possible to write:
test_function(Test *t)
...
test_function(false);
without triggering a compiler warning/error.
This hid a problem after refactoring a function method, resulting in a
crash.
See the mail below for more details.
Cheers,
Johan
-----Original Message-----
From: Maximilian Albert [mailto:Anhalter42@...]
Sent: maandag 8 september 2008 15:13
To: Engelen, J.B.C. (Johan)
Subject: Re: active_desktop removals
J.B.C.Engelen@... schrieb:
> We should check this, this is really bad compiler behaviour!
I just wrote a simple test program (attached below). It works fine as
is, but when I replace the line
test_function(t);
with
test_function(false)
there is a runtime crash. However, even when compiling with -Wall there
is no warning whatsoever. Interestingly, when I replace false with true
in the function call, the code doesn't compile any more. But I'd think
that false is just as well recognized as a boolean value as true is.
Hmm, I think I will report this upstream on the gcc mailing list.
Max
===================================
#include <iostream>
using namespace std;
class Test {
public:
Test() {}
void print() { cout << "Hello, world!" << endl; } };
void
test_function(Test *t) {
t->print();
}
int main() {
Test *t = new Test();
test_function(t); // replace t with false to trigger a runtime crash
delete t;
}
|