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 >> + >> +@interface PR12689_2 >> +@end >> + >> +@implementation PR12689_2 >> +-(void)mugi:(int)x { >> + switch(x) { >> + case 23: [self bonk:x]; break; >> + case 82: break; >> + } >> +} >> +-(void)bonk:(int)x { >> +} >> +@end >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
