]> granicus.if.org Git - clang/commitdiff
Give isCompatibleWithMSVC a better interface
authorDavid Majnemer <david.majnemer@gmail.com>
Mon, 11 May 2015 03:57:49 +0000 (03:57 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Mon, 11 May 2015 03:57:49 +0000 (03:57 +0000)
We now use an enum which maps the marketing name (almost always a year)
to the major version number.

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

include/clang/Basic/LangOptions.h
lib/AST/MicrosoftMangle.cpp
lib/Basic/IdentifierTable.cpp
lib/Basic/Targets.cpp
lib/CodeGen/CGException.cpp
lib/Frontend/TextDiagnostic.cpp
lib/Sema/SemaDecl.cpp
lib/Sema/SemaDeclCXX.cpp

index 36317046466a5d329572b3ddcd9c90854b8bd284..84836eb4e5c3ec3e600c521a5c003287ddea33d2 100644 (file)
@@ -67,6 +67,13 @@ public:
 
   enum AddrSpaceMapMangling { ASMM_Target, ASMM_On, ASMM_Off };
 
+  enum MSVCMajorVersion {
+    MSVC2010 = 16,
+    MSVC2012 = 17,
+    MSVC2013 = 18,
+    MSVC2015 = 19
+  };
+
 public:
   /// \brief Set of enabled sanitizers.
   SanitizerSet Sanitize;
@@ -118,7 +125,7 @@ public:
            !ObjCSubscriptingLegacyRuntime;
   }
 
-  bool isCompatibleWithMSVC(unsigned MajorVersion) const {
+  bool isCompatibleWithMSVC(MSVCMajorVersion MajorVersion) const {
     return MSCompatibilityVersion >= MajorVersion * 10000000U;
   }
 
index bac3472e68310cd32c6f1e1379baa5f16a1b2d71..b8327af6fa521f7b435b15afbeed245f01a4b248 100644 (file)
@@ -1210,7 +1210,8 @@ void MicrosoftCXXNameMangler::mangleTemplateArg(const TemplateDecl *TD,
           isa<TemplateTemplateParmDecl>(Parm))
         // MSVC 2015 changed the mangling for empty expanded template packs,
         // use the old mangling for link compatibility for old versions.
-        Out << (Context.getASTContext().getLangOpts().isCompatibleWithMSVC(19)
+        Out << (Context.getASTContext().getLangOpts().isCompatibleWithMSVC(
+                    LangOptions::MSVC2015)
                     ? "$$V"
                     : "$$$V");
       else if (isa<NonTypeTemplateParmDecl>(Parm))
index bd2840db4c70e896e9ba9d3d78704434f15e0bd9..0a27c6a889d396df4c87dd63b0fe437d9a5fe834 100644 (file)
@@ -157,7 +157,7 @@ static void AddKeyword(StringRef Keyword,
 
   // Don't add this keyword under MSVCCompat.
   if (LangOpts.MSVCCompat && (Flags & KEYNOMS18) &&
-      !LangOpts.isCompatibleWithMSVC(19))
+      !LangOpts.isCompatibleWithMSVC(LangOptions::MSVC2015))
     return;
 
   // Don't add this keyword under OpenCL.
index b39cd1eea5ba138184cd4d045ff26f7312fcc97e..44584c4501d96ca315bd962024d34ec7ab799d8f 100644 (file)
@@ -657,7 +657,7 @@ protected:
       // FIXME We cannot encode the revision information into 32-bits
       Builder.defineMacro("_MSC_BUILD", Twine(1));
 
-      if (Opts.CPlusPlus11 && Opts.isCompatibleWithMSVC(19))
+      if (Opts.CPlusPlus11 && Opts.isCompatibleWithMSVC(LangOptions::MSVC2015))
         Builder.defineMacro("_HAS_CHAR16_T_LANGUAGE_SUPPORT", Twine(1));
     }
 
index 6e0bdd24a75aa794a800c6f0d2c88a8e2d9c06f1..a518443889d36e3b416245321cab954353474c5d 100644 (file)
@@ -60,7 +60,7 @@ llvm::Constant *CodeGenModule::getTerminateFn() {
     name = "_ZSt9terminatev";
   } else if (getLangOpts().CPlusPlus &&
              getTarget().getCXXABI().isMicrosoft()) {
-    if (getLangOpts().isCompatibleWithMSVC(19))
+    if (getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015))
       name = "__std_terminate";
     else
       name = "\01?terminate@@YAXXZ";
index 17e41f614a1ddd5d1384be69d0fd4527ec7eed98..aaf17a98337158edd5b200e57da6217f2f81ec07 100644 (file)
@@ -810,7 +810,7 @@ void TextDiagnostic::emitDiagnosticLoc(SourceLocation Loc, PresumedLoc PLoc,
         OS << ',';
         // Visual Studio 2010 or earlier expects column number to be off by one
         if (LangOpts.MSCompatibilityVersion &&
-            LangOpts.MSCompatibilityVersion < 170000000)
+            !LangOpts.isCompatibleWithMSVC(LangOptions::MSVC2012))
           ColNo--;
       } else
         OS << ':';
index bc31d4612e5d823774dfb7b760daad81855e3b95..ac8f57698b3cd14d871cfe8c411aea8e367d2ce8 100644 (file)
@@ -3450,8 +3450,9 @@ Decl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS,
 // We will pick our mangling number depending on which version of MSVC is being
 // targeted.
 static unsigned getMSManglingNumber(const LangOptions &LO, Scope *S) {
-  return LO.isCompatibleWithMSVC(19) ? S->getMSCurManglingNumber()
-                                     : S->getMSLastManglingNumber();
+  return LO.isCompatibleWithMSVC(LangOptions::MSVC2015)
+             ? S->getMSCurManglingNumber()
+             : S->getMSLastManglingNumber();
 }
 
 void Sema::handleTagNumbering(const TagDecl *Tag, Scope *TagScope) {
index baa05c334f4a885833d17a19c2c815cd4250daba..c5d5d8f2e6147551dad9b9fe624f1b2b002c4b4b 100644 (file)
@@ -4799,7 +4799,7 @@ static void checkDLLAttribute(Sema &S, CXXRecordDecl *Class) {
         // MSVC versions before 2015 don't export the move assignment operators,
         // so don't attempt to import them if we have a definition.
         if (ClassImported && MD->isMoveAssignmentOperator() &&
-            !S.getLangOpts().isCompatibleWithMSVC(19))
+            !S.getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015))
           continue;
       }
     }