aboutsummaryrefslogtreecommitdiff
path: root/Driver/clang.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-03-10 00:06:19 +0000
committerDouglas Gregor <dgregor@apple.com>2009-03-10 00:06:19 +0000
commit26dce44534602660ea9f4152bffc5436fc5fe3b2 (patch)
tree96930b1ee0febd8c91ad96a06bee73fdc67392e7 /Driver/clang.cpp
parent42745815fa4e90bfb07e581d2e5152b2c2db08ff (diff)
Limit the template instantiation depth to some user-configurable value
(default: 99). Beyond this limit, produce an error and consider the current template instantiation a failure. The stack we're building to track the instantiations will, eventually, be used to produce instantiation backtraces from diagnostics within template instantiation. However, we're not quite there yet. This adds a new Clang driver option -ftemplate-depth=NNN, which should eventually be generated from the GCC command-line operation -ftemplate-depth-NNN (note the '-' rather than the '='!). I did not make the driver changes to do this mapping. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66513 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'Driver/clang.cpp')
-rw-r--r--Driver/clang.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index 59c3799023..72d2b9c1db 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -515,7 +515,10 @@ static llvm::cl::list<std::string>
TargetFeatures("mattr", llvm::cl::CommaSeparated,
llvm::cl::desc("Target specific attributes (-mattr=help for details)"));
-
+static llvm::cl::opt<unsigned>
+TemplateDepth("ftemplate-depth", llvm::cl::init(99),
+ llvm::cl::desc("Maximum depth of recursive template "
+ "instantiation"));
// FIXME: add:
// -fdollars-in-identifiers
@@ -642,6 +645,8 @@ static void InitializeLanguageStandard(LangOptions &Options, LangKind LK,
Options.MathErrno = MathErrno;
+ Options.InstantiationDepth = TemplateDepth;
+
// Override the default runtime if the user requested it.
if (NeXTRuntime)
Options.NeXTRuntime = 1;