mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
lalr1.cc: support compilation with disabled support for exceptions
Reported by Brooks Moses <bmoses@google.com> http://lists.gnu.org/archive/html/bison-patches/2018-02/msg00000.html * data/lalr1.cc (YY_EXCEPTIONS): New. Use it to disable try/catch clauses. * doc/bison.texi (C++ Parser Interface): Document it. * configure.ac (CXXFLAGS_NO_EXCEPTIONS): New. * tests/atlocal.in: Receive it. * tests/local.at (AT_FULL_COMPILE, AT_LANG_COMPILE): Accept a new argument, extra compiler flags. * tests/calc.at: Run the C++ calculator with exception support disabled.
This commit is contained in:
@@ -50,6 +50,9 @@ CXXFLAGS="$NO_WERROR_CXXFLAGS @WERROR_CXXFLAGS@"
|
||||
# If 'exit 77'; skip all C++ tests; otherwise ':'.
|
||||
BISON_CXX_WORKS='@BISON_CXX_WORKS@'
|
||||
|
||||
# Compiler flags to disable exception support.
|
||||
CXXFLAGS_NO_EXCEPTIONS='@CXXFLAGS_NO_EXCEPTIONS@'
|
||||
|
||||
# Be sure that the C++ compiler is not broken because of gnulib. This
|
||||
# cannot be checked in configure (gnulib is not parameterized yet),
|
||||
# and checking this in every C++ test in AC_COMPILE_CXX is too costly.
|
||||
|
||||
@@ -481,20 +481,20 @@ m4_define([AT_CHECK_SPACES],
|
||||
])
|
||||
|
||||
|
||||
# AT_CHECK_CALC([BISON-OPTIONS])
|
||||
# ------------------------------
|
||||
# AT_CHECK_CALC([BISON-OPTIONS], [COMPILER-OPTIONS])
|
||||
# --------------------------------------------------
|
||||
# Start a testing chunk which compiles 'calc' grammar with
|
||||
# BISON-OPTIONS, and performs several tests over the parser.
|
||||
m4_define([AT_CHECK_CALC],
|
||||
[m4_ifval([$2], [m4_fatal([$0: expected a single argument])])
|
||||
[m4_ifval([$3], [m4_fatal([$0: expected at most two arguments])])
|
||||
|
||||
# We use integers to avoid dependencies upon the precision of doubles.
|
||||
AT_SETUP([Calculator $1])
|
||||
AT_SETUP([Calculator $1 $2])
|
||||
|
||||
AT_BISON_OPTION_PUSHDEFS([$1])
|
||||
|
||||
AT_DATA_CALC_Y([$1])
|
||||
AT_FULL_COMPILE([calc], AT_DEFINES_IF([[lex], [main]]))
|
||||
AT_FULL_COMPILE([calc], AT_DEFINES_IF([[lex], [main]]), [], [$2])
|
||||
AT_CHECK_SPACES(m4_join([ ],
|
||||
[calc.AT_SKEL_CC_IF([cc], [c])],
|
||||
[AT_DEFINES_IF([calc.AT_SKEL_CC_IF([hh], [h])])]))
|
||||
@@ -677,10 +677,11 @@ AT_CHECK_CALC([%skeleton "lalr1.cc" %defines])
|
||||
# Start a testing chunk which compiles 'calc' grammar with
|
||||
# the C++ skeleton, and performs several tests over the parser.
|
||||
m4_define([AT_CHECK_CALC_LALR1_CC],
|
||||
[AT_CHECK_CALC([%language "C++"] $@)])
|
||||
[AT_CHECK_CALC([%language "C++" $1], [$2])])
|
||||
|
||||
AT_CHECK_CALC_LALR1_CC([])
|
||||
AT_CHECK_CALC_LALR1_CC([%locations])
|
||||
AT_CHECK_CALC_LALR1_CC([%locations], [$CXXFLAGS_NO_EXCEPTIONS])
|
||||
AT_CHECK_CALC_LALR1_CC([%locations %define api.location.type {Span}])
|
||||
AT_CHECK_CALC_LALR1_CC([%defines %locations %define parse.error verbose %name-prefix "calc" %verbose %yacc])
|
||||
|
||||
|
||||
@@ -740,8 +740,8 @@ m4_define([AT_QUELL_VALGRIND],
|
||||
## ------------------------ ##
|
||||
|
||||
|
||||
# AT_COMPILE(OUTPUT, [SOURCES = OUTPUT.c])
|
||||
# ----------------------------------------
|
||||
# AT_COMPILE(OUTPUT, [SOURCES = OUTPUT.c], [EXTRA-COMPILER-FLAGS])
|
||||
# ----------------------------------------------------------------
|
||||
# Compile SOURCES into OUTPUT.
|
||||
#
|
||||
# If OUTPUT does not contain '.', assume that we are linking too,
|
||||
@@ -758,8 +758,8 @@ AT_CHECK(m4_join([ ],
|
||||
0, [ignore], [ignore])])
|
||||
|
||||
|
||||
# AT_COMPILE_CXX(OUTPUT, [SOURCES = OUTPUT.cc])
|
||||
# ---------------------------------------------
|
||||
# AT_COMPILE_CXX(OUTPUT, [SOURCES = OUTPUT.cc], [EXTRA-COMPILER-FLAGS])
|
||||
# ---------------------------------------------------------------------
|
||||
# Compile SOURCES into OUTPUT. If the C++ compiler does not work,
|
||||
# ignore the test.
|
||||
#
|
||||
@@ -770,7 +770,7 @@ m4_define([AT_COMPILE_CXX],
|
||||
[AT_KEYWORDS(c++)
|
||||
AT_CHECK([$BISON_CXX_WORKS], 0, ignore, ignore)
|
||||
AT_CHECK(m4_join([ ],
|
||||
[$CXX $CXXFLAGS $CPPFLAGS],
|
||||
[$CXX $CXXFLAGS $CPPFLAGS $3],
|
||||
[m4_bmatch([$1], [[.]], [-c], [$LDFLAGS])],
|
||||
[-o $1],
|
||||
[m4_default([$2], [m4_bpatsubst([$1], [\.o$]).cc])],
|
||||
@@ -790,21 +790,21 @@ AT_CHECK([[$SHELL ../../../javacomp.sh ]$1],
|
||||
[[0]], [ignore], [ignore])])
|
||||
|
||||
|
||||
# AT_LANG_COMPILE(OUTPUT, [SOURCES = OUTPUT.c]
|
||||
# --------------------------------------------
|
||||
# AT_LANG_COMPILE(OUTPUT, [SOURCES = OUTPUT.c], [EXTRA-COMPILER-FLAGS])
|
||||
# ---------------------------------------------------------------------
|
||||
# Compile SOURCES into OUTPUT. Skip if compiler does not work.
|
||||
#
|
||||
# If OUTPUT does not contain '.', assume that we are linking too,
|
||||
# otherwise pass "-c"; this is a hack. The default SOURCES is OUTPUT
|
||||
# with trailing .o removed, and ".c"/".cc" appended.
|
||||
m4_define([AT_LANG_COMPILE], [AT_LANG_DISPATCH([$0], $@)])
|
||||
m4_define([AT_LANG_COMPILE(c)], [AT_COMPILE([$1], [$2])])
|
||||
m4_define([AT_LANG_COMPILE(c++)], [AT_COMPILE_CXX([$1], [$2])])
|
||||
m4_define([AT_LANG_COMPILE(java)], [AT_JAVA_COMPILE([$1.java], [$2])])
|
||||
m4_define([AT_LANG_COMPILE(c)], [AT_COMPILE([$1], [$2], [$3])])
|
||||
m4_define([AT_LANG_COMPILE(c++)], [AT_COMPILE_CXX([$1], [$2], [$3])])
|
||||
m4_define([AT_LANG_COMPILE(java)], [AT_JAVA_COMPILE([$1.java], [$2], [$3])])
|
||||
|
||||
|
||||
# AT_FULL_COMPILE(OUTPUT, [OTHER1], [OTHER2])
|
||||
# -------------------------------------------
|
||||
# AT_FULL_COMPILE(OUTPUT, [OTHER1], [OTHER2], [EXTRA-COMPILER-FLAGS)
|
||||
# ------------------------------------------------------------------
|
||||
# Compile OUTPUT.y to OUTPUT.c, OUTPUT.cc, or OUTPUT.java, and then
|
||||
# compile it to OUTPUT or OUTPUT.class. If OTHER is specified, compile
|
||||
# OUTPUT-OTHER.c, OUTPUT-OTHER.cc, or OUTPUT-OTHER.java to OUTPUT or
|
||||
@@ -817,7 +817,8 @@ m4_define([AT_FULL_COMPILE(c)],
|
||||
m4_join([ ],
|
||||
[$1.c],
|
||||
m4_ifval($2, [[$1-$2.c]]),
|
||||
m4_ifval($3, [[$1-$3.c]])))])
|
||||
m4_ifval($3, [[$1-$3.c]])),
|
||||
[$4])])
|
||||
|
||||
m4_define([AT_FULL_COMPILE(c++)],
|
||||
[AT_BISON_CHECK([-o $1.cc $1.y])
|
||||
@@ -825,7 +826,8 @@ m4_define([AT_FULL_COMPILE(c++)],
|
||||
m4_join([ ],
|
||||
[$1.cc],
|
||||
m4_ifval($2, [[$1-$2.cc]]),
|
||||
m4_ifval($3, [[$1-$3.cc]])))])
|
||||
m4_ifval($3, [[$1-$3.cc]])),
|
||||
[$4])])
|
||||
|
||||
m4_define([AT_FULL_COMPILE(java)],
|
||||
[AT_BISON_CHECK([-o $1.java $1.y])
|
||||
@@ -833,7 +835,8 @@ m4_define([AT_FULL_COMPILE(java)],
|
||||
m4_join([ ],
|
||||
[$1.java],
|
||||
m4_ifval($2, [[$1-$2.java]]),
|
||||
m4_ifval($3, [[$1-$3.java]])))])
|
||||
m4_ifval($3, [[$1-$3.java]])),
|
||||
[$4])])
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user