[Bug preprocessor/81746] New: a blackslash at the end of a file is not removed
vincent-gcc at vinc17 dot net
gcc-bugzilla@gcc.gnu.org
Mon Aug 7 01:05:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81746
Bug ID: 81746
Summary: a blackslash at the end of a file is not removed
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: preprocessor
Assignee: unassigned at gcc dot gnu.org
Reporter: vincent-gcc at vinc17 dot net
Target Milestone: ---
According to https://gcc.gnu.org/ml/gcc-patches/2007-04/msg00504.html each
input file is defined "to end with a newline, whether or not the actual
physical Unix input file did so". This is why the following works:
$ printf '#define FOO' | gcc -E -
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "<stdin>"
$
and
$ printf 'int main(void) { return 0; } //' | gcc -E -
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "<stdin>"
int main(void) { return 0; }
$
But the following doesn't work:
$ printf 'int main(void) { return 0; } \\' | gcc -E -
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "<stdin>"
int main(void) { return 0; } \
$
The backslash should have been removed, just like "//" was removed above. This
yields an error if there is no explicit newline character at the end of the
physical Unix input file:
$ printf 'int main(void) { return 0; } \\' | gcc -xc -std=c99 - && echo OK
<stdin>:1:30: error: stray ‘\’ in program
$ printf 'int main(void) { return 0; } \\\n' | gcc -xc -std=c99 - && echo OK
<stdin>:1:30: warning: backslash-newline at end of file
OK
$
More information about the Gcc-bugs
mailing list