// This file is distributed under the University of Illinois Open Source License. | |
// See LICENSE.TXT for details. | |
/* | |
* | |
* test13-3.c: | |
* - C++ source code | |
* - Static destructor | |
* - GCC destructors using priority | |
* - GCC init_priority attributes | |
* | |
* Expected output and order: | |
* In AAAA() | |
* In BBBB() | |
* In main() | |
* In ~BBBB() | |
* In bar() | |
* In ~AAAA() | |
* In baz() | |
* In foo() | |
* | |
* :AAAA():BBBB():main():~BBBB():bar():~AAAA():baz():foo() | |
*/ | |
// RUN: cxx_compiler %s -c -o %t.o | |
// RUN: linker %t.o -o %t%exeext | |
// RUN: runtool %t%exeext | tee %t.out | FileCheck %s | |
// CHECK: :foo():baz():AAAA():bar():BBBB():main():~BBBB():~AAAA() | |
#include <stdio.h> | |
struct AAAA { | |
AAAA() { printf(":AAAA()"); } | |
~AAAA() { printf(":~AAAA()"); } | |
}; | |
struct BBBB { | |
BBBB() { printf(":BBBB()"); } | |
~BBBB() { printf(":~BBBB()"); } | |
}; | |
AAAA one __attribute__ ((init_priority(3000))); | |
BBBB two; | |
__attribute__((constructor(1500))) void foo() { printf(":foo()"); } | |
__attribute__((constructor(3500))) void bar() { printf(":bar()"); } | |
__attribute__((constructor(2500))) void baz() { printf(":baz()"); } | |
int main() | |
{ | |
printf(":main()"); | |
return 0; | |
} |