build: reject C++ compilers that don't support std::vector::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'

Reported by Christopher Nielsen <mascguy@github.com>.
<https://trac.macports.org/raw-attachment/ticket/59927/bison-test-results-20210811-95b72.log.xz>.

* m4/bison-cxx-std.m4 (_BISON_CXXSTD_98_snippet): Check for it.
* m4/cxx.m4 (BISON_TEST_FOR_WORKING_CXX_COMPILER): Ditto.
This commit is contained in:
Akim Demaille
2021-08-12 09:08:20 +02:00
parent 15ba35a51b
commit 9307c173c7
2 changed files with 23 additions and 5 deletions

View File

@@ -10,7 +10,20 @@ 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],

View File

@@ -27,20 +27,25 @@ AC_DEFUN([BISON_TEST_FOR_WORKING_CXX_COMPILER],
bison_cv_cxx_works=no
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[#include <cstdlib>
[[
#include <cassert>
#include <cstdlib>
#include <iostream>
#include <map>
#include <string>
using namespace std;],
[std::cerr << "";
#include <vector>
using namespace std;]],
[[std::cerr << "";
cout << "";
std::vector<int> ints;
assert(ints.data () == &ints[0]);
typedef std::pair<unsigned, int> uipair;
std::map<unsigned, int> m;
std::map<unsigned, int>::iterator i;
m.insert (uipair (4, -4));
for (i = m.begin (); i != m.end (); ++i)
if (i->first != 4)
return 1;])],
return 1;]])],
[AS_IF([AC_TRY_COMMAND([$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD])],
[AS_IF([test "$cross_compiling" = yes],
[bison_cv_cxx_works=cross],