microsoft / vscode-cpptools

Official repository for the Microsoft C/C++ extension for VS Code.
Other
5.53k stars 1.56k forks source link

Give better diagnostics when a header exists in the includePath but is bypassed due to include_next and wrong includePath ordering #5507

Open rfairfax opened 4 years ago

rfairfax commented 4 years ago

Type: LanguageService

Describe the bug

We have a complex build system with many cross compilers and target sysroots. To manage this we use compile_commands.json files to drive VSCode's intellisense and for some reason it's having a hard time opening standard headers like stdlib.h. I'm looking for some help in how to debug this further.

When I open a document I'm getting a squiggle on the first include in a sample file:

#include <gtest/gtest.h>

The errors it returns are:

#include errors detected. Consider updating your compile_commands.json or includePath. Squiggles are disabled for this translation unit (/home/rfairfax/src/az-sphere-hal-common/test/src/syscall_tests.cc).C/C++(1696)

cannot open source file "stdlib.h" (dependency of "/home/rfairfax/src/az-sphere-hal-common/test/src/syscall_tests.cc")C/C++(1696)

I know the include folders are correct because gtest/gtest.h is in the same location as stdlib.h and when I hit go to definition on a symbol in gtest it opens the correct file path. When I hit go to definition on malloc it even opens the correct stdlib.h header but the reported error and squiggles about not people able to open stdlib.h are still there.

Any suggestions on how to get more debugging info here would help as the logs aren't pointing me to an obvious culprit as to why this error is persistent.

Steps to reproduce Unfortunately I have not been able to produce a minimal repro. This is likely something in our sysroot setup stressing things in some way but I need help figuring out what variable is the key one here.

Expected behavior No errors around being unable to open std headers

