Bläddra i källkod

Fix static initialization order fiasco in MCTests

Reported by Kostya on llvm-dev, uncovered by an ASAN bot

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286647 91177308-0d34-0410-b5e6-96231b3b80d8
Mehdi Amini 8 år sedan
förälder
incheckning
aa2b11dcf3
1 ändrade filer med 9 tillägg och 5 borttagningar
  1. 9 5
      unittests/MC/DwarfLineTables.cpp

+ 9 - 5
unittests/MC/DwarfLineTables.cpp

@@ -46,21 +46,25 @@ struct Context {
   operator MCContext &() { return *Ctx; };
   operator MCContext &() { return *Ctx; };
 };
 };
 
 
-Context Ctxt;
+Context &getContext() {
+  static Context Ctxt;
+  return Ctxt;
+}
 }
 }
 
 
 void verifyEncoding(MCDwarfLineTableParams Params, int LineDelta, int AddrDelta,
 void verifyEncoding(MCDwarfLineTableParams Params, int LineDelta, int AddrDelta,
                     ArrayRef<uint8_t> ExpectedEncoding) {
                     ArrayRef<uint8_t> ExpectedEncoding) {
   SmallString<16> Buffer;
   SmallString<16> Buffer;
   raw_svector_ostream EncodingOS(Buffer);
   raw_svector_ostream EncodingOS(Buffer);
-  MCDwarfLineAddr::Encode(Ctxt, Params, LineDelta, AddrDelta, EncodingOS);
+  MCDwarfLineAddr::Encode(getContext(), Params, LineDelta, AddrDelta,
+                          EncodingOS);
   ArrayRef<uint8_t> Encoding(reinterpret_cast<uint8_t *>(Buffer.data()),
   ArrayRef<uint8_t> Encoding(reinterpret_cast<uint8_t *>(Buffer.data()),
                              Buffer.size());
                              Buffer.size());
   EXPECT_EQ(ExpectedEncoding, Encoding);
   EXPECT_EQ(ExpectedEncoding, Encoding);
 }
 }
 
 
 TEST(DwarfLineTables, TestDefaultParams) {
 TEST(DwarfLineTables, TestDefaultParams) {
-  if (!Ctxt)
+  if (!getContext())
     return;
     return;
 
 
   MCDwarfLineTableParams Params;
   MCDwarfLineTableParams Params;
@@ -110,7 +114,7 @@ TEST(DwarfLineTables, TestDefaultParams) {
 }
 }
 
 
 TEST(DwarfLineTables, TestCustomParams) {
 TEST(DwarfLineTables, TestCustomParams) {
-  if (!Ctxt)
+  if (!getContext())
     return;
     return;
 
 
   // Some tests against the example values given in the standard.
   // Some tests against the example values given in the standard.
@@ -164,7 +168,7 @@ TEST(DwarfLineTables, TestCustomParams) {
 }
 }
 
 
 TEST(DwarfLineTables, TestCustomParams2) {
 TEST(DwarfLineTables, TestCustomParams2) {
-  if (!Ctxt)
+  if (!getContext())
     return;
     return;
 
 
   // Corner case param values.
   // Corner case param values.