How can Autoconf help with the transition to stricter compilation defaults?
Michael Matz via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 17 05:30:26 PST 2022
Hello,
On Wed, 16 Nov 2022, Paul Eggert wrote:
> On 2022-11-16 06:26, Michael Matz wrote:
> > char foobar(void);
> > int main(void) {
> > return &foobar != 0;
> > }
>
> That still has undefined behavior according to draft C23,
This is correct (and also holds for the actually working variant later,
with a volatile variable). If your argument is then that as both
solutions for the link-test problem are relying on undefined behaviour
they are equivalent and hence no change is needed, you have a point, but I
disagree. In practice one (with the call) will cause more problems than
the other (with address taking).
> If Clang's threatened pickiness were of some real use elsewhere, it
> might be justifiable for default Clang to break Autoconf. But so far we
> haven't seen real-world uses that would justify this pickiness for
> Autoconf's use of 'char memset_explicit(void);'.
Note that both, GCC and clang, already warn (not error out!) about the
mismatching decl, even without any headers. So we are in the pickiness
era already.
I.e. a C file containing just a single line "char printf(void);" will be
warned about, by default. There is about nothing that autoconf could do
to rectify this, except containing a long list of prototypes for
well-known functions, with the associated maintenance hassle. But
autoconf _can_ do something about how the decls are used in the
link-tests.
Ciao,
Michael.
More information about the cfe-commits
mailing list