]> granicus.if.org Git - clang/commitdiff
[-cxx-abi microsoft] Add commentary for mangleStaticGuardVariable
authorDavid Majnemer <david.majnemer@gmail.com>
Fri, 13 Dec 2013 00:52:45 +0000 (00:52 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Fri, 13 Dec 2013 00:52:45 +0000 (00:52 +0000)
We will need to do some work here if we want to play nice with MSVC2013.
Add a TODO indicating what changed and why this matters.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197193 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/MicrosoftMangle.cpp

index 24eac84cdd214bc928a450ee4af730ab9fdfb716..8a2357d057b60099fbbdfeed28a69d991133a18f 100644 (file)
@@ -2048,6 +2048,15 @@ void MicrosoftMangleContextImpl::mangleReferenceTemporary(const VarDecl *VD,
 
 void MicrosoftMangleContextImpl::mangleStaticGuardVariable(const VarDecl *VD,
                                                            raw_ostream &Out) {
+  // TODO: This is not correct, especially with respect to MSVC2013.  MSVC2013
+  // utilizes thread local variables to implement thread safe, re-entrant
+  // initialization for statics.  They no longer differentiate between an
+  // externally visible and non-externally visible static with respect to
+  // mangling, they all get $TSS <number>.
+  //
+  // N.B. This means that they can get more than 32 static variable guards in a
+  // scope.  It also means that they broke compatibility with their own ABI.
+
   // <guard-name> ::= ?_B <postfix> @51
   //              ::= ?$S <guard-num> @ <postfix> @4IA