diff options
| author | Douglas Gregor <dgregor@apple.com> | 2012-01-27 01:47:08 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2012-01-27 01:47:08 +0000 |
| commit | 404cddec1b415a16553b1e4240021d7d0c61a98c (patch) | |
| tree | ba6c4fac8e0c64e1b52e4a8f08f7ec371dd9d27d /clang/test/Modules | |
| parent | 7ba81830ff717736940a48a53508eb3c7e90b32e (diff) | |
| download | bcm5719-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.h | 6 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/category_top.h | 8 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/module.map | 1 | ||||
| -rw-r--r-- | clang/test/Modules/objc-categories.m | 13 |
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]; +} |

