[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