LangOptions.h revision a4d71455f0d418e16cc0c5c5aa55a3bad3494aee
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===--- LangOptions.h - C Language Family Language Options -----*- C++ -*-===//
25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//
35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//                     The LLVM Compiler Infrastructure
45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// This file is distributed under the University of Illinois Open Source
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// License. See LICENSE.TXT for details.
75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//
85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===//
95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//
105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//  This file defines the LangOptions interface.
115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//
125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===//
135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#ifndef LLVM_CLANG_LANGOPTIONS_H
155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define LLVM_CLANG_LANGOPTIONS_H
165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
171b0969590e712d7d52fc9c0d43d3ab85c36d07a6Daniel Dunbar#include <string>
181b0969590e712d7d52fc9c0d43d3ab85c36d07a6Daniel Dunbar
195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencernamespace clang {
205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// LangOptions - This class keeps track of the various options that can be
225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// enabled, which controls the dialect of C that is accepted.
23ea684e699ea84e61711e279f5fa7a1b9f3d46bc2Cedric Venetclass LangOptions {
24ea684e699ea84e61711e279f5fa7a1b9f3d46bc2Cedric Venetpublic:
255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  unsigned Trigraphs         : 1;  // Trigraphs in source files.
26d658b562e80d6ef7a1118e34ff12802c6e2fccedChris Lattner  unsigned BCPLComment       : 1;  // BCPL-style '//' comments.
27e4f2142d00fa5fdb580c4e2413da91882d955381Chris Lattner  unsigned Bool              : 1;  // 'bool', 'true', 'false' keywords.
285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  unsigned DollarIdents      : 1;  // '$' allowed in identifiers.
29c1571453de3db2b26c15cc13115fac4ece84aa7cDaniel Dunbar  unsigned AsmPreprocessor   : 1;  // Preprocessor in asm mode.
307e9c90b1a7402dfeca87980cb07e36bedc1a42b8Chris Lattner  unsigned GNUMode           : 1;  // True in gnu99 mode false in c99 mode (etc)
31eb5d7b752651283de5abfcc2f91df7227582a08dChandler Carruth  unsigned GNUKeywords       : 1;  // True if GNU-only keywords are allowed
32d658b562e80d6ef7a1118e34ff12802c6e2fccedChris Lattner  unsigned ImplicitInt       : 1;  // C89 implicit 'int'.
333426b9bdc236df389f3aa00b56bf9154659511f2Chris Lattner  unsigned Digraphs          : 1;  // C94, C99 and C++
345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  unsigned HexFloats         : 1;  // C99 Hexadecimal float constants.
355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  unsigned C99               : 1;  // C99 Support
365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  unsigned Microsoft         : 1;  // Microsoft extensions.
375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  unsigned CPlusPlus         : 1;  // C++ Support
38d4b80f1a0e946aa38c5db7d6f8afcdf05ed57116Chris Lattner  unsigned CPlusPlus0x       : 1;  // C++0x Support
395f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  unsigned CXXOperatorNames  : 1;  // Treat C++ operator names as keywords.
401eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
4101d9dbf4ae627e2ba42fc23485789a33fa296516Ted Kremenek  unsigned ObjC1             : 1;  // Objective-C 1 support enabled.
4201d9dbf4ae627e2ba42fc23485789a33fa296516Ted Kremenek  unsigned ObjC2             : 1;  // Objective-C 2 support enabled.
4330bc57187be7535c57ef1ca8ff3e765653e94332Fariborz Jahanian  unsigned ObjCNonFragileABI : 1;  // Objective-C modern abi enabled
44412e798941ca64e2e6b084323915fa9aa5f6bdf3Fariborz Jahanian  unsigned ObjCNonFragileABI2 : 1;  // Objective-C enhanced modern abi enabled
451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
46ee98ac5a1330db432b188dd2d38b6631aac47bf1Anders Carlsson  unsigned PascalStrings     : 1;  // Allow Pascal strings
4745e8cbdce25c2e16c7aac2036a591f6190097ae6Chris Lattner  unsigned WritableStrings   : 1;  // Allow writable strings
484b7a834e0fecddd9eaf1f4567867c718e4eebf50John McCall  unsigned ConstStrings      : 1;  // Add const qualifier to strings (-Wwrite-strings)
49695dbb697d78d4c507e12b0acc6129b9650d4c3eAnders Carlsson  unsigned LaxVectorConversions : 1;
504e3629e676c7d86d988df29dfeeaa3a8c9f0cf29Nate Begeman  unsigned AltiVec           : 1;  // Support AltiVec-style vector initializers.
516379a7a15335e0af543a942efe9cfd514a83dab8Daniel Dunbar  unsigned Exceptions        : 1;  // Support exception handling.
5273482884560be041d86eccbd7dd5a6918677393bDaniel Dunbar  unsigned SjLjExceptions    : 1;  // Use setjmp-longjump exception handling.
53de05057932cebc3f43911f87d75869cb7b705a19Mike Stump  unsigned RTTI              : 1;  // Support RTTI information.
54f77ac86f4eca528a04b817d7ad7f045a47d52712Daniel Dunbar
55f77ac86f4eca528a04b817d7ad7f045a47d52712Daniel Dunbar  unsigned NeXTRuntime       : 1; // Use NeXT runtime.
563573c0c0b44a1ac8f76a00af1bc75e94ca03d704Douglas Gregor  unsigned Freestanding      : 1; // Freestanding implementation
577644f0726c310ec4224085eaea5f9aff8b957d90Chris Lattner  unsigned NoBuiltin         : 1; // Do not use builtin functions (-fno-builtin)
58f77ac86f4eca528a04b817d7ad7f045a47d52712Daniel Dunbar
59e1b29efab32d02e114046d33cca242a88585bf8aAnders Carlsson  unsigned ThreadsafeStatics : 1; // Whether static initializers are protected
60c1571453de3db2b26c15cc13115fac4ece84aa7cDaniel Dunbar                                  // by locks.
615345c391c65d1780a0d7b0102b7f735cc3f82732Daniel Dunbar  unsigned POSIXThreads      : 1; // Compiling with POSIX thread support
625345c391c65d1780a0d7b0102b7f735cc3f82732Daniel Dunbar                                  // (-pthread)
635618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff  unsigned Blocks            : 1; // block extension to C
64d604c40e933c445ff33ac83d62cc6b1adcf7014cDaniel Dunbar  unsigned EmitAllDecls      : 1; // Emit all declarations, even if
65d604c40e933c445ff33ac83d62cc6b1adcf7014cDaniel Dunbar                                  // they are unused.
66ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  unsigned MathErrno         : 1; // Math functions must respect errno
67ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar                                  // (modulo the platform support).
68ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar
69810f6d5d6223adaab0ccf0139f40de6484ad1bb5Chris Lattner  unsigned HeinousExtensions : 1; // Extensions that we really don't like and
70810f6d5d6223adaab0ccf0139f40de6484ad1bb5Chris Lattner                                  // may be ripped out at any time.
717cd2e93125e2f3b6ca01b24ed0c3fd7e94683fd9Fariborz Jahanian
724ca076fffdfa72ebfab364c8de091b89fc291ae6Anders Carlsson  unsigned Optimize          : 1; // Whether __OPTIMIZE__ should be defined.
731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  unsigned OptimizeSize      : 1; // Whether __OPTIMIZE_SIZE__ should be
744ca076fffdfa72ebfab364c8de091b89fc291ae6Anders Carlsson                                  // defined.
753bbc75302fd43cf13d868b46c94ff8794b302e43Daniel Dunbar  unsigned Static            : 1; // Should __STATIC__ be defined (as
763bbc75302fd43cf13d868b46c94ff8794b302e43Daniel Dunbar                                  // opposed to __DYNAMIC__).
779fd0b1f845a61e71dd8099f596532d34c519630aDaniel Dunbar  unsigned PICLevel          : 2; // The value for __PIC__, if non-zero.
789fd0b1f845a61e71dd8099f596532d34c519630aDaniel Dunbar
793bbc75302fd43cf13d868b46c94ff8794b302e43Daniel Dunbar  unsigned GNUInline         : 1; // Should GNU inline semantics be
803bbc75302fd43cf13d868b46c94ff8794b302e43Daniel Dunbar                                  // used (instead of C99 semantics).
813bbc75302fd43cf13d868b46c94ff8794b302e43Daniel Dunbar  unsigned NoInline          : 1; // Should __NO_INLINE__ be defined.
823bbc75302fd43cf13d868b46c94ff8794b302e43Daniel Dunbar
83448f5e6c191b40c90a67c48547df420d16f48b96Fariborz Jahanian  unsigned ObjCGCBitmapPrint : 1; // Enable printing of gc's bitmap layout
84448f5e6c191b40c90a67c48547df420d16f48b96Fariborz Jahanian                                  // for __weak/__strong ivars.
85448f5e6c191b40c90a67c48547df420d16f48b96Fariborz Jahanian
861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  unsigned AccessControl     : 1; // Whether C++ access control should
87a33d9b4ebf732a5da6d56fd7319ff6c020789b1cAnders Carlsson                                  // be enabled.
8815b91764d08e886391c865c4a444d7b51141c284Eli Friedman  unsigned CharIsSigned      : 1; // Whether char is a signed or unsigned type
89a6fda124bf380479529d6a80b84b62cacd3cb707John Thompson  unsigned ShortWChar        : 1; // Force wchar_t to be unsigned short int.
904e3629e676c7d86d988df29dfeeaa3a8c9f0cf29Nate Begeman
914e3629e676c7d86d988df29dfeeaa3a8c9f0cf29Nate Begeman  unsigned OpenCL            : 1; // OpenCL C99 language extensions.
92fc2844846e91398205fddc71196fe9dda04e105fNuno Lopes
93fc2844846e91398205fddc71196fe9dda04e105fNuno Lopes  unsigned AssumeSaneOperatorNew : 1; // Whether to add __attribute__((malloc))
94fc2844846e91398205fddc71196fe9dda04e105fNuno Lopes                                      // to the declaration of C++'s new
95fc2844846e91398205fddc71196fe9dda04e105fNuno Lopes                                      // operators
9692f5822df6a0d7571df44b5d279ed4f017fbb0e6Anders Carlsson  unsigned ElideConstructors : 1; // Whether C++ copy constructors should be
9792f5822df6a0d7571df44b5d279ed4f017fbb0e6Anders Carlsson                                  // elided if possible.
98824d7ea07a4e9208925daa6ae9289fb2b39bce9fAnders Carlsson  unsigned CatchUndefined    : 1; // Generate code to check for undefined ops.
99b69eca5d2196c06870d3eeb62d689feebaaa8a4dDaniel Dunbar  unsigned DumpRecordLayouts : 1; /// Dump the layout of IRgen'd records.
100046c294a43024874ff35656c6e785b64e72f1f36Anders Carlsson  unsigned DumpVTableLayouts : 1; /// Dump the layouts of emitted vtables.
10133e982bf782d851bfe5767acb1336fcf3419ac6bFariborz Jahanian  unsigned NoConstantCFStrings : 1;  // Do not do CF strings
1027cf84d66965a7706004d8590b5af5fe54b85f525Douglas Gregor  unsigned InlineVisibilityHidden : 1; // Whether inline C++ methods have
1037cf84d66965a7706004d8590b5af5fe54b85f525Douglas Gregor                                       // hidden visibility by default.
104fb937b8c5f1c5dc9cfd4223b5cae230cc42b0287Daniel Dunbar
105fb937b8c5f1c5dc9cfd4223b5cae230cc42b0287Daniel Dunbar  // FIXME: This is just a temporary option, for testing purposes.
106fb937b8c5f1c5dc9cfd4223b5cae230cc42b0287Daniel Dunbar  unsigned NoBitFieldTypeAlign : 1;
107fb937b8c5f1c5dc9cfd4223b5cae230cc42b0287Daniel Dunbar
10801d9dbf4ae627e2ba42fc23485789a33fa296516Ted Kremenekprivate:
109a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner  // We declare multibit enums as unsigned because MSVC insists on making enums
110a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner  // signed.  Set/Query these values using accessors.
111a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner  unsigned GC : 2;                // Objective-C Garbage Collection modes.
1127cd2e93125e2f3b6ca01b24ed0c3fd7e94683fd9Fariborz Jahanian  unsigned SymbolVisibility  : 3; // Symbol's visibility.
113a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner  unsigned StackProtector    : 2; // Whether stack protectors are on.
114a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner  unsigned SignedOverflowBehavior : 2; // How to handle signed integer overflow.
1157cd2e93125e2f3b6ca01b24ed0c3fd7e94683fd9Fariborz Jahanian
1161eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumppublic:
11726dce44534602660ea9f4152bffc5436fc5fe3b2Douglas Gregor  unsigned InstantiationDepth;    // Maximum template instantiation depth.
11801d9dbf4ae627e2ba42fc23485789a33fa296516Ted Kremenek
1191b0969590e712d7d52fc9c0d43d3ab85c36d07a6Daniel Dunbar  std::string ObjCConstantStringClass;
1208a5a9aaddb627c0884c2ed8db55cc29fdb601195David Chisnall
12101d9dbf4ae627e2ba42fc23485789a33fa296516Ted Kremenek  enum GCMode { NonGC, GCOnly, HybridGC };
1224ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling  enum StackProtectorMode { SSPOff, SSPOn, SSPReq };
1231eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  enum VisibilityMode {
1241eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Default,
1251eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Protected,
12604d4078425614bf9fd58d606335c1f5f74ee7fa4Daniel Dunbar    Hidden
12704d4078425614bf9fd58d606335c1f5f74ee7fa4Daniel Dunbar  };
128a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner
129a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner  enum SignedOverflowBehaviorTy {
130a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner    SOB_Undefined,  // Default C standard behavior.
131a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner    SOB_Defined,    // -fwrapv
132a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner    SOB_Trapping    // -ftrapv
133a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner  };
1341eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  LangOptions() {
136e4f2142d00fa5fdb580c4e2413da91882d955381Chris Lattner    Trigraphs = BCPLComment = Bool = DollarIdents = AsmPreprocessor = 0;
137eb5d7b752651283de5abfcc2f91df7227582a08dChandler Carruth    GNUMode = GNUKeywords = ImplicitInt = Digraphs = 0;
138d658b562e80d6ef7a1118e34ff12802c6e2fccedChris Lattner    HexFloats = 0;
139412e798941ca64e2e6b084323915fa9aa5f6bdf3Fariborz Jahanian    GC = ObjC1 = ObjC2 = ObjCNonFragileABI = ObjCNonFragileABI2 = 0;
1407cf84d66965a7706004d8590b5af5fe54b85f525Douglas Gregor    NoConstantCFStrings = 0; InlineVisibilityHidden = 0;
141c71133f0cf820f0708b9dd141563b910530498c1Eli Friedman    C99 = Microsoft = CPlusPlus = CPlusPlus0x = 0;
1424b7a834e0fecddd9eaf1f4567867c718e4eebf50John McCall    CXXOperatorNames = PascalStrings = WritableStrings = ConstStrings = 0;
14373482884560be041d86eccbd7dd5a6918677393bDaniel Dunbar    Exceptions = SjLjExceptions = Freestanding = NoBuiltin = 0;
144c5a97ec19408c3dca4b6a6385f11d8c783b94d0bDaniel Dunbar    NeXTRuntime = 1;
145de05057932cebc3f43911f87d75869cb7b705a19Mike Stump    RTTI = 1;
146b0f90ccbc1079bb054071b836aa6dd265f33f3a2Anders Carlsson    LaxVectorConversions = 1;
147810f6d5d6223adaab0ccf0139f40de6484ad1bb5Chris Lattner    HeinousExtensions = 0;
14845483f7a1b3e57b4603b141bee80596b2d4dd443Bill Wendling    AltiVec = OpenCL = StackProtector = 0;
1498a5a9aaddb627c0884c2ed8db55cc29fdb601195David Chisnall
15004d4078425614bf9fd58d606335c1f5f74ee7fa4Daniel Dunbar    SymbolVisibility = (unsigned) Default;
1517cf84d66965a7706004d8590b5af5fe54b85f525Douglas Gregor
152a508b7de6c5246ab04ed69d0ab4e9977ec1fb4d4Anders Carlsson    ThreadsafeStatics = 1;
1535345c391c65d1780a0d7b0102b7f735cc3f82732Daniel Dunbar    POSIXThreads = 0;
154ae0ee03fd9d36446ee70e502fdaf5ed5acec269fChris Lattner    Blocks = 0;
155d604c40e933c445ff33ac83d62cc6b1adcf7014cDaniel Dunbar    EmitAllDecls = 0;
156ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar    MathErrno = 1;
157a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner    SignedOverflowBehavior = SOB_Undefined;
158a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner
159fc2844846e91398205fddc71196fe9dda04e105fNuno Lopes    AssumeSaneOperatorNew = 1;
160fc2844846e91398205fddc71196fe9dda04e105fNuno Lopes
161a33d9b4ebf732a5da6d56fd7319ff6c020789b1cAnders Carlsson    // FIXME: The default should be 1.
162a33d9b4ebf732a5da6d56fd7319ff6c020789b1cAnders Carlsson    AccessControl = 0;
16392f5822df6a0d7571df44b5d279ed4f017fbb0e6Anders Carlsson    ElideConstructors = 1;
1641eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
165a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner    SignedOverflowBehavior = 0;
166448f5e6c191b40c90a67c48547df420d16f48b96Fariborz Jahanian    ObjCGCBitmapPrint = 0;
1672add47387d39ee6c40dcb0e9f3d51c27ad1e113cMike Stump
168e2e69ef80ac09a489d00ce104e2e87867dc3dd26Douglas Gregor    InstantiationDepth = 1024;
1691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1704ca076fffdfa72ebfab364c8de091b89fc291ae6Anders Carlsson    Optimize = 0;
1714ca076fffdfa72ebfab364c8de091b89fc291ae6Anders Carlsson    OptimizeSize = 0;
1729fd0b1f845a61e71dd8099f596532d34c519630aDaniel Dunbar
1733bbc75302fd43cf13d868b46c94ff8794b302e43Daniel Dunbar    Static = 0;
1749fd0b1f845a61e71dd8099f596532d34c519630aDaniel Dunbar    PICLevel = 0;
175c9abc043af88f90d177a5bd147f627b78ca49fdeDaniel Dunbar
1763bbc75302fd43cf13d868b46c94ff8794b302e43Daniel Dunbar    GNUInline = 0;
1773bbc75302fd43cf13d868b46c94ff8794b302e43Daniel Dunbar    NoInline = 0;
1783bbc75302fd43cf13d868b46c94ff8794b302e43Daniel Dunbar
17915b91764d08e886391c865c4a444d7b51141c284Eli Friedman    CharIsSigned = 1;
18040d1bb6383c14d5f8249d0640e8088a91b694c66John Thompson    ShortWChar = 0;
1819c276ae0f24d4cee8f7954069d4b8eae45d0447dMike Stump    CatchUndefined = 0;
182b69eca5d2196c06870d3eeb62d689feebaaa8a4dDaniel Dunbar    DumpRecordLayouts = 0;
183046c294a43024874ff35656c6e785b64e72f1f36Anders Carlsson    DumpVTableLayouts = 0;
184fb937b8c5f1c5dc9cfd4223b5cae230cc42b0287Daniel Dunbar    NoBitFieldTypeAlign = 0;
1855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  }
1861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
18701d9dbf4ae627e2ba42fc23485789a33fa296516Ted Kremenek  GCMode getGCMode() const { return (GCMode) GC; }
18801d9dbf4ae627e2ba42fc23485789a33fa296516Ted Kremenek  void setGCMode(GCMode m) { GC = (unsigned) m; }
1897cd2e93125e2f3b6ca01b24ed0c3fd7e94683fd9Fariborz Jahanian
1904ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling  StackProtectorMode getStackProtectorMode() const {
1914ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling    return static_cast<StackProtectorMode>(StackProtector);
1924ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling  }
1934ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling  void setStackProtectorMode(StackProtectorMode m) {
1944ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling    StackProtector = static_cast<unsigned>(m);
1954ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling  }
1964ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling
1971eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  VisibilityMode getVisibilityMode() const {
1981eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    return (VisibilityMode) SymbolVisibility;
19904d4078425614bf9fd58d606335c1f5f74ee7fa4Daniel Dunbar  }
2007cd2e93125e2f3b6ca01b24ed0c3fd7e94683fd9Fariborz Jahanian  void setVisibilityMode(VisibilityMode v) { SymbolVisibility = (unsigned) v; }
201a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner
202a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner  SignedOverflowBehaviorTy getSignedOverflowBehavior() const {
203a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner    return (SignedOverflowBehaviorTy)SignedOverflowBehavior;
204a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner  }
205a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner  void setSignedOverflowBehavior(SignedOverflowBehaviorTy V) {
206a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner    SignedOverflowBehavior = (unsigned)V;
207a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner  }
2085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer};
2095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
2105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}  // end namespace clang
2115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
2125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#endif
213