Skip to content

Commit e708daf

Browse files
committed
gcc-parser: handle Clang's "NNN warnings generated." messages
... without reporting syntax errors
1 parent 3dc3f87 commit e708daf

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

gcc-parser.cc

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,32 @@ EToken Tokenizer::readNext(DefEvent *pEvt) {
164164
return tok;
165165
}
166166

167+
class NoiseFilter: public AbstractTokenFilter {
168+
public:
169+
NoiseFilter(ITokenizer *slave):
170+
AbstractTokenFilter(slave),
171+
reClangWarnCnt_("^((1 warning)|([0-9]+ warnings)) generated\\.$")
172+
{
173+
}
174+
175+
virtual EToken readNext(DefEvent *);
176+
177+
private:
178+
const boost::regex reClangWarnCnt_;
179+
};
180+
181+
EToken NoiseFilter::readNext(DefEvent *pEvt)
182+
{
183+
for (;;) {
184+
const EToken tok = slave_->readNext(pEvt);
185+
if (T_UNKNOWN != tok)
186+
return tok;
187+
188+
if (!boost::regex_match(pEvt->msg, reClangWarnCnt_))
189+
return tok;
190+
}
191+
}
192+
167193
class MarkerConverter: public AbstractTokenFilter {
168194
public:
169195
MarkerConverter(ITokenizer *slave):
@@ -313,7 +339,8 @@ class BasicGccParser {
313339
const std::string &fileName,
314340
const bool silent):
315341
rawTokenizer_(input),
316-
markerConverter_(&rawTokenizer_),
342+
noiseFilter_(&rawTokenizer_),
343+
markerConverter_(&noiseFilter_),
317344
tokenizer_(&markerConverter_),
318345
fileName_(fileName),
319346
silent_(silent),
@@ -332,6 +359,7 @@ class BasicGccParser {
332359

333360
private:
334361
Tokenizer rawTokenizer_;
362+
NoiseFilter noiseFilter_;
335363
MarkerConverter markerConverter_;
336364
MultilineConcatenator tokenizer_;
337365
const std::string fileName_;

0 commit comments

Comments
 (0)