diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-03-10 00:06:19 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-03-10 00:06:19 +0000 |
commit | 26dce44534602660ea9f4152bffc5436fc5fe3b2 (patch) | |
tree | 96930b1ee0febd8c91ad96a06bee73fdc67392e7 /Driver/clang.cpp | |
parent | 42745815fa4e90bfb07e581d2e5152b2c2db08ff (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.cpp | 7 |
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; |