mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +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 <cassert>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
typedef std::vector<int> ints;
|
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],
|
||||||
|
|||||||
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
|
bison_cv_cxx_works=no
|
||||||
AC_COMPILE_IFELSE(
|
AC_COMPILE_IFELSE(
|
||||||
[AC_LANG_PROGRAM(
|
[AC_LANG_PROGRAM(
|
||||||
[#include <cstdlib>
|
[[
|
||||||
|
#include <cassert>
|
||||||
|
#include <cstdlib>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
using namespace std;],
|
#include <vector>
|
||||||
[std::cerr << "";
|
using namespace std;]],
|
||||||
|
[[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;
|
||||||
m.insert (uipair (4, -4));
|
m.insert (uipair (4, -4));
|
||||||
for (i = m.begin (); i != m.end (); ++i)
|
for (i = m.begin (); i != m.end (); ++i)
|
||||||
if (i->first != 4)
|
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([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],
|
[AS_IF([test "$cross_compiling" = yes],
|
||||||
[bison_cv_cxx_works=cross],
|
[bison_cv_cxx_works=cross],
|
||||||
|
|||||||
Reference in New Issue
Block a user