summaryrefslogtreecommitdiffstats
path: root/clang/lib/Frontend/TextDiagnosticPrinter.cpp
Commit message (Collapse)AuthorAgeFilesLines
* diagnose invalid values of -ftabstop, patch by Christian Adaker!Chris Lattner2010-01-131-2/+4
| | | | llvm-svn: 93288
* implement -ftabstop=width, patch by Christian AdåkerChris Lattner2010-01-091-2/+3
| | | | llvm-svn: 93078
* Fix an off by one in findEndOfWord, which could scan past the end of the ↵Daniel Dunbar2009-12-061-4/+9
| | | | | | string in a corner case. llvm-svn: 90703
* Remove 'LangOpts' from Diagnostic (added in ↵Steve Naroff2009-12-051-3/+1
| | | | | | | | | | http://llvm.org/viewvc/llvm-project?view=rev&revision=90642). Simply use the 'LangOpts' member already present in TextDiagnosticPrinter. Sorry for the confusion! llvm-svn: 90664
* Integrate the following from the 'objective-rewrite' branch:Steve Naroff2009-12-051-5/+13
| | | | | | | | | | | | http://llvm.org/viewvc/llvm-project?view=rev&revision=71086 Note - This commit only includes the fix for: <rdar://problem/6309338> slightly different error message format for Visual Studio. The fix for <rdar://problem/6845623> from protocol to template. is separate/forthcoming. llvm-svn: 90642
* Use PresumedLoc when emitting the 'included from' diagnostics. For a malformedChris Lattner2009-12-041-6/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | test like this: #line 4 "foo" #define XX ? #if XX #endif We now emit: In file included from t.c:7: foo:7:5: error: invalid token at start of a preprocessor expression #if XX ^ foo:5:12: note: instantiated from: #define XX ? ^ instead of: In file included from t.c:7: foo:7:5: error: invalid token at start of a preprocessor expression #if XX ^ ./t.h:6:12: note: instantiated from: #define XX ? ^ (where the note doesn't obey #line or print the include stack when needed). This fixes PR5617 llvm-svn: 90554
* Allow TextDiagnosticPrinter to have optional ownership of its output stream.Daniel Dunbar2009-11-111-2/+9
| | | | llvm-svn: 86823
* Replace DiagnosticClient::setLangOptions with {Begin,End}SourceFile, and clarifyDaniel Dunbar2009-11-051-0/+1
| | | | | | | invariants (diagnostics with source informations must occur between {Begin,End}SourceFile). llvm-svn: 86113
* Factor out a diagnostic options class.Daniel Dunbar2009-11-041-24/+31
| | | | llvm-svn: 86010
* Workaround a bug exposed by the FileCheckify of message-length.c, the caret endDaniel Dunbar2009-10-191-0/+6
| | | | | | | | | column computation isn't correct and could exceed the line length, which resulted in a buffer overflow later. - Chris, is there a better way for this code to compute the final column used by the caret? llvm-svn: 84475
* Remove tabs, and whitespace cleanups.Mike Stump2009-09-091-2/+2
| | | | llvm-svn: 81346
* Remove trailing whitespace.Daniel Dunbar2009-09-071-68/+68
| | | | llvm-svn: 81169
* Minor tweak to -fdiagnostics-print-source-range-info to make it printChris Lattner2009-06-151-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ranges more similar to the console output. Consider: #define FOO(X, Y) X/ Y void foo(int *P, int *Q) { FOO(P, Q); } Before we emitted: t.c:4:3:{4:3-4:6}{4:3-4:6}: error: invalid operands to binary expression ('int *' and 'int *') FOO(P, Q); ^~~~~~~~~ ... Note that while we underline the macro args that the range info just includes FOO without its macros. This change teaches the printed ranges to include macro args also so that we get: t.c:4:3:{4:3-4:12}{4:3-4:12}: error: invalid operands to binary expression ('int *' and 'int *') FOO(P, Q); ^~~~~~~~~ ... This fixes rdar://6939599 llvm-svn: 73378
* Add ANSI color support for clang.Torok Edwin2009-06-041-1/+55
| | | | llvm-svn: 72855
* "This patch fixes an obvious buffer overrun inDouglas Gregor2009-05-181-2/+2
| | | | | | SelectInterestingSourceRegion()," from Jay Foad! llvm-svn: 72049
* When word-wrapping, be more defensive about a ridiculously small number of ↵Douglas Gregor2009-05-151-2/+4
| | | | | | columns. Fixes <rdar://problem/6892178> llvm-svn: 71870
* Eliminate extra vertical space in Clang diagnosticsDouglas Gregor2009-05-061-21/+3
| | | | llvm-svn: 71066
* Fix rdar://6849429 - -Wunused-value with deeply nested macro expansion ↵Chris Lattner2009-05-051-14/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | generates untraceable warnings The "instantiated from" messages coming from the caret diagnostics system are basically walking the macro expansion tree, emitting each level as it goes. However, it was skipping certain leaves in the tree by skipping up the entire instantiation arm every time it went up one spelling arm. This caused it to miss some things. For example, in this testcase: #define M1(x) x #define M2 1; void foo() { M1(M2) } we now print: /Users/sabre/Desktop/clang-unused-value-macro.c:6:2: warning: expression result unused M1(M2) ^~~~~~ /Users/sabre/Desktop/clang-unused-value-macro.c:6:5: note: instantiated from: M1(M2) ^~ /Users/sabre/Desktop/clang-unused-value-macro.c:3:12: note: instantiated from: #define M2 1; ^ Previously we didn't print the last line, so we never emitted the caret pointing to the 1! Incidentally, the spaces between the lines is really noisy, I think we should reconsider this heuristic (which adds them when the printed code starts too close to the start of the line). The regression test can't use -verify, because -verify doesn't catch notes for macro instantiation history. llvm-svn: 71025
* Simplify the interesting-region code by assimmilating blocks of ↵Douglas Gregor2009-05-041-57/+18
| | | | | | non-whitespace text with each expansion step. It's easier and seems to have better results. llvm-svn: 70833
* Tweak the extraction of the "interesting" part of a source range in two ways: Douglas Gregor2009-05-041-4/+19
| | | | | | | | | 1) First of all, we treat _ as part of an identifier and not as punctuation (oops). 2) Second of all, always make sure that the token that the ^ is pointing at is fully within the "interesting" part of the range. llvm-svn: 70831
* Fix an infinite loop in diagnostic printing.Daniel Dunbar2009-05-031-7/+5
| | | | | | | | | | - The diagnostic is still poor, however. Doug, can you investigate? - Improved the test case to not depend on the file name, now it can be extended to actually check the formatting of the diagnostics (I'm hoping grep -A is portable here). llvm-svn: 70807
* Fix crash in source-line truncation code for diagnosticDouglas Gregor2009-05-031-2/+3
| | | | | | | printing. Also, when we only need to truncate the line at the end, make sure there is room for the ellipsis. llvm-svn: 70781
* temporary hack to work around PR4128Chris Lattner2009-05-031-1/+1
| | | | llvm-svn: 70681
* When a fix-it hint would span multiple lines, don't print it; half aDouglas Gregor2009-05-031-0/+21
| | | | | | | | | fix-it hint is much worse than no fix-it hint. (Fixes PR4084). When we need to truncate a source line to fix in the terminal, make sure to take the width of the fix-it information into account, too. llvm-svn: 70656
* When we truncate a source line to fit it within the terminal width,Douglas Gregor2009-05-031-5/+6
| | | | | | | | | | | | show an ellipsis where we have removed text. An example: /Users/dgregor/Projects/llvm/tools/clang/test/Misc/message-length.c:18:120: warning: comparison of distinct pointer types ('int *' and 'float *') ...a_func_to_call(ip == FloatPointer, ip[ALongIndexName], ... ~~ ^ ~~~~~~~~~~~~ llvm-svn: 70655
* Respect the COLUMNS environment variable for word-wrapping (so we getDouglas Gregor2009-05-031-1/+2
| | | | | | | | | | | word-wrapping by default in Emacs; yay!). Thanks, Daniel. Use LLVM's System layer rather than calling isatty() directly. Fix a thinko in printing the indentation string that was causing some weird output. llvm-svn: 70654
* When printing a source line as part of a diagnostic, the source lineDouglas Gregor2009-05-011-35/+180
| | | | | | | | | | | | | | | | | | | | | | | | might be wider than we're supposed to print. In this case, we try to select the "important" subregion of the source line, which contains everything that we want to show (e.g., with underlining and the caret itself) and tries to also contain some of the context. From the fantastically long line in the test case, we get an error message that slices down to this: message-length.c:18:120: warning: comparison of distinct pointer types ('int *' and 'float *') a_func_to_call(ip == FloatPointer, ip[ALongIndexName], ~~ ^ ~~~~~~~~~~~~ There are a bunch of gee-it-sounds-good heuristics in here, which seem to do well on the various simple tests I've thrown at it. However, we're going to need to look at a bunch more diagnostics to tweak these heuristics. This is the second part of <rdar://problem/6711348>. Almost there! llvm-svn: 70597
* Implement -fmessage-length=N, which word-wraps diagnostics to N columns. Douglas Gregor2009-05-011-7/+211
| | | | | | | | | | | | | | | | | | | | | | | | | | Also, put a line of whitespace between the diagnostic and the source code/caret line when the start of the actual source code text lines up (or nearly lines up) with the most recent line of the diagnostic. For example, here it's okay for the last line of the diagnostic to be (vertically) next to the source line, because there is horizontal whitespace to separate them: decl-expr-ambiguity.cpp:12:16: error: function-style cast to a builtin type can only take one argument typeof(int)(a,5)<<a; However, here is a case where we need the vertical separation (since there is no horizontal separation): message-length.c:10:46: warning: incompatible pointer types initializing 'void (int, float, char, float)', expected 'int (*)(int, float, short, float)' int (*fp1)(int, float, short, float) = f; This is part one of <rdar://problem/6711348>. llvm-svn: 70578
* In -fdiagnostics-print-source-range-info mode, print a space before theChris Lattner2009-04-281-1/+14
| | | | | | | lines that clang extracts from the source code so that machine parsing can easily ignore them. llvm-svn: 70337
* make "in included from" and "in instatiation from" messages respectChris Lattner2009-04-211-9/+15
| | | | | | -fno-show-location, patch by Alexei Svitkine (PR4024) llvm-svn: 69657
* don't crash on invalid ranges in -fprint-source-range-infoChris Lattner2009-04-191-0/+3
| | | | | | mode, just ignore them as usual. llvm-svn: 69558
* implement compiler support for -fno-diagnostics-fixit-info,Chris Lattner2009-04-191-3/+2
| | | | | | rdar://6805442 llvm-svn: 69525
* tblgen is now passing diagnostic group information in the .inc file, ignore ↵Chris Lattner2009-04-161-1/+1
| | | | | | it everywhere. llvm-svn: 69269
* implement framework for -fdiagnostics-show-option, but tblgen isn'tChris Lattner2009-04-161-0/+5
| | | | | | passing down the right info yet. llvm-svn: 69268
* Change Lexer::MeasureTokenLength to take a LangOptions reference.Chris Lattner2009-04-141-2/+2
| | | | | | | | | | | | | | | | | | This allows it to accurately measure tokens, so that we get: t.cpp:8:13: error: unknown type name 'X' static foo::X P; ~~~~~^ instead of the woefully inferior: t.cpp:8:13: error: unknown type name 'X' static foo::X P; ~~~~ ^ Most of this is just plumbing to push the reference around. llvm-svn: 69099
* implement a new -fprint-source-range-info option, whichChris Lattner2009-03-131-0/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | defaults to off. When enabled, it emits range info along with the file/line/col information for a diagnostic. This allows tools that textually parse the output of clang to know where the ranges are, even if they span multiple lines. For example, with: $ clang exprs.c -fprint-source-range-info We now produce: exprs.c:21:11:{21:12-21:13}: warning: use of unary operator that may be intended as compound assignment (+=) var =+ 5; // expected-warning {{use of unary operator that may be intended as compound assignment (+=)}} ^~ exprs.c:22:11:{22:12-22:13}: warning: use of unary operator that may be intended as compound assignment (-=) var =- 5; // expected-warning {{use of unary operator that may be intended as compound assignment (-=)}} ^~ exprs.c:36:13:{36:3-36:12}: error: assignment to cast is illegal, lvalue casts are not supported (float*)X = P; // expected-error {{assignment to cast is illegal, lvalue casts are not supported}} ~~~~~~~~~ ^ exprs.c:41:4:{41:3-41:4}: error: called object type 'int' is not a function or function pointer X(); // expected-error {{called object type 'int' is not a function or function pointer}} ~^ exprs.c:45:15:{45:8-45:14}{45:17-45:24}: error: invalid operands to binary expression ('int *' and '_Complex float') P = (P-42) + Gamma*4; // expected-error {{invalid operands to binary expression ('int *' and '_Complex float')}} ~~~~~~ ^ ~~~~~~~ exprs.c:61:7:{61:16-61:22}: error: invalid application of '__alignof' to bitfield R = __alignof(P->x); // expected-error {{invalid application of '__alignof' to bitfield}} expected-warning {{extension used}} ^ ~~~~~~ Note the range info after the column in the initial diagnostic. This is obviously really annoying if you're not a tool parsing the output of clang, which is why it is off by default. llvm-svn: 66862
* Extend the notion of active template instantiations to include theDouglas Gregor2009-03-101-4/+8
| | | | | | | | | | | | context of a template-id for which we need to instantiate default template arguments. In the TextDiagnosticPrinter, don't suppress the caret diagnostic if we are producing a non-note diagnostic that follows a note diagnostic with the same location, because notes are (conceptually) a part of the warning or error that comes before them. llvm-svn: 66572
* generalize the "end of line" checking logic to stop at any \0 at theChris Lattner2009-03-081-3/+1
| | | | | | | | | end of line instead of just the end of buffer. Scratch buffers contain embedded \0's between tokens which are logic line separators. If a normal text buffer contains \0's, it doesn't make a lot of sense to include them in the caret diag output anyway. llvm-svn: 66374
* fix PR2639Chris Lattner2009-03-021-1/+1
| | | | llvm-svn: 65869
* Rename lib/Driver (etc) to lib/Frontend in prep for the *actual*Daniel Dunbar2009-03-021-0/+315
driver taking lib/Driver. llvm-svn: 65811
OpenPOWER on IntegriCloud