summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-05-03 02:26:32 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-05-03 02:26:32 +0000
commit2a5deff59dacc152b7e45d2792198fac4fb9b637 (patch)
tree61fbd552af536ce66351be126df1e739541ee5b8
parent1655aee1e3572a2fee6914e172a13dd0beadf1a3 (diff)
downloadbcm5719-llvm-2a5deff59dacc152b7e45d2792198fac4fb9b637.tar.gz
bcm5719-llvm-2a5deff59dacc152b7e45d2792198fac4fb9b637.zip
[PCH] Clear switch case IDs when deserializing a objc method body.
Fixes rdar://11353109 & http://llvm.org/bugs/show_bug.cgi?id=12689 llvm-svn: 156056
-rw-r--r--clang/lib/Serialization/ASTReaderDecl.cpp2
-rw-r--r--clang/test/PCH/objc_methods.h16
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
OpenPOWER on IntegriCloud