| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| /* |
| * |
| * test13-6.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 bar() |
| * In baz() |
| * In ~BBBB() |
| * In ~AAAA() |
| * In foo() |
| * |
| * :AAAA():BBBB():main():bar():baz():~BBBB():~AAAA():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():AAAA():BBBB():baz():bar():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(2000))); |
| BBBB two __attribute__ ((init_priority(3000))); |
| |
| __attribute__((constructor(1500))) void foo() { printf(":foo()"); } |
| |
| __attribute__((constructor(5500))) void bar() { printf(":bar()"); } |
| |
| __attribute__((constructor(4500))) void baz() { printf(":baz()"); } |
| |
| int main() |
| { |
| printf(":main()"); |
| return 0; |
| } |