https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120418
Bug ID: 120418
Summary: embed testcases issue
Product: gcc
Version: 15.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: testsuite
Assignee: unassigned at gcc dot gnu.org
Reporter: alexey.lapshin at espressif dot com
Target Milestone: ---
Almost all testcases for "#embed" are failing. Because they use "#embed
__FILE__".
The issue does not appear for such tests in case the working directory is the
same as the source's file directory. Or full path to the source file was passed
to GCC.
Explanation:
1. cd ./gcc/testsuite
2. gcc -std=c23 -Wconversion ./gcc.dg/cpp/embed-10.c
3. get "fatal error: ./gcc.dg/cpp/embed-10.c: No such file or directory"
Why does this happen?
1. __FILE__ macro is "./gcc.dg/cpp/embed-10.c"
2. "#embed __FILE__" acts like "#include" and start to look up the file from
source file directory. And looking for "./gcc.dg/cpp/./gcc.dg/cpp/embed-10.c".
I also tested it with "gcc:15.1.0" docker image, and strace gives the same as
for my toolchain. ("strace -f gcc -std=c23 -Wconversion
./gcc.dg/cpp/embed-10.c"):
[pid 167] openat(AT_FDCWD, "./gcc.dg/cpp/./gcc.dg/cpp/embed-10.c",
O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
[pid 167] openat(AT_FDCWD, "./gcc.dg/cpp/embed-10.c", O_RDONLY) = 4
[pid 167] newfstatat(4, "", {st_mode=S_IFREG|0664, st_size=305, ...},
AT_EMPTY_PATH) = 0
[pid 167] read(4, "/* This is a comment with some U"..., 4096) = 305
[pid 167] read(4, "", 4096) = 0
[pid 167] write(2, "\33[01m\33[K./gcc.dg/cpp/embed-10.c:"...,
327./gcc.dg/cpp/embed-10.c:6:8: fatal error: ./gcc.dg/cpp/embed-10.c: No such
file or directory
I guess testcases should be fixed, because gcc acts as expected