This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug preprocessor/80753] New: __has_include and __has_include_next taints subsequent I/O errors


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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]