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__({ | ^