mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 04:13:03 +00:00
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:
@@ -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],
|
||||
|
||||
13
m4/cxx.m4
13
m4/cxx.m4
@@ -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],
|
||||
|
||||
Reference in New Issue
Block a user