diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2017-05-29 14:05:26 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2017-05-29 14:05:26 +0000 |
commit | 1533eda111284a055aebeea92c54c05fb6d0939b (patch) | |
tree | 69d82342be3c0250c956c21ff51de246fced79ef /llvm/unittests/Support/ManagedStatic.cpp | |
parent | 0055d97d4b25d0148321e4cd32865330483865db (diff) | |
download | bcm5719-llvm-1533eda111284a055aebeea92c54c05fb6d0939b.tar.gz bcm5719-llvm-1533eda111284a055aebeea92c54c05fb6d0939b.zip |
[ManagedStatic] Add a way to pass custom creators/deleters.
Also add a test case verifying that nested ManagedStatics work correctly.
llvm-svn: 304155
Diffstat (limited to 'llvm/unittests/Support/ManagedStatic.cpp')
-rw-r--r-- | llvm/unittests/Support/ManagedStatic.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/llvm/unittests/Support/ManagedStatic.cpp b/llvm/unittests/Support/ManagedStatic.cpp index 153884ba429..9c84ce8cb51 100644 --- a/llvm/unittests/Support/ManagedStatic.cpp +++ b/llvm/unittests/Support/ManagedStatic.cpp @@ -57,4 +57,46 @@ TEST(Initialize, MultipleThreads) { } #endif +namespace NestedStatics { +static ManagedStatic<int> Ms1; +struct Nest { + Nest() { + ++(*Ms1); + } + + ~Nest() { + assert(Ms1.isConstructed()); + ++(*Ms1); + } +}; +static ManagedStatic<Nest> Ms2; + +TEST(ManagedStaticTest, NestedStatics) { + EXPECT_FALSE(Ms1.isConstructed()); + EXPECT_FALSE(Ms2.isConstructed()); + + *Ms2; + EXPECT_TRUE(Ms1.isConstructed()); + EXPECT_TRUE(Ms2.isConstructed()); + + llvm_shutdown(); + EXPECT_FALSE(Ms1.isConstructed()); + EXPECT_FALSE(Ms2.isConstructed()); +} +} // namespace NestedStatics + +namespace CustomCreatorDeletor { +static void *CustomCreate() { + void *Mem = std::malloc(sizeof(int)); + *((int *)Mem) = 42; + return Mem; +} +static ManagedStatic<int, CustomCreate, std::free> Custom; +TEST(ManagedStaticTest, CustomCreatorDeletor) { + EXPECT_EQ(42, *Custom); + llvm_shutdown(); + EXPECT_FALSE(Custom.isConstructed()); +} +} // namespace CustomCreatorDeletor + } // anonymous namespace |