mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-19 11:26:44 +00:00

internal lexing steps in the preprocessor. It is not safe to use the preprocessor's token lookahead except when operating on the final sequence of tokens that would be produced by phase 4 of translation. Doing so corrupts the token lookahead cache used by the parser. (See added testcase for an example.) Lookahead should instead be viewed as a layer on top of the normal lexer. Added assertions to catch any further incorrect uses of lookahead within lexing actions. llvm-svn: 358230
23 lines
572 B
C++
23 lines
572 B
C++
// RUN: %clang_cc1 %s -verify -Wconversion
|
|
|
|
#define P(X) _Pragma(#X)
|
|
#define V(X) X
|
|
|
|
#define X \
|
|
P(clang diagnostic push) \
|
|
P(clang diagnostic ignored "-Wconversion") \
|
|
) = 1.2; \
|
|
P(clang diagnostic pop)
|
|
|
|
void f() {
|
|
int a = 1.2; // expected-warning {{changes value}}
|
|
|
|
// Note, we intentionally enter a tentatively-parsed context here to trigger
|
|
// regular use of lookahead. This would go wrong if _Pragma checking in macro
|
|
// argument pre-expansion also tries to use token lookahead.
|
|
int (b
|
|
V(X)
|
|
|
|
int c = 1.2; // expected-warning {{changes value}}
|
|
}
|