mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-20 17:53:02 +00:00
glr2.cc: require C++11
Reported by Dagobert Michelsen. https://lists.gnu.org/r/bug-bison/2021-08/msg00006.html * m4/bison-cxx-std.m4 (_BISON_CXXSTD_98_snippet): We don't need vector::data, it was only for glr2.cc, which is C++11 anyway. (_BISON_CXXSTD_11_snippet): We need vector::data and std::swap on arrays. * m4/cxx.m4 (BISON_TEST_FOR_WORKING_CXX_COMPILER): We don't need vector::data. * tests/local.at (AT_COMPILE_CXX): Skip when glr2.cc and no support for C++11.
This commit is contained in:
5
TODO
5
TODO
@@ -1,3 +1,6 @@
|
|||||||
|
* 3.8
|
||||||
|
Don't showcase multi start.
|
||||||
|
|
||||||
* Soon
|
* Soon
|
||||||
** scan-code
|
** scan-code
|
||||||
The default case is scanning char-per-char.
|
The default case is scanning char-per-char.
|
||||||
@@ -183,7 +186,7 @@ Les catégories d'avertissements incluent :
|
|||||||
|
|
||||||
Line -1 and -3 should mention CATEGORIE, not CATEGORY.
|
Line -1 and -3 should mention CATEGORIE, not CATEGORY.
|
||||||
|
|
||||||
* Bison 3.8
|
* Bison 3.9
|
||||||
** Rewrite glr.cc (currently glr2.cc)
|
** Rewrite glr.cc (currently glr2.cc)
|
||||||
*** custom error messages
|
*** custom error messages
|
||||||
|
|
||||||
|
|||||||
@@ -1370,7 +1370,6 @@ public:
|
|||||||
check_ ();
|
check_ ();
|
||||||
other.check_ ();]])[
|
other.check_ ();]])[
|
||||||
std::swap (is_state_, other.is_state_);
|
std::swap (is_state_, other.is_state_);
|
||||||
// NB: swap on arrays is C++11.
|
|
||||||
std::swap (raw_, other.raw_);
|
std::swap (raw_, other.raw_);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,36 +7,22 @@
|
|||||||
# with or without modifications, as long as this notice is preserved.
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
m4_define([_BISON_CXXSTD_98_snippet],
|
m4_define([_BISON_CXXSTD_98_snippet],
|
||||||
[[#include <cassert>
|
[[]])
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
void cxx98_vector ()
|
|
||||||
{
|
|
||||||
typedef std::vector<int> ints;
|
|
||||||
|
|
||||||
// Check support for std::vector<T,Allocator>::data.
|
|
||||||
// GCC 4.2 on macOS claims to support C++98, but does not feature it.
|
|
||||||
//
|
|
||||||
// input.cc: In member function 'void state_stack::yycompressStack()':
|
|
||||||
// input.cc:1774: error: 'class std::vector<glr_stack_item, std::allocator<glr_stack_item> >' has no member named 'data'
|
|
||||||
//
|
|
||||||
// <https://trac.macports.org/raw-attachment/ticket/59927/bison-test-results-20210811-95b72.log.xz>.
|
|
||||||
ints my_ints;
|
|
||||||
assert (my_ints.data () == &my_ints[0]);
|
|
||||||
}
|
|
||||||
]])
|
|
||||||
|
|
||||||
m4_define([_BISON_CXXSTD_03_snippet],
|
m4_define([_BISON_CXXSTD_03_snippet],
|
||||||
[])
|
[[]])
|
||||||
|
|
||||||
m4_define([_BISON_CXXSTD_11_snippet],
|
m4_define([_BISON_CXXSTD_11_snippet],
|
||||||
[[#include <algorithm>
|
[[ // C++11
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cassert>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <utility> // std::swap
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
// C++11
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct check
|
struct check
|
||||||
{
|
{
|
||||||
@@ -80,6 +66,22 @@ m4_define([_BISON_CXXSTD_11_snippet],
|
|||||||
|
|
||||||
// GCC 4.8.2 on Solaris 11.3 does not support to_string.
|
// GCC 4.8.2 on Solaris 11.3 does not support to_string.
|
||||||
auto e = std::to_string(42);
|
auto e = std::to_string(42);
|
||||||
|
|
||||||
|
// Needed by glr2.cc.
|
||||||
|
void cxx11_vector_data ()
|
||||||
|
{
|
||||||
|
std::vector<int> ints;
|
||||||
|
ints.emplace_back (42);
|
||||||
|
assert (ints.data () == &ints[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Needed by glr2.cc.
|
||||||
|
void cxx11_array_swap ()
|
||||||
|
{
|
||||||
|
int i0[4] = { 1, 2, 3, 4 };
|
||||||
|
int i1[4] = { 5, 6, 7, 8 };
|
||||||
|
std::swap (i0, i1);
|
||||||
|
}
|
||||||
]])
|
]])
|
||||||
|
|
||||||
m4_define([_BISON_CXXSTD_14_snippet],
|
m4_define([_BISON_CXXSTD_14_snippet],
|
||||||
@@ -177,7 +179,7 @@ m4_define([_BISON_CXXSTD_testbody],
|
|||||||
|
|
||||||
# BISON_CXXSTD(STD)
|
# BISON_CXXSTD(STD)
|
||||||
# -----------------
|
# -----------------
|
||||||
# Check whether the C++ compiler support STD (11, 98, 2b, etc.).
|
# Check whether the C++ compiler supports STD (11, 98, 2b, etc.).
|
||||||
# If it does, AC_SUBST 'CXX<STD>_CXXFLAGS' to the corresponding flags.
|
# If it does, AC_SUBST 'CXX<STD>_CXXFLAGS' to the corresponding flags.
|
||||||
AC_DEFUN([BISON_CXXSTD],
|
AC_DEFUN([BISON_CXXSTD],
|
||||||
[AC_REQUIRE([AC_PROG_CXX])
|
[AC_REQUIRE([AC_PROG_CXX])
|
||||||
|
|||||||
@@ -28,17 +28,13 @@ AC_DEFUN([BISON_TEST_FOR_WORKING_CXX_COMPILER],
|
|||||||
AC_COMPILE_IFELSE(
|
AC_COMPILE_IFELSE(
|
||||||
[AC_LANG_PROGRAM(
|
[AC_LANG_PROGRAM(
|
||||||
[[
|
[[
|
||||||
#include <cassert>
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
|
||||||
using namespace std;]],
|
using namespace std;]],
|
||||||
[[std::cerr << "";
|
[[std::cerr << "";
|
||||||
cout << "";
|
cout << "";
|
||||||
std::vector<int> ints;
|
|
||||||
assert(ints.data () == &ints[0]);
|
|
||||||
typedef std::pair<unsigned, int> uipair;
|
typedef std::pair<unsigned, int> uipair;
|
||||||
std::map<unsigned, int> m;
|
std::map<unsigned, int> m;
|
||||||
std::map<unsigned, int>::iterator i;
|
std::map<unsigned, int>::iterator i;
|
||||||
|
|||||||
@@ -1362,8 +1362,10 @@ AT_CHECK(m4_join([ ],
|
|||||||
# otherwise pass "-c"; this is a hack. The default SOURCES is OUTPUT
|
# otherwise pass "-c"; this is a hack. The default SOURCES is OUTPUT
|
||||||
# with trailing ".o" removed, and ".cc" appended.
|
# with trailing ".o" removed, and ".cc" appended.
|
||||||
m4_define([AT_COMPILE_CXX],
|
m4_define([AT_COMPILE_CXX],
|
||||||
[AT_KEYWORDS(c++)
|
[AT_KEYWORDS([c++])
|
||||||
AT_SKIP_IF([[! $BISON_CXX_WORKS]])
|
AT_SKIP_IF([[! $BISON_CXX_WORKS]])
|
||||||
|
m4_ifdef([AT_GLR2_CC_IF],
|
||||||
|
[AT_GLR2_CC_IF([AT_SKIP_IF([[test x"$CXX11_CXXFLAGS" == x]])])])
|
||||||
AT_CHECK(m4_join([ ],
|
AT_CHECK(m4_join([ ],
|
||||||
[$CXX $CXXFLAGS $CPPFLAGS $3],
|
[$CXX $CXXFLAGS $CPPFLAGS $3],
|
||||||
[m4_bmatch([$1], [[.]], [-c], [$LDFLAGS])],
|
[m4_bmatch([$1], [[.]], [-c], [$LDFLAGS])],
|
||||||
|
|||||||
@@ -744,6 +744,7 @@ m4_popdef([AT_TEST])
|
|||||||
AT_SETUP([C++ Output File Prefix Mapping])
|
AT_SETUP([C++ Output File Prefix Mapping])
|
||||||
|
|
||||||
# AT_TEST([PREFIX], [DIRECTIVES])
|
# AT_TEST([PREFIX], [DIRECTIVES])
|
||||||
|
# -------------------------------
|
||||||
m4_pushdef([AT_TEST],
|
m4_pushdef([AT_TEST],
|
||||||
[AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc" %define api.namespace {$1} $2])
|
[AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc" %define api.namespace {$1} $2])
|
||||||
AT_LOC_PUSHDEF([begin.line], [begin.column], [end.line], [end.column])
|
AT_LOC_PUSHDEF([begin.line], [begin.column], [end.line], [end.column])
|
||||||
|
|||||||
Reference in New Issue
Block a user