// Special g++ Options: -fthis-is-variable // GROUPS passed code-generation // Check that the "this" pointer is zero when a method is // called for an object pointed to by a null pointer. // Normally, the "__builtin_new" operation which actually // allocates objects in heap space is *not* called at the // actual point of the "new" keyword. Rather, a check is // made within each constructor and if the "this" pointer // value passed in is zero, then the actual allocation of // memory (via __builtin_new) is done at that point (i.e. // at the very beginning of the constructor). // A special trick allows one to subvert this mechanism. // Specifically, if a given constructor contains a statement // like: "this = this", then no attempt will be made to // implicitly call __builtin_new within that constructor. extern "C" void printf (char *, ...); struct base { int member; base (); void member_function (); }; base *base_pointer_1 = 0; base *base_pointer_2 = 0; int errors = 0; int main () { //base_pointer_2 = new base(); base_pointer_1->member_function (); if (errors) printf ("FAIL\n"); else printf ("PASS\n"); return 0; } base::base () { this = this; if ((int) this != 0) errors++; } void base::member_function () { if ((int) this != 0) errors++; }