Re: Bison 3.8.2 glr2.cc portability report

Tom Shields <[email protected]> Sun, 10 Oct 2021 14:37:35 -0500
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>
Howdy, Akim,

> On Oct 10, 2021, at 11:06 AM, Akim Demaille <[email protected]> =
wrote:
>=20
>> The Solaris Studio errors noted below are due to a defect in support =
for the C++ 2011: a noexcept operator within a noexcept specifier for an =
overloaded version of std::swap in several header files is the source of =
the error messages above.  The exact same signature is found in the =
equivalent GNU & LLVM header files.  As an experiment (on Solaris 11.4), =
I edited the offending signature in the header files to bypass the =
problem, which allowed Ox to compile.  Ox then failed to link due to =
several versions of the C++ std::ostream '<<' operator missing from the =
C++ library.
>=20
> Is this a problem?  I'd rather avoid having to work around portability =
issues of C++11 :(
>=20
> I know by experience how much effort portability requires.

It isn't a problem for me if it isn=E2=80=99t a problem for you.  I was =
only running tests with Solaris Studio as yet another set of compilers =
to check portability of =E2=80=9COx in C=E2=80=9D, but I have no special =
investment in Solaris, which Oracle has clearly killed off.

>> - Homebrew GNU C++ 11.2: compile warnings for each parser:
>>     agc-Lfile.cc:2711:16: warning: 'AGC::lexer::glr_stack' has a =
field 'AGC::lexer::glr_stack::yyerror_range' whose type uses the =
anonymous namespace [-Wsubobject-linkage]
>>     agc-Lfile.cc:2711:16: warning: 'AGC::lexer::glr_stack' has a =
field 'AGC::lexer::glr_stack::yystateStack' whose type uses the =
anonymous namespace [-Wsubobject-linkage]
>=20
> I am unable to reproduce it on the "Several parsers" test in the test =
suite (after having added -Wsubobject-linkage to the list of warning =
flags to use).  I used g++-mp-11 (MacPorts gcc11 11.2.0_1) 11.2.0.

Curious, as I got this error from every GNU C++ release I tried across =
macOS, Linux, and Windows, save ONLY for GNU C++ 7.3 on Solaris 11.4, =
which I admit left me wondering just a bit.  There must be something =
about the Ox source that triggers this.

> But I can see the configuration.  Indeed we define the glr_stack class =
in a named namespace, but in the *.cc file only, and glr_stack uses =
glr_stack_item, which is defined in the same *.cc, but within an unnamed =
namespace.
>=20
> I can see why in general this is dangerous, but in the present case, I =
don't see how it could go wrong: every bit is in the same *.cc file.

I agree that this doesn=E2=80=99t appear to be an actual issue, at least =
in the Ox-specific case.

> We could define glr_stack_item in a named namespace (since it is my =
understanding Tom that you no longer try to have several parsers in the =
same namespace), but it still annoys me because I was happy to limit the =
number of visible symbols exposed by the compilation unit.  In order to =
help speeding up linking.

I actually haven=E2=80=99t changed the Ox parser specs to use separate =
namespaces for each parser yet, although that is on my list of things to =
do for Ox 1.10.1.  It may be that the warnings will vanish when I make =
this change.  I=E2=80=99ll let you know if shifting to separate =
namespaces makes any difference.

Regards,

Tom Shields=