System include are those used with -isystem keyword, built-in
includes on the other hand come from compiler and always
follow in the end of the include list (after system includes).
Change-Id: I95c2fec36d2e5b43f014fe0a88d59c6769edfa1f
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Some other logic in the options builder is based
on the -I usage and also we don't want to lock any files
with ClangCodeModel.
Change-Id: I4338abed26e91ebb0a561d449328ea0954fe44ea
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
It is the type used by the HeaderPath class, so reflect that in
the name.
I also considered to rename HeaderPath to IncludePath, but
that name is reflected in a lot of users, which would also need
to be adjusted for consistency. That would blow up the patch size
for little value IMHO.
Change-Id: I51421dbd3ab8b2874dc32fc82dc394c9b93ce5e9
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
System include paths are appended after other includes by the compiler. So
we should set them as system includes and not as normal includes. Otherwise
we change the include order. Headers in system include paths are not
cluttering the screen with unwanted warning and by the way improve
performance too.
ProjectPartHeaderPath was a dopperganger of HeaderPath, so we merged them.
Change-Id: I7c394b4098b697de79761499ffcd5913cc02d652
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Clang-cl behaves similar to MSVC and the parsing is more proper
without -undef specified.
Change-Id: Iee37fca3401000edb3e77e8a99dcb85ae6e70ab3
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
C++ include paths should come before Clang include
folder. Therefore parse all options for include/c++/v1,
include/c++/{version}, include/g++ and /usr/local/include.
Task-number: QTCREATORBUG-20231
Change-Id: I22c41f07d241e1e564069bb192d4fe637ff05e87
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
System includes suppress warnings and prevent indexing of unwanted symbols.
Using system includes for all includes outside of the project can be
quite advantageous. The rootProjectDirectory() can be extended to be set
in the project settings. An automatic generation could be possible but
could create an unwanted path which includes files outside of the
perceived project.
Change-Id: Ib9d3158f14f41efe1f6657f962d5c4437bb324b2
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Only libclang has issues with the include directory
search therefore undefining include folders makes sense
only for libclang options builder.
Change-Id: Ie3f62f5f3a89503e6e0ab59e18889e92425c3abc
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
These functions require core plugin so they can't go
to utils library. At the same time to use them in
ProjectExplorer plugin there are not too many choices
where to put them without introducing new dependencies.
Change-Id: I3cccccffaae8ac4bbce924fd809b5423da5dc503
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
...as this leads to file locking issues on Windows and pointless
diagnostics we currently ignore when opening files from -isystem include
paths.
The usage of -isystem suppressed warnings from system headers and
resulted in a performance boost. Nowadays we can preserve this
performance optimization by making use of the new
CXTranslationUnit_IgnoreWarningsFromIncludedFiles. This flag helps us
also to suppress diagnostics from clang tidy checks, which reported
diagnostics even for -isystem headers.
Change-Id: I33e1f7169e2ff9f17c811565a5324b9da4740701
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Excluding for __cplusplus macro is not required anymore
because we currently determine C and C++ files and do not
set this macro for C-files.
Does not break QTCREATORBUG-12818.
Change-Id: I40d5afcb9ef426a6469fb5134ec7d46438201d86
Reviewed-by: David Schulz <david.schulz@qt.io>
Clang uses mmap for system headers. This locks the header files on Windows.
If the project file is not in the root directory of the repository, and it
uses header files that are outside its directory, but in the repository,
Git operations like checkout, rebase etc. can fail because the header files
are locked.
Change-Id: If8a258234479fc70ca0a8384bf24c68d767dbeaa
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
QDir::exists() returns false for files which is not the
intended behavior.
Change-Id: I768432df93e10b3f8f570da4d94035038ff52e06
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
We use custom clang executable and it does not make
sense anymore to give a choice of changing it.
Change-Id: Icf86042ac3fcd08c320ef2bbdaabef1102b023b5
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
In case of C-header or C-source files the MSVC
language version was not switched to C.
Fixes static analyzer runs for C files.
Task-number: QTCREATORBUG-20198
Change-Id: I1da31a1048b7c258642cf00f5084681f5d384ee6
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
...and return -I for ones in project.
In case -isystem is set for all includes we don't get
proper reparse when the included file is in angle brackets
and is changed.
Change-Id: Iba912edfc488aed2a4484f6a742a7c36099e8a13
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
And add them to other clang code model arguments.
These flags provide architecture for cross-compilation
when ios kit is selected.
Task-number: QTCREATORBUG-19437
Task-number: QTCREATORBUG-19430
Change-Id: I7a485f49d637371bb28b2096086d7d8a4b0c404a
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Always exclude clang include paths which do not come
with libclang used by code model.
This solves the issue with GCC that uses system clang
include folder on macOS.
Task-number: QTCREATORBUG-19397
Change-Id: I3b4845248a3cf03a95fbd4038856f8fb31346bfa
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
We always provide the full includes list ourselves so
it will not change the includes order.
Change-Id: I84ee2ca7f05bfb71ae400f0e9e0b8f52810252b3
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
Add missing gcc include directories in Android toolchain.
This introduces the similar "magic" that we have in qmake
(*qtsource*/qtbase/mkspecs/common/android-base-head.conf)
but allows us to have those paths wherever we use android
toolchain.
Change-Id: I5740f1f2339fd30670567f24db2be2454f665f41
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Analyzer has clang path and can generate necessary header paths
to be able to use default options builder.
Change-Id: I9bb1fc158f045f6e099817c5557ee7d9e38416fb
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
Affects __FUNCSIG__, __FUNCTION__ and __FUNCDNAME__.
By default Clang can't concatenate strings under those
macros with other strings.
Because of that we need to define them with empty strings
to make clang compile such cases without errors.
Task-number: QTCREATORBUG-19295
Change-Id: I9a3770ebe56b4b8a49ba9982c5a1ba90c8f0b304
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
...for the code model parts and declare 5.0 as the supported version for
the clang static analyzer.
Adapt versions and tests, remove code assuming clang <= 5.0.
LLVM/Clang 5 was released on 07 Sep 2017.
Task-number: QTCREATORBUG-18931
Task-number: QTCREATORBUG-18657
Task-number: QTCREATORBUG-17187
Task-number: QTCREATORBUG-14881
Change-Id: I53b00258ca06a1d2e57f9379dacc54b310687295
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Make build command the same for all builders.
Minimize differences.
Change-Id: I1cfe5071b3afb4944ed178fff1e57d3aee45d8a9
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
The old code model expected the macros as C++ formatted text
("#define Foo 42) but newer targets like the Clang codemodel expect key
value arguments like "-DFoo=42". So instead of parsing the text again and
again we use an abstract data description.
Task-number: QTCREATORBUG-17915
Change-Id: I0179fd13c48a581e91ee79bba9d42d501c26f19f
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
... and make use of it.
With gcc 7, the new option -Wimplicit-fallthrough is introduced and
added to the -Wextra set, triggering dozens of warnings in our sources.
Therefore, we annotate all obviously intended fall-throughs. The ones
that are still left are unclear and need to be checked by the respective
maintainer.
Change-Id: I44ead33cd42a4b41c28ee5fcb5a31db272710bbc
Reviewed-by: Nikita Baryshnikov <nib952051@gmail.com>
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Add extra define not to include intrinsic headers
from boost headers.
Task-number: QTCREATORBUG-16439
Change-Id: I887fe63e2560afebdbe9f3d3587f99f95d408997
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
There is an argument of this type in std_abs.h. void argument is invalid.
Replacing with float, double or long double causes an error in type_traits,
which has template specializations for __is_floating_point_helper for all
these types.
Change-Id: Ife95fa992cbf9684bc67a2098d6609a9a925d015
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
There was no way to determine whether ProjectFile::classify() was run or
not. Now, ProjectFile::classify() returns ProjectFile::Unsupported
instead of ProjectFile::Unclassified.
Change-Id: I660d0e42044bdefcac38058c6f4a3425983a6d93
Reviewed-by: David Schulz <david.schulz@qt.io>
...for -std=gnu++0x.
Define the unknown identifier/type "__float128" so at least the headers can be
parsed successfully. Of course this does not help for parsing client code
referencing that identifier, but this should be the less common case.
Task-number: QTCREATORBUG-17126
Change-Id: Id321311713029d8aa77e068b02361d86debfada6
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Same as for the Clang Static Analyzer, so move the implementation into the base
class and use it.
This has gone unnoticed so far because it looks like that the error diagnostic
from the bug report can be extracted with libclang (as shown in the info bar),
but is not printed from libclang or clang.exe itself.
Change-Id: I5b714ba374c5fdefe234faf012a3515e96c9a08c
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>