diff options
| author | Manman Ren <manman.ren@gmail.com> | 2016-10-13 18:42:14 +0000 |
|---|---|---|
| committer | Manman Ren <manman.ren@gmail.com> | 2016-10-13 18:42:14 +0000 |
| commit | aa0178e57a43cd093d5f2b9e8e0bfd99af8c09b1 (patch) | |
| tree | 0af816472ebff9cf4071ac4c99381145bb2edad8 /clang | |
| parent | 0b357ed2abd95162787a4cfb16ba1dc3963a6ba2 (diff) | |
| download | bcm5719-llvm-aa0178e57a43cd093d5f2b9e8e0bfd99af8c09b1.tar.gz bcm5719-llvm-aa0178e57a43cd093d5f2b9e8e0bfd99af8c09b1.zip | |
Module: emit initializers for C/ObjC after r276159.
In r276159, we started to defer emitting initializers for VarDecls, but
forgot to add the initializers for non-C++ language.
rdar://28740482
llvm-svn: 284142
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 8 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/objc-initializer/X.h | 3 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/objc-initializer/module.modulemap | 4 | ||||
| -rw-r--r-- | clang/test/Modules/objc-initializer.m | 9 |
4 files changed, 23 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 7baa85a6464..f3c85c33771 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -10511,7 +10511,13 @@ void Sema::CheckCompleteVariableDeclaration(VarDecl *var) { } // All the following checks are C++ only. - if (!getLangOpts().CPlusPlus) return; + if (!getLangOpts().CPlusPlus) { + // If this variable must be emitted, add it as an initializer for the + // current module. + if (Context.DeclMustBeEmitted(var) && !ModuleScopes.empty()) + Context.addModuleInitializer(ModuleScopes.back().Module, var); + return; + } if (auto *DD = dyn_cast<DecompositionDecl>(var)) CheckCompleteDecompositionDeclaration(DD); diff --git a/clang/test/Modules/Inputs/objc-initializer/X.h b/clang/test/Modules/Inputs/objc-initializer/X.h new file mode 100644 index 00000000000..e7182a89f6b --- /dev/null +++ b/clang/test/Modules/Inputs/objc-initializer/X.h @@ -0,0 +1,3 @@ +@interface NSString +@end +static const NSString * const kSimDeviceIOGetInterface = @"simdeviceio_get_interface"; diff --git a/clang/test/Modules/Inputs/objc-initializer/module.modulemap b/clang/test/Modules/Inputs/objc-initializer/module.modulemap new file mode 100644 index 00000000000..8fe4c92a173 --- /dev/null +++ b/clang/test/Modules/Inputs/objc-initializer/module.modulemap @@ -0,0 +1,4 @@ +module X { + header "X.h" + export * +} diff --git a/clang/test/Modules/objc-initializer.m b/clang/test/Modules/objc-initializer.m new file mode 100644 index 00000000000..90cc1824717 --- /dev/null +++ b/clang/test/Modules/objc-initializer.m @@ -0,0 +1,9 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -I %S/Inputs/objc-initializer %s -emit-llvm -o - -fobjc-arc | FileCheck %s +// CHECK: kSimDeviceIOGetInterface = internal constant {{.*}} bitcast + +#import <X.h> +void test2(const NSString*); +void test() { + test2(kSimDeviceIOGetInterface); +} |

