Qt Creator Clang Code Model: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
(Create section "Backport candidates for Qt Creator 4.6")
(Add candidates for backport from clang trunk.)
Line 72: Line 72:
Qt Creator 4.6 will ship with LLVM/Clang 5.
Qt Creator 4.6 will ship with LLVM/Clang 5.


The following changes from LLVm/Clang trunk might be worthwhile to backport.
The following changes from LLVMt/Clang trunk might be worthwhile to backport.
 
'''Crash / Parsing'''
 
[Sema] Fix crash in unused-lambda-capture warning for VLAs
 
https://reviews.llvm.org/D41016
 
'''Crash / Completion'''
 
Fixed a crash in code completion.
 
https://reviews.llvm.org/D37382
 
Fixes crash when requesting completion at e.g. int (*foo(int a))(flo<CURSOR>
 
'''Crash / Static Analyzer'''
 
[analyzer] Fix a crash on C++17 AST for non-trivial construction into a trivial brace initializer.
 
https://reviews.llvm.org/D40841
 
'''Minor / AST Access'''
 
[libclang] Fix cursors for in-class initializer of field declarations
 
https://reviews.llvm.org/D40027
 
https://bugs.llvm.org/show_bug.cgi?id=33745
 
Fixes AST access to initializers of class members. Affects mostly semantic highlighting and highlighting of local uses.
 
'''Minor / AST Access'''
 
[libclang] Fix cursors for functions with trailing return type
 
https://reviews.llvm.org/D40561
 
'''Minor / AST properties'''
 
[libclang] Add support for checking abstractness of records
 
https://reviews.llvm.org/D40072
 
Would need https://codereview.qt-project.org/#/c/211497/ on Qt Creator side.
 
'''Improves Tooltips'''
 
[DeclPrinter] Honor TerseOutput for constructors
 
https://reviews.llvm.org/D39957
 
Avoids printing member initialization list and body for constructor.

Revision as of 07:54, 12 December 2017

Documentation: http://doc.qt.io/qtcreator/creator-clang-codemodel.html

Debugging

With the following invocation debugging output will be generated:

Linux/Mac:

export QT_LOGGING_RULES=qtc.clang*=true
export LIBCLANG_TIMING=1
./qtcreator

Windows (start DebugView in advance to see the output):

set QT_LOGGING_RULES=qtc.clang*=true
set LIBCLANG_TIMING=1
qtcreator.exe

The debugging output contains among others:

  • The IPC messages send/received
  • Output of libclang while parsing

Internal command line

The debugging output from above will contain all the command line options that are passed on to libclang, which is enough for most cases.

However, to see also the resulting internal command line of libclang run:

  1. Restart Qt Creator with QTC_CLANG_NO_DIAGNOSTIC_CHECK=1 (>= Qt Creator 4.5)
  2. Switch to projects mode and there to the "Clang Code Model"
  3. Copy some warning configuration by clicking on "Copy...", give it a name like "Debug"
  4. Replace all the options from the copied configuration with "-###"
  5. Close and re-open the editor document - the new debugging output will contain also the internal command line

Note that libclang/clangbackend will crash afterwards, so do not forget to switch back to a sane warning configuration.

Related Environment Variables

Build related

  • QTC_NO_CLANG_LIBTOOLING - Do not build against Clang's C++ libs; the ClangRefactoring plugin won't be build.

Run time related

  • LIBCLANG_TIMING - Timings from libclang for parse / reparse / preamble generation / completion.
  • QTC_CLANG_NO_DIAGNOSTIC_CHECK - Avoid validation of warning configuration (>= Qt Creator 4.5)
  • QTC_CLANG_NO_SUPPORTIVE_TRANSLATIONUNIT - Use only one translation unit per document.
  • QTC_CLANG_NO_ALIVE_TIMER - Simplifies debugging in certain cases.
  • QTC_CLANG_FORCE_VERBOSE_ALIVE - Simplifies debugging in certain cases.

Libclang

libclang is used inside clangbackend to provide code model features

Builds

Linux and Mac:

libclang is built with the same compilers as Qt Creator ("Clang 7.0 (Apple)" for macOS, and GCC 5.3 from RHEL (which turns on old ABI compatibility with _GLIBCXX_USE_CXX11_ABI=0 by default) on Linux)

Windows:

Currently libclang is built with optimized MinGW compiler for all Qt Creator versions. More information about Windows builds: Build libclang on Windows

Minimal libclang installation that Qt Creator can use

The following targets are sufficient for this:

install-libclang install-libclang-headers install-clang-headers install-llvm-config

Clang Plugins

Clang plugins support is already in QtCreator master branch and will soon appear in the snapshots.

Plugins usage significantly reduces libclang performance so set up your settings (Tools->Options->C++->Code Model->Clang Plugins) wisely:

Clazy

level1 adds 50% to the parse/re-parse time, level0 adds only 25%

Clang Tidy

clang-diagnostic-*,llvm-*,misc-* add 200% to the original libclang parse/re-parse times

Backport candidates for Qt Creator 4.6

Qt Creator 4.6 will ship with LLVM/Clang 5.

The following changes from LLVMt/Clang trunk might be worthwhile to backport.

Crash / Parsing

[Sema] Fix crash in unused-lambda-capture warning for VLAs

https://reviews.llvm.org/D41016

Crash / Completion

Fixed a crash in code completion.

https://reviews.llvm.org/D37382

Fixes crash when requesting completion at e.g. int (*foo(int a))(flo<CURSOR>

Crash / Static Analyzer

[analyzer] Fix a crash on C++17 AST for non-trivial construction into a trivial brace initializer.

https://reviews.llvm.org/D40841

Minor / AST Access

[libclang] Fix cursors for in-class initializer of field declarations

https://reviews.llvm.org/D40027

https://bugs.llvm.org/show_bug.cgi?id=33745

Fixes AST access to initializers of class members. Affects mostly semantic highlighting and highlighting of local uses.

Minor / AST Access

[libclang] Fix cursors for functions with trailing return type

https://reviews.llvm.org/D40561

Minor / AST properties

[libclang] Add support for checking abstractness of records

https://reviews.llvm.org/D40072

Would need https://codereview.qt-project.org/#/c/211497/ on Qt Creator side.

Improves Tooltips

[DeclPrinter] Honor TerseOutput for constructors

https://reviews.llvm.org/D39957

Avoids printing member initialization list and body for constructor.