break testcase over multiple lines to make it easier to read.
[clang.git] / TODO.txt
blob8c27515ae74a99678e89807bb504be254f0a56d8
1 //===---------------------------------------------------------------------===//
2 // Minor random things that can be improved
3 //===---------------------------------------------------------------------===//
4    
5 Warn about "X && 0x1000" saying that the user may mean "X & 0x1000".
6 We should do this for any immediate except zero, so long as it doesn't come 
7 from a macro expansion.  Likewise for ||.
9 //===---------------------------------------------------------------------===//
11 Lexer-related diagnostics should point to the problematic character, not the
12 start of the token.  For example:
14 int y = 0000\
15 00080;
17 diag.c:4:9: error: invalid digit '8' in octal constant
18 int y = 0000\
19         ^
21 should be:
23 diag.c:4:9: error: invalid digit '8' in octal constant
24 00080;
25    ^
27 This specific diagnostic is implemented, but others should be updated.
29 //===---------------------------------------------------------------------===//
31 C++ (checker): For iterators, warn of the use of "iterator++" instead
32   of "++iterator" when when the value returned by operator++(int) is
33   ignored.
35 //===---------------------------------------------------------------------===//
37 We want to keep more source range information in Declarator to help
38 produce better diagnostics. Declarator::getSourceRange() should be
39 implemented to give a range for the whole declarator with all of its
40 specifiers, and DeclaratorChunk::ParamInfo should also have a source
41 range covering the whole parameter, so that an error message like this:
43 overloaded-operator-decl.cpp:37:23: error: parameter of overloaded post-increment operator must have type 'int' (not 'float')
44 X operator++(X&, const float& f); 
45                               ^
46 can be turned into something like this:
48 overloaded-operator-decl.cpp:37:23: error: parameter of overloaded post-increment operator must have type 'int' (not 'float')
49 X operator++(X&, const float& f); 
50   ^              ~~~~~~~~~~~~~~
52 //===---------------------------------------------------------------------===//
54 For terminal output, we should consider limiting the amount of
55 diagnostic text we print once the first error has been
56 encountered. For example, once we have produced an error diagnostic,
57 we should only continue producing diagnostics until we have produced a
58 page full of results (say, 50 lines of text). Beyond that, (1) the
59 remaining errors are likely to be less interesting, and (2) the poor
60 user has to scroll his terminal to find out where things went wrong.
62 //===---------------------------------------------------------------------===//
63 More ideas for code modification hints:
64   - If no member of a given name is found in a class/struct, search through the names of entities that do exist in the class and suggest the closest candidate. e.g., if I write "DS.setTypeSpecType", it would suggest "DS.SetTypeSpecType" (edit distance = 1).
65   - If a class member is defined out-of-line but isn't in the class declaration (and there are no close matches!), provide the option to add an in-class declaration.
66   - Fix-it hints for the inclusion of headers when needed for particular features (e.g., <typeinfo> for typeid)
68 //===---------------------------------------------------------------------===//
70 Options to support:
71    -ftabstop=width
72    -fpreprocessed mode.
73    -nostdinc++
74    -imultilib