LangOptions.h revision 1b0969590e712d7d52fc9c0d43d3ab85c36d07a6
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) 31d658b562e80d6ef7a1118e34ff12802c6e2fccedChris Lattner unsigned ImplicitInt : 1; // C89 implicit 'int'. 323426b9bdc236df389f3aa00b56bf9154659511f2Chris Lattner unsigned Digraphs : 1; // C94, C99 and C++ 335f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned HexFloats : 1; // C99 Hexadecimal float constants. 345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned C99 : 1; // C99 Support 355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned Microsoft : 1; // Microsoft extensions. 365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned CPlusPlus : 1; // C++ Support 37d4b80f1a0e946aa38c5db7d6f8afcdf05ed57116Chris Lattner unsigned CPlusPlus0x : 1; // C++0x Support 385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned CXXOperatorNames : 1; // Treat C++ operator names as keywords. 391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 4001d9dbf4ae627e2ba42fc23485789a33fa296516Ted Kremenek unsigned ObjC1 : 1; // Objective-C 1 support enabled. 4101d9dbf4ae627e2ba42fc23485789a33fa296516Ted Kremenek unsigned ObjC2 : 1; // Objective-C 2 support enabled. 4230bc57187be7535c57ef1ca8ff3e765653e94332Fariborz Jahanian unsigned ObjCNonFragileABI : 1; // Objective-C modern abi enabled 431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 44ee98ac5a1330db432b188dd2d38b6631aac47bf1Anders Carlsson unsigned PascalStrings : 1; // Allow Pascal strings 4545e8cbdce25c2e16c7aac2036a591f6190097ae6Chris Lattner unsigned WritableStrings : 1; // Allow writable strings 46695dbb697d78d4c507e12b0acc6129b9650d4c3eAnders Carlsson unsigned LaxVectorConversions : 1; 474e3629e676c7d86d988df29dfeeaa3a8c9f0cf29Nate Begeman unsigned AltiVec : 1; // Support AltiVec-style vector initializers. 486379a7a15335e0af543a942efe9cfd514a83dab8Daniel Dunbar unsigned Exceptions : 1; // Support exception handling. 49738f8c278da5950d0d4607de2debe0bdfad64185Mike Stump unsigned Rtti : 1; // Support rtti information. 50f77ac86f4eca528a04b817d7ad7f045a47d52712Daniel Dunbar 51f77ac86f4eca528a04b817d7ad7f045a47d52712Daniel Dunbar unsigned NeXTRuntime : 1; // Use NeXT runtime. 523573c0c0b44a1ac8f76a00af1bc75e94ca03d704Douglas Gregor unsigned Freestanding : 1; // Freestanding implementation 537644f0726c310ec4224085eaea5f9aff8b957d90Chris Lattner unsigned NoBuiltin : 1; // Do not use builtin functions (-fno-builtin) 54f77ac86f4eca528a04b817d7ad7f045a47d52712Daniel Dunbar 55e1b29efab32d02e114046d33cca242a88585bf8aAnders Carlsson unsigned ThreadsafeStatics : 1; // Whether static initializers are protected 56c1571453de3db2b26c15cc13115fac4ece84aa7cDaniel Dunbar // by locks. 575345c391c65d1780a0d7b0102b7f735cc3f82732Daniel Dunbar unsigned POSIXThreads : 1; // Compiling with POSIX thread support 585345c391c65d1780a0d7b0102b7f735cc3f82732Daniel Dunbar // (-pthread) 595618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff unsigned Blocks : 1; // block extension to C 605e530af5d51572a0ed5dbe50da54bd333840c63dDavid Chisnall unsigned BlockIntrospection: 1; // block have ObjC type encodings. 61d604c40e933c445ff33ac83d62cc6b1adcf7014cDaniel Dunbar unsigned EmitAllDecls : 1; // Emit all declarations, even if 62d604c40e933c445ff33ac83d62cc6b1adcf7014cDaniel Dunbar // they are unused. 63ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar unsigned MathErrno : 1; // Math functions must respect errno 64ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar // (modulo the platform support). 65ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar 662add47387d39ee6c40dcb0e9f3d51c27ad1e113cMike Stump unsigned OverflowChecking : 1; // Extension to call a handler function when 675d8b2cf9fd704f6ca5e33525803a65421c0b440eMike Stump // signed integer arithmetic overflows. 682add47387d39ee6c40dcb0e9f3d51c27ad1e113cMike Stump 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. 924e3629e676c7d86d988df29dfeeaa3a8c9f0cf29Nate Begeman 9392f5822df6a0d7571df44b5d279ed4f017fbb0e6Anders Carlsson unsigned ElideConstructors : 1; // Whether C++ copy constructors should be 9492f5822df6a0d7571df44b5d279ed4f017fbb0e6Anders Carlsson // elided if possible. 9501d9dbf4ae627e2ba42fc23485789a33fa296516Ted Kremenekprivate: 964ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling unsigned GC : 2; // Objective-C Garbage Collection modes. We 974ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling // declare this enum as unsigned because MSVC 984ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling // insists on making enums signed. Set/Query 994ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling // this value using accessors. 1007cd2e93125e2f3b6ca01b24ed0c3fd7e94683fd9Fariborz Jahanian unsigned SymbolVisibility : 3; // Symbol's visibility. 1014ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling unsigned StackProtector : 2; // Whether stack protectors are on. We declare 1024ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling // this enum as unsigned because MSVC insists 1034ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling // on making enums signed. Set/Query this 1044ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling // value using accessors. 1057cd2e93125e2f3b6ca01b24ed0c3fd7e94683fd9Fariborz Jahanian 1061eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumppublic: 10726dce44534602660ea9f4152bffc5436fc5fe3b2Douglas Gregor unsigned InstantiationDepth; // Maximum template instantiation depth. 10801d9dbf4ae627e2ba42fc23485789a33fa296516Ted Kremenek 1091b0969590e712d7d52fc9c0d43d3ab85c36d07a6Daniel Dunbar std::string ObjCConstantStringClass; 1108a5a9aaddb627c0884c2ed8db55cc29fdb601195David Chisnall 11101d9dbf4ae627e2ba42fc23485789a33fa296516Ted Kremenek enum GCMode { NonGC, GCOnly, HybridGC }; 1124ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling enum StackProtectorMode { SSPOff, SSPOn, SSPReq }; 1131eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump enum VisibilityMode { 1141eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump Default, 1151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump Protected, 11604d4078425614bf9fd58d606335c1f5f74ee7fa4Daniel Dunbar Hidden 11704d4078425614bf9fd58d606335c1f5f74ee7fa4Daniel Dunbar }; 1181eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer LangOptions() { 120e4f2142d00fa5fdb580c4e2413da91882d955381Chris Lattner Trigraphs = BCPLComment = Bool = DollarIdents = AsmPreprocessor = 0; 1217e9c90b1a7402dfeca87980cb07e36bedc1a42b8Chris Lattner GNUMode = ImplicitInt = Digraphs = 0; 122d658b562e80d6ef7a1118e34ff12802c6e2fccedChris Lattner HexFloats = 0; 123913af35741b55fe854bc26c9dddc312cd991e24dDaniel Dunbar GC = ObjC1 = ObjC2 = ObjCNonFragileABI = 0; 124c71133f0cf820f0708b9dd141563b910530498c1Eli Friedman C99 = Microsoft = CPlusPlus = CPlusPlus0x = 0; 125c71133f0cf820f0708b9dd141563b910530498c1Eli Friedman CXXOperatorNames = PascalStrings = WritableStrings = 0; 126c5a97ec19408c3dca4b6a6385f11d8c783b94d0bDaniel Dunbar Exceptions = Freestanding = NoBuiltin = 0; 127c5a97ec19408c3dca4b6a6385f11d8c783b94d0bDaniel Dunbar NeXTRuntime = 1; 128738f8c278da5950d0d4607de2debe0bdfad64185Mike Stump Rtti = 1; 129b0f90ccbc1079bb054071b836aa6dd265f33f3a2Anders Carlsson LaxVectorConversions = 1; 130810f6d5d6223adaab0ccf0139f40de6484ad1bb5Chris Lattner HeinousExtensions = 0; 13145483f7a1b3e57b4603b141bee80596b2d4dd443Bill Wendling AltiVec = OpenCL = StackProtector = 0; 1328a5a9aaddb627c0884c2ed8db55cc29fdb601195David Chisnall 13304d4078425614bf9fd58d606335c1f5f74ee7fa4Daniel Dunbar SymbolVisibility = (unsigned) Default; 1341eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 135e1b29efab32d02e114046d33cca242a88585bf8aAnders Carlsson // FIXME: The default should be 1. 136e1b29efab32d02e114046d33cca242a88585bf8aAnders Carlsson ThreadsafeStatics = 0; 1375345c391c65d1780a0d7b0102b7f735cc3f82732Daniel Dunbar POSIXThreads = 0; 138ae0ee03fd9d36446ee70e502fdaf5ed5acec269fChris Lattner Blocks = 0; 1395e530af5d51572a0ed5dbe50da54bd333840c63dDavid Chisnall BlockIntrospection = 0; 140d604c40e933c445ff33ac83d62cc6b1adcf7014cDaniel Dunbar EmitAllDecls = 0; 141ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar MathErrno = 1; 14226dce44534602660ea9f4152bffc5436fc5fe3b2Douglas Gregor 143a33d9b4ebf732a5da6d56fd7319ff6c020789b1cAnders Carlsson // FIXME: The default should be 1. 144a33d9b4ebf732a5da6d56fd7319ff6c020789b1cAnders Carlsson AccessControl = 0; 14592f5822df6a0d7571df44b5d279ed4f017fbb0e6Anders Carlsson ElideConstructors = 1; 1461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1472add47387d39ee6c40dcb0e9f3d51c27ad1e113cMike Stump OverflowChecking = 0; 148448f5e6c191b40c90a67c48547df420d16f48b96Fariborz Jahanian ObjCGCBitmapPrint = 0; 1492add47387d39ee6c40dcb0e9f3d51c27ad1e113cMike Stump 15026dce44534602660ea9f4152bffc5436fc5fe3b2Douglas Gregor InstantiationDepth = 99; 1511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1524ca076fffdfa72ebfab364c8de091b89fc291ae6Anders Carlsson Optimize = 0; 1534ca076fffdfa72ebfab364c8de091b89fc291ae6Anders Carlsson OptimizeSize = 0; 1549fd0b1f845a61e71dd8099f596532d34c519630aDaniel Dunbar 1553bbc75302fd43cf13d868b46c94ff8794b302e43Daniel Dunbar Static = 0; 1569fd0b1f845a61e71dd8099f596532d34c519630aDaniel Dunbar PICLevel = 0; 157c9abc043af88f90d177a5bd147f627b78ca49fdeDaniel Dunbar 1583bbc75302fd43cf13d868b46c94ff8794b302e43Daniel Dunbar GNUInline = 0; 1593bbc75302fd43cf13d868b46c94ff8794b302e43Daniel Dunbar NoInline = 0; 1603bbc75302fd43cf13d868b46c94ff8794b302e43Daniel Dunbar 16115b91764d08e886391c865c4a444d7b51141c284Eli Friedman CharIsSigned = 1; 16240d1bb6383c14d5f8249d0640e8088a91b694c66John Thompson ShortWChar = 0; 1635f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1641eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 16501d9dbf4ae627e2ba42fc23485789a33fa296516Ted Kremenek GCMode getGCMode() const { return (GCMode) GC; } 16601d9dbf4ae627e2ba42fc23485789a33fa296516Ted Kremenek void setGCMode(GCMode m) { GC = (unsigned) m; } 1677cd2e93125e2f3b6ca01b24ed0c3fd7e94683fd9Fariborz Jahanian 1684ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling StackProtectorMode getStackProtectorMode() const { 1694ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling return static_cast<StackProtectorMode>(StackProtector); 1704ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling } 1714ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling void setStackProtectorMode(StackProtectorMode m) { 1724ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling StackProtector = static_cast<unsigned>(m); 1734ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling } 1744ebe3e4c811a376c423a544f5e76ee2e96533324Bill Wendling 1751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump VisibilityMode getVisibilityMode() const { 1761eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return (VisibilityMode) SymbolVisibility; 17704d4078425614bf9fd58d606335c1f5f74ee7fa4Daniel Dunbar } 1787cd2e93125e2f3b6ca01b24ed0c3fd7e94683fd9Fariborz Jahanian void setVisibilityMode(VisibilityMode v) { SymbolVisibility = (unsigned) v; } 1795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 1805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer} // end namespace clang 1825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1835f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#endif 184