r284142 - Module: emit initializers for C/ObjC after r276159.

Manman Ren via cfe-commits cfe-commits at lists.llvm.org
Thu Oct 13 11:42:14 PDT 2016


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 @@
+ at interface NSString
+ at 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);
+}




More information about the cfe-commits mailing list