Logs ``` terminating child process: 1963374 sending compilation args for /home/rfairfax/src/az-sphere-hal-common/test/src/syscall_tests.cc include: /home/rfairfax/src/az-sphere-hal-common/inc/private include: /home/rfairfax/src/az-sphere-hal-common/sim/inc include: /home/rfairfax/src/az-sphere-hal-common/build/mt3620/native/generated/inc/public include: /home/rfairfax/src/az-sphere-hal-common/inc include: /home/rfairfax/src/az-sphere-hal-common/inc/public include: /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/include include: /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/include/c++/8.2.0 include: /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/include/c++/8.2.0/x86_64-pokysdk-linux include: /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/lib/x86_64-pokysdk-linux/gcc/x86_64-pokysdk-linux/8.2.0/include include: /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/lib/x86_64-pokysdk-linux/gcc/x86_64-pokysdk-linux/8.2.0/include-fixed define: __STDC__=1 define: __cplusplus=201703L define: __STDC_UTF_16__=1 define: __STDC_UTF_32__=1 define: __STDC_HOSTED__=1 define: __GNUC__=8 define: __GNUC_MINOR__=2 define: __GNUC_PATCHLEVEL__=0 define: __VERSION__="8.2.0" define: __ATOMIC_RELAXED=0 define: __ATOMIC_SEQ_CST=5 define: __ATOMIC_ACQUIRE=2 define: __ATOMIC_RELEASE=3 define: __ATOMIC_ACQ_REL=4 define: __ATOMIC_CONSUME=1 define: __pic__=2 define: __PIC__=2 define: __pie__=2 define: __PIE__=2 define: __FINITE_MATH_ONLY__=0 define: _LP64=1 define: __LP64__=1 define: __SIZEOF_INT__=4 define: __SIZEOF_LONG__=8 define: __SIZEOF_LONG_LONG__=8 define: __SIZEOF_SHORT__=2 define: __SIZEOF_FLOAT__=4 define: __SIZEOF_DOUBLE__=8 define: __SIZEOF_LONG_DOUBLE__=16 define: __SIZEOF_SIZE_T__=8 define: __CHAR_BIT__=8 define: __BIGGEST_ALIGNMENT__=16 define: __ORDER_LITTLE_ENDIAN__=1234 define: __ORDER_BIG_ENDIAN__=4321 define: __ORDER_PDP_ENDIAN__=3412 define: __BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__ define: __FLOAT_WORD_ORDER__=__ORDER_LITTLE_ENDIAN__ define: __SIZEOF_POINTER__=8 define: __GNUG__=8 define: __SIZE_TYPE__=long unsigned int define: __PTRDIFF_TYPE__=long int define: __WCHAR_TYPE__=int define: __WINT_TYPE__=unsigned int define: __INTMAX_TYPE__=long int define: __UINTMAX_TYPE__=long unsigned int define: __CHAR16_TYPE__=short unsigned int define: __CHAR32_TYPE__=unsigned int define: __SIG_ATOMIC_TYPE__=int define: __INT8_TYPE__=signed char define: __INT16_TYPE__=short int define: __INT32_TYPE__=int define: __INT64_TYPE__=long int define: __UINT8_TYPE__=unsigned char define: __UINT16_TYPE__=short unsigned int define: __UINT32_TYPE__=unsigned int define: __UINT64_TYPE__=long unsigned int define: __INT_LEAST8_TYPE__=signed char define: __INT_LEAST16_TYPE__=short int define: __INT_LEAST32_TYPE__=int define: __INT_LEAST64_TYPE__=long int define: __UINT_LEAST8_TYPE__=unsigned char define: __UINT_LEAST16_TYPE__=short unsigned int define: __UINT_LEAST32_TYPE__=unsigned int define: __UINT_LEAST64_TYPE__=long unsigned int define: __INT_FAST8_TYPE__=signed char define: __INT_FAST16_TYPE__=long int define: __INT_FAST32_TYPE__=long int define: __INT_FAST64_TYPE__=long int define: __UINT_FAST8_TYPE__=unsigned char define: __UINT_FAST16_TYPE__=long unsigned int define: __UINT_FAST32_TYPE__=long unsigned int define: __UINT_FAST64_TYPE__=long unsigned int define: __INTPTR_TYPE__=long int define: __UINTPTR_TYPE__=long unsigned int define: __GXX_WEAK__=1 define: __DEPRECATED=1 define: __GXX_RTTI=1 define: __GXX_EXPERIMENTAL_CXX0X__=1 define: __STDCPP_DEFAULT_NEW_ALIGNMENT__=16 define: __EXCEPTIONS=1 define: __GXX_ABI_VERSION=1013 define: __SCHAR_MAX__=0x7f define: __SHRT_MAX__=0x7fff define: __INT_MAX__=0x7fffffff define: __LONG_MAX__=0x7fffffffffffffffL define: __LONG_LONG_MAX__=0x7fffffffffffffffLL define: __WCHAR_MAX__=0x7fffffff define: __WCHAR_MIN__=(-__WCHAR_MAX__ - 1) define: __WINT_MAX__=0xffffffffU define: __WINT_MIN__=0U define: __PTRDIFF_MAX__=0x7fffffffffffffffL define: __SIZE_MAX__=0xffffffffffffffffUL define: __SCHAR_WIDTH__=8 define: __SHRT_WIDTH__=16 define: __INT_WIDTH__=32 define: __LONG_WIDTH__=64 define: __LONG_LONG_WIDTH__=64 define: __WCHAR_WIDTH__=32 define: __WINT_WIDTH__=32 define: __PTRDIFF_WIDTH__=64 define: __SIZE_WIDTH__=64 define: __INTMAX_MAX__=0x7fffffffffffffffL define: __INTMAX_C(c)=c ## L define: __UINTMAX_MAX__=0xffffffffffffffffUL define: __UINTMAX_C(c)=c ## UL define: __INTMAX_WIDTH__=64 define: __SIG_ATOMIC_MAX__=0x7fffffff define: __SIG_ATOMIC_MIN__=(-__SIG_ATOMIC_MAX__ - 1) define: __SIG_ATOMIC_WIDTH__=32 define: __INT8_MAX__=0x7f define: __INT16_MAX__=0x7fff define: __INT32_MAX__=0x7fffffff define: __INT64_MAX__=0x7fffffffffffffffL define: __UINT8_MAX__=0xff define: __UINT16_MAX__=0xffff define: __UINT32_MAX__=0xffffffffU define: __UINT64_MAX__=0xffffffffffffffffUL define: __INT_LEAST8_MAX__=0x7f define: __INT8_C(c)=c define: __INT_LEAST8_WIDTH__=8 define: __INT_LEAST16_MAX__=0x7fff define: __INT16_C(c)=c define: __INT_LEAST16_WIDTH__=16 define: __INT_LEAST32_MAX__=0x7fffffff define: __INT32_C(c)=c define: __INT_LEAST32_WIDTH__=32 define: __INT_LEAST64_MAX__=0x7fffffffffffffffL define: __INT64_C(c)=c ## L define: __INT_LEAST64_WIDTH__=64 define: __UINT_LEAST8_MAX__=0xff define: __UINT8_C(c)=c define: __UINT_LEAST16_MAX__=0xffff define: __UINT16_C(c)=c define: __UINT_LEAST32_MAX__=0xffffffffU define: __UINT32_C(c)=c ## U define: __UINT_LEAST64_MAX__=0xffffffffffffffffUL define: __UINT64_C(c)=c ## UL define: __INT_FAST8_MAX__=0x7f define: __INT_FAST8_WIDTH__=8 define: __INT_FAST16_MAX__=0x7fffffffffffffffL define: __INT_FAST16_WIDTH__=64 define: __INT_FAST32_MAX__=0x7fffffffffffffffL define: __INT_FAST32_WIDTH__=64 define: __INT_FAST64_MAX__=0x7fffffffffffffffL define: __INT_FAST64_WIDTH__=64 define: __UINT_FAST8_MAX__=0xff define: __UINT_FAST16_MAX__=0xffffffffffffffffUL define: __UINT_FAST32_MAX__=0xffffffffffffffffUL define: __UINT_FAST64_MAX__=0xffffffffffffffffUL define: __INTPTR_MAX__=0x7fffffffffffffffL define: __INTPTR_WIDTH__=64 define: __UINTPTR_MAX__=0xffffffffffffffffUL define: __GCC_IEC_559=2 define: __GCC_IEC_559_COMPLEX=2 define: __FLT_EVAL_METHOD__=0 define: __FLT_EVAL_METHOD_TS_18661_3__=0 define: __DEC_EVAL_METHOD__=2 define: __FLT_RADIX__=2 define: __FLT_MANT_DIG__=24 define: __FLT_DIG__=6 define: __FLT_MIN_EXP__=(-125) define: __FLT_MIN_10_EXP__=(-37) define: __FLT_MAX_EXP__=128 define: __FLT_MAX_10_EXP__=38 define: __FLT_DECIMAL_DIG__=9 define: __FLT_MAX__=3.40282346638528859811704183484516925e+38F define: __FLT_MIN__=1.17549435082228750796873653722224568e-38F define: __FLT_EPSILON__=1.19209289550781250000000000000000000e-7F define: __FLT_DENORM_MIN__=1.40129846432481707092372958328991613e-45F define: __FLT_HAS_DENORM__=1 define: __FLT_HAS_INFINITY__=1 define: __FLT_HAS_QUIET_NAN__=1 define: __DBL_MANT_DIG__=53 define: __DBL_DIG__=15 define: __DBL_MIN_EXP__=(-1021) define: __DBL_MIN_10_EXP__=(-307) define: __DBL_MAX_EXP__=1024 define: __DBL_MAX_10_EXP__=308 define: __DBL_DECIMAL_DIG__=17 define: __DBL_MAX__=double(1.79769313486231570814527423731704357e+308L) define: __DBL_MIN__=double(2.22507385850720138309023271733240406e-308L) define: __DBL_EPSILON__=double(2.22044604925031308084726333618164062e-16L) define: __DBL_DENORM_MIN__=double(4.94065645841246544176568792868221372e-324L) define: __DBL_HAS_DENORM__=1 define: __DBL_HAS_INFINITY__=1 define: __DBL_HAS_QUIET_NAN__=1 define: __LDBL_MANT_DIG__=64 define: __LDBL_DIG__=18 define: __LDBL_MIN_EXP__=(-16381) define: __LDBL_MIN_10_EXP__=(-4931) define: __LDBL_MAX_EXP__=16384 define: __LDBL_MAX_10_EXP__=4932 define: __DECIMAL_DIG__=21 define: __LDBL_DECIMAL_DIG__=21 define: __LDBL_MAX__=1.18973149535723176502126385303097021e+4932L define: __LDBL_MIN__=3.36210314311209350626267781732175260e-4932L define: __LDBL_EPSILON__=1.08420217248550443400745280086994171e-19L define: __LDBL_DENORM_MIN__=3.64519953188247460252840593361941982e-4951L define: __LDBL_HAS_DENORM__=1 define: __LDBL_HAS_INFINITY__=1 define: __LDBL_HAS_QUIET_NAN__=1 define: __FLT32_MANT_DIG__=24 define: __FLT32_DIG__=6 define: __FLT32_MIN_EXP__=(-125) define: __FLT32_MIN_10_EXP__=(-37) define: __FLT32_MAX_EXP__=128 define: __FLT32_MAX_10_EXP__=38 define: __FLT32_DECIMAL_DIG__=9 define: __FLT32_MAX__=3.40282346638528859811704183484516925e+38F32 define: __FLT32_MIN__=1.17549435082228750796873653722224568e-38F32 define: __FLT32_EPSILON__=1.19209289550781250000000000000000000e-7F32 define: __FLT32_DENORM_MIN__=1.40129846432481707092372958328991613e-45F32 define: __FLT32_HAS_DENORM__=1 define: __FLT32_HAS_INFINITY__=1 define: __FLT32_HAS_QUIET_NAN__=1 define: __FLT64_MANT_DIG__=53 define: __FLT64_DIG__=15 define: __FLT64_MIN_EXP__=(-1021) define: __FLT64_MIN_10_EXP__=(-307) define: __FLT64_MAX_EXP__=1024 define: __FLT64_MAX_10_EXP__=308 define: __FLT64_DECIMAL_DIG__=17 define: __FLT64_MAX__=1.79769313486231570814527423731704357e+308F64 define: __FLT64_MIN__=2.22507385850720138309023271733240406e-308F64 define: __FLT64_EPSILON__=2.22044604925031308084726333618164062e-16F64 define: __FLT64_DENORM_MIN__=4.94065645841246544176568792868221372e-324F64 define: __FLT64_HAS_DENORM__=1 define: __FLT64_HAS_INFINITY__=1 define: __FLT64_HAS_QUIET_NAN__=1 define: __FLT128_MANT_DIG__=113 define: __FLT128_DIG__=33 define: __FLT128_MIN_EXP__=(-16381) define: __FLT128_MIN_10_EXP__=(-4931) define: __FLT128_MAX_EXP__=16384 define: __FLT128_MAX_10_EXP__=4932 define: __FLT128_DECIMAL_DIG__=36 define: __FLT128_MAX__=1.18973149535723176508575932662800702e+4932F128 define: __FLT128_MIN__=3.36210314311209350626267781732175260e-4932F128 define: __FLT128_EPSILON__=1.92592994438723585305597794258492732e-34F128 define: __FLT128_DENORM_MIN__=6.47517511943802511092443895822764655e-4966F128 define: __FLT128_HAS_DENORM__=1 define: __FLT128_HAS_INFINITY__=1 define: __FLT128_HAS_QUIET_NAN__=1 define: __FLT32X_MANT_DIG__=53 define: __FLT32X_DIG__=15 define: __FLT32X_MIN_EXP__=(-1021) define: __FLT32X_MIN_10_EXP__=(-307) define: __FLT32X_MAX_EXP__=1024 define: __FLT32X_MAX_10_EXP__=308 define: __FLT32X_DECIMAL_DIG__=17 define: __FLT32X_MAX__=1.79769313486231570814527423731704357e+308F32x define: __FLT32X_MIN__=2.22507385850720138309023271733240406e-308F32x define: __FLT32X_EPSILON__=2.22044604925031308084726333618164062e-16F32x define: __FLT32X_DENORM_MIN__=4.94065645841246544176568792868221372e-324F32x define: __FLT32X_HAS_DENORM__=1 define: __FLT32X_HAS_INFINITY__=1 define: __FLT32X_HAS_QUIET_NAN__=1 define: __FLT64X_MANT_DIG__=64 define: __FLT64X_DIG__=18 define: __FLT64X_MIN_EXP__=(-16381) define: __FLT64X_MIN_10_EXP__=(-4931) define: __FLT64X_MAX_EXP__=16384 define: __FLT64X_MAX_10_EXP__=4932 define: __FLT64X_DECIMAL_DIG__=21 define: __FLT64X_MAX__=1.18973149535723176502126385303097021e+4932F64x define: __FLT64X_MIN__=3.36210314311209350626267781732175260e-4932F64x define: __FLT64X_EPSILON__=1.08420217248550443400745280086994171e-19F64x define: __FLT64X_DENORM_MIN__=3.64519953188247460252840593361941982e-4951F64x define: __FLT64X_HAS_DENORM__=1 define: __FLT64X_HAS_INFINITY__=1 define: __FLT64X_HAS_QUIET_NAN__=1 define: __DEC32_MANT_DIG__=7 define: __DEC32_MIN_EXP__=(-94) define: __DEC32_MAX_EXP__=97 define: __DEC32_MIN__=1E-95DF define: __DEC32_MAX__=9.999999E96DF define: __DEC32_EPSILON__=1E-6DF define: __DEC32_SUBNORMAL_MIN__=0.000001E-95DF define: __DEC64_MANT_DIG__=16 define: __DEC64_MIN_EXP__=(-382) define: __DEC64_MAX_EXP__=385 define: __DEC64_MIN__=1E-383DD define: __DEC64_MAX__=9.999999999999999E384DD define: __DEC64_EPSILON__=1E-15DD define: __DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD define: __DEC128_MANT_DIG__=34 define: __DEC128_MIN_EXP__=(-6142) define: __DEC128_MAX_EXP__=6145 define: __DEC128_MIN__=1E-6143DL define: __DEC128_MAX__=9.999999999999999999999999999999999E6144DL define: __DEC128_EPSILON__=1E-33DL define: __DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL define: __REGISTER_PREFIX__= define: __USER_LABEL_PREFIX__= define: __GNUC_STDC_INLINE__=1 define: __NO_INLINE__=1 define: __STRICT_ANSI__=1 define: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1 define: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1 define: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1 define: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1 define: __GCC_ATOMIC_BOOL_LOCK_FREE=2 define: __GCC_ATOMIC_CHAR_LOCK_FREE=2 define: __GCC_ATOMIC_CHAR16_T_LOCK_FREE=2 define: __GCC_ATOMIC_CHAR32_T_LOCK_FREE=2 define: __GCC_ATOMIC_WCHAR_T_LOCK_FREE=2 define: __GCC_ATOMIC_SHORT_LOCK_FREE=2 define: __GCC_ATOMIC_INT_LOCK_FREE=2 define: __GCC_ATOMIC_LONG_LOCK_FREE=2 define: __GCC_ATOMIC_LLONG_LOCK_FREE=2 define: __GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1 define: __GCC_ATOMIC_POINTER_LOCK_FREE=2 define: __GCC_HAVE_DWARF2_CFI_ASM=1 define: __PRAGMA_REDEFINE_EXTNAME=1 define: __SIZEOF_INT128__=16 define: __SIZEOF_WCHAR_T__=4 define: __SIZEOF_WINT_T__=4 define: __SIZEOF_PTRDIFF_T__=8 define: __amd64=1 define: __amd64__=1 define: __x86_64=1 define: __x86_64__=1 define: __SIZEOF_FLOAT80__=16 define: __SIZEOF_FLOAT128__=16 define: __ATOMIC_HLE_ACQUIRE=65536 define: __ATOMIC_HLE_RELEASE=131072 define: __GCC_ASM_FLAG_OUTPUTS__=1 define: __k8=1 define: __k8__=1 define: __code_model_small__=1 define: __MMX__=1 define: __SSE__=1 define: __SSE2__=1 define: __FXSR__=1 define: __SSE_MATH__=1 define: __SSE2_MATH__=1 define: __SEG_FS=1 define: __SEG_GS=1 define: __gnu_linux__=1 define: __linux=1 define: __linux__=1 define: __unix=1 define: __unix__=1 define: __ELF__=1 define: __DECIMAL_BID_FORMAT__=1 define: _GNU_SOURCE=1 define: EA_PLATFORM_LINUX=1 define: EXP23_TEST_SUPPORT=1 other: --g++ other: --gnu_version=80200 Checking for syntax errors: file:///home/rfairfax/src/az-sphere-hal-common/test/src/syscall_tests.cc Queueing IntelliSense update for files in translation unit of: /home/rfairfax/src/az-sphere-hal-common/test/src/syscall_tests.cc Error squiggle count: 3 Error squiggles will be disabled in: file:///home/rfairfax/src/az-sphere-hal-common/test/src/syscall_tests.cc terminating child process: 1963391 Update IntelliSense time (sec): 0.402 idle loop: reparsing the active document Checking for syntax errors: file:///home/rfairfax/src/az-sphere-hal-common/test/src/syscall_tests.cc Queueing IntelliSense update for files in translation unit of: /home/rfairfax/src/az-sphere-hal-common/test/src/syscall_tests.cc Error squiggle count: 3 Error squiggle count: 1 Update IntelliSense time (sec): 0.263 -------- Diagnostics - 5/15/2020, 2:59:52 PM Version: 0.28.0 Current Configuration: { "name": "Linux", "compileCommands": "${workspaceRoot}/build/mt3620/native/compile_commands.json", "includePath": [ "${workspaceRoot}/inc", "${workspaceRoot}/test" ], "intelliSenseMode": "gcc-x64", "cStandard": "c11", "cppStandard": "c++17" } Translation Unit Mappings: [ /home/rfairfax/src/az-sphere-hal-common/src/hal/api/syscall.cc ]: /home/rfairfax/src/az-sphere-hal-common/inc/public/hal/api/syscall.h /home/rfairfax/src/az-sphere-hal-common/src/hal/api/syscall.cc [ /home/rfairfax/src/az-sphere-hal-common/test/src/syscall_tests.cc ]: /home/rfairfax/src/az-sphere-hal-common/test/src/syscall_tests.cc /home/rfairfax/src/az-sphere-hal-common/inc/public/hal/api/syscall.h Translation Unit Configurations: [ /home/rfairfax/src/az-sphere-hal-common/src/hal/api/syscall.cc ]: Process ID: 1962895 Memory Usage: 96 MB Compiler Path: /home/rfairfax/azure-sphere/os-sdk/tools/x86_64-pokysdk-linux-g++ Includes: /home/rfairfax/src/az-sphere-hal-common/inc /home/rfairfax/src/az-sphere-hal-common/inc/public /home/rfairfax/src/az-sphere-hal-common/build/mt3620/native/generated/inc/public /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/include /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/include/c++/8.2.0 /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/include/c++/8.2.0/x86_64-pokysdk-linux /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/lib/x86_64-pokysdk-linux/gcc/x86_64-pokysdk-linux/8.2.0/include /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/lib/x86_64-pokysdk-linux/gcc/x86_64-pokysdk-linux/8.2.0/include-fixed /home/rfairfax/src/az-sphere-hal-common/inc/public/hal/api Defines: EA_PLATFORM_LINUX=1 EXP23_TEST_SUPPORT=1 Standard Version: c++17 IntelliSense Mode: gcc-x64 Other Flags: --g++ --gnu_version=80200 [ /home/rfairfax/src/az-sphere-hal-common/test/src/syscall_tests.cc ]: Process ID: 1963376 Memory Usage: 84 MB Compiler Path: /home/rfairfax/azure-sphere/os-sdk/tools/x86_64-pokysdk-linux-g++ Includes: /home/rfairfax/src/az-sphere-hal-common/inc/private /home/rfairfax/src/az-sphere-hal-common/sim/inc /home/rfairfax/src/az-sphere-hal-common/build/mt3620/native/generated/inc/public /home/rfairfax/src/az-sphere-hal-common/inc /home/rfairfax/src/az-sphere-hal-common/inc/public /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/include /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/include/c++/8.2.0 /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/include/c++/8.2.0/x86_64-pokysdk-linux /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/lib/x86_64-pokysdk-linux/gcc/x86_64-pokysdk-linux/8.2.0/include /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/lib/x86_64-pokysdk-linux/gcc/x86_64-pokysdk-linux/8.2.0/include-fixed Defines: EA_PLATFORM_LINUX=1 EXP23_TEST_SUPPORT=1 Standard Version: c++17 IntelliSense Mode: gcc-x64 Other Flags: --g++ --gnu_version=80200 Total Memory Usage: 180 MB ```
sean-mcmanus commented 4 years ago

