aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-02-04 21:19:06 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-02-04 21:19:06 +0000
commitd604c40e933c445ff33ac83d62cc6b1adcf7014c (patch)
tree22d5401327786d4c221e2e0ea484cc44c7375e49
parent4b5f0a4bd6645e87e5feae4be4675ce87d97b4a5 (diff)
Add -femit-all-decls codegen option.
- Emits all declarations, even unused (static) ones. - Useful when doing minimization of codegen problems (otherwise problems localized to a static function aren't minimized well). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63776 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--Driver/clang.cpp6
-rw-r--r--include/clang/Basic/LangOptions.h3
-rw-r--r--lib/CodeGen/CodeGenModule.cpp2
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;
}