The preprocessor's handling of diagnostic push/pops is stateful, so encountering pragmas during a re-parse causes problems. HTMLRewrite already filters out normal # directives including #pragma, so it's clear it's not expected to be interpreting pragmas in this mode. This fix adds a flag to Preprocessor to explicitly disable pragmas. The "right" fix might be to separate pragma lexing from pragma parsing so that we can throw away pragmas like we do preprocessor directives, but right now it's important to get the fix in. Note that this has nothing to do with the "hack" of re-using the input preprocessor in HTMLRewrite. Even if we someday copy the preprocessor instead of re-using it, the copy would (and should) include the diagnostic level tables and have the same problems. llvm-svn: 158214
27 lines
609 B
C
27 lines
609 B
C
// RUN: %clang_cc1 %s -emit-html -o -
|
|
|
|
// rdar://6562329
|
|
#line 42 "foo.c"
|
|
|
|
// PR3635
|
|
#define F(fmt, ...) fmt, ## __VA_ARGS__
|
|
int main(int argc, char **argv) {
|
|
return F(argc, 1);
|
|
}
|
|
|
|
// PR3798
|
|
#define FOR_ALL_FILES(f,i) i
|
|
|
|
#if 0
|
|
FOR_ALL_FILES(f) { }
|
|
#endif
|
|
|
|
// <rdar://problem/11625964>
|
|
// -emit-html filters out # directives, but not _Pragma (or MS __pragma)
|
|
// Diagnostic push/pop is stateful, so re-lexing a file can cause problems
|
|
// if these pragmas are interpreted normally.
|
|
_Pragma("clang diagnostic push")
|
|
_Pragma("clang diagnostic ignored \"-Wformat-extra-args\"")
|
|
_Pragma("clang diagnostic pop")
|
|
|