[cfe-commits] r139605 - in /cfe/trunk: include/clang/Basic/ lib/AST/ lib/Basic/ lib/CodeGen/ lib/Frontend/ lib/Sema/ lib/Serialization/ lib/StaticAnalyzer/Checkers/ lib/StaticAnalyzer/Frontend/

Douglas Gregor dgregor at apple.com
Tue Sep 13 10:21:33 PDT 2011


Author: dgregor
Date: Tue Sep 13 12:21:33 2011
New Revision: 139605

URL: http://llvm.org/viewvc/llvm-project?rev=139605&view=rev
Log:
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.


Added:
    cfe/trunk/include/clang/Basic/LangOptions.def
    cfe/trunk/lib/Basic/LangOptions.cpp
Modified:
    cfe/trunk/include/clang/Basic/LangOptions.h
    cfe/trunk/lib/AST/ASTContext.cpp
    cfe/trunk/lib/Basic/CMakeLists.txt
    cfe/trunk/lib/Basic/Targets.cpp
    cfe/trunk/lib/CodeGen/CGBlocks.cpp
    cfe/trunk/lib/CodeGen/CGDecl.cpp
    cfe/trunk/lib/CodeGen/CGExpr.cpp
    cfe/trunk/lib/CodeGen/CGExprAgg.cpp
    cfe/trunk/lib/CodeGen/CGObjC.cpp
    cfe/trunk/lib/CodeGen/CGObjCGNU.cpp
    cfe/trunk/lib/CodeGen/CGObjCMac.cpp
    cfe/trunk/lib/CodeGen/CodeGenModule.cpp
    cfe/trunk/lib/Frontend/CompilerInvocation.cpp
    cfe/trunk/lib/Frontend/InitPreprocessor.cpp
    cfe/trunk/lib/Sema/SemaDecl.cpp
    cfe/trunk/lib/Sema/SemaObjCProperty.cpp
    cfe/trunk/lib/Serialization/ASTReader.cpp
    cfe/trunk/lib/Serialization/ASTWriter.cpp
    cfe/trunk/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp
    cfe/trunk/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp
    cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
    cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp

