summaryrefslogtreecommitdiffstats
path: root/clang/test/Modules
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2012-01-27 01:47:08 +0000
committerDouglas Gregor <dgregor@apple.com>2012-01-27 01:47:08 +0000
commit404cddec1b415a16553b1e4240021d7d0c61a98c (patch)
treeba6c4fac8e0c64e1b52e4a8f08f7ec371dd9d27d /clang/test/Modules
parent7ba81830ff717736940a48a53508eb3c7e90b32e (diff)
downloadbcm5719-llvm-404cddec1b415a16553b1e4240021d7d0c61a98c.tar.gz
bcm5719-llvm-404cddec1b415a16553b1e4240021d7d0c61a98c.zip
Reimplement (de-)serialization of Objective-C categories to eliminate
the direct serialization of the linked-list structure. Instead, use a scheme similar to how we handle redeclarations, with redeclaration lists on the side. This addresses several issues: - In cases involving mixing and matching of many categories across many modules, the linked-list structure would not be consistent across different modules, and categories would get lost. - If a module is loaded after the class definition and its other categories have already been loaded, we wouldn't see any categories in the newly-loaded module. llvm-svn: 149112
Diffstat (limited to 'clang/test/Modules')
-rw-r--r--clang/test/Modules/Inputs/category_other.h6
-rw-r--r--clang/test/Modules/Inputs/category_top.h8
-rw-r--r--clang/test/Modules/Inputs/module.map1
-rw-r--r--clang/test/Modules/objc-categories.m13
4 files changed, 28 insertions, 0 deletions
diff --git a/clang/test/Modules/Inputs/category_other.h b/clang/test/Modules/Inputs/category_other.h
new file mode 100644
index 00000000000..2c3f4794c2a
--- /dev/null
+++ b/clang/test/Modules/Inputs/category_other.h
@@ -0,0 +1,6 @@
+@import category_top;
+
+@interface Foo(Other)
+-(void)other;
+@end
+
diff --git a/clang/test/Modules/Inputs/category_top.h b/clang/test/Modules/Inputs/category_top.h
index df6a6d33686..c9558b6c295 100644
--- a/clang/test/Modules/Inputs/category_top.h
+++ b/clang/test/Modules/Inputs/category_top.h
@@ -4,3 +4,11 @@
@interface Foo(Top)
-(void)top;
@end
+
+@interface Foo(Top2)
+-(void)top2;
+@end
+
+@interface Foo(Top3)
+-(void)top3;
+@end
diff --git a/clang/test/Modules/Inputs/module.map b/clang/test/Modules/Inputs/module.map
index e09073f818c..58dafca0977 100644
--- a/clang/test/Modules/Inputs/module.map
+++ b/clang/test/Modules/Inputs/module.map
@@ -33,6 +33,7 @@ module category_bottom {
export category_left
export category_right
}
+module category_other { header "category_other.h" }
module redeclarations_left { header "redeclarations_left.h" }
module redeclarations_right { header "redeclarations_right.h" }
module load_failure { header "load_failure.h" }
diff --git a/clang/test/Modules/objc-categories.m b/clang/test/Modules/objc-categories.m
index 2bb07aadc4c..a8f8fb3d049 100644
--- a/clang/test/Modules/objc-categories.m
+++ b/clang/test/Modules/objc-categories.m
@@ -3,11 +3,14 @@
// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t -x objective-c -fmodule-name=category_left -emit-module %S/Inputs/module.map
// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t -x objective-c -fmodule-name=category_right -emit-module %S/Inputs/module.map
// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t -x objective-c -fmodule-name=category_bottom -emit-module %S/Inputs/module.map
+// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t -x objective-c -fmodule-name=category_other -emit-module %S/Inputs/module.map
// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t %s -verify
@import category_bottom;
+
+
// in category_left.h: expected-note {{previous definition}}
@interface Foo(Source)
@@ -21,7 +24,17 @@ void test(Foo *foo, LeftFoo *leftFoo) {
[foo right1];
[foo right2];
[foo top];
+ [foo top2];
+ [foo top3];
[leftFoo left];
[leftFoo bottom];
}
+
+// Load another module that also adds categories to Foo, verify that
+// we see those categories.
+@import category_other;
+
+void test_other(Foo *foo) {
+ [foo other];
+}
OpenPOWER on IntegriCloud