| // Copyright Microsoft and CHERIoT Contributors. | |
| // SPDX-License-Identifier: MIT | |
| #define TEST_NAME "Global Constructor" | |
| #include "tests.hh" | |
| #include <global_constructors.hh> | |
| /// A class with a non-trivial constructor and a global instance of the class. | |
| struct X | |
| { | |
| /// A global incremented on construction. | |
| static inline int setInCtor; | |
| /// Non-trivial constructor. | |
| X() | |
| { | |
| debug_log("Running global constructor"); | |
| setInCtor++; | |
| } | |
| } x; | |
| /// Check that we run global constructors precisely once. | |
| void test_global_constructors() | |
| { | |
| TEST(X::setInCtor == 0, "Constructor run surprisingly early"); | |
| GlobalConstructors::run(); | |
| TEST(X::setInCtor == 1, "Constructor not run"); | |
| GlobalConstructors::run(); | |
| TEST(X::setInCtor == 1, "Constructor run twice"); | |
| } |