@@ -32,6 +32,7 @@ enum EToken {
3232 T_INC,
3333 T_SCOPE,
3434 T_MSG,
35+ T_SIDEBAR,
3536 T_MARKER
3637};
3738
@@ -70,6 +71,7 @@ class Tokenizer: public ITokenizer {
7071 Tokenizer (std::istream &input):
7172 input_ (input),
7273 lineNo_ (0 ),
74+ reSideBar_ (" ^ *((([0-9]+)? \\ | )|(\\ +\\ +\\ + \\ |\\ +)).*$" ),
7375 reMarker_ (" ^ *[ ~^|]+$" ),
7476 reInc_ (" ^(?:In file included| +) from " RE_LOCATION " [:,]"
7577 RE_TOOL_SUFFIX),
@@ -90,6 +92,7 @@ class Tokenizer: public ITokenizer {
9092 private:
9193 std::istream &input_;
9294 int lineNo_;
95+ const boost::regex reSideBar_;
9396 const boost::regex reMarker_;
9497 const boost::regex reInc_;
9598 const boost::regex reScope_;
@@ -112,6 +115,14 @@ EToken Tokenizer::readNext(DefEvent *pEvt) {
112115 *pEvt = DefEvent ();
113116 pEvt->msg = line;
114117
118+ // check for line markers produced by gcc-9.2.1 (a.k.a. sidebar)
119+ if (boost::regex_match (pEvt->msg , reSideBar_))
120+ // xxx.c:2:1: note: include '<stdlib.h>' or provide a declaration...
121+ // 1 | #include <stdio.h>
122+ // +++ |+#include <stdlib.h>
123+ // 2 |
124+ return T_SIDEBAR;
125+
115126 if (boost::regex_match (line, reMarker_))
116127 return T_MARKER;
117128
@@ -222,12 +233,28 @@ EToken MarkerConverter::readNext(DefEvent *pEvt) {
222233
223234 tok = slave_->readNext (pEvt);
224235 lineNo_ = slave_->lineNo ();
225- if (T_UNKNOWN != tok)
226- return tok;
236+ switch (tok) {
237+ case T_SIDEBAR:
238+ pEvt->event = " #" ;
239+ tok = T_MSG;
240+ break ;
241+
242+ case T_UNKNOWN:
243+ break ;
244+
245+ default :
246+ return tok;
247+ }
227248
228249 lastTok_ = slave_->readNext (&lastEvt_);
229- if (T_MARKER != lastTok_)
230- return tok;
250+ switch (lastTok_) {
251+ case T_SIDEBAR:
252+ case T_MARKER:
253+ break ;
254+
255+ default :
256+ return tok;
257+ }
231258
232259 // translate both events to comments
233260 lastEvt_.event = pEvt->event = " #" ;
@@ -492,6 +519,7 @@ bool BasicGccParser::getNext(Defect *pDef) {
492519 hasKeyEvent_ = true ;
493520 break ;
494521
522+ case T_SIDEBAR:
495523 case T_MARKER:
496524 case T_UNKNOWN:
497525 this ->handleError ();
0 commit comments