Fix rdar://6814950 - stdint.h isn't "-pedantic -std=c89" clean,

by marking the predefines buffer as a system header.  The problem 
with stdint is that it was getting problems like this:

/Volumes/Projects/cvs/llvm/Debug/lib/clang/1.0/include/stdint.h:43:9: warning: 'long long' is an extension when C99 mode is not enabled
typedef __INT64_TYPE__ int64_t;
        ^
<built-in>:73:29: note: instantiated from:
#define __INT64_TYPE__ long long
                            ^

We correctly silence warnings in system headers, but only if the 
spelling location of the token came from the system header.  This is
designed so that if you use a system macro in your code that you don't
get punished for its definition.  This is all cool except that the 
predefines buffer wasn't considered a system header.

llvm-svn: 69770
This commit is contained in:
Chris Lattner
2009-04-22 03:42:19 +00:00
parent 2dfdb3ea94
commit ed462a8d44
3 changed files with 12 additions and 3 deletions

View File

@@ -417,13 +417,17 @@ bool InitializePreprocessor(Preprocessor &PP,
const PreprocessorInitOptions& InitOpts) {
std::vector<char> PredefineBuffer;
const char *LineDirective = "# 1 \"<built-in>\" 3\n";
PredefineBuffer.insert(PredefineBuffer.end(),
LineDirective, LineDirective+strlen(LineDirective));
// Install things like __POWERPC__, __GNUC__, etc into the macro table.
InitializePredefinedMacros(PP.getTargetInfo(), PP.getLangOptions(),
PredefineBuffer);
// Add on the predefines from the driver. Wrap in a #line directive to report
// that they come from the command line.
const char *LineDirective = "# 1 \"<command line>\" 1\n";
LineDirective = "# 1 \"<command line>\" 1\n";
PredefineBuffer.insert(PredefineBuffer.end(),
LineDirective, LineDirective+strlen(LineDirective));
@@ -451,7 +455,7 @@ bool InitializePreprocessor(Preprocessor &PP,
AddImplicitInclude(PredefineBuffer, I->first);
}
LineDirective = "# 2 \"<built-in>\" 2\n";
LineDirective = "# 2 \"<built-in>\" 2 3\n";
PredefineBuffer.insert(PredefineBuffer.end(),
LineDirective, LineDirective+strlen(LineDirective));