// 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 %s -o %t.o
// RUN: linker %t.o -o %t%exeext
// RUN: runtool %t%exeext | tee %t.out | FileCheck %s

// CHECK:A()
// CHECK:D()
// CHECK:B()
// CHECK:C()
// CHECK:main()
// CHECK:Test Passed

#include <stdio.h>

static int counter = 0;

#define INCREMENT_COUNTER counter++;
#define DECREMENT_COUNTER counter--;

struct A { A() { printf("%s()\n", __FUNCTION__); INCREMENT_COUNTER; } };
struct B { B() { printf("%s()\n", __FUNCTION__); INCREMENT_COUNTER; } };
struct C { C() { printf("%s()\n", __FUNCTION__); INCREMENT_COUNTER; } };
struct D { D() { printf("%s()\n", __FUNCTION__); INCREMENT_COUNTER; } };

A v01 __attribute__((init_priority(200)));
B v02 __attribute__((init_priority(505)));
C v03;
D v04 __attribute__((init_priority(325)));

int main()
{
  printf("%s()\n", __FUNCTION__);
  DECREMENT_COUNTER;
  DECREMENT_COUNTER;
  DECREMENT_COUNTER;
  DECREMENT_COUNTER;
  if(counter == 0) {
    printf("Test Passed\n");
  } else {
    printf("Test Failed\n");
  }
  return 0;
}
