https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90034
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |diagnostic
Status|UNCONFIRMED |NEW
Last reconfirmed| |2019-04-10
CC| |dmalcolm at gcc dot gnu.org
Component|c |preprocessor
Ever confirmed|0 |1
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
I see the odd
> tail /tmp/x
28769 stat("/usr/include/stdc-predef.h.gch", 0x7ffee0a9f9c0) = -1 ENOENT (No
such file or directory)
28769 open("/usr/include/stdc-predef.h", O_RDONLY|O_NOCTTY) = 3
28769 fstat(3, {st_mode=S_IFREG|0644, st_size=2495, ...}) = 0
28769 read(3, "/* Copyright (C) 1991-2015 Free "..., 2495) = 2495
28769 close(3) = 0
28769 mmap(NULL, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= 0x7f53c4cf9000
28769 open("/dev/stdout", O_RDONLY) = 3
28769 fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 16), ...}) = 0
28769 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= 0x7f53c4cf8000
28769 read(3,
so it reads from stdout!?
Ah, that's because of the input containing
#line 72 "/dev/stdout" /* yacc.c:315 */
if I "fix" that we get
stdout:84:9: error: no macro name given in #ifndef directive
stdout:84: error: unterminated #ifndef
so GCC wants to complain about
# ifndef YY_NULLPTR
and tries to apply caret diagnostics to that. Opening /dev/stdout succeeds
but reading from it will hang.
Smaller testcase that will hang:
#line 1 "/dev/stdout"
#def xy
we should probably check whether the file we opened is a regular file
before trying to read from it.
That said, bison should be fixed to not emit this kind of line directives...