What happens if you add #include <stdlib.h> to syscall_tests.cc and then do Go to Definition on the stdlib.h? Does it open /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/include/c++/8.2.0/stdlib.h?

You're intending to compile with C++ and not C, right?

rfairfax commented 4 years ago

It opens /home/rfairfax/azure-sphere/os-sdk/sysroots/native-x86_64-linux/usr/include/stdlib.h.

This is a C++ program and it's worth looking into why the include order may be off even though our code is compiling correctly, but I'm confused why it says it can't open stdlib.h when it can clearly find the file.

rfairfax commented 4 years ago

I edited the include order in compile commands to get it to pick up the c++ folder first and the error went away. Easy enough to fix on our end, but any idea why the error was implying "cannot open stdlib.h" versus picking up the wrong file?

sean-mcmanus commented 4 years ago

Oh, yeah, the system include ordering is wrong (I didn't notice before). It sounds like our extension is getting the system include path order wrong with compile_commands.json in certain cases. Do you have any more info on how we can repro that? I tried a few things but I couldn't get the /usr/include to be first (it correctly uses the ordering from our compiler querying).

The "cannot open source file stdlib.h" appears because some other system header file expects the /usr/include/c++/8.2.0/stdlib.h to be on the path first and the /usr/include to be last...some system header probably uses #include_next "stdlib.h" which only works correctly if the paths are ordered as expected.

rfairfax commented 4 years ago

Even with include_next I'd expect it to at least find stdlib.h and then fail with symbol problems because of loading them in the wrong order, but I bet you're right that something like that is the reason this is failing. It would be great if there was a way to get more logging out of this like the file / line number of the #include location that is failing to resolve properly to point people towards where to investigate.

Now that I think I understand what's going on I'll dig in and try to see if I can get a simpler repro. Our compiler toolchain is a bit non-standard so it's likely something in how we built the compiler itself but since the code is building correctly it's interesting to reason about the different between the working compiler and what VSCode is seeing when using the compile_commands.

Thanks for the help.

sean-mcmanus commented 4 years ago

Since normally /usr/include is last, the include_next correctly finds the stdlib.h from there when encountered at some location like /usr/include/c++/8.2.0, but if it's first, then the include_next could skip over the /usr/include and the /usr/include/c++/8.2.0 depending on the internal "next list" it's using, causing no stdlib.h to be found.

Yeah, we have gotten lots of issues caused by incorrect system include ordering so better logging and diagnostics would be good. I could convert this issue to that or file a new issue on that.

rfairfax commented 4 years ago

I debugged this and ultimately tracked it down to an issue in our build scripts - we were explicitly configuring system includes and messed up the order. I also confirmed that what I was seeing was ultimately an include_next issue. Once I fixed all of that VSCode is much happier and Intellisense is handling this case correctly. I think this was the last remaining Intellisense issue in our very large and complex multi-sysroot code base so this is a big victory for us.

I think capturing the opportunity for diagnostic improvement here would be great. If the error diagnostic had indicated what file and line number the error was coming from I would have immediately been able to see it was an include_next line and that would have pointed me in the right direction. As is I just got the confusing "cannot find stdlib.h" which led me down the path of thinking it wasn't seeing my include dirs at all.

Thanks again for the help.