[cfe-commits] r156145 - in /cfe/trunk: include/clang/Serialization/ASTReader.h lib/Serialization/ASTReader.cpp lib/Serialization/ASTReaderDecl.cpp test/PCH/objc_methods.h
Argyrios Kyrtzidis
kyrtzidis at apple.com
Fri May 4 11:18:51 PDT 2012
On May 3, 2012, at 8:32 PM, Chris Lattner wrote:
>
> On May 3, 2012, at 6:49 PM, Argyrios Kyrtzidis wrote:
>
>> Author: akirtzidis
>> Date: Thu May 3 20:49:36 2012
>> New Revision: 156145
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=156145&view=rev
>> Log:
>> [PCH] Really, pinky swear, fix for PR12689
>
> DenseMap?
In r156185, thanks for reviewing!
>
> -Chris
>
>>
>> rdar://11353109
>>
>> Modified:
>> cfe/trunk/include/clang/Serialization/ASTReader.h
>> cfe/trunk/lib/Serialization/ASTReader.cpp
>> cfe/trunk/lib/Serialization/ASTReaderDecl.cpp
>> cfe/trunk/test/PCH/objc_methods.h
>>
>> Modified: cfe/trunk/include/clang/Serialization/ASTReader.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTReader.h?rev=156145&r1=156144&r2=156145&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Serialization/ASTReader.h (original)
>> +++ cfe/trunk/include/clang/Serialization/ASTReader.h Thu May 3 20:49:36 2012
>> @@ -597,6 +597,8 @@
>> /// switch statement can refer to them.
>> std::map<unsigned, SwitchCase *> SwitchCaseStmts;
>>
>> + std::map<unsigned, SwitchCase *> *CurrSwitchCaseStmts;
>> +
>> /// \brief The number of stat() calls that hit/missed the stat
>> /// cache.
>> unsigned NumStatHits, NumStatMisses;
>>
>> Modified: cfe/trunk/lib/Serialization/ASTReader.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=156145&r1=156144&r2=156145&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Serialization/ASTReader.cpp (original)
>> +++ cfe/trunk/lib/Serialization/ASTReader.cpp Thu May 3 20:49:36 2012
>> @@ -6248,18 +6248,19 @@
>> /// \brief Record that the given ID maps to the given switch-case
>> /// statement.
>> void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
>> - assert(SwitchCaseStmts[ID] == 0 && "Already have a SwitchCase with this ID");
>> - SwitchCaseStmts[ID] = SC;
>> + assert((*CurrSwitchCaseStmts)[ID] == 0 &&
>> + "Already have a SwitchCase with this ID");
>> + (*CurrSwitchCaseStmts)[ID] = SC;
>> }
>>
>> /// \brief Retrieve the switch-case statement with the given ID.
>> SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
>> - assert(SwitchCaseStmts[ID] != 0 && "No SwitchCase with this ID");
>> - return SwitchCaseStmts[ID];
>> + assert((*CurrSwitchCaseStmts)[ID] != 0 && "No SwitchCase with this ID");
>> + return (*CurrSwitchCaseStmts)[ID];
>> }
>>
>> void ASTReader::ClearSwitchCaseIDs() {
>> - SwitchCaseStmts.clear();
>> + CurrSwitchCaseStmts->clear();
>> }
>>
>> void ASTReader::finishPendingActions() {
>> @@ -6374,7 +6375,8 @@
>> DisableValidation(DisableValidation),
>> DisableStatCache(DisableStatCache),
>> AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
>> - CurrentGeneration(0), NumStatHits(0), NumStatMisses(0),
>> + CurrentGeneration(0), CurrSwitchCaseStmts(&SwitchCaseStmts),
>> + NumStatHits(0), NumStatMisses(0),
>> NumSLocEntriesRead(0), TotalNumSLocEntries(0),
>> NumStatementsRead(0), TotalNumStatements(0), NumMacrosRead(0),
>> TotalNumMacros(0), NumSelectorsRead(0), NumMethodPoolEntriesRead(0),
>>
>> Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderDecl.cpp?rev=156145&r1=156144&r2=156145&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Serialization/ASTReaderDecl.cpp (original)
>> +++ cfe/trunk/lib/Serialization/ASTReaderDecl.cpp Thu May 3 20:49:36 2012
>> @@ -25,6 +25,7 @@
>> #include "clang/AST/DeclCXX.h"
>> #include "clang/AST/DeclTemplate.h"
>> #include "clang/AST/Expr.h"
>> +#include "llvm/Support/SaveAndRestore.h"
>> using namespace clang;
>> using namespace clang::serialization;
>>
>> @@ -629,8 +630,10 @@
>> if (Record[Idx++]) {
>> // In practice, this won't be executed (since method definitions
>> // don't occur in header files).
>> - // Switch case IDs are per method body.
>> - Reader.ClearSwitchCaseIDs();
>> + // Switch case IDs for this method body.
>> + std::map<unsigned, SwitchCase *> SwitchCaseStmtsForObjCMethod;
>> + SaveAndRestore<std::map<unsigned, SwitchCase *> *>
>> + SCFOM(Reader.CurrSwitchCaseStmts, &SwitchCaseStmtsForObjCMethod);
>> MD->setBody(Reader.ReadStmt(F));
>> MD->setSelfDecl(ReadDeclAs<ImplicitParamDecl>(Record, Idx));
>> MD->setCmdDecl(ReadDeclAs<ImplicitParamDecl>(Record, Idx));
>>
>> Modified: cfe/trunk/test/PCH/objc_methods.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/PCH/objc_methods.h?rev=156145&r1=156144&r2=156145&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/PCH/objc_methods.h (original)
>> +++ cfe/trunk/test/PCH/objc_methods.h Thu May 3 20:49:36 2012
>> @@ -25,3 +25,17 @@
>> }
>> }
>> @end
>> +
>> + at interface PR12689_2
>> + at end
>> +
>> + at implementation PR12689_2
>> +-(void)mugi:(int)x {
>> + switch(x) {
>> + case 23: [self bonk:x]; break;
>> + case 82: break;
>> + }
>> +}
>> +-(void)bonk:(int)x {
>> +}
>> + at end
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
More information about the cfe-commits
mailing list