-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Description
Type: LanguageService
Describe the bug
- OS and Version: Linux, Fedora 31
- VS Code Version: 1.40.2
- C/C++ Extension Version: 0.26.2
I might got something wrong here, but it looks like the very basic headers parsing is broken.
A simple gcc based "Hello, world!" code written in C shows multiple, some incorrect, references to "stdio.h" (for example). Trying to go to definition of the stdio.h file shows 3 options:
- /usr/include/bits/stdio.h - a file that should never be included directly (as commented in the header itself), and isn't in gcc's default include path.
- /usr/include/c++/9/tr1/stdio.h - again, shouldn't be listed here. This should be shown only the included header is <tr1/stdio.h> and the compiler is g++, not gcc.
- The correct header
Here's a snippet of gcc's output for it's default search path:
$ echo | gcc -xc -E -Wp,-v -
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/9/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/9/../../../../x86_64-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-redhat-linux/9/include
/usr/local/include
/usr/include
End of search list.
The properties used are just just the default:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
It looks like the addon doesn't query gcc for it's include path at all. Indeed, removing the "/usr/bin/gcc" value from the "compilerPath" property didn't change anything about the list of header candidates.
To Reproduce
Create a simple "Hello, world!" C application, with a single <stdio.h> #include
Expected behavior
By default, go to definition of stdio.h should go directly to /usr/include/stdio.h
Screenshots