diff options
-rw-r--r-- | Driver/clang.cpp | 6 | ||||
-rw-r--r-- | include/clang/Basic/LangOptions.h | 3 | ||||
-rw-r--r-- | lib/CodeGen/CodeGenModule.cpp | 2 |
3 files changed, 10 insertions, 1 deletions
diff --git a/Driver/clang.cpp b/Driver/clang.cpp index c6fee1f09e..bf885ea464 100644 --- a/Driver/clang.cpp +++ b/Driver/clang.cpp @@ -500,6 +500,9 @@ static llvm::cl::opt<bool> ObjCNonFragileABI("fobjc-nonfragile-abi", llvm::cl::desc("enable objective-c's nonfragile abi")); +static llvm::cl::opt<bool> +EmitAllDecls("femit-all-decls", + llvm::cl::desc("Emit all declarations, even if unused")); // FIXME: This (and all GCC -f options) really come in -f... and // -fno-... forms, and additionally support automagic behavior when @@ -635,6 +638,9 @@ static void InitializeLanguageStandard(LangOptions &Options, LangKind LK, if (ObjCNonFragileABI) Options.ObjCNonFragileABI = 1; + + if (EmitAllDecls) + Options.EmitAllDecls = 1; } static llvm::cl::opt<bool> diff --git a/include/clang/Basic/LangOptions.h b/include/clang/Basic/LangOptions.h index b615412f20..b85a74bc4a 100644 --- a/include/clang/Basic/LangOptions.h +++ b/include/clang/Basic/LangOptions.h @@ -51,6 +51,8 @@ struct LangOptions { unsigned ThreadsafeStatics : 1; // Whether static initializers are protected // by locks. unsigned Blocks : 1; // block extension to C + unsigned EmitAllDecls : 1; // Emit all declarations, even if + // they are unused. private: unsigned GC : 2; // Objective-C Garbage Collection modes. We declare // this enum as unsigned because MSVC insists on making enums @@ -72,6 +74,7 @@ public: // FIXME: The default should be 1. ThreadsafeStatics = 0; Blocks = 0; + EmitAllDecls = 0; } GCMode getGCMode() const { return (GCMode) GC; } diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 18870722fa..af70a9c846 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -468,7 +468,7 @@ void CodeGenModule::EmitGlobal(const ValueDecl *Global) { // If the global is a static, defer code generation until later so // we can easily omit unused statics. - if (isStatic) { + if (isStatic && !Features.EmitAllDecls) { StaticDecls.push_back(Global); return; } |