Switch LangOptions over to a .def file that describes header of the
language options. Use that .def file to declare the LangOptions class
and initialize all of its members, eliminating a source of annoying
initialization bugs.

AST serialization changes are next up.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139605 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp b/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp
index 48f5c8b..cb6c1c6 100644
--- a/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp
+++ b/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp
@@ -99,7 +99,7 @@
 static void checkObjCDealloc(const ObjCImplementationDecl *D,
                              const LangOptions& LOpts, BugReporter& BR) {
 
-  assert (LOpts.getGCMode() != LangOptions::GCOnly);
+  assert (LOpts.getGC() != LangOptions::GCOnly);
 
   ASTContext &Ctx = BR.getContext();
   const ObjCInterfaceDecl *ID = D->getClassInterface();
@@ -168,7 +168,7 @@
 
   if (!MD) { // No dealloc found.
 
-    const char* name = LOpts.getGCMode() == LangOptions::NonGC
+    const char* name = LOpts.getGC() == LangOptions::NonGC
                        ? "missing -dealloc"
                        : "missing -dealloc (Hybrid MM, non-GC)";
 
@@ -183,7 +183,7 @@
   // dealloc found.  Scan for missing [super dealloc].
   if (MD->getBody() && !scan_dealloc(MD->getBody(), S)) {
 
-    const char* name = LOpts.getGCMode() == LangOptions::NonGC
+    const char* name = LOpts.getGC() == LangOptions::NonGC
                        ? "missing [super dealloc]"
                        : "missing [super dealloc] (Hybrid MM, non-GC)";
 
@@ -240,7 +240,7 @@
       llvm::raw_string_ostream os(buf);
 
       if (requiresRelease) {
-        name = LOpts.getGCMode() == LangOptions::NonGC
+        name = LOpts.getGC() == LangOptions::NonGC
                ? "missing ivar release (leak)"
                : "missing ivar release (Hybrid MM, non-GC)";
 
@@ -248,7 +248,7 @@
            << "' instance variable was retained by a synthesized property but "
               "wasn't released in 'dealloc'";
       } else {
-        name = LOpts.getGCMode() == LangOptions::NonGC
+        name = LOpts.getGC() == LangOptions::NonGC
                ? "extra ivar release (use-after-release)"
                : "extra ivar release (Hybrid MM, non-GC)";
 
@@ -272,7 +272,7 @@
 public:
   void checkASTDecl(const ObjCImplementationDecl *D, AnalysisManager& mgr,
                     BugReporter &BR) const {
-    if (mgr.getLangOptions().getGCMode() == LangOptions::GCOnly)
+    if (mgr.getLangOptions().getGC() == LangOptions::GCOnly)
       return;
     checkObjCDealloc(cast<ObjCImplementationDecl>(D), mgr.getLangOptions(), BR);
   }
diff --git a/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp b/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp
index db5312d..b3b2f31 100644
--- a/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp
+++ b/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp
@@ -75,6 +75,6 @@
 }
 
 void ento::registerNSAutoreleasePoolChecker(CheckerManager &mgr) {
-  if (mgr.getLangOptions().getGCMode() != LangOptions::NonGC)
+  if (mgr.getLangOptions().getGC() != LangOptions::NonGC)
     mgr.registerChecker<NSAutoreleasePoolChecker>();
 }
diff --git a/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp b/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
index cf06f54..9715133 100644
--- a/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
+++ b/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
@@ -1772,7 +1772,7 @@
                                        bool GCEnabled) {
   const char *GCModeDescription = 0;
 
-  switch (LOpts.getGCMode()) {
+  switch (LOpts.getGC()) {
   case LangOptions::GCOnly:
     assert(GCEnabled);
     GCModeDescription = "Code is compiled to only use garbage collection";
@@ -2354,7 +2354,7 @@
       return leakWithinFunctionGC.get();
     } else {
       if (!leakWithinFunction) {
-        if (LOpts.getGCMode() == LangOptions::HybridGC) {
+        if (LOpts.getGC() == LangOptions::HybridGC) {
           leakWithinFunction.reset(new LeakWithinFunction("Leak of object when "
                                                           "not using garbage "
                                                           "collection (GC) in "
@@ -2376,7 +2376,7 @@
       return leakAtReturnGC.get();
     } else {
       if (!leakAtReturn) {
-        if (LOpts.getGCMode() == LangOptions::HybridGC) {
+        if (LOpts.getGC() == LangOptions::HybridGC) {
           leakAtReturn.reset(new LeakAtReturn("Leak of returned object when "
                                               "not using garbage collection "
                                               "(GC) in dual GC/non-GC code"));
diff --git a/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp b/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
index 69a87fb..76ca477 100644
--- a/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
+++ b/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
@@ -336,7 +336,7 @@
 static void RunPathSensitiveChecks(AnalysisConsumer &C, AnalysisManager &mgr,
                                    Decl *D) {
 
-  switch (mgr.getLangOptions().getGCMode()) {
+  switch (mgr.getLangOptions().getGC()) {
   default:
     llvm_unreachable("Invalid GC mode.");
   case LangOptions::NonGC: