[cfe-commits] r110052 - in /cfe/trunk: include/clang/Frontend/PCHReader.h lib/Frontend/PCHReader.cpp lib/Frontend/PCHWriter.cpp test/PCH/Inputs/chain-decls1.h test/PCH/Inputs/chain-decls2.h test/PCH/chain-decls.c
Sebastian Redl
sebastian.redl at getdesigned.at
Mon Aug 2 11:30:12 PDT 2010
Author: cornedbee
Date: Mon Aug 2 13:30:12 2010
New Revision: 110052
URL: http://llvm.org/viewvc/llvm-project?rev=110052&view=rev
Log:
Query only the latest version of an identifier in the PCH chain. Make sure this version holds the entire declaration chain. This is a much saner solution than trying to merge the info from all elements, and makes redeclarations work properly. Expand the declarations test case to cover more compliated cases.
Modified:
cfe/trunk/include/clang/Frontend/PCHReader.h
cfe/trunk/lib/Frontend/PCHReader.cpp
cfe/trunk/lib/Frontend/PCHWriter.cpp
cfe/trunk/test/PCH/Inputs/chain-decls1.h
cfe/trunk/test/PCH/Inputs/chain-decls2.h
cfe/trunk/test/PCH/chain-decls.c
Modified: cfe/trunk/include/clang/Frontend/PCHReader.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/PCHReader.h?rev=110052&r1=110051&r2=110052&view=diff
==============================================================================
--- cfe/trunk/include/clang/Frontend/PCHReader.h (original)
+++ cfe/trunk/include/clang/Frontend/PCHReader.h Mon Aug 2 13:30:12 2010
@@ -906,12 +906,6 @@
/// \brief Retrieve the macro definition with the given ID.
MacroDefinition *getMacroDefinition(pch::IdentID ID);
- /// \brief Erase the macro that's bound to the given IdentifierInfo.
- void EraseMacro(IdentifierInfo *II);
-
- /// \brief Check if the given macro identifier is built-in.
- bool isBuiltinMacro(IdentifierInfo *II);
-
/// \brief Retrieve the AST context that this PCH reader
/// supplements.
ASTContext *getContext() { return Context; }
Modified: cfe/trunk/lib/Frontend/PCHReader.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHReader.cpp?rev=110052&r1=110051&r2=110052&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/PCHReader.cpp (original)
+++ cfe/trunk/lib/Frontend/PCHReader.cpp Mon Aug 2 13:30:12 2010
@@ -689,9 +689,6 @@
uint32_t Offset = ReadUnalignedLE32(d);
Reader.ReadMacroRecord(Stream, Offset);
DataLen -= 4;
- } else if (II->hasMacroDefinition() && !Reader.isBuiltinMacro(II)) {
- // A previous part of the chain added a macro, but this part #undefed it.
- Reader.EraseMacro(II);
}
// Read all of the declarations visible at global scope with this
@@ -1389,15 +1386,6 @@
return MacroDefinitionsLoaded[ID];
}
-void PCHReader::EraseMacro(IdentifierInfo *II) {
- PP->setMacroInfo(II, 0);
-}
-
-bool PCHReader::isBuiltinMacro(IdentifierInfo *II) {
- assert(II->hasMacroDefinition() && "Identifier is not a macro");
- return PP->getMacroInfo(II)->isBuiltinMacro();
-}
-
/// \brief If we are loading a relocatable PCH file, and the filename is
/// not an absolute path, add the system root to the beginning of the file
/// name.
@@ -3184,12 +3172,11 @@
}
IdentifierInfo* PCHReader::get(const char *NameStart, const char *NameEnd) {
- // Try to find this name within our on-disk hash tables. We need to aggregate
- // the info from all of them.
- IdentifierInfo *II = 0;
+ // Try to find this name within our on-disk hash tables. We start with the
+ // most recent one, since that one contains the most up-to-date info.
for (unsigned I = 0, N = Chain.size(); I != N; ++I) {
PCHIdentifierLookupTable *IdTable
- = (PCHIdentifierLookupTable *)Chain[N - I - 1]->IdentifierLookupTable;
+ = (PCHIdentifierLookupTable *)Chain[I]->IdentifierLookupTable;
if (!IdTable)
continue;
std::pair<const char*, unsigned> Key(NameStart, NameEnd - NameStart);
@@ -3200,9 +3187,9 @@
// Dereferencing the iterator has the effect of building the
// IdentifierInfo node and populating it with the various
// declarations it needs.
- II = *Pos;
+ return *Pos;
}
- return II;
+ return 0;
}
std::pair<ObjCMethodList, ObjCMethodList>
Modified: cfe/trunk/lib/Frontend/PCHWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHWriter.cpp?rev=110052&r1=110051&r2=110052&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/PCHWriter.cpp (original)
+++ cfe/trunk/lib/Frontend/PCHWriter.cpp Mon Aug 2 13:30:12 2010
@@ -1819,8 +1819,7 @@
for (IdentifierResolver::iterator D = IdentifierResolver::begin(II),
DEnd = IdentifierResolver::end();
D != DEnd; ++D)
- if (!Writer.hasChain() || (*D)->getPCHLevel() == 0)
- DataLen += sizeof(pch::DeclID);
+ DataLen += sizeof(pch::DeclID);
}
clang::io::Emit16(Out, DataLen);
// We emit the key length after the data length so that every
@@ -1872,8 +1871,7 @@
for (llvm::SmallVector<Decl *, 16>::reverse_iterator D = Decls.rbegin(),
DEnd = Decls.rend();
D != DEnd; ++D)
- if (!Writer.hasChain() || (*D)->getPCHLevel() == 0)
- clang::io::Emit32(Out, Writer.getDeclID(*D));
+ clang::io::Emit32(Out, Writer.getDeclID(*D));
}
};
} // end anonymous namespace
Modified: cfe/trunk/test/PCH/Inputs/chain-decls1.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/PCH/Inputs/chain-decls1.h?rev=110052&r1=110051&r2=110052&view=diff
==============================================================================
--- cfe/trunk/test/PCH/Inputs/chain-decls1.h (original)
+++ cfe/trunk/test/PCH/Inputs/chain-decls1.h Mon Aug 2 13:30:12 2010
@@ -2,3 +2,10 @@
struct one {};
void two();
+
+void many(int i);
+struct many;
+void many(int j);
+struct many;
+
+void noret();
Modified: cfe/trunk/test/PCH/Inputs/chain-decls2.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/PCH/Inputs/chain-decls2.h?rev=110052&r1=110051&r2=110052&view=diff
==============================================================================
--- cfe/trunk/test/PCH/Inputs/chain-decls2.h (original)
+++ cfe/trunk/test/PCH/Inputs/chain-decls2.h Mon Aug 2 13:30:12 2010
@@ -3,3 +3,10 @@
struct two {};
void one();
struct three {}; // for verification
+
+void many(int k);
+struct many;
+void many(int l);
+struct many {};
+
+void noret() __attribute__((noreturn));
Modified: cfe/trunk/test/PCH/chain-decls.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/PCH/chain-decls.c?rev=110052&r1=110051&r2=110052&view=diff
==============================================================================
--- cfe/trunk/test/PCH/chain-decls.c (original)
+++ cfe/trunk/test/PCH/chain-decls.c Mon Aug 2 13:30:12 2010
@@ -10,7 +10,7 @@
// CHECK: void f();
// CHECK: void g();
-void h() {
+int h() {
f();
g();
@@ -19,4 +19,9 @@
struct two y;
two();
struct three z;
+
+ many(0);
+ struct many m;
+
+ noret();
}
More information about the cfe-commits
mailing list