[llvm-bugs] [Bug 38540] New: Incorrect include paths applied from compile_commands.json
via llvm-bugs
llvm-bugs at lists.llvm.org
Mon Aug 13 05:38:20 PDT 2018
https://bugs.llvm.org/show_bug.cgi?id=38540
Bug ID: 38540
Summary: Incorrect include paths applied from
compile_commands.json
Product: clang
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: Frontend
Assignee: unassignedclangbugs at nondot.org
Reporter: pradelle at silexica.com
CC: llvm-bugs at lists.llvm.org
Created attachment 20686
--> https://bugs.llvm.org/attachment.cgi?id=20686&action=edit
Example reproduction for the issue
When the path to a particular include directory is passed to successive
compiler invocations using a compilation database (compile_commands.json file),
the first path is cached and reused for all invocations. When the first path in
the database is relative, it gets reused without fixing it according to the
location in which the different invocations are running. As a consequence, some
header files are reported as missing whereas they should be found.
# Reproduction
Create a source directory with source files in at least two directories of
different nesting such as:
main.c
subdirectory/src.c
include/header.h
The source files must include the header file.
Generate a compile_commands.json file such that:
- the first command adds the "include" directory using a relative path (for
instance "-I include" for "main.c")
- the second command adds the same "include" directory using its absolute path
Run "clang-check" with "-p path_to_compile_commands.json_directory". Notice how
the preprocessing of the second C file fails by reporting a missing header
file.
A similar example is provided as an attachment. Run it with "make" in the
directory where the Makefile is located (root directory).
# Suggested fix
It looks like the issued is caused by the caching of directory entries in
frontend/InitHeaderSearch.cpp (in AddUnmappedPath). Every directory is searched
for in a FileManager that caches all the paths seen so far, including in
previous invocations, and returns the first entry cached.
The problem is solved by making every path absolute before searching for them
in the FileManager.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20180813/0c0119c6/attachment.html>
More information about the llvm-bugs
mailing list