[libcxx] r287690 - Attempt to fix stdint/cstdint modules try 2

Eric Fiselier via cfe-commits cfe-commits at lists.llvm.org
Tue Nov 22 12:05:20 PST 2016


Author: ericwf
Date: Tue Nov 22 14:05:19 2016
New Revision: 287690

URL: http://llvm.org/viewvc/llvm-project?rev=287690&view=rev
Log:
Attempt to fix stdint/cstdint modules try 2

Added:
    libcxx/trunk/test/libcxx/modules/cinttypes_exports.sh.cpp
    libcxx/trunk/test/libcxx/modules/cstdint_exports.sh.cpp
    libcxx/trunk/test/libcxx/modules/inttypes_h_exports.sh.cpp
    libcxx/trunk/test/libcxx/modules/stdint_h_exports.sh.cpp
Modified:
    libcxx/trunk/include/module.modulemap
    libcxx/trunk/test/libcxx/test/config.py

Modified: libcxx/trunk/include/module.modulemap
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/module.modulemap?rev=287690&r1=287689&r2=287690&view=diff
==============================================================================
--- libcxx/trunk/include/module.modulemap (original)
+++ libcxx/trunk/include/module.modulemap Tue Nov 22 14:05:19 2016
@@ -45,7 +45,13 @@ module std [system] {
       // <stddef.h>'s __need_* macros require textual inclusion.
       textual header "stddef.h"
     }
