//===---------------------------------------------------------------------===//
// Minor random things that can be improved
//===---------------------------------------------------------------------===//
   

Warn about "X && 0x1000" saying that the user may mean "X & 0x1000".
We should do this for any immediate except zero, so long as it doesn't come 
from a macro expansion.  Likewise for ||.

//===---------------------------------------------------------------------===//

Lexer-related diagnostics should point to the problematic character, not the
start of the token.  For example:

int y = 0000\
00080;

diag.c:4:9: error: invalid digit '8' in octal constant
int y = 0000\
        ^

should be:

diag.c:4:9: error: invalid digit '8' in octal constant
00080;
   ^

This specific diagnostic is implemented, but others should be updated.

//===---------------------------------------------------------------------===//

C++ (checker): For iterators, warn of the use of "iterator++" instead
  of "++iterator" when when the value returned by operator++(int) is
  ignored.

//===---------------------------------------------------------------------===//

We want to keep more source range information in Declarator to help
produce better diagnostics. Declarator::getSourceRange() should be
implemented to give a range for the whole declarator with all of its
specifiers, and DeclaratorChunk::ParamInfo should also have a source
range covering the whole parameter, so that an error message like this:

overloaded-operator-decl.cpp:37:23: error: parameter of overloaded post-increment operator must have type 'int' (not 'float')
X operator++(X&, const float& f); 
                              ^
can be turned into something like this:

overloaded-operator-decl.cpp:37:23: error: parameter of overloaded post-increment operator must have type 'int' (not 'float')
X operator++(X&, const float& f); 
  ^              ~~~~~~~~~~~~~~

//===---------------------------------------------------------------------===//

For terminal output, we should consider limiting the amount of
diagnostic text we print once the first error has been
encountered. For example, once we have produced an error diagnostic,
we should only continue producing diagnostics until we have produced a
page full of results (say, 50 lines of text). Beyond that, (1) the
remaining errors are likely to be less interesting, and (2) the poor
user has to scroll his terminal to find out where things went wrong.

//===---------------------------------------------------------------------===//
More ideas for code modification hints:
  - 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).
  - 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.
  - Fix-it hints for the inclusion of headers when needed for particular features (e.g., <typeinfo> for typeid)

//===---------------------------------------------------------------------===//

Options to support:
   -ftabstop=width
   -fpreprocessed mode.
   -nostdinc++
   -imultilib
