Author: mren Date: Thu Oct 13 13:42:14 2016 New Revision: 284142 URL: http://llvm.org/viewvc/llvm-project?rev=284142&view=rev Log: 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 Added: cfe/trunk/test/Modules/Inputs/objc-initializer/ cfe/trunk/test/Modules/Inputs/objc-initializer/X.h cfe/trunk/test/Modules/Inputs/objc-initializer/module.modulemap cfe/trunk/test/Modules/objc-initializer.m Modified: cfe/trunk/lib/Sema/SemaDecl.cpp Modified: cfe/trunk/lib/Sema/SemaDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=284142&r1=284141&r2=284142&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaDecl.cpp Thu Oct 13 13:42:14 2016 @@ -10511,7 +10511,13 @@ void Sema::CheckCompleteVariableDeclarat } // 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); Added: cfe/trunk/test/Modules/Inputs/objc-initializer/X.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/objc-initializer/X.h?rev=284142&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/objc-initializer/X.h (added) +++ cfe/trunk/test/Modules/Inputs/objc-initializer/X.h Thu Oct 13 13:42:14 2016 @@ -0,0 +1,3 @@ +@interface NSString +@end +static const NSString * const kSimDeviceIOGetInterface = @"simdeviceio_get_interface"; Added: cfe/trunk/test/Modules/Inputs/objc-initializer/module.modulemap URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/objc-initializer/module.modulemap?rev=284142&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/objc-initializer/module.modulemap (added) +++ cfe/trunk/test/Modules/Inputs/objc-initializer/module.modulemap Thu Oct 13 13:42:14 2016 @@ -0,0 +1,4 @@ +module X { + header "X.h" + export * +} Added: cfe/trunk/test/Modules/objc-initializer.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/objc-initializer.m?rev=284142&view=auto ============================================================================== --- cfe/trunk/test/Modules/objc-initializer.m (added) +++ cfe/trunk/test/Modules/objc-initializer.m Thu Oct 13 13:42:14 2016 @@ -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); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits