| // 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 |
| // RUN: cxx_compiler -c cxx_rtti cxx_exceptions %s -o %t.o |
| // RUN: linker %t.o -o %t%exeext |
| // RUN: runtool %t%exeext | tee %t.out | FileCheck %s |
| |
| #include <stdio.h> |
| |
| // 3.3.4.1 - File scope objects in a single object file are constructed in declaration order |
| |
| struct A { A() { printf("In %s()\n", __FUNCTION__); } }; |
| struct B { B() { printf("In %s()\n", __FUNCTION__); } }; |
| struct C { C() { printf("In %s()\n", __FUNCTION__); } }; |
| struct D { D() { printf("In %s()\n", __FUNCTION__); } }; |
| struct E { E() { printf("In %s()\n", __FUNCTION__); } }; |
| typedef A F; |
| |
| // CHECK: In A() |
| // CHECK: In B() |
| // CHECK: In D() |
| // CHECK: In C() |
| // CHECK: In B() |
| // CHECK: In A() |
| // CHECK: In E() |
| // CHECK: In main() |
| |
| A v01; |
| B v02; |
| D v03; |
| C v04; |
| static B v05; |
| F v06; |
| E v07; |
| |
| int main(int argc, char *argv[]) { |
| printf("In %s()\n", __FUNCTION__); |
| return 0; |
| } |