GNU bug report logs - #27346
module tests fail to compile with gcc 4.8.5

Previous Next

Package: emacs;

Reported by: Glenn Morris <rgm <at> gnu.org>

Date: Mon, 12 Jun 2017 17:38:01 UTC

Severity: normal

Found in version 26.0.50

Done: Glenn Morris <rgm <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Philipp Stephani <p.stephani2 <at> gmail.com>
To: Glenn Morris <rgm <at> gnu.org>
Cc: Eli Zaretskii <eliz <at> gnu.org>, 27346 <at> debbugs.gnu.org
Subject: bug#27346: module tests fail to compile with gcc 4.8.5
Date: Tue, 13 Jun 2017 08:03:25 +0000
[Message part 1 (text/plain, inline)]
Glenn Morris <rgm <at> gnu.org> schrieb am Mo., 12. Juni 2017 um 23:46 Uhr:

> Philipp Stephani wrote:
>
> >> +#ifdef __has_attribute
> >> +#if __has_attribute(__nonnull__)
> >>  # define EMACS_ATTRIBUTE_NONNULL(...)
> >>  __attribute__((__nonnull__(__VA_ARGS__)))
> >> -#else
> >> +#endif
> >> +#endif
> >> +#ifndef EMACS_ATTRIBUTE_NONNULL
> >>  # define EMACS_ATTRIBUTE_NONNULL(...)
> >>  #endif
>
> Applied as 69899d4.
>

Thanks!


>
> > Probably yes, thanks. (I don't know why the && expression doesn't work.)
>
> I could not find a good reference, but see eg
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=36453#c3
>
>
I've looked it up in the (C++) standard, and the explanation makes sense.
What happens is that the preprocessor first replaces the 'define' forms and
expands macros, then replaces all leftover identifiers (including C
keywords) with 0. So

#if defined __has_attribute && __has_attribute ((__nonnull__))

first gets translated to

#if 0 && 0 ((0))

which is then evaluated, but it's a syntax error, which fails even if the
LHS of && is false.
[Message part 2 (text/html, inline)]

This bug report was last modified 7 years and 349 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.