tech-toolchain archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: minimum required -std=c++NN?



Christoph Badura <bad%bsd.de@localhost> writes:

> While dealing with cross-builing -current w/gcc-12 on macOS I've noticed
> that we have different settings for HOST_CXXFLAGS/CXX_FLAGS in various
> parts of the source tree:
>
> src/external/mit/xorg/lib/gallium.old/Makefile:CXXFLAGS+=	-std=c++14
> src/external/mit/xorg/lib/gallium/Makefile:CXXFLAGS+=	-std=c++14
> src/external/apache2/llvm/Makefile.inc:HOST_CXXFLAGS+=	-std=c++14
> src/external/apache2/llvm/Makefile.inc:CXXFLAGS+=	-std=c++14
> src/external/gpl3/gcc/usr.bin/host-libcpp/Makefile:HOST_CXXFLAGS+=	-std=c++11
> src/tests/lib/libc/sync/Makefile:CXXFLAGS+= -std=c++11
> src/tests/libexec/ld.elf_so/helper_dso3/Makefile:CXXFLAGS+=	-std=c++11
> src/tools/gcc/Makefile:HOST_CXXFLAGS+=		-std=c++11
>
> I guess gallium, libc/sync and ld.elf_so aren't build as a tool.  But
> the compilers are
>
> Would it be desirable to set these to consistent values (i.e.
> -stdt=c++14)?  If so, should we centralize that in a variable in
> bsd.own.mk?

I would say no.  I know I'm a crank about this, but:

  (I will say that C++ is a language family (calling it a language is
  unhelpful in these discussions as there is no single specification).

  (I will say that C++11 and C++17 are "language family members" (LFM), because
  calling them languages is confusing to some people.)

  Often a program in one LFM is also a legitimate program in a higher
  LFM, and often it has the same semantics.

  Any particular compiler supports some set of LFMs, allows selecting
  one by --std= and further has a default, what you get without --std.

  Each program is written in a LFM, and needs to compiled as that LFM.
  It usually works to build it as a higher LFM.

So that leads to:

  Each program should probe for and pass --std=foo to match the declared
  LFM in that program's INSTALL or whatever, and may not assume what the
  default LFM is.  Unless maybe if it's simple C++03 and the same valid
  program in all higher LFMs.

  I find it unsurprising that there is a lot of c++11 and c++14.

> Also, while looking at the build logs I see during "dependall-gcc":
>
> src/tools/gcc/../../external/gpl3/gcc/dist/libcpp/lex.cc:1289:7: warning: use of the 'likely' attribute is a C++20 extension [-Wc++20-extensions]
> src/tools/gcc/../../external/gpl3/gcc/dist/libcpp/lex.cc:1289:7: warning: use of the 'likely' attribute is a C++20 extension [-Wc++20-extensions]
> src/tools/gcc/../../external/gpl3/gcc/dist/libcpp/lex.cc:1289:7: warning: use of the 'likely' attribute is a C++20 extension [-Wc++20-extensions]
> src/tools/gcc/../../external/gpl3/gcc/dist/libcpp/lex.cc:1289:7: warning: use of the 'likely' attribute is a C++20 extension [-Wc++20-extensions]
> src/external/gpl3/gcc/dist/libcpp/lex.cc:1289:7: warning: use of the 'likely' attribute is a C++20 extension [-Wc++20-extensions]
>
> Does that suggest we would want to set {HOST_,}CXXFLAGS to -std=c++20 for
> that file or all of gcc?  (I don't see these warning during the tools
> build of gcc.)

  C++20 is new, but that's how it is.  As for that file vs all of gcc,
  what does gcc's build instructions say?  If they don't, they are
  buggy.

  If it really needs C++20, that's a little surprising, and I
  wonder how the bootstrapping story goes, from a host compiler that is
  less bleeding edge.  Can the bootstrap gcc built with a host compiler
  do without?  Or does it not really need and they are ok with warnings,
  on purpose.  Again they should be documenting -- and maybe they are.
  


Home | Main Index | Thread Index | Old Index