Thank you for the workaround suggestions. I ended up using a sed rule to specifically remove the offending keyword:
sed -i '/inline/{ N; s/inline\s*\n\s*parser::syntax_error::syntax_error/parser::syntax_error::syntax_error/ }' parser.cpp By keeping it specific, I hope the rule will simply have no effect once the issue is fixed in a future release. Thanks, Vishal On Wed, Mar 14, 2018 at 11:22 AM, Kaz Kylheku <k...@kylheku.com> wrote: > On 2018-03-13 13:31, Hans Åberg wrote: > >> On 12 Mar 2018, at 20:08, Vishal V <vis...@royal-caliber.com> wrote: >>> >>> Bison 3.0.4 marks the constructor for the syntax_error class as 'inline' >>> when generating a C++ scanner, which results in undefined references when >>> the exception is thrown from a separate scanner file. Since this is the >>> stated purpose of the syntax_error class (see >>> http://lists.gnu.org/archive/html/help-bison/2013-07/msg00010.html), >>> this >>> appears to be a bug. >>> >> >> As a workaround, you might try removing the inline specifier by adding >> to the .yy grammar file: >> %code { >> ... >> #define inline >> ... >> } >> > > The developers of this stuff are pretty fucking careless about what goes > into these skeleton files. > > They think they can just throw in random new stuff and nobody's build will > break. > > Here is a rule from a production Makefile to remove // comments in Lex > code that prevent it from being C90: > > lex.yy.c: $(top_srcdir)parser.l > $(call ABBREV,LEX) > $(call SH,rm -f $@) > $(call SH, \ > if $(TXR_LEX) $(LEX_DBG_FLAGS) $< ; then \ > sed -e s@//.*@@ < $@ > $@.tmp ; \ > mv $@.tmp $@ ; \ > else \ > exit 1 ; \ > fi) > $(call SH,chmod a-w $@) > > Commit: http://www.kylheku.com/cgit/txr/commit/?id=038bed1fa17743cbb > fe4d219b6798d88254eef2c > > Here is build recipe which removes an unwanted/incorrect yyparse > declaration from y.tab.h: > > y.tab.c: $(top_srcdir)parser.y > $(call ABBREV,YACC) > $(call SH, \ > if [ -e y.tab.h ]; then mv y.tab.h y.tab.h.old ; fi) > $(call SH,rm -f y.tab.c) > $(call SH, \ > if $(TXR_YACC) -v -d $< ; then \ > chmod a-w y.tab.c ; \ > sed -e '/yyparse/d' < y.tab.h > y.tab.h.tmp && \ > mv y.tab.h.tmp y.tab.h ; \ > if cmp -s y.tab.h y.tab.h.old ; then \ > mv y.tab.h.old y.tab.h ; \ > fi ; \ > else \ > rm y.tab.c ; \ > false ; \ > fi) > > > Commit: http://www.kylheku.com/cgit/txr/commit/?id=fdb54c85577859e26 > 525463c2e21801cd9b2377c >