Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.
Clang-bugs-at-wip-clang-branch: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
AutoSpider (talk | contribs) (Decode HTML entity names) |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
= | {{Cleanup | reason=Auto-imported from ExpressionEngine.}} | ||
[[Category:Tools::Qt Creator:Branches]] | |||
== | == See also == | ||
* | * ClangCodeModel plugin has class CXPrettyPrinter that prints clang-c types in JSON-like format. Use it to debug and feel free to improve this class. | ||
* [[clang hacking notes for wip clang branch|Clang hacking notes]] | |||
==Clang bugs== | == Clang bugs with known workarounds == | ||
* Sometimes diagnostic message have one empty SourceRange, which breaks SourceLocation-based euristic. Example: | |||
<code> | |||
#include <vector> | |||
int main() | |||
{ | |||
std::vector<> a; | |||
return 0; | |||
} | |||
</code> | |||
CXPrettyPrinter reports: | |||
<code> | |||
CXDiagnostic: { | |||
'error: too few template arguments for class template 'vector'' | |||
severity: Error | |||
location: { | |||
file: '/home/sergey/Документы/wip-clang/test_projects/objc_test/main.cpp', | |||
line: 5, | |||
column: 10 | |||
} | |||
category: 'Semantic Issue'; | |||
ranges: [ | |||
{ | |||
file: '', | |||
from: {0, 0},to: {0, 0} | |||
} | |||
] | |||
children: [ | |||
{ | |||
'note: template is declared here' | |||
severity: Note | |||
location: { | |||
file: '/usr/include/c+''/4.6/bits/stl_vector.h', | |||
line: 180, | |||
column: 11 | |||
} | |||
category: 'Semantic Issue'; | |||
ranges: [ | |||
{ | |||
file: '/usr/include/c/4.6/bits/stl_vector.h', | |||
from: {179, 3},to: {179, 65} | |||
} | |||
] | |||
} | |||
] | |||
} | |||
</code> | |||
== Clang bugs == | |||
Links to reported bugs will be attached in future | Links to reported bugs will be attached in future | ||
* inside lambda, clang | * inside lambda, clang doesn't include mutable (non-const) methods of current class even if 'this' was captured by lambda | ||
Bug: http://llvm.org/bugs/show_bug.cgi?id=15085 | |||
See example, completion requested in point marked with '#' sign | |||
<code> | |||
void UnitConsumer::visitChildren() | |||
{ | |||
visitChildren(cursor, [this](const CXCursor &cursor, const CXCursor & /*parent*/) { | |||
if (cursor.kind == CXCursor_FieldDecl) { | |||
# | |||
} | |||
}); | |||
} | |||
</code> | |||
* Clang does not add virtual functions to proposals list | |||
<code> | |||
class Base | |||
{ | |||
public: | |||
virtual void overrideMe(int a); | |||
}; | |||
class Derived : public Base | |||
{ | |||
public: | |||
void # | |||
}; | |||
</code> | |||
* no way to differ method definition and call with qualifier: completion strings and contexts are the same in both cases: http://llvm.org/bugs/show_bug.cgi?id=15745< | * no way to differ method definition and call with qualifier: completion strings and contexts are the same in both cases: http://llvm.org/bugs/show_bug.cgi?id=15745 | ||
<code> | |||
class Foo | |||
{ | |||
public: | |||
void declarable(int a, float b); | |||
}; | |||
void Foo::declarable(int a, float b) | |||
{ | |||
if (a != 1) | |||
Foo::declarable(1, 2.0); | |||
} | |||
</code> | |||
Poor diagnostic for such code if C11 disabled | |||
<code> | |||
enum class EnumScoped | |||
{ | |||
}; | |||
</code> | |||
* when | * clang does not add classes to completion proposals when completing 'foreach' | ||
* | * when declaring variable, variable itself proposed with highest priority. It's error. | ||
* | * Macro completions not added after class keyword | ||
<code> | |||
class CLANG_EXPORT CodeCompletionResult | |||
{ | |||
}; | |||
</code> | |||
* | * Wrong completions inside function-try-block in constructor: http://llvm.org/bugs/show_bug.cgi?id=15660 | ||
<code> | |||
class Class | |||
{ | |||
int a; | |||
int '''c; | |||
public: | |||
Class(int b) try : a(b), c(new int) | |||
{ | |||
} | |||
catch (…) | |||
{ | |||
// no "delete" proposed | |||
} | |||
}; | |||
</code> | |||
''' Completion with nested names lookup not performed for comparison with enum value | |||
<code> | |||
if (lexer.tokenKind() == Token::LeftBrace) { | |||
} | |||
</code> | |||
* | * Value types completions added where thay shouldn't be | ||
<code> | |||
QStringList createClangOptions(CPlusPlus::ProjectFile::Kind language, | |||
CPlusPlus::ProjectPart::CXXExtensions extensions, | |||
CPlusPlus::ProjectPart::, | |||
CPlusPlus::ProjectPart::QtVersion qtVersion, | |||
const QList<QByteArray> &defines, | |||
const QStringList &includePaths, | |||
const QStringList &frameworkPaths); | |||
</code> | |||
* | * C''+11 'override' pseudo-keyword breaks clang_annotateTokens() | ||
<code> | |||
bool init() override; | |||
</code> | |||
* | * Poor completion context recognition in template params | ||
<code> | |||
std::vector<#> myVector; | |||
</code> | |||
* | * Clang doesn't add Informative completion chunk to macro. It better to add macro definition text to informative. | ||
<code> | |||
#define MACRO std::min(left, right) | |||
// Completion proposal "MACRO" doesn't have chunk of kind Informative with text "std::min(left, right)" | |||
</code> | |||
* Completion | * Completion stops after asterisk: | ||
<code> | |||
ButtonsFactory '''ButtonsFactory::ms_instance = 0; | |||
ButtonsFactory*// completion requested here | |||
</code> | |||
* Macro trick used in GLEW library not handled by completion: http://llvm.org/bugs/show_bug.cgi?id=15631 | |||
* | * Completion results for function with optional arguments does not have default argument value: http://llvm.org/bugs/show_bug.cgi?id=14477 | ||
Latest revision as of 16:59, 12 March 2015
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine. Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean. |
See also
- ClangCodeModel plugin has class CXPrettyPrinter that prints clang-c types in JSON-like format. Use it to debug and feel free to improve this class.
- Clang hacking notes
Clang bugs with known workarounds
- Sometimes diagnostic message have one empty SourceRange, which breaks SourceLocation-based euristic. Example:
#include <vector>
int main()
{
std::vector<> a;
return 0;
}
CXPrettyPrinter reports:
CXDiagnostic: {
'error: too few template arguments for class template 'vector''
severity: Error
location: {
file: '/home/sergey/Документы/wip-clang/test_projects/objc_test/main.cpp',
line: 5,
column: 10
}
category: 'Semantic Issue';
ranges: [
{
file: '',
from: {0, 0},to: {0, 0}
}
]
children: [
{
'note: template is declared here'
severity: Note
location: {
file: '/usr/include/c+''/4.6/bits/stl_vector.h',
line: 180,
column: 11
}
category: 'Semantic Issue';
ranges: [
{
file: '/usr/include/c/4.6/bits/stl_vector.h',
from: {179, 3},to: {179, 65}
}
]
}
]
}
Clang bugs
Links to reported bugs will be attached in future
- inside lambda, clang doesn't include mutable (non-const) methods of current class even if 'this' was captured by lambda
Bug: http://llvm.org/bugs/show_bug.cgi?id=15085 See example, completion requested in point marked with '#' sign
void UnitConsumer::visitChildren()
{
visitChildren(cursor, [this](const CXCursor &cursor, const CXCursor & /*parent*/) {
if (cursor.kind == CXCursor_FieldDecl) {
#
}
});
}
- Clang does not add virtual functions to proposals list
class Base
{
public:
virtual void overrideMe(int a);
};
class Derived : public Base
{
public:
void #
};
- no way to differ method definition and call with qualifier: completion strings and contexts are the same in both cases: http://llvm.org/bugs/show_bug.cgi?id=15745
class Foo
{
public:
void declarable(int a, float b);
};
void Foo::declarable(int a, float b)
{
if (a != 1)
Foo::declarable(1, 2.0);
}
Poor diagnostic for such code if C11 disabled
enum class EnumScoped
{
};
- clang does not add classes to completion proposals when completing 'foreach'
- when declaring variable, variable itself proposed with highest priority. It's error.
- Macro completions not added after class keyword
class CLANG_EXPORT CodeCompletionResult
{
};
- Wrong completions inside function-try-block in constructor: http://llvm.org/bugs/show_bug.cgi?id=15660
class Class
{
int a;
int '''c;
public:
Class(int b) try : a(b), c(new int)
{
}
catch (…)
{
// no "delete" proposed
}
};
Completion with nested names lookup not performed for comparison with enum value
if (lexer.tokenKind() == Token::LeftBrace) {
}
- Value types completions added where thay shouldn't be
QStringList createClangOptions(CPlusPlus::ProjectFile::Kind language,
CPlusPlus::ProjectPart::CXXExtensions extensions,
CPlusPlus::ProjectPart::,
CPlusPlus::ProjectPart::QtVersion qtVersion,
const QList<QByteArray> &defines,
const QStringList &includePaths,
const QStringList &frameworkPaths);
- C+11 'override' pseudo-keyword breaks clang_annotateTokens()
bool init() override;
- Poor completion context recognition in template params
std::vector<#> myVector;
- Clang doesn't add Informative completion chunk to macro. It better to add macro definition text to informative.
#define MACRO std::min(left, right)
// Completion proposal "MACRO" doesn't have chunk of kind Informative with text "std::min(left, right)"
- Completion stops after asterisk:
ButtonsFactory '''ButtonsFactory::ms_instance = 0;
ButtonsFactory*// completion requested here
- Macro trick used in GLEW library not handled by completion: http://llvm.org/bugs/show_bug.cgi?id=15631
- Completion results for function with optional arguments does not have default argument value: http://llvm.org/bugs/show_bug.cgi?id=14477