-    // FIXME: <stdint.h> is missing.
+    module stdint_h {
+      header "stdint.h"
+      export *
+      // FIXME: This module only exists on OS X and for some reason the
+      // wildcard above doesn't export it.
+      export Darwin.C.stdint
+    }
     module stdio_h {
       // <stdio.h>'s __need_* macros require textual inclusion.
       textual header "stdio.h"
@@ -158,6 +164,7 @@ module std [system] {
     }
     module cstdint {
       header "cstdint"
+      export depr.stdint_h
       export *
     }
     module cstdio {

Added: libcxx/trunk/test/libcxx/modules/cinttypes_exports.sh.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/modules/cinttypes_exports.sh.cpp?rev=287690&view=auto
==============================================================================
--- libcxx/trunk/test/libcxx/modules/cinttypes_exports.sh.cpp (added)
+++ libcxx/trunk/test/libcxx/modules/cinttypes_exports.sh.cpp Tue Nov 22 14:05:19 2016
@@ -0,0 +1,21 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// REQUIRES: modules-support
+
+// Test that <cinttypes> re-exports <cstdint>
+
+// RUN: %build_module
+
+#include <cinttypes>
+
+int main() {
+  int8_t x; ((void)x);
+  std::int8_t y; ((void)y);
+}

Added: libcxx/trunk/test/libcxx/modules/cstdint_exports.sh.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/modules/cstdint_exports.sh.cpp?rev=287690&view=auto
==============================================================================
--- libcxx/trunk/test/libcxx/modules/cstdint_exports.sh.cpp (added)
+++ libcxx/trunk/test/libcxx/modules/cstdint_exports.sh.cpp Tue Nov 22 14:05:19 2016
@@ -0,0 +1,21 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// REQUIRES: modules-support
+
+// Test that <cstdint> re-exports <stdint.h>
+
+// RUN: %build_module
+
+#include <cstdint>
+
+int main() {
+  int8_t x; ((void)x);
+  std::int8_t y; ((void)y);
+}

Added: libcxx/trunk/test/libcxx/modules/inttypes_h_exports.sh.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/modules/inttypes_h_exports.sh.cpp?rev=287690&view=auto
==============================================================================
--- libcxx/trunk/test/libcxx/modules/inttypes_h_exports.sh.cpp (added)
+++ libcxx/trunk/test/libcxx/modules/inttypes_h_exports.sh.cpp Tue Nov 22 14:05:19 2016
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// REQUIRES: modules-support
+
+// Test that intypes.h re-exports stdint.h
+
+// RUN: %build_module
+
+#include <inttypes.h>
+
+int main() {
+  int8_t x; ((void)x);
+}

Added: libcxx/trunk/test/libcxx/modules/stdint_h_exports.sh.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/modules/stdint_h_exports.sh.cpp?rev=287690&view=auto
==============================================================================
--- libcxx/trunk/test/libcxx/modules/stdint_h_exports.sh.cpp (added)
+++ libcxx/trunk/test/libcxx/modules/stdint_h_exports.sh.cpp Tue Nov 22 14:05:19 2016
@@ -0,0 +1,20 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// REQUIRES: modules-support
+
+// Test that int8_t and the like are exported from stdint.h not inttypes.h
+
+// RUN: %build_module
+
+#include <stdint.h>
+
+int main() {
+  int8_t x; ((void)x);
+}

Modified: libcxx/trunk/test/libcxx/test/config.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/test/config.py?rev=287690&r1=287689&r2=287690&view=diff
==============================================================================
--- libcxx/trunk/test/libcxx/test/config.py (original)
+++ libcxx/trunk/test/libcxx/test/config.py Tue Nov 22 14:05:19 2016
@@ -65,7 +65,8 @@ class Configuration(object):
         self.cxx_library_root = None
         self.cxx_runtime_root = None
         self.abi_library_root = None
-        self.module_cache_path = None
+        self.enable_modules = False
+        self.modules_flags = None
         self.env = {}
         self.use_target = False
         self.use_system_cxx_lib = False
@@ -725,9 +726,12 @@ class Configuration(object):
             self.cxx.compile_flags += ['-O0']
 
     def configure_modules(self):
-        supports_modules = self.cxx.hasCompileFlag('-fmodules')
-        enable_modules = self.get_lit_bool('enable_modules', False)
-        if enable_modules and not supports_modules:
+        modules_flags = ['-fmodules']
+        if platform.system() != 'Darwin':
+            modules_flags += ['-Xclang', '-fmodules-local-submodule-visibility']
+        supports_modules = self.cxx.hasCompileFlag(modules_flags)
+        self.enable_modules = self.get_lit_bool('enable_modules', False)
+        if self.enable_modules and not supports_modules:
             self.lit_config.fatal(
                 '-fmodules is enabled but not supported by the compiler')
         if not supports_modules:
@@ -739,11 +743,11 @@ class Configuration(object):
         if os.path.isdir(module_cache):
             shutil.rmtree(module_cache)
         os.makedirs(module_cache)
-        self.module_cache_path = module_cache
-        if enable_modules:
+        self.modules_flags = modules_flags + \
+            ['-fmodules-cache-path=' + module_cache]
+        if self.enable_modules:
             self.config.available_features.add('-fmodules')
-            self.cxx.compile_flags += ['-fmodules',
-                                       '-fmodules-cache-path=' + module_cache]
+            self.cxx.compile_flags += self.modules_flags
 
     def configure_substitutions(self):
         sub = self.config.substitutions
@@ -759,12 +763,6 @@ class Configuration(object):
         sub.append(('%link_flags', link_flags_str))
         sub.append(('%all_flags', all_flags))
 
-        module_flags = None
-        if not self.module_cache_path is None:
-            module_flags = '-fmodules -fmodules-cache-path=' \
-                           + self.module_cache_path + ' '
-
-
         # Add compile and link shortcuts
         compile_str = (self.cxx.path + ' -o %t.o %s -c ' + flags_str
                        + compile_flags_str)
@@ -774,8 +772,11 @@ class Configuration(object):
         build_str = self.cxx.path + ' -o %t.exe %s ' + all_flags
         sub.append(('%compile', compile_str))
         sub.append(('%link', link_str))
-        if not module_flags is None:
-            sub.append(('%build_module', build_str + ' ' + module_flags))
+        if self.enable_modules:
+            sub.append(('%build_module', build_str))
+        elif self.modules_flags is not None:
+            modules_str = ' '.join(self.modules_flags) + ' '
+            sub.append(('%build_module', build_str + ' ' + modules_str))
         sub.append(('%build', build_str))
         # Configure exec prefix substitutions.
         exec_env_str = 'env ' if len(self.env) != 0 else ''
@@ -788,7 +789,7 @@ class Configuration(object):
         sub.append(('%exec', exec_str))
         # Configure run shortcut
         sub.append(('%run', exec_str + ' %t.exe'))
-        # Configure not program substitions
+        # Configure not program substitutions
         not_py = os.path.join(self.libcxx_src_root, 'utils', 'not', 'not.py')
         not_str = '%s %s' % (sys.executable, not_py)
         sub.append(('not', not_str))




More information about the cfe-commits mailing list