https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88766

            Bug ID: 88766
           Summary: [9 Regression] Rejects valid? C code since r259641
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marxin at gcc dot gnu.org
                CC: jakub at gcc dot gnu.org, jsm28 at gcc dot gnu.org
  Target Milestone: ---

Following code (reduced from gpg2) now fails to compile:

$ cat dns-stuff.i
struct dns_options {
  struct {
    void *a;
    int b;
  };
  int *socks_host;
  char *socks_user;
  char *socks_password;
};
static char tor_socks_user[1], tor_socks_password[1];
struct {
  int socks_host;
} libdns;
int d;
int *c();
int ax() {
  int *az;
  int ba;
  az = c((&__extension__({
           (struct dns_options){{0, 0},
                                0,
                                0,
                                .socks_host = &libdns.socks_host,
                                .socks_user = tor_socks_user,
                                .socks_password = tor_socks_password};
         })),
         &ba);
  d = *az;
  return 0;
}

$ gcc dns-stuff.i
dns-stuff.i: In function ‘ax’:
dns-stuff.i:19:11: error: lvalue required as unary ‘&’ operand
   19 |   az = c((&__extension__({
      |           ^

Reply via email to