diff options
| -rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 2 | ||||
| -rw-r--r-- | clang/test/PCH/objc_methods.h | 16 | 
2 files changed, 18 insertions, 0 deletions
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 8dd53ee7d20..15aa90b3516 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -629,6 +629,8 @@ void ASTDeclReader::VisitObjCMethodDecl(ObjCMethodDecl *MD) {    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();      MD->setBody(Reader.ReadStmt(F));      MD->setSelfDecl(ReadDeclAs<ImplicitParamDecl>(Record, Idx));      MD->setCmdDecl(ReadDeclAs<ImplicitParamDecl>(Record, Idx)); diff --git a/clang/test/PCH/objc_methods.h b/clang/test/PCH/objc_methods.h index c9b1ad4342c..7b9e22decb6 100644 --- a/clang/test/PCH/objc_methods.h +++ b/clang/test/PCH/objc_methods.h @@ -9,3 +9,19 @@  // FIXME: @compatibility_alias  AliasForTestPCH TestPCH; +// http://llvm.org/PR12689 +@interface PR12689 +@end + +@implementation PR12689 +-(void)mugi:(int)x { +  switch(x) { +    case 23: {} +  } +} +-(void)bonk:(int)x { +  switch(x) { +    case 42: {} +  } +} +@end  | 

