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 <[email protected]>. <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. --- m4/bison-cxx-std.m4 | 15 ++++++++++++++- m4/cxx.m4 | 13 +++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/m4/bison-cxx-std.m4 b/m4/bison-cxx-std.m4 index 65d59cc7..4a71d20f 100644 --- a/m4/bison-cxx-std.m4 +++ b/m4/bison-cxx-std.m4 @@ -10,7 +10,20 @@ m4_define([_BISON_CXXSTD_98_snippet], [[#include <cassert> #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], diff --git a/m4/cxx.m4 b/m4/cxx.m4 index 36e66c43..0a99fa27 100644 --- a/m4/cxx.m4 +++ b/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], -- 2.32.0
