diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-04-10 23:10:45 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-04-10 23:10:45 +0000 |
commit | e1d918e9fe55e3b34401fd5d420c47ea0f9572c9 (patch) | |
tree | 6822c3f153c65c33f08ebfb5ee3e1915decacc2a /lib/Sema/SemaDecl.cpp | |
parent | c0c0ef061f2aaf054c7a970f28961097e46661f3 (diff) |
Compare the predefines buffer in the PCH file with the predefines
buffer generated for the current translation unit. If they are
different, complain and then ignore the PCH file. This effectively
checks for all compilation options that somehow would affect
preprocessor state (-D, -U, -include, the dreaded -imacros, etc.).
When we do accept the PCH file, throw away the contents of the
predefines buffer rather than parsing them, since all of the results
of that parsing are already stored in the PCH file. This eliminates
the ugliness with the redefinition of __builtin_va_list, among other
things.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68838 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDecl.cpp')
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 16 |
1 files changed, 0 insertions, 16 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 4f87b48eff..474c1e490e 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -524,22 +524,6 @@ bool Sema::MergeTypeDefDecl(TypedefDecl *New, Decl *OldD) { return false; } - // __builtin_va_list gets redeclared in the built-in definitions - // buffer when using PCH. Don't complain about such redefinitions. - // - // FIXME: The problem here is that the __builtin_va_list declaration - // comes in as target-specific text in the predefines buffer, both - // in the generation of the PCH file and in the source file. Thus, - // we end up with two typedefs for the same type, which is an error - // in C. Our hackish solution is to allow redundant typedefs *to the - // same type* if the types are defined in the predefined buffer. We - // would like to eliminate this ugliness, perhaps by making - // __builtin_va_list a real, Sema-supplied declaration rather than - // putting its text into the predefines buffer. - if (Context.getExternalSource() && - strcmp(SourceMgr.getBufferName(New->getLocation()), "<built-in>") == 0) - return false; - Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName(); Diag(Old->getLocation(), diag::note_previous_definition); return true; |