mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
tests: run the C++ tests on all the available standards
This is much of course more efficient than in the matrix of the CI (or on our own machines), but a bit more tedious. * configure.ac (CXX03_CXXFLAGS, CXX11_CXXFLAGS, CXX14_CXXFLAGS) (CXX17_CXXFLAGS, CXX2A_CXXFLAGS, STDCXX_FLAGS): New. * tests/atlocal.in: Receive them. * tests/local.at (AT_FOR_EACH_CXX): New. * tests/c++.at: Use AT_FOR_EACH_CXX.
This commit is contained in:
@@ -54,7 +54,14 @@ AC_PROG_CC_STDC
|
|||||||
AC_PROG_CXX
|
AC_PROG_CXX
|
||||||
AC_LANG_PUSH([C++])
|
AC_LANG_PUSH([C++])
|
||||||
gl_WARN_ADD([-fno-exceptions], [NO_EXCEPTIONS_CXXFLAGS])
|
gl_WARN_ADD([-fno-exceptions], [NO_EXCEPTIONS_CXXFLAGS])
|
||||||
|
gl_WARN_ADD([-std=c++98], [CXX98_CXXFLAGS])
|
||||||
|
gl_WARN_ADD([-std=c++03], [CXX03_CXXFLAGS])
|
||||||
gl_WARN_ADD([-std=c++11], [CXX11_CXXFLAGS])
|
gl_WARN_ADD([-std=c++11], [CXX11_CXXFLAGS])
|
||||||
|
gl_WARN_ADD([-std=c++14], [CXX14_CXXFLAGS])
|
||||||
|
gl_WARN_ADD([-std=c++17], [CXX17_CXXFLAGS])
|
||||||
|
gl_WARN_ADD([-std=c++2a], [CXX2A_CXXFLAGS])
|
||||||
|
AC_SUBST([STDCXX_FLAGS],
|
||||||
|
["$CXX98_CXXFLAGS $CXX03_CXXFLAGS $CXX11_CXXFLAGS $CXX14_CXXFLAGS $CXX17_CXXFLAGS $CXX2A_CXXFLAGS "])
|
||||||
AM_CONDITIONAL([ENABLE_CXX11], [test x"$CXX11_CXXFLAGS" != x])
|
AM_CONDITIONAL([ENABLE_CXX11], [test x"$CXX11_CXXFLAGS" != x])
|
||||||
AC_LANG_POP([C++])
|
AC_LANG_POP([C++])
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,9 @@ fi
|
|||||||
: ${NO_EXCEPTIONS_CXXFLAGS='@NO_EXCEPTIONS_CXXFLAGS@'}
|
: ${NO_EXCEPTIONS_CXXFLAGS='@NO_EXCEPTIONS_CXXFLAGS@'}
|
||||||
|
|
||||||
# Requiring a specific C++ standard.
|
# Requiring a specific C++ standard.
|
||||||
|
: ${CXX98_CXXFLAGS='@CXX98_CXXFLAGS@'}
|
||||||
: ${CXX11_CXXFLAGS='@CXX11_CXXFLAGS@'}
|
: ${CXX11_CXXFLAGS='@CXX11_CXXFLAGS@'}
|
||||||
|
: ${STDCXX_FLAGS='@STDCXX_FLAGS@'}
|
||||||
|
|
||||||
# Be sure that the C++ compiler is not broken because of gnulib. This
|
# Be sure that the C++ compiler is not broken because of gnulib. This
|
||||||
# cannot be checked in configure (gnulib is not parameterized yet),
|
# cannot be checked in configure (gnulib is not parameterized yet),
|
||||||
|
|||||||
27
tests/c++.at
27
tests/c++.at
@@ -82,8 +82,10 @@ main (void)
|
|||||||
}
|
}
|
||||||
]])
|
]])
|
||||||
|
|
||||||
AT_FULL_COMPILE([input])
|
AT_FOR_EACH_CXX([
|
||||||
AT_PARSER_CHECK([./input], 0)
|
AT_FULL_COMPILE([input])
|
||||||
|
AT_PARSER_CHECK([./input], 0)
|
||||||
|
])
|
||||||
AT_BISON_OPTION_POPDEFS
|
AT_BISON_OPTION_POPDEFS
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
@@ -177,11 +179,13 @@ int main()
|
|||||||
}
|
}
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
AT_FOR_EACH_CXX([
|
||||||
AT_FULL_COMPILE([list])
|
AT_FULL_COMPILE([list])
|
||||||
AT_PARSER_CHECK([./list], 0, [],
|
AT_PARSER_CHECK([./list], 0, [],
|
||||||
[12
|
[12
|
||||||
123
|
123
|
||||||
])
|
])
|
||||||
|
])
|
||||||
|
|
||||||
AT_BISON_OPTION_POPDEFS
|
AT_BISON_OPTION_POPDEFS
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
@@ -360,6 +364,7 @@ namespace yy
|
|||||||
]AT_MAIN_DEFINE[
|
]AT_MAIN_DEFINE[
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
AT_FOR_EACH_CXX([
|
||||||
AT_FULL_COMPILE([list])
|
AT_FULL_COMPILE([list])
|
||||||
AT_PARSER_CHECK([./list], 0,
|
AT_PARSER_CHECK([./list], 0,
|
||||||
[[(0, 1, 2, 4, 6)
|
[[(0, 1, 2, 4, 6)
|
||||||
@@ -386,6 +391,7 @@ Destroy: "6"
|
|||||||
Destroy: ()
|
Destroy: ()
|
||||||
Destroy: (0, 1, 2, 4, 6)
|
Destroy: (0, 1, 2, 4, 6)
|
||||||
]])
|
]])
|
||||||
|
])
|
||||||
|
|
||||||
AT_BISON_OPTION_POPDEFS
|
AT_BISON_OPTION_POPDEFS
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
@@ -482,7 +488,7 @@ int main()
|
|||||||
}
|
}
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
AT_FOR_EACH_CXX([
|
||||||
AT_FULL_COMPILE([[input]])
|
AT_FULL_COMPILE([[input]])
|
||||||
# This used to print "Discarding 'a'." again at the end.
|
# This used to print "Discarding 'a'." again at the end.
|
||||||
AT_PARSER_CHECK([[./input]], [[0]], [[]],
|
AT_PARSER_CHECK([[./input]], [[0]], [[]],
|
||||||
@@ -523,6 +529,7 @@ Cleanup: popping token EOI ()
|
|||||||
Cleanup: popping nterm expr (40)
|
Cleanup: popping nterm expr (40)
|
||||||
destroy: 40
|
destroy: 40
|
||||||
]])
|
]])
|
||||||
|
])
|
||||||
|
|
||||||
AT_BISON_OPTION_POPDEFS
|
AT_BISON_OPTION_POPDEFS
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
@@ -657,8 +664,9 @@ void
|
|||||||
AT_BISON_CHECK([[-o input.cc input.yy]])
|
AT_BISON_CHECK([[-o input.cc input.yy]])
|
||||||
|
|
||||||
m4_if([$#], [1],
|
m4_if([$#], [1],
|
||||||
[AT_COMPILE_CXX([[input]])
|
[AT_FOR_EACH_CXX([
|
||||||
AT_PARSER_CHECK([[./input]])])
|
AT_COMPILE_CXX([[input]])
|
||||||
|
AT_PARSER_CHECK([[./input]])])])
|
||||||
AT_BISON_OPTION_POPDEFS
|
AT_BISON_OPTION_POPDEFS
|
||||||
])
|
])
|
||||||
|
|
||||||
@@ -754,6 +762,7 @@ yy::parser::error (const std::string &m)
|
|||||||
]AT_MAIN_DEFINE[
|
]AT_MAIN_DEFINE[
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
AT_FOR_EACH_CXX([
|
||||||
AT_FULL_COMPILE([[input]])
|
AT_FULL_COMPILE([[input]])
|
||||||
# This used to print "Discarding 'a'." again at the end.
|
# This used to print "Discarding 'a'." again at the end.
|
||||||
AT_PARSER_CHECK([[./input]], [[1]], [[]],
|
AT_PARSER_CHECK([[./input]], [[1]], [[]],
|
||||||
@@ -761,6 +770,7 @@ AT_PARSER_CHECK([[./input]], [[1]], [[]],
|
|||||||
Discarding 'a'.
|
Discarding 'a'.
|
||||||
Reducing 'a'.
|
Reducing 'a'.
|
||||||
]])
|
]])
|
||||||
|
])
|
||||||
|
|
||||||
AT_BISON_OPTION_POPDEFS
|
AT_BISON_OPTION_POPDEFS
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
@@ -834,6 +844,7 @@ yylex (yy::parser::semantic_type *)
|
|||||||
}
|
}
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
AT_FOR_EACH_CXX([
|
||||||
AT_FULL_COMPILE([[input]], [[scan]])
|
AT_FULL_COMPILE([[input]], [[scan]])
|
||||||
|
|
||||||
AT_PARSER_CHECK([[./input]], [[0]], [[]],
|
AT_PARSER_CHECK([[./input]], [[0]], [[]],
|
||||||
@@ -842,6 +853,7 @@ caught error
|
|||||||
error: invalid character
|
error: invalid character
|
||||||
caught error
|
caught error
|
||||||
]])
|
]])
|
||||||
|
])
|
||||||
|
|
||||||
AT_BISON_OPTION_POPDEFS
|
AT_BISON_OPTION_POPDEFS
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
@@ -1095,6 +1107,8 @@ main (int argc, const char *argv[])
|
|||||||
}
|
}
|
||||||
]])
|
]])
|
||||||
AT_BISON_CHECK([[-o input.cc --report=all input.yy]])
|
AT_BISON_CHECK([[-o input.cc --report=all input.yy]])
|
||||||
|
|
||||||
|
AT_FOR_EACH_CXX([
|
||||||
AT_COMPILE_CXX([[input]])
|
AT_COMPILE_CXX([[input]])
|
||||||
|
|
||||||
AT_PARSER_CHECK([[./input aaaas]], [[2]], [[]],
|
AT_PARSER_CHECK([[./input aaaas]], [[2]], [[]],
|
||||||
@@ -1125,6 +1139,7 @@ AT_PARSER_CHECK([[./input aaaaE]], [[2]], [[]],
|
|||||||
AT_PARSER_CHECK([[./input aaaaT]], [[1]])
|
AT_PARSER_CHECK([[./input aaaaT]], [[1]])
|
||||||
|
|
||||||
AT_PARSER_CHECK([[./input aaaaR]], [m4_if([$2], [with], [0], [1])])
|
AT_PARSER_CHECK([[./input aaaaR]], [m4_if([$2], [with], [0], [1])])
|
||||||
|
])
|
||||||
|
|
||||||
AT_BISON_OPTION_POPDEFS
|
AT_BISON_OPTION_POPDEFS
|
||||||
|
|
||||||
@@ -1181,6 +1196,6 @@ int main ()
|
|||||||
])
|
])
|
||||||
|
|
||||||
AT_BISON_CHECK([[-o input.cc input.yy]])
|
AT_BISON_CHECK([[-o input.cc input.yy]])
|
||||||
AT_COMPILE_CXX([[input]])
|
AT_FOR_EACH_CXX([AT_COMPILE_CXX([[input]])])
|
||||||
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|||||||
@@ -563,7 +563,16 @@ main (int argc, char const* argv[])
|
|||||||
return p.parse ();
|
return p.parse ();
|
||||||
}]])
|
}]])
|
||||||
|
|
||||||
|
m4_define([AT_FOR_EACH_CXX],
|
||||||
|
[[at_for_each_cxx_CXXFLAGS_save=$CXXFLAGS
|
||||||
|
for at_cxx_std in "" $STDCXX_FLAGS
|
||||||
|
do
|
||||||
|
]AS_ECHO(["Testing with C++ standard flags: '$at_cxx_std'"])[
|
||||||
|
CXXFLAGS="$at_for_each_cxx_CXXFLAGS_save $at_cxx_std"
|
||||||
|
]$1[
|
||||||
|
done
|
||||||
|
CXXFLAGS=$at_for_each_cxx_CXXFLAGS_save
|
||||||
|
]])
|
||||||
|
|
||||||
## ------ ##
|
## ------ ##
|
||||||
## Java. ##
|
## Java. ##
|
||||||
|
|||||||
Reference in New Issue
Block a user