Added: cfe/trunk/include/clang/Basic/LangOptions.def
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.def?rev=139605&view=auto
==============================================================================
--- cfe/trunk/include/clang/Basic/LangOptions.def (added)
+++ cfe/trunk/include/clang/Basic/LangOptions.def Tue Sep 13 12:21:33 2011
@@ -0,0 +1,148 @@
+//===--- LangOptions.def - Language option database --------------- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the language options. Users of this file must
+// define the LANGOPT macro to make use of this information. 
+// Optionally, the user may also define BENIGN_LANGOPT
+// (for options that don't affect the construction of the AST in an
+// incompatible way), ENUM_LANGOPT (for options that have enumeration,
+// rather than unsigned, type), and BENIGN_ENUM_LANGOPT (for benign
+// options that have enumeration type).
+//
+//===----------------------------------------------------------------------===//
+#ifndef LANGOPT
+#  error Define the LANGOPT macro to handle language options
+#endif
+
+#ifndef BENIGN_LANGOPT
+#  define BENIGN_LANGOPT(Name, Bits, Default, Description) \
+     LANGOPT(Name, Bits, Default, Description)
+#endif
+
+#ifndef ENUM_LANGOPT
+#  define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
+     LANGOPT(Name, Bits, Default, Description)
+#endif
+
+#ifndef BENIGN_ENUM_LANGOPT
+#  define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
+     ENUM_LANGOPT(Name, Type, Bits, Default, Description)
+#endif
+
+LANGOPT(Trigraphs         , 1, 0,"Trigraphs in source files")
+LANGOPT(BCPLComment       , 1, 0, "BCPL-style '//' comments")
+LANGOPT(Bool              , 1, 0, "'bool', 'true', 'false' keywords")
+BENIGN_LANGOPT(DollarIdents      , 1, 0, "'$' allowed in identifiers")
+BENIGN_LANGOPT(AsmPreprocessor   , 1, 0, "Preprocessor in asm mode")
+BENIGN_LANGOPT(GNUMode           , 1, 0, "True in gnu99 mode false in c99 mode (etc)")
+LANGOPT(GNUKeywords       , 1, 0, "True if GNU-only keywords are allowed")
+BENIGN_LANGOPT(ImplicitInt       , 1, 0, "C89 implicit 'int'")
+LANGOPT(Digraphs          , 1, 0, "C94, C99 and C++")
+BENIGN_LANGOPT(HexFloats         , 1, 0, "C99 Hexadecimal float constants")
+LANGOPT(C99               , 1, 0, "C99 Support")
+LANGOPT(C1X               , 1, 0, "C1X Support")
+LANGOPT(Microsoft         , 1, 0, "Microsoft extensions")
+LANGOPT(Borland           , 1, 0, "Borland extensions")
+LANGOPT(CPlusPlus         , 1, 0, "C++ Support")
+LANGOPT(CPlusPlus0x       , 1, 0, "C++0x Support")
+LANGOPT(CXXOperatorNames  , 1, 0, "Treat C++ operator names as keywords")
+LANGOPT(ObjC1             , 1, 0, "Objective-C 1 support enabled")
+LANGOPT(ObjC2             , 1, 0, "Objective-C 2 support enabled")
+LANGOPT(ObjCNonFragileABI , 1, 0, "Objective-C modern abi enabled")
+LANGOPT(ObjCNonFragileABI2 , 1, 0, "Objective-C enhanced modern abi enabled")
+BENIGN_LANGOPT(ObjCDefaultSynthProperties , 1, 0, 
+               "Objective-C auto-synthesized properties")
+BENIGN_LANGOPT(ObjCInferRelatedResultType , 1, 1, 
+               "Infer Objective-C related return types")
+LANGOPT(AppleKext         , 1, 0, "Allow apple kext features")
+BENIGN_LANGOPT(PascalStrings     , 1, 0, "Allow Pascal strings")
+LANGOPT(WritableStrings   , 1, 0, "Allow writable strings")
+LANGOPT(ConstStrings      , 1, 0, 
+        "Add const qualifier to strings (-Wwrite-strings)")
+LANGOPT(LaxVectorConversions , 1, 1, "Supprt lax vector conversions")
+LANGOPT(AltiVec           , 1, 0, "Support AltiVec-style vector initializers")
+LANGOPT(Exceptions        , 1, 0, "Support exception handling")
+LANGOPT(ObjCExceptions    , 1, 0, "Support Objective-C exceptions")
+LANGOPT(CXXExceptions     , 1, 0, "Support C++ exceptions")
+LANGOPT(SjLjExceptions    , 1, 0, "Use setjmp-longjump exception handling")
+LANGOPT(TraditionalCPP    , 1, 0, "Enable some traditional CPP emulation")
+LANGOPT(RTTI              , 1, 1, "Support RTTI information")
+LANGOPT(MSBitfields       , 1, 0, "MS-compatible structure layout")
+LANGOPT(NeXTRuntime       , 1, 1, "Use NeXT runtime")
+BENIGN_LANGOPT(Freestanding      , 1, 0, "Freestanding implementation")
+LANGOPT(NoBuiltin         , 1, 0, "Do not use builtin functions (-fno-builtin)")
+
+BENIGN_LANGOPT(ThreadsafeStatics , 1, 1, "Whether static initializers are protected by locks")
+LANGOPT(POSIXThreads      , 1, 0, "Compiling with POSIX thread support")
+BENIGN_LANGOPT(Blocks            , 1, 0, "Support blocks extension to C")
+BENIGN_LANGOPT(EmitAllDecls      , 1, 0, "Emit all declarations, even if they are unused")
+LANGOPT(MathErrno         , 1, 1, "Math functions must respect errno (modulo the platform support)")
+BENIGN_LANGOPT(HeinousExtensions , 1, 0, "Extensions that we really don't like and may be ripped out at any time")
+
+LANGOPT(Optimize          , 1, 0, "Whether __OPTIMIZE__ should be defined")
+LANGOPT(OptimizeSize      , 1, 0, "Whether __OPTIMIZE_SIZE__ should be defined")
+LANGOPT(Static            , 1, 0, "Should __STATIC__ be defined (as opposed to __DYNAMIC__)")
+LANGOPT(PICLevel          , 2, 0, "The value for __PIC__, if non-zero")
+LANGOPT(GNUInline         , 1, 0, "Should GNU inline semantics be used (instead of C99 semantics)")
+LANGOPT(NoInline          , 1, 0, "Should __NO_INLINE__ be defined")
+LANGOPT(Deprecated        , 1, 0, "Should __DEPRECATED be defined")
+
+LANGOPT(ObjCGCBitmapPrint , 1, 0, "Enable printing of gc's bitmap layout for __weak/__strong ivars")
+
+BENIGN_LANGOPT(AccessControl     , 1, 1, "Whether C++ access control should be enabled")
+LANGOPT(CharIsSigned      , 1, 1, "Whether char is a signed or unsigned type")
+LANGOPT(ShortWChar        , 1, 0, "Force wchar_t to be unsigned short int")
+
+LANGOPT(ShortEnums        , 1, 0, "The enum type will be equivalent to the smallest integer type with enough room")
+
+LANGOPT(OpenCL            , 1, 0, "OpenCL C99 language extensions")
+LANGOPT(CUDA              , 1, 0, "CUDA C++ language extensions")
+
+LANGOPT(AssumeSaneOperatorNew , 1, 1, "Whether to add __attribute__((malloc)) to the declaration of C++'s new operators")
+BENIGN_LANGOPT(ElideConstructors , 1, 1, "Whether C++ copy constructors should be elided if possible")
+BENIGN_LANGOPT(CatchUndefined    , 1, 0, "Generate code to check for undefined ops")
+BENIGN_LANGOPT(DumpRecordLayouts , 1, 0, "Dump the layout of IRgen'd records")
+BENIGN_LANGOPT(DumpVTableLayouts , 1, 0, "Dump the layouts of emitted vtables")
+LANGOPT(NoConstantCFStrings , 1, 0, "Do not do CF strings")
+LANGOPT(InlineVisibilityHidden , 1, 0, "Whether inline C++ methods have hidden visibility by default")
+BENIGN_LANGOPT(ParseUnknownAnytype, 1, 0, "Let the user write __unknown_anytype")
+BENIGN_LANGOPT(DebuggerSupport , 1, 0, "Do things that only make sense when supporting a debugger")
+
+BENIGN_LANGOPT(SpellChecking , 1, 1, "Whether to perform spell-checking for error recovery")
+LANGOPT(SinglePrecisionConstants , 1, 0, "Whether to treat double-precision floating point constants as single precision constants")
+LANGOPT(FastRelaxedMath , 1, 0, "OpenCL fast relaxed math (on its own, defines __FAST_RELAXED_MATH__)")
+LANGOPT(DefaultFPContract , 1, 0, "Default setting for FP_CONTRACT")
+LANGOPT(NoBitFieldTypeAlign , 1, 0, "Temporary option, used for testing purposes")
+LANGOPT(ObjCAutoRefCount , 1, 0, "Objective C automated reference counting")
+LANGOPT(ObjCRuntimeHasWeak , 1, 0, "The ARC runtime supports __weak")
+LANGOPT(FakeAddressSpaceMap , 1, 0, "Use a fake address space map, for testing languages such as OpenCL")
+
+LANGOPT(MRTD , 1, 0, "-mrtd calling convention")
+BENIGN_LANGOPT(DelayedTemplateParsing , 1, 0, "Delayed template parsing")
+LANGOPT(BlocksRuntimeOptional , 1, 0, "The blocks runtime is not guaranteed")
+
+ENUM_LANGOPT(GC, GCMode, 2, NonGC, "Objective-C Garbage Collection mode")
+ENUM_LANGOPT(VisibilityMode, Visibility, 3, DefaultVisibility, 
+             "symbol visibility")
+ENUM_LANGOPT(StackProtector, StackProtectorMode, 2, SSPOff, 
+             "Whether stack protectors are on")
+ENUM_LANGOPT(SignedOverflowBehavior, SignedOverflowBehaviorTy, 2, SOB_Undefined,
+             "How to handle signed integer overflow.")
+
+BENIGN_LANGOPT(InstantiationDepth, 32, 1024, "Maximum template instantiation depth")
+BENIGN_LANGOPT(NumLargeByValueCopy, 32, 0, 
+        "Warn if parameter/return value is larger in bytes than this setting. 0 is no check.")
+BENIGN_LANGOPT(MSCVersion, 32, 0, 
+        "Version of Microsoft Visual C/C++ we are pretending to be")
+
+#undef LANGOPT
+#undef BENIGN_LANGOPT
+#undef ENUM_LANGOPT
+#undef BENIGN_ENUM_LANGOPT
+

Modified: cfe/trunk/include/clang/Basic/LangOptions.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.h?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/LangOptions.h (original)
+++ cfe/trunk/include/clang/Basic/LangOptions.h Tue Sep 13 12:21:33 2011
@@ -19,253 +19,50 @@
 
 namespace clang {
 
+class OptionSignature;
+  
 /// LangOptions - This class keeps track of the various options that can be
 /// enabled, which controls the dialect of C that is accepted.
 class LangOptions {
 public:
-  unsigned Trigraphs         : 1;  // Trigraphs in source files.
-  unsigned BCPLComment       : 1;  // BCPL-style '//' comments.
-  unsigned Bool              : 1;  // 'bool', 'true', 'false' keywords.
-  unsigned DollarIdents      : 1;  // '$' allowed in identifiers.
-  unsigned AsmPreprocessor   : 1;  // Preprocessor in asm mode.
-  unsigned GNUMode           : 1;  // True in gnu99 mode false in c99 mode (etc)
-  unsigned GNUKeywords       : 1;  // True if GNU-only keywords are allowed
-  unsigned ImplicitInt       : 1;  // C89 implicit 'int'.
-  unsigned Digraphs          : 1;  // C94, C99 and C++
-  unsigned HexFloats         : 1;  // C99 Hexadecimal float constants.
-  unsigned C99               : 1;  // C99 Support
-  unsigned C1X               : 1;  // C1X Support
-  unsigned Microsoft         : 1;  // Microsoft extensions.
-  unsigned Borland           : 1;  // Borland extensions.
-  unsigned CPlusPlus         : 1;  // C++ Support
-  unsigned CPlusPlus0x       : 1;  // C++0x Support
-  unsigned CXXOperatorNames  : 1;  // Treat C++ operator names as keywords.
-
-  unsigned ObjC1             : 1;  // Objective-C 1 support enabled.
-  unsigned ObjC2             : 1;  // Objective-C 2 support enabled.
-  unsigned ObjCNonFragileABI : 1;  // Objective-C modern abi enabled
-  unsigned ObjCNonFragileABI2 : 1;  // Objective-C enhanced modern abi enabled
-  unsigned ObjCDefaultSynthProperties : 1; // Objective-C auto-synthesized properties.
-  unsigned ObjCInferRelatedResultType : 1; // Infer Objective-C related return
-                                           // types
-  unsigned AppleKext         : 1;  // Allow apple kext features.
-
-  unsigned PascalStrings     : 1;  // Allow Pascal strings
-  unsigned WritableStrings   : 1;  // Allow writable strings
-  unsigned ConstStrings      : 1;  // Add const qualifier to strings (-Wwrite-strings)
-  unsigned LaxVectorConversions : 1;
-  unsigned AltiVec           : 1;  // Support AltiVec-style vector initializers.
-  unsigned Exceptions        : 1;  // Support exception handling.
-  unsigned ObjCExceptions    : 1;  // Support Objective-C exceptions.
-  unsigned CXXExceptions     : 1;  // Support C++ exceptions.
-  unsigned SjLjExceptions    : 1;  // Use setjmp-longjump exception handling.
-  unsigned TraditionalCPP    : 1; /// Enable some traditional CPP emulation.
-  unsigned RTTI              : 1;  // Support RTTI information.
-
-  unsigned MSBitfields       : 1; // MS-compatible structure layout
-  unsigned NeXTRuntime       : 1; // Use NeXT runtime.
-  unsigned Freestanding      : 1; // Freestanding implementation
-  unsigned NoBuiltin         : 1; // Do not use builtin functions (-fno-builtin)
-
-  unsigned ThreadsafeStatics : 1; // Whether static initializers are protected
-                                  // by locks.
-  unsigned POSIXThreads      : 1; // Compiling with POSIX thread support
-                                  // (-pthread)
-  unsigned Blocks            : 1; // block extension to C
-  unsigned EmitAllDecls      : 1; // Emit all declarations, even if
-                                  // they are unused.
-  unsigned MathErrno         : 1; // Math functions must respect errno
-                                  // (modulo the platform support).
-
-  unsigned HeinousExtensions : 1; // Extensions that we really don't like and
-                                  // may be ripped out at any time.
-
-  unsigned Optimize          : 1; // Whether __OPTIMIZE__ should be defined.
-  unsigned OptimizeSize      : 1; // Whether __OPTIMIZE_SIZE__ should be
-                                  // defined.
-  unsigned Static            : 1; // Should __STATIC__ be defined (as
-                                  // opposed to __DYNAMIC__).
-  unsigned PICLevel          : 2; // The value for __PIC__, if non-zero.
-
-  unsigned GNUInline         : 1; // Should GNU inline semantics be
-                                  // used (instead of C99 semantics).
-  unsigned NoInline          : 1; // Should __NO_INLINE__ be defined.
-
-  unsigned Deprecated        : 1; // Should __DEPRECATED be defined.
-
-  unsigned ObjCGCBitmapPrint : 1; // Enable printing of gc's bitmap layout
-                                  // for __weak/__strong ivars.
-
-  unsigned AccessControl     : 1; // Whether C++ access control should
-                                  // be enabled.
-  unsigned CharIsSigned      : 1; // Whether char is a signed or unsigned type
-  unsigned ShortWChar        : 1; // Force wchar_t to be unsigned short int.
-
-  unsigned ShortEnums        : 1; // The enum type will be equivalent to the
-                                  // smallest integer type with enough room.
-
-  unsigned OpenCL            : 1; // OpenCL C99 language extensions.
-  unsigned CUDA              : 1; // CUDA C++ language extensions.
-
-  unsigned AssumeSaneOperatorNew : 1; // Whether to add __attribute__((malloc))
-                                      // to the declaration of C++'s new
-                                      // operators
-  unsigned ElideConstructors : 1; // Whether C++ copy constructors should be
-                                  // elided if possible.
-  unsigned CatchUndefined    : 1; // Generate code to check for undefined ops.
-  unsigned DumpRecordLayouts : 1; /// Dump the layout of IRgen'd records.
-  unsigned DumpVTableLayouts : 1; /// Dump the layouts of emitted vtables.
-  unsigned NoConstantCFStrings : 1;  // Do not do CF strings
-  unsigned InlineVisibilityHidden : 1; // Whether inline C++ methods have
-                                       // hidden visibility by default.
-  unsigned ParseUnknownAnytype: 1; /// Let the user write __unknown_anytype.
-  unsigned DebuggerSupport : 1;   /// Do things that only make sense when
-                                  /// supporting a debugger
-
-  unsigned SpellChecking : 1; // Whether to perform spell-checking for error
-                              // recovery.
-  unsigned SinglePrecisionConstants : 1; // Whether to treat double-precision
-                                         // floating point constants as
-                                         // single precision constants.
-  unsigned FastRelaxedMath : 1; // OpenCL fast relaxed math (on its own,
-                                // defines __FAST_RELAXED_MATH__).
-  unsigned DefaultFPContract : 1; // Default setting for FP_CONTRACT
-  // FIXME: This is just a temporary option, for testing purposes.
-  unsigned NoBitFieldTypeAlign : 1;
-  unsigned ObjCAutoRefCount : 1; // Objective C automated reference counting
-  unsigned ObjCRuntimeHasWeak : 1; // The ARC runtime supports __weak
-  unsigned FakeAddressSpaceMap : 1; // Use a fake address space map, for
-                                    // testing languages such as OpenCL.
-
-  unsigned MRTD : 1;            // -mrtd calling convention
-  unsigned DelayedTemplateParsing : 1;  // Delayed template parsing
-  unsigned BlocksRuntimeOptional : 1; // The blocks runtime is not guaranteed
-
-private:
-  // We declare multibit enums as unsigned because MSVC insists on making enums
-  // signed.  Set/Query these values using accessors.
-  unsigned GC : 2;                // Objective-C Garbage Collection modes.
-  unsigned SymbolVisibility  : 3; // Symbol's visibility.
-  unsigned StackProtector    : 2; // Whether stack protectors are on.
-  unsigned SignedOverflowBehavior : 2; // How to handle signed integer overflow.
-
-public:
-  unsigned InstantiationDepth;    // Maximum template instantiation depth.
-  unsigned NumLargeByValueCopy;   // Warn if parameter/return value is larger
-                                  // in bytes than this setting. 0 is no check.
-
-  // Version of Microsoft Visual C/C++ we are pretending to be. This is
-  // temporary until we support all MS extensions used in Windows SDK and stdlib
-  // headers. Sets _MSC_VER.
-  unsigned MSCVersion;
-
-  std::string ObjCConstantStringClass;
-
   enum GCMode { NonGC, GCOnly, HybridGC };
   enum StackProtectorMode { SSPOff, SSPOn, SSPReq };
-
+  
   enum SignedOverflowBehaviorTy {
     SOB_Undefined,  // Default C standard behavior.
     SOB_Defined,    // -fwrapv
     SOB_Trapping    // -ftrapv
   };
+
+  // Define simple language options (with no accessors).
+#define LANGOPT(Name, Bits, Default, Description) unsigned Name : Bits;
+#define ENUM_LANGOPT(Name, Type, Bits, Default, Description)
+#include "clang/Basic/LangOptions.def"
+  
+private:
+  // Define language options of enumeration type. These are private, and will
+  // have accessors (below).
+#define LANGOPT(Name, Bits, Default, Description) 
+#define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
+  unsigned Name : Bits;
+#include "clang/Basic/LangOptions.def"
+  
+public:
+  std::string ObjCConstantStringClass;
+  
   /// The name of the handler function to be called when -ftrapv is specified.
   /// If none is specified, abort (GCC-compatible behaviour).
   std::string OverflowHandler;
 
-  LangOptions() {
-    Trigraphs = BCPLComment = Bool = DollarIdents = AsmPreprocessor = 0;
-    GNUMode = GNUKeywords = ImplicitInt = Digraphs = 0;
-    HexFloats = 0;
-    ObjCAutoRefCount = 0;
-    ObjCRuntimeHasWeak = 0;
-    GC = ObjC1 = ObjC2 = ObjCNonFragileABI = ObjCNonFragileABI2 = 0;
-    AppleKext = 0;
-    ObjCDefaultSynthProperties = 0;
-    ObjCInferRelatedResultType = 1;
-    NoConstantCFStrings = 0; InlineVisibilityHidden = 0;
-    C99 = C1X = Microsoft = Borland = CPlusPlus = CPlusPlus0x = 0;
-    CXXOperatorNames = PascalStrings = WritableStrings = ConstStrings = 0;
-    Exceptions = ObjCExceptions = CXXExceptions = SjLjExceptions = 0;
-    TraditionalCPP = Freestanding = NoBuiltin = 0;
-    MSBitfields = 0;
-    NeXTRuntime = 1;
-    RTTI = 1;
-    LaxVectorConversions = 1;
-    HeinousExtensions = 0;
-    AltiVec = OpenCL = CUDA = StackProtector = 0;
-
-    SymbolVisibility = (unsigned) DefaultVisibility;
-
-    ThreadsafeStatics = 1;
-    POSIXThreads = 0;
-    Blocks = BlocksRuntimeOptional = 0;
-    EmitAllDecls = 0;
-    MathErrno = 1;
-    SignedOverflowBehavior = SOB_Undefined;
-
-    AssumeSaneOperatorNew = 1;
-    AccessControl = 1;
-    ElideConstructors = 1;
-
-    SignedOverflowBehavior = 0;
-    ObjCGCBitmapPrint = 0;
-
-    InstantiationDepth = 1024;
-
-    NumLargeByValueCopy = 0;
-    MSCVersion = 0;
-    
-    Optimize = 0;
-    OptimizeSize = 0;
-
-    Static = 0;
-    PICLevel = 0;
-
-    GNUInline = 0;
-    NoInline = 0;
-
-    Deprecated = 0;
-
-    CharIsSigned = 1;
-    ShortWChar = 0;
-    ShortEnums = 0;
-    CatchUndefined = 0;
-    DumpRecordLayouts = 0;
-    DumpVTableLayouts = 0;
-    SpellChecking = 1;
-    SinglePrecisionConstants = 0;
-    FastRelaxedMath = 0;
-    DefaultFPContract = 0;
-    NoBitFieldTypeAlign = 0;
-    FakeAddressSpaceMap = 0;
-    MRTD = 0;
-    DelayedTemplateParsing = 0;
-    ParseUnknownAnytype = DebuggerSupport = 0;
-  }
-
-  GCMode getGCMode() const { return (GCMode) GC; }
-  void setGCMode(GCMode m) { GC = (unsigned) m; }
-
-  StackProtectorMode getStackProtectorMode() const {
-    return static_cast<StackProtectorMode>(StackProtector);
-  }
-  void setStackProtectorMode(StackProtectorMode m) {
-    StackProtector = static_cast<unsigned>(m);
-  }
-
-  Visibility getVisibilityMode() const {
-    return (Visibility) SymbolVisibility;
-  }
-  void setVisibilityMode(Visibility v) { SymbolVisibility = (unsigned) v; }
-
-  SignedOverflowBehaviorTy getSignedOverflowBehavior() const {
-    return (SignedOverflowBehaviorTy)SignedOverflowBehavior;
-  }
-  void setSignedOverflowBehavior(SignedOverflowBehaviorTy V) {
-    SignedOverflowBehavior = (unsigned)V;
-  }
+  LangOptions();
 
+  // Define accessors/mutators for language options of enumeration type.
+#define LANGOPT(Name, Bits, Default, Description) 
+#define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
+  Type get##Name() const { return static_cast<Type>(Name); } \
+  void set##Name(Type Value) { Name = static_cast<unsigned>(Value); }  
+#include "clang/Basic/LangOptions.def"
+  
   bool isSignedOverflowDefined() const {
     return getSignedOverflowBehavior() == SOB_Defined;
   }

Modified: cfe/trunk/lib/AST/ASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ASTContext.cpp (original)
+++ cfe/trunk/lib/AST/ASTContext.cpp Tue Sep 13 12:21:33 2011
@@ -4930,7 +4930,7 @@
 /// garbage collection attribute.
 ///
 Qualifiers::GC ASTContext::getObjCGCAttrKind(QualType Ty) const {
-  if (getLangOptions().getGCMode() == LangOptions::NonGC)
+  if (getLangOptions().getGC() == LangOptions::NonGC)
     return Qualifiers::GCNone;
 
   assert(getLangOptions().ObjC1);

Modified: cfe/trunk/lib/Basic/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/CMakeLists.txt?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/CMakeLists.txt (original)
+++ cfe/trunk/lib/Basic/CMakeLists.txt Tue Sep 13 12:21:33 2011
@@ -8,6 +8,7 @@
   FileManager.cpp
   FileSystemStatCache.cpp
   IdentifierTable.cpp
+  LangOptions.cpp
   SourceLocation.cpp
   SourceManager.cpp
   TargetInfo.cpp

Added: cfe/trunk/lib/Basic/LangOptions.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/LangOptions.cpp?rev=139605&view=auto
==============================================================================
--- cfe/trunk/lib/Basic/LangOptions.cpp (added)
+++ cfe/trunk/lib/Basic/LangOptions.cpp Tue Sep 13 12:21:33 2011
@@ -0,0 +1,21 @@
+//===--- LangOptions.cpp - C Language Family Language Options ---*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file defines the LangOptions class.
+//
+//===----------------------------------------------------------------------===//
+#include "clang/Basic/LangOptions.h"
+
+using namespace clang;
+
+LangOptions::LangOptions() {
+#define LANGOPT(Name, Bits, Default, Description) Name = Default;
+#define ENUM_LANGOPT(Name, Type, Bits, Default, Description) set##Name(Default);
+#include "clang/Basic/LangOptions.def"
+}

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Tue Sep 13 12:21:33 2011
@@ -89,7 +89,7 @@
     Builder.defineMacro("__weak", "__attribute__((objc_gc(weak)))");
 
     // Darwin defines __strong even in C mode (just to nothing).
-    if (Opts.getGCMode() != LangOptions::NonGC)
+    if (Opts.getGC() != LangOptions::NonGC)
       Builder.defineMacro("__strong", "__attribute__((objc_gc(strong)))");
     else
       Builder.defineMacro("__strong", "");

Modified: cfe/trunk/lib/CodeGen/CGBlocks.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBlocks.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGBlocks.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGBlocks.cpp Tue Sep 13 12:21:33 2011
@@ -1804,7 +1804,7 @@
 /// to be done externally.
 void CodeGenFunction::enterByrefCleanup(const AutoVarEmission &emission) {
   // We don't enter this cleanup if we're in pure-GC mode.
-  if (CGM.getLangOptions().getGCMode() == LangOptions::GCOnly)
+  if (CGM.getLangOptions().getGC() == LangOptions::GCOnly)
     return;
 
   EHStack.pushCleanup<CallBlockRelease>(NormalAndEHCleanup, emission.Address);

Modified: cfe/trunk/lib/CodeGen/CGDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDecl.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGDecl.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGDecl.cpp Tue Sep 13 12:21:33 2011
@@ -1120,7 +1120,7 @@
     emitAutoVarTypeCleanup(emission, dtorKind);
 
   // In GC mode, honor objc_precise_lifetime.
-  if (getLangOptions().getGCMode() != LangOptions::NonGC &&
+  if (getLangOptions().getGC() != LangOptions::NonGC &&
       D.hasAttr<ObjCPreciseLifetimeAttr>()) {
     EHStack.pushCleanup<ExtendGCLifetime>(NormalCleanup, &D);
   }

Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExpr.cpp Tue Sep 13 12:21:33 2011
@@ -1212,7 +1212,7 @@
 // or neither.
 static void setObjCGCLValueClass(const ASTContext &Ctx, const Expr *E,
                                  LValue &LV) {
-  if (Ctx.getLangOptions().getGCMode() == LangOptions::NonGC)
+  if (Ctx.getLangOptions().getGC() == LangOptions::NonGC)
     return;
   
   if (isa<ObjCIvarRefExpr>(E)) {
@@ -1419,7 +1419,7 @@
     // But, we continue to generate __strong write barrier on indirect write
     // into a pointer to object.
     if (getContext().getLangOptions().ObjC1 &&
-        getContext().getLangOptions().getGCMode() != LangOptions::NonGC &&
+        getContext().getLangOptions().getGC() != LangOptions::NonGC &&
         LV.isObjCWeak())
       LV.setNonGC(!E->isOBJCGCCandidate(getContext()));
     return LV;
@@ -1680,7 +1680,7 @@
   LV.getQuals().setAddressSpace(E->getBase()->getType().getAddressSpace());
 
   if (getContext().getLangOptions().ObjC1 &&
-      getContext().getLangOptions().getGCMode() != LangOptions::NonGC) {
+      getContext().getLangOptions().getGC() != LangOptions::NonGC) {
     LV.setNonGC(!E->isOBJCGCCandidate(getContext()));
     setObjCGCLValueClass(getContext(), E, LV);
   }

Modified: cfe/trunk/lib/CodeGen/CGExprAgg.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprAgg.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprAgg.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprAgg.cpp Tue Sep 13 12:21:33 2011
@@ -79,7 +79,7 @@
   void EmitMoveFromReturnSlot(const Expr *E, RValue Src);
 
   AggValueSlot::NeedsGCBarriers_t needsGC(QualType T) {
-    if (CGF.getLangOptions().getGCMode() && TypeRequiresGCollection(T))
+    if (CGF.getLangOptions().getGC() && TypeRequiresGCollection(T))
       return AggValueSlot::NeedsGCBarriers;
     return AggValueSlot::DoesNotNeedGCBarriers;
   }
@@ -1123,7 +1123,7 @@
   SrcPtr = Builder.CreateBitCast(SrcPtr, SBP, "tmp");
 
   // Don't do any of the memmove_collectable tests if GC isn't set.
-  if (CGM.getLangOptions().getGCMode() == LangOptions::NonGC) {
+  if (CGM.getLangOptions().getGC() == LangOptions::NonGC) {
     // fall through
   } else if (const RecordType *RecordTy = Ty->getAs<RecordType>()) {
     RecordDecl *Record = RecordTy->getDecl();

Modified: cfe/trunk/lib/CodeGen/CGObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjC.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjC.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjC.cpp Tue Sep 13 12:21:33 2011
@@ -465,7 +465,7 @@
   if (attrs & (ObjCPropertyDecl::OBJC_PR_retain
                | ObjCPropertyDecl::OBJC_PR_strong)) {
     // In GC-only, there's nothing special that needs to be done.
-    if (CGM.getLangOptions().getGCMode() == LangOptions::GCOnly) {
+    if (CGM.getLangOptions().getGC() == LangOptions::GCOnly) {
       // fallthrough
 
     // In ARC, if the property is non-atomic, use expression emission,
@@ -506,14 +506,14 @@
   // expressions.  This actually works out to being atomic anyway,
   // except for ARC __strong, but that should trigger the above code.
   if (ivarType.hasNonTrivialObjCLifetime() ||
-      (CGM.getLangOptions().getGCMode() &&
+      (CGM.getLangOptions().getGC() &&
        CGM.getContext().getObjCGCAttrKind(ivarType))) {
     Kind = Expression;
     return;
   }
 
   // Compute whether the ivar has strong members.
-  if (CGM.getLangOptions().getGCMode())
+  if (CGM.getLangOptions().getGC())
     if (const RecordType *recordType = ivarType->getAs<RecordType>())
       HasStrong = recordType->getDecl()->hasObjectMember();
 
@@ -1066,7 +1066,7 @@
 }
 
 bool CodeGenFunction::IvarTypeWithAggrGCObjects(QualType Ty) {
-  if (CGM.getLangOptions().getGCMode() == LangOptions::NonGC)
+  if (CGM.getLangOptions().getGC() == LangOptions::NonGC)
     return false;
   if (const RecordType *FDTTy = Ty.getTypePtr()->getAs<RecordType>())
     return FDTTy->getDecl()->hasObjectMember();

Modified: cfe/trunk/lib/CodeGen/CGObjCGNU.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCGNU.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjCGNU.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjCGNU.cpp Tue Sep 13 12:21:33 2011
@@ -743,11 +743,11 @@
               true));
 
   const LangOptions &Opts = CGM.getLangOptions();
-  if ((Opts.getGCMode() != LangOptions::NonGC) || Opts.ObjCAutoRefCount)
+  if ((Opts.getGC() != LangOptions::NonGC) || Opts.ObjCAutoRefCount)
     RuntimeVersion = 10;
 
   // Don't bother initialising the GC stuff unless we're compiling in GC mode
-  if (Opts.getGCMode() != LangOptions::NonGC) {
+  if (Opts.getGC() != LangOptions::NonGC) {
     // This is a bit of an hack.  We should sort this out by having a proper
     // CGObjCGNUstep subclass for GC, but we may want to really support the old
     // ABI and GC added in ObjectiveC2.framework, so we fudge it a bit for now
@@ -970,7 +970,7 @@
                                     const CallArgList &CallArgs,
                                     const ObjCMethodDecl *Method) {
   CGBuilderTy &Builder = CGF.Builder;
-  if (CGM.getLangOptions().getGCMode() == LangOptions::GCOnly) {
+  if (CGM.getLangOptions().getGC() == LangOptions::GCOnly) {
     if (Sel == RetainSel || Sel == AutoreleaseSel) {
       return RValue::get(EnforceType(Builder, Receiver,
                   CGM.getTypes().ConvertType(ResultType)));
@@ -1078,7 +1078,7 @@
   CGBuilderTy &Builder = CGF.Builder;
 
   // Strip out message sends to retain / release in GC mode
-  if (CGM.getLangOptions().getGCMode() == LangOptions::GCOnly) {
+  if (CGM.getLangOptions().getGC() == LangOptions::GCOnly) {
     if (Sel == RetainSel || Sel == AutoreleaseSel) {
       return RValue::get(EnforceType(Builder, Receiver,
                   CGM.getTypes().ConvertType(ResultType)));
@@ -2169,7 +2169,7 @@
   Elements.push_back(SymTab);
 
   if (RuntimeVersion >= 10)
-    switch (CGM.getLangOptions().getGCMode()) {
+    switch (CGM.getLangOptions().getGC()) {
       case LangOptions::GCOnly:
         Elements.push_back(llvm::ConstantInt::get(IntTy, 2));
         break;

Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjCMac.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjCMac.cpp Tue Sep 13 12:21:33 2011
@@ -1605,7 +1605,7 @@
   llvm::Constant *nullPtr = 
     llvm::Constant::getNullValue(llvm::Type::getInt8PtrTy(VMContext));
 
-  if (CGM.getLangOptions().getGCMode() == LangOptions::NonGC &&
+  if (CGM.getLangOptions().getGC() == LangOptions::NonGC &&
       !CGM.getLangOptions().ObjCAutoRefCount)
     return nullPtr;
 
@@ -3384,9 +3384,9 @@
   unsigned flags = 0;
 
   // FIXME: Fix and continue?
-  if (CGM.getLangOptions().getGCMode() != LangOptions::NonGC)
+  if (CGM.getLangOptions().getGC() != LangOptions::NonGC)
     flags |= eImageInfo_GarbageCollected;
-  if (CGM.getLangOptions().getGCMode() == LangOptions::GCOnly)
+  if (CGM.getLangOptions().getGC() == LangOptions::GCOnly)
     flags |= eImageInfo_GCOnly;
 
   // We never allow @synthesize of a superclass property.
@@ -3890,7 +3890,7 @@
   bool hasUnion = false;
 
   llvm::Type *PtrTy = llvm::Type::getInt8PtrTy(VMContext);
-  if (CGM.getLangOptions().getGCMode() == LangOptions::NonGC &&
+  if (CGM.getLangOptions().getGC() == LangOptions::NonGC &&
       !CGM.getLangOptions().ObjCAutoRefCount)
     return llvm::Constant::getNullValue(PtrTy);
 
@@ -4656,7 +4656,7 @@
 
     // These are vtable-based if GC is disabled.
     // Optimistically use vtable dispatch for hybrid compiles.
-    if (CGM.getLangOptions().getGCMode() != LangOptions::GCOnly) {
+    if (CGM.getLangOptions().getGC() != LangOptions::GCOnly) {
       VTableDispatchMethods.insert(GetNullarySelector("retain"));
       VTableDispatchMethods.insert(GetNullarySelector("release"));
       VTableDispatchMethods.insert(GetNullarySelector("autorelease"));
@@ -4672,7 +4672,7 @@
 
     // These are vtable-based if GC is enabled.
     // Optimistically use vtable dispatch for hybrid compiles.
-    if (CGM.getLangOptions().getGCMode() != LangOptions::NonGC) {
+    if (CGM.getLangOptions().getGC() != LangOptions::NonGC) {
       VTableDispatchMethods.insert(GetNullarySelector("hash"));
       VTableDispatchMethods.insert(GetUnarySelector("addObject"));
     

Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Tue Sep 13 12:21:33 2011
@@ -473,9 +473,9 @@
   if (isa<CXXConstructorDecl>(D) || isa<CXXDestructorDecl>(D))
     F->setUnnamedAddr(true);
 
-  if (Features.getStackProtectorMode() == LangOptions::SSPOn)
+  if (Features.getStackProtector() == LangOptions::SSPOn)
     F->addFnAttr(llvm::Attribute::StackProtect);
-  else if (Features.getStackProtectorMode() == LangOptions::SSPReq)
+  else if (Features.getStackProtector() == LangOptions::SSPReq)
     F->addFnAttr(llvm::Attribute::StackProtectReq);
   
   unsigned alignment = D->getMaxAlignment() / Context.getCharWidth();

Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Tue Sep 13 12:21:33 2011
@@ -713,11 +713,11 @@
     Res.push_back("-fshort-wchar");
   if (!Opts.ElideConstructors)
     Res.push_back("-fno-elide-constructors");
-  if (Opts.getGCMode() != LangOptions::NonGC) {
-    if (Opts.getGCMode() == LangOptions::HybridGC) {
+  if (Opts.getGC() != LangOptions::NonGC) {
+    if (Opts.getGC() == LangOptions::HybridGC) {
       Res.push_back("-fobjc-gc");
     } else {
-      assert(Opts.getGCMode() == LangOptions::GCOnly && "Invalid GC mode!");
+      assert(Opts.getGC() == LangOptions::GCOnly && "Invalid GC mode!");
       Res.push_back("-fobjc-gc-only");
     }
   }
@@ -744,9 +744,9 @@
   if (Opts.InlineVisibilityHidden)
     Res.push_back("-fvisibility-inlines-hidden");
 
-  if (Opts.getStackProtectorMode() != 0) {
+  if (Opts.getStackProtector() != 0) {
     Res.push_back("-stack-protector");
-    Res.push_back(llvm::utostr(Opts.getStackProtectorMode()));
+    Res.push_back(llvm::utostr(Opts.getStackProtector()));
   }
   if (Opts.InstantiationDepth != DefaultLangOpts.InstantiationDepth) {
     Res.push_back("-ftemplate-depth");
@@ -1586,9 +1586,9 @@
 
   if (Opts.ObjC1) {
     if (Args.hasArg(OPT_fobjc_gc_only))
-      Opts.setGCMode(LangOptions::GCOnly);
+      Opts.setGC(LangOptions::GCOnly);
     else if (Args.hasArg(OPT_fobjc_gc))
-      Opts.setGCMode(LangOptions::HybridGC);
+      Opts.setGC(LangOptions::HybridGC);
     else if (Args.hasArg(OPT_fobjc_arc)) {
       Opts.ObjCAutoRefCount = 1;
       if (!Args.hasArg(OPT_fobjc_nonfragile_abi))
@@ -1737,9 +1737,9 @@
     Diags.Report(diag::err_drv_invalid_value)
       << Args.getLastArg(OPT_stack_protector)->getAsString(Args) << SSP;
     break;
-  case 0: Opts.setStackProtectorMode(LangOptions::SSPOff); break;
-  case 1: Opts.setStackProtectorMode(LangOptions::SSPOn);  break;
-  case 2: Opts.setStackProtectorMode(LangOptions::SSPReq); break;
+  case 0: Opts.setStackProtector(LangOptions::SSPOff); break;
+  case 1: Opts.setStackProtector(LangOptions::SSPOn);  break;
+  case 2: Opts.setStackProtector(LangOptions::SSPReq); break;
   }
 }
 

Modified: cfe/trunk/lib/Frontend/InitPreprocessor.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitPreprocessor.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/InitPreprocessor.cpp (original)
+++ cfe/trunk/lib/Frontend/InitPreprocessor.cpp Tue Sep 13 12:21:33 2011
@@ -431,7 +431,7 @@
         Builder.defineMacro("OBJC_ZEROCOST_EXCEPTIONS");
     }
 
-    if (LangOpts.getGCMode() != LangOptions::NonGC)
+    if (LangOpts.getGC() != LangOptions::NonGC)
       Builder.defineMacro("__OBJC_GC__");
 
     if (LangOpts.NeXTRuntime)
@@ -604,9 +604,9 @@
   int Dig = PickFP(&TI.getLongDoubleFormat(), -1/*FIXME*/, 17, 21, 33, 36);
   Builder.defineMacro("__DECIMAL_DIG__", Twine(Dig));
 
-  if (LangOpts.getStackProtectorMode() == LangOptions::SSPOn)
+  if (LangOpts.getStackProtector() == LangOptions::SSPOn)
     Builder.defineMacro("__SSP__");
-  else if (LangOpts.getStackProtectorMode() == LangOptions::SSPReq)
+  else if (LangOpts.getStackProtector() == LangOptions::SSPReq)
     Builder.defineMacro("__SSP_ALL__", "2");
 
   if (FEOpts.ProgramAction == frontend::RewriteObjC)

Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Tue Sep 13 12:21:33 2011
@@ -4086,7 +4086,7 @@
 
   if (NewVD->hasLocalStorage() && T.isObjCGCWeak()
       && !NewVD->hasAttr<BlocksAttr>()) {
-    if (getLangOptions().getGCMode() != LangOptions::NonGC)
+    if (getLangOptions().getGC() != LangOptions::NonGC)
       Diag(NewVD->getLocation(), diag::warn_gc_attribute_weak_on_local);
     else
       Diag(NewVD->getLocation(), diag::warn_attribute_weak_on_local);
@@ -8796,7 +8796,7 @@
         }
       }
       else if (getLangOptions().ObjC1 &&
-               getLangOptions().getGCMode() != LangOptions::NonGC &&
+               getLangOptions().getGC() != LangOptions::NonGC &&
                Record && !Record->hasObjectMember()) {
         if (FD->getType()->isObjCObjectPointerType() ||
             FD->getType().isObjCGCStrong())

Modified: cfe/trunk/lib/Sema/SemaObjCProperty.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaObjCProperty.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaObjCProperty.cpp (original)
+++ cfe/trunk/lib/Sema/SemaObjCProperty.cpp Tue Sep 13 12:21:33 2011
@@ -80,7 +80,7 @@
   unsigned Attributes = ODS.getPropertyAttributes();
   TypeSourceInfo *TSI = GetTypeForDeclarator(FD.D, S);
   QualType T = TSI->getType();
-  if ((getLangOptions().getGCMode() != LangOptions::NonGC && 
+  if ((getLangOptions().getGC() != LangOptions::NonGC && 
        T.isObjCGCWeak()) ||
       (getLangOptions().ObjCAutoRefCount &&
        T.getObjCLifetime() == Qualifiers::OCL_Weak))
@@ -291,7 +291,7 @@
 
   // Issue a warning if property is 'assign' as default and its object, which is
   // gc'able conforms to NSCopying protocol
-  if (getLangOptions().getGCMode() != LangOptions::NonGC &&
+  if (getLangOptions().getGC() != LangOptions::NonGC &&
       isAssign && !(Attributes & ObjCDeclSpec::DQ_PR_assign))
     if (const ObjCObjectPointerType *ObjPtrTy =
           T->getAs<ObjCObjectPointerType>()) {
@@ -597,7 +597,7 @@
     
     if ((kind & ObjCPropertyDecl::OBJC_PR_weak) &&
         !getLangOptions().ObjCAutoRefCount &&
-        getLangOptions().getGCMode() != LangOptions::NonGC) {
+        getLangOptions().getGC() != LangOptions::NonGC) {
       if (PropType.isObjCGCStrong()) {
           Diag(PropertyLoc,
                diag::err_gc_weak_property_strong_type);
@@ -655,7 +655,7 @@
 
       if (kind & ObjCPropertyDecl::OBJC_PR_weak &&
           !getLangOptions().ObjCAutoRefCount &&
-          getLangOptions().getGCMode() == LangOptions::NonGC) {
+          getLangOptions().getGC() == LangOptions::NonGC) {
         Diag(PropertyLoc, diag::error_synthesize_weak_non_arc_or_gc);
         Diag(property->getLocation(), diag::note_property_declare);
       }
@@ -724,7 +724,7 @@
       }
       // __weak is explicit. So it works on Canonical type.
       if ((PropType.isObjCGCWeak() && !IvarType.isObjCGCWeak() &&
-           getLangOptions().getGCMode() != LangOptions::NonGC)) {
+           getLangOptions().getGC() != LangOptions::NonGC)) {
         Diag(PropertyLoc, diag::error_weak_property)
         << property->getDeclName() << Ivar->getDeclName();
         Diag(Ivar->getLocation(), diag::note_ivar_decl);
@@ -733,7 +733,7 @@
       // Fall thru - see previous comment
       if ((property->getType()->isObjCObjectPointerType() ||
            PropType.isObjCGCStrong()) && IvarType.isObjCGCWeak() &&
-          getLangOptions().getGCMode() != LangOptions::NonGC) {
+          getLangOptions().getGC() != LangOptions::NonGC) {
         Diag(PropertyLoc, diag::error_strong_property)
         << property->getDeclName() << Ivar->getDeclName();
         // Fall thru - see previous comment
@@ -1364,7 +1364,7 @@
 Sema::AtomicPropertySetterGetterRules (ObjCImplDecl* IMPDecl,
                                        ObjCContainerDecl* IDecl) {
   // Rules apply in non-GC mode only
-  if (getLangOptions().getGCMode() != LangOptions::NonGC)
+  if (getLangOptions().getGC() != LangOptions::NonGC)
     return;
   for (ObjCContainerDecl::prop_iterator I = IDecl->prop_begin(),
        E = IDecl->prop_end();
@@ -1422,7 +1422,7 @@
 }
 
 void Sema::DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D) {
-  if (getLangOptions().getGCMode() == LangOptions::GCOnly)
+  if (getLangOptions().getGC() == LangOptions::GCOnly)
     return;
 
   for (ObjCImplementationDecl::propimpl_iterator
@@ -1739,11 +1739,11 @@
         PropertyDecl->setPropertyAttributes(ObjCPropertyDecl::OBJC_PR_strong);
       else {
           // Skip this warning in gc-only mode.
-          if (getLangOptions().getGCMode() != LangOptions::GCOnly)
+          if (getLangOptions().getGC() != LangOptions::GCOnly)
             Diag(Loc, diag::warn_objc_property_no_assignment_attribute);
 
           // If non-gc code warn that this is likely inappropriate.
-          if (getLangOptions().getGCMode() == LangOptions::NonGC)
+          if (getLangOptions().getGC() == LangOptions::NonGC)
             Diag(Loc, diag::warn_objc_property_default_assign_on_object);
       }
 
@@ -1755,7 +1755,7 @@
 
   if (!(Attributes & ObjCDeclSpec::DQ_PR_copy)
       &&!(Attributes & ObjCDeclSpec::DQ_PR_readonly)
-      && getLangOptions().getGCMode() == LangOptions::GCOnly
+      && getLangOptions().getGC() == LangOptions::GCOnly
       && PropertyTy->isBlockPointerType())
     Diag(Loc, diag::warn_objc_property_copy_missing_on_block);
 }

Modified: cfe/trunk/lib/Serialization/ASTReader.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTReader.cpp (original)
+++ cfe/trunk/lib/Serialization/ASTReader.cpp Tue Sep 13 12:21:33 2011
@@ -138,13 +138,13 @@
   PARSE_LANGOPT_IMPORTANT(CharIsSigned, diag::warn_pch_char_signed);
   PARSE_LANGOPT_IMPORTANT(ShortWChar, diag::warn_pch_short_wchar);
   PARSE_LANGOPT_IMPORTANT(ShortEnums, diag::warn_pch_short_enums);
-  if ((PPLangOpts.getGCMode() != 0) != (LangOpts.getGCMode() != 0)) {
+  if ((PPLangOpts.getGC() != 0) != (LangOpts.getGC() != 0)) {
     Reader.Diag(diag::warn_pch_gc_mode)
-      << LangOpts.getGCMode() << PPLangOpts.getGCMode();
+      << LangOpts.getGC() << PPLangOpts.getGC();
     return true;
   }
   PARSE_LANGOPT_BENIGN(getVisibilityMode());
-  PARSE_LANGOPT_IMPORTANT(getStackProtectorMode(),
+  PARSE_LANGOPT_IMPORTANT(getStackProtector(),
                           diag::warn_pch_stack_protector);
   PARSE_LANGOPT_BENIGN(InstantiationDepth);
   PARSE_LANGOPT_IMPORTANT(OpenCL, diag::warn_pch_opencl);
@@ -3049,10 +3049,10 @@
     PARSE_LANGOPT(CharIsSigned);
     PARSE_LANGOPT(ShortWChar);
     PARSE_LANGOPT(ShortEnums);
-    LangOpts.setGCMode((LangOptions::GCMode)Record[Idx++]);
+    LangOpts.setGC((LangOptions::GCMode)Record[Idx++]);
     LangOpts.setVisibilityMode((Visibility)Record[Idx++]);
-    LangOpts.setStackProtectorMode((LangOptions::StackProtectorMode)
-                                   Record[Idx++]);
+    LangOpts.setStackProtector((LangOptions::StackProtectorMode)
+                                  Record[Idx++]);
     PARSE_LANGOPT(InstantiationDepth);
     PARSE_LANGOPT(OpenCL);
     PARSE_LANGOPT(CUDA);

Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTWriter.cpp (original)
+++ cfe/trunk/lib/Serialization/ASTWriter.cpp Tue Sep 13 12:21:33 2011
@@ -1122,9 +1122,9 @@
   Record.push_back(LangOpts.ShortEnums);  // Should the enum type be equivalent
                                           // to the smallest integer type with
                                           // enough room.
-  Record.push_back(LangOpts.getGCMode());
+  Record.push_back(LangOpts.getGC());
   Record.push_back(LangOpts.getVisibilityMode());
-  Record.push_back(LangOpts.getStackProtectorMode());
+  Record.push_back(LangOpts.getStackProtector());
   Record.push_back(LangOpts.InstantiationDepth);
   Record.push_back(LangOpts.OpenCL);
   Record.push_back(LangOpts.CUDA);

Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp Tue Sep 13 12:21:33 2011
@@ -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);
   }

Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp Tue Sep 13 12:21:33 2011
@@ -75,6 +75,6 @@
 }
 
 void ento::registerNSAutoreleasePoolChecker(CheckerManager &mgr) {
-  if (mgr.getLangOptions().getGCMode() != LangOptions::NonGC)
+  if (mgr.getLangOptions().getGC() != LangOptions::NonGC)
     mgr.registerChecker<NSAutoreleasePoolChecker>();
 }

Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp Tue Sep 13 12:21:33 2011
@@ -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"));

Modified: cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp?rev=139605&r1=139604&r2=139605&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp Tue Sep 13 12:21:33 2011
@@ -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:





More information about the cfe-commits mailing list