aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Lex/PPExpressions.cpp
AgeCommit message (Collapse)AuthorFilesLines
2016-09-07Fix some Clang-tidy modernize-use-using and Include What You Use warnings; ↵Eugene Zelenko1-4/+13
other minor fixes. Differential revision: https://reviews.llvm.org/D24115 llvm-svn: 280870
2016-04-16Improve diagnostic for the case when a non-defined function-like macro is usedRichard Smith1-4/+26
in a preprocessor constant expression. llvm-svn: 266495
2016-02-18Remove use of builtin comma operator.Richard Trieu1-2/+4
Cleanup for upcoming Clang warning -Wcomma. No functionality change intended. llvm-svn: 261271
2016-01-19Add -Wexpansion-to-undefined: warn when using `defined` in a macro definition.Nico Weber1-2/+47
[cpp.cond]p4: Prior to evaluation, macro invocations in the list of preprocessing tokens that will become the controlling constant expression are replaced (except for those macro names modified by the 'defined' unary operator), just as in normal text. If the token 'defined' is generated as a result of this replacement process or use of the 'defined' unary operator does not match one of the two specified forms prior to macro replacement, the behavior is undefined. This isn't an idle threat, consider this program: #define FOO #define BAR defined(FOO) #if BAR ... #else ... #endif clang and gcc will pick the #if branch while Visual Studio will take the #else branch. Emit a warning about this undefined behavior. One problem is that this also applies to function-like macros. While the example above can be written like #if defined(FOO) && defined(BAR) #defined HAVE_FOO 1 #else #define HAVE_FOO 0 #endif there is no easy way to rewrite a function-like macro like `#define FOO(x) (defined __foo_##x && __foo_##x)`. Function-like macros like this are used in practice, and compilers seem to not have differing behavior in that case. So this a default-on warning only for object-like macros. For function-like macros, it is an extension warning that only shows up with `-pedantic`. (But it's undefined behavior in both cases.) llvm-svn: 258128
2015-11-14Use %select to merge similar diagnostics. NFCCraig Topper1-2/+2
llvm-svn: 253119
2015-10-04SourceRanges are small and trivially copyable, don't them by reference.Craig Topper1-1/+1
llvm-svn: 249259
2015-06-22Revert r240270 ("Fixed/added namespace ending comments using clang-tidy").Alexander Kornienko1-1/+1
llvm-svn: 240353
2015-06-22Fixed/added namespace ending comments using clang-tidy. NFCAlexander Kornienko1-1/+1
The patch is generated using this command: $ tools/extra/clang-tidy/tool/run-clang-tidy.py -fix \ -checks=-*,llvm-namespace-comment -header-filter='llvm/.*|clang/.*' \ work/llvm/tools/clang To reduce churn, not touching namespaces spanning less than 10 lines. llvm-svn: 240270
2015-05-04Switch PPCallbacks to take the new MacroDefinition instead of ↵Richard Smith1-3/+1
MacroDirective*, in order to preserve full information on module macro expansion. llvm-svn: 236404
2015-05-04Rename MacroDefinition -> MacroDefinitionRecord, ↵Richard Smith1-2/+2
Preprocessor::MacroDefinition -> MacroDefinition. clang::MacroDefinition now models the currently-defined value of a macro. The previous MacroDefinition type, which represented a record of a macro definition directive for a detailed preprocessing record, is now called MacroDefinitionRecord. llvm-svn: 236400
2015-05-02clang-format function definition header. NFC.Yaron Keren1-2/+1
llvm-svn: 236390
2015-04-29[modules] Stop trying to fake up a linear MacroDirective history.Richard Smith1-10/+6
Modules builds fundamentally have a non-linear macro history. In the interest of better source fidelity, represent the macro definition information faithfully: we have a linear macro directive history within each module, and at any point we have a unique "latest" local macro directive and a collection of visible imported directives. This also removes the attendent complexity of attempting to create a correct MacroDirective history (which we got wrong in the general case). No functionality change intended. llvm-svn: 236176
2015-02-24Commit patch for PR19649. Set the correct sign of wide character for ↵Michael Wong1-1/+3
literals based on underlying type of wchar_t. Reviewed: http://reviews.llvm.org/D7559 Patch by Rachel Craig; Test cases by Hubert Tong. llvm-svn: 230333
2014-11-08[c++1z] Support for u8 character literals.Richard Smith1-0/+1
llvm-svn: 221576
2014-10-24Use enumerators instead of hardcoded integers when processing macro names.Serge Pavlov1-1/+1
llvm-svn: 220572
2014-10-13Fix the buildDavid Majnemer1-9/+4
llvm-svn: 219637
2014-07-24Improving the "integer constant too large" diagnostics based on post-commit ↵Aaron Ballman1-4/+3
feedback from Richard Smith. Amends r213657. llvm-svn: 213865
2014-07-22Provide extra information in the "integer constant is too large" diagnostic. ↵Aaron Ballman1-2/+5
This will be used to improve other diagnostics. llvm-svn: 213657
2014-05-21Preprocessor: support defined() with operator names for MS compatibilityAlp Toker1-5/+3
Also flesh out missing tests, improve diagnostic QOI and fix a couple of corner cases found in the process. Fixes PR10606. llvm-svn: 209276
2014-05-17[C++11] Use 'nullptr'. Lex edition.Craig Topper1-2/+2
llvm-svn: 209083
2014-03-14Add two missing entries to the C++11 support page. Bump one relevant diagnosticRichard Smith1-2/+3
(for an integer too large for any signed type) from Warning to ExtWarn -- it's ill-formed in C++11 and C99 onwards, and UB during translation in C89 and C++98. Add diagnostic groups for two relevant diagnostics. llvm-svn: 203974
2013-12-30Switch over more of the parser to err_expectedAlp Toker1-2/+2
Includes a fix for a missing highlight range caused by a ',' typo in the PP diagnostics. llvm-svn: 198252
2013-12-30Cleanup: Switch the preprocessor to err_pp_expected_afterAlp Toker1-1/+2
This is approaching consistency but the PP and Parse categories they still have slightly different wording: def err_pp_expected_after : Error<"missing %1 after %0">; def err_expected_after : Error<"expected %1 after %0">; llvm-svn: 198189
2013-12-24Support and use token kinds as diagnostic argumentsAlp Toker1-3/+3
Introduce proper facilities to render token spellings using the diagnostic formatter. Replaces most of the hard-coded diagnostic messages related to expected tokens, which all shared the same semantics but had to be multiply defined due to variations in token order or quote marks. The associated parser changes are largely mechanical but they expose commonality in whole chunks of the parser that can now be factored away. This commit uses C++11 typed enums along with a speculative legacy fallback until the transition is complete. Requires corresponding changes in LLVM r197895. llvm-svn: 197972
2013-07-26Partially revert r186903.Eli Friedman1-1/+1
It turns out that Plum Hall depends on us not emitting an error on integer literals which fit into long long, but fit into unsigned long long. So C99 conformance requires not conforming to C99. :) llvm-svn: 187172
2013-07-23Integers which are too large should be an error.Eli Friedman1-4/+4
Switch some warnings over to errors which should never have been warnings in the first place. (Also, a minor fix to the preprocessor rules for integer literals while I'm here.) llvm-svn: 186903
2013-07-19Add SourceRange to PPCallbacks::Defined callback.John Thompson1-9/+14
llvm-svn: 186707
2013-03-26[Preprocessor/Modules] Separate the macro directives kinds into their own ↵Argyrios Kyrtzidis1-1/+1
MacroDirective's subclasses. For each macro directive (define, undefine, visibility) have a separate object that gets chained to the macro directive history. This has several benefits: -No need to mutate a MacroDirective when there is a undefine/visibility directive. Stuff like PPMutationListener become unnecessary. -No need to keep extra source locations for the undef/visibility locations for the define directive object (which is the majority of the directives) -Much easier to hide/unhide a section in the macro directive history. -Easier to track the effects of the directives across different submodules. llvm-svn: 178037
2013-03-18PR15539: Record "evaluating if/elif condition" flag in the right placeDavid Blaikie1-0/+2
The previous implementation missed the case where the elif condition was evaluated from the context of an #ifdef that was false causing PR15539. llvm-svn: 177345
2013-02-24[preprocessor] Use MacroDirective in the preprocessor callbacks to make ↵Argyrios Kyrtzidis1-7/+7
available the full information about the macro (e.g if it was imported and where). llvm-svn: 175978
2013-01-31Micro-change: moved a brace for better readabilityAlexander Kornienko1-2/+2
llvm-svn: 174075
2013-01-02s/CPlusPlus0x/CPlusPlus11/gRichard Smith1-1/+1
llvm-svn: 171367
2012-12-08[Preprocessor] Enhance Ifdef/Ifndef/Defined preprocessor callbacks to also passArgyrios Kyrtzidis1-3/+9
a MacroInfo object if the identifier was a macro name. llvm-svn: 169665
2012-12-04Sort all of Clang's files under 'lib', and fix up the broken headersChandler Carruth1-3/+3
uncovered. This required manually correcting all of the incorrect main-module headers I could find, and running the new llvm/utils/sort_includes.py script over the files. I also manually added quite a few missing headers that were uncovered by shuffling the order or moving headers up to be main-module-headers. llvm-svn: 169237
2012-09-24Change the wording of the extension warning fromDmitri Gribenko1-4/+9
> 'long long' is an extension when C99 mode is not enabled to > 'long long' is a C++11 extension while compiling in C++98 mode. llvm-svn: 164545
2012-09-24Small cleanup of literal semantic analysis: hiding 'char *' pointers behindDmitri Gribenko1-2/+1
StringRef makes code cleaner. Also, make the temporary buffer smaller: 512 characters is unreasonably large for integer literals. llvm-svn: 164484
2012-09-20The keywords "true" and "false" shouldn't warn under -Wundef.Eli Friedman1-1/+3
llvm-svn: 164279
2012-03-11Unify naming of LangOptions variable/get function across the Clang stack ↵David Blaikie1-4/+4
(Lex to AST). The member variable is always "LangOpts" and the member function is always "getLangOpts". Reviewed by Chris Lattner llvm-svn: 152536
2012-03-08Add support for cooked forms of user-defined-integer-literal andRichard Smith1-1/+5
user-defined-floating-literal. Support for raw forms of these literals to follow. llvm-svn: 152302
2012-03-06User-defined literals: reject string and character UDLs in all places where theRichard Smith1-0/+4
grammar requires a string-literal and not a user-defined-string-literal. The two constructs are still represented by the same TokenKind, in order to prevent a combinatorial explosion of different kinds of token. A flag on Token tracks whether a ud-suffix is present, in order to prevent clients from needing to look at the token's spelling. llvm-svn: 152098
2012-02-05Basic: import SmallString<> into clang namespaceDylan Noblesmith1-2/+2
(I was going to fix the TODO about DenseMap too, but that would break self-host right now. See PR11922.) llvm-svn: 149799
2012-01-17Remove unreachable code in Clang. (replace with llvm_unreachable where ↵David Blaikie1-2/+0
appropriate or when GCC requires it) llvm-svn: 148292
2011-10-15-Wc++98-compat warnings for the lexer.Richard Smith1-4/+3
This also adds a -Wc++98-compat-pedantic for warning on constructs which would be diagnosed by -std=c++98 -pedantic (that is, it warns even on C++11 features which we enable by default, with no warning, in C++98 mode). llvm-svn: 142034
2011-10-14Add a preprocessor callback that is invoked every time the 'defined'Douglas Gregor1-0/+4
operator is seen, from Jason Haslam! llvm-svn: 141926
2011-09-23Fix missing includes for llvm_unreachableDavid Blaikie1-0/+1
llvm-svn: 140368
2011-09-23Switch assert(0/false) llvm_unreachable.David Blaikie1-1/+1
llvm-svn: 140367
2011-09-04Support code-completion for C++ inline methods and ObjC buffering methods.Argyrios Kyrtzidis1-0/+2
Previously we would cut off the source file buffer at the code-completion point; this impeded code-completion inside C++ inline methods and, recently, with buffering ObjC methods. Have the code-completion inserted into the source buffer so that it can be buffered along with a method body. When we actually hit the code-completion point the cut-off lexing or parsing. Fixes rdar://10056932&8319466 llvm-svn: 139086
2011-08-03A couple fixes for preprocessor expressions:Eli Friedman1-9/+13
1. Be more tolerant of comments in -CC (comment-preserving) mode. We were missing a few cases. 2. Make sure to expand the second FOO in "#if defined FOO FOO". (See also r97253, which addressed the case of "#if defined(FOO FOO".) Fixes PR10286. llvm-svn: 136748
2011-07-27Add support for C++0x unicode string and character literals, from Craig Topper!Douglas Gregor1-4/+12
llvm-svn: 136210
2011-07-23remove unneeded llvm:: namespace qualifiers on some core types now that ↵Chris Lattner1-2/+2
LLVM.h imports them into the clang namespace. llvm-svn: 135852