This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug preprocessor/80753] New: __has_include and __has_include_next taints subsequent I/O errors
- From: "pexu at gcc-bugzilla dot mail dot kapsi dot fi" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 15 May 2017 09:02:39 +0000
- Subject: [Bug preprocessor/80753] New: __has_include and __has_include_next taints subsequent I/O errors
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80753
Bug ID: 80753
Summary: __has_include and __has_include_next taints subsequent
I/O errors
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: preprocessor
Assignee: unassigned at gcc dot gnu.org
Reporter: pexu@gcc-bugzilla.mail.kapsi.fi
Target Milestone: ---
Created attachment 41356
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41356&action=edit
__has_include testcase on a non-existent file
Hi.
It seems that whenever __has_include or __has_include_next is used, if the
header file is non-existent (i.e. reading it would cause an I/O error) any
subsequent #include on the same file will not fail, but error messages are
silently tainted and preprocessing continues as if nothing happened.
I tried pretty much every release since GCC 4.9 (up until the latest trunk),
and they all behave the same. I couldn't find any information suggesting that
this behaviour is to be expected and at least Clang (3.9) does not share this
behaviour.
$ cat has-include.c has-include-next.c
#if __has_include(<nonesuch>)
# error ".."
#endif
#include <nonesuch>
#if __has_include_next(<nonesuch_next>)
# error ".."
#endif
#include <nonesuch_next>
$ gcc -E has-include.c has-include-next.c && echo ok
# 1 "has-include.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "has-include.c"
# 1 "has-include-next.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "has-include-next.c"
ok