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 7struct uk9i 8{ 9 uk9i(); 10 ~uk9i(); 11 12 static const char* fname; 13 static bool obj_exists; 14}; 15 16uk9i::uk9i() 17{ 18 obj_exists = true; 19 fname = __func__; 20} 21 22uk9i::~uk9i() 23{ 24 obj_exists = false; 25 fname = __func__; 26} 27 28const char* uk9i::fname = 0; 29bool uk9i::obj_exists = false; 30 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