Skip to content

Commit 6c32401

Browse files
committed
Use MAXTIME in templatesimplifier
1 parent 087b233 commit 6c32401

3 files changed

Lines changed: 19 additions & 0 deletions

File tree

lib/templatesimplifier.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1222,6 +1222,7 @@ bool TemplateSimplifier::simplifyTemplateInstantiations(
12221222
ErrorLogger* errorlogger,
12231223
const Settings *_settings,
12241224
const Token *tok,
1225+
const std::time_t maxtime,
12251226
std::list<Token *> &templateInstantiations,
12261227
std::set<std::string> &expandedtemplates)
12271228
{
@@ -1274,6 +1275,12 @@ bool TemplateSimplifier::simplifyTemplateInstantiations(
12741275
Token * const tok2 = *iter2;
12751276
if (errorlogger && !tokenlist.getFiles().empty())
12761277
errorlogger->reportProgress(tokenlist.getFiles()[0], "TemplateSimplifier::simplifyTemplateInstantiations()", tok2->progressValue());
1278+
#ifdef MAXTIME
1279+
if (std::time(0) > maxtime)
1280+
return false;
1281+
#else
1282+
(void)maxtime;
1283+
#endif
12771284
assert(tokenlist.validateToken(tok2)); // that assertion fails on examples from #6021
12781285
if (tok2->str() != name)
12791286
continue;
@@ -1404,6 +1411,7 @@ void TemplateSimplifier::simplifyTemplates(
14041411
TokenList& tokenlist,
14051412
ErrorLogger* errorlogger,
14061413
const Settings *_settings,
1414+
const std::time_t maxtime,
14071415
bool &_codeWithTemplates
14081416
)
14091417
{
@@ -1450,6 +1458,7 @@ void TemplateSimplifier::simplifyTemplates(
14501458
errorlogger,
14511459
_settings,
14521460
*iter1,
1461+
maxtime,
14531462
templateInstantiations,
14541463
expandedtemplates);
14551464
if (instantiated)

lib/templatesimplifier.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include <set>
2626
#include <list>
2727
#include <string>
28+
#include <ctime>
2829
#include <vector>
2930
#include "config.h"
3031

@@ -137,6 +138,7 @@ class CPPCHECKLIB TemplateSimplifier {
137138
* @param errorlogger error logger
138139
* @param _settings settings
139140
* @param tok token where the template declaration begins
141+
* @param maxtime time when the simplification will stop
140142
* @param templateInstantiations a list of template usages (not necessarily just for this template)
141143
* @param expandedtemplates all templates that has been expanded so far. The full names are stored.
142144
* @return true if the template was instantiated
@@ -146,6 +148,7 @@ class CPPCHECKLIB TemplateSimplifier {
146148
ErrorLogger* errorlogger,
147149
const Settings *_settings,
148150
const Token *tok,
151+
const std::time_t maxtime,
149152
std::list<Token *> &templateInstantiations,
150153
std::set<std::string> &expandedtemplates);
151154

@@ -154,12 +157,14 @@ class CPPCHECKLIB TemplateSimplifier {
154157
* @param tokenlist token list
155158
* @param errorlogger error logger
156159
* @param _settings settings
160+
* @param maxtime time when the simplification should be stopped
157161
* @param _codeWithTemplates output parameter that is set if code contains templates
158162
*/
159163
static void simplifyTemplates(
160164
TokenList& tokenlist,
161165
ErrorLogger* errorlogger,
162166
const Settings *_settings,
167+
const std::time_t maxtime,
163168
bool &_codeWithTemplates);
164169

165170
/**

lib/tokenize.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2357,6 +2357,11 @@ void Tokenizer::simplifyTemplates()
23572357
list,
23582358
_errorLogger,
23592359
_settings,
2360+
#ifdef MAXTIME
2361+
maxtime,
2362+
#else
2363+
0, // ignored
2364+
#endif
23602365
_codeWithTemplates);
23612366
}
23622367
//---------------------------------------------------------------------------

0 commit comments

Comments
 (0)