1 // Test whether __func__ works for constructors and destructors. 2 3 // Copyright (C) 2003 Free Software Foundation, Inc. 4 // Contributed by Matt Austern <austern@apple.com>, 3 Aug 2003 5 // { dg-do run } 6 7 struct uk9i 8 { 9 uk9i(); 10 ~uk9i(); 11 12 static const char* fname; 13 static bool obj_exists; 14 }; 15 uk9i()16uk9i::uk9i() 17 { 18 obj_exists = true; 19 fname = __func__; 20 } 21 ~uk9i()22uk9i::~uk9i() 23 { 24 obj_exists = false; 25 fname = __func__; 26 } 27 28 const char* uk9i::fname = 0; 29 bool uk9i::obj_exists = false; 30 main()31int main() 32 { 33 bool ok = true; 34 35 ok = ok && uk9i::fname == 0; 36 ok = ok && !uk9i::obj_exists; 37 38 { 39 uk9i tmp; 40 ok = ok && uk9i::obj_exists; 41 ok = ok && uk9i::fname != 0; 42 if (ok) 43 { 44 ok = ok && uk9i::fname[0] == 'u'; 45 ok = ok && uk9i::fname[1] == 'k'; 46 ok = ok && uk9i::fname[2] == '9'; 47 ok = ok && uk9i::fname[3] == 'i'; 48 ok = ok && uk9i::fname[4] == '\0'; 49 } 50 } 51 52 ok = ok && !uk9i::obj_exists; 53 ok = ok && uk9i::fname != 0; 54 if (ok) 55 { 56 ok = ok && uk9i::fname[0] == '~'; 57 ok = ok && uk9i::fname[1] == 'u'; 58 ok = ok && uk9i::fname[2] == 'k'; 59 ok = ok && uk9i::fname[3] == '9'; 60 ok = ok && uk9i::fname[4] == 'i'; 61 ok = ok && uk9i::fname[5] == '\0'; 62 } 63 64 return ok ? 0 : 1; 65 } 66