From 7216b6bc3834ff5495d887946f0c5369fb5d27ba Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Tue, 22 Nov 2016 20:05:19 +0000 Subject: [PATCH] Attempt to fix stdint/cstdint modules try 2 llvm-svn: 287690 --- libcxx/include/module.modulemap | 9 +++++- .../test/libcxx/modules/cinttypes_exports.sh.cpp | 21 +++++++++++++ libcxx/test/libcxx/modules/cstdint_exports.sh.cpp | 21 +++++++++++++ .../test/libcxx/modules/inttypes_h_exports.sh.cpp | 20 +++++++++++++ libcxx/test/libcxx/modules/stdint_h_exports.sh.cpp | 20 +++++++++++++ libcxx/test/libcxx/test/config.py | 35 +++++++++++----------- 6 files changed, 108 insertions(+), 18 deletions(-) create mode 100644 libcxx/test/libcxx/modules/cinttypes_exports.sh.cpp create mode 100644 libcxx/test/libcxx/modules/cstdint_exports.sh.cpp create mode 100644 libcxx/test/libcxx/modules/inttypes_h_exports.sh.cpp create mode 100644 libcxx/test/libcxx/modules/stdint_h_exports.sh.cpp diff --git a/libcxx/include/module.modulemap b/libcxx/include/module.modulemap index bcf4632d..ce126609 100644 --- a/libcxx/include/module.modulemap +++ b/libcxx/include/module.modulemap @@ -45,7 +45,13 @@ module std [system] { // 's __need_* macros require textual inclusion. textual header "stddef.h" } - // FIXME: 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 { // '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 { diff --git a/libcxx/test/libcxx/modules/cinttypes_exports.sh.cpp b/libcxx/test/libcxx/modules/cinttypes_exports.sh.cpp new file mode 100644 index 0000000..99d20ec --- /dev/null +++ b/libcxx/test/libcxx/modules/cinttypes_exports.sh.cpp @@ -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 re-exports + +// RUN: %build_module + +#include + +int main() { + int8_t x; ((void)x); + std::int8_t y; ((void)y); +} diff --git a/libcxx/test/libcxx/modules/cstdint_exports.sh.cpp b/libcxx/test/libcxx/modules/cstdint_exports.sh.cpp new file mode 100644 index 0000000..8ecc1da --- /dev/null +++ b/libcxx/test/libcxx/modules/cstdint_exports.sh.cpp @@ -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 re-exports + +// RUN: %build_module + +#include + +int main() { + int8_t x; ((void)x); + std::int8_t y; ((void)y); +} diff --git a/libcxx/test/libcxx/modules/inttypes_h_exports.sh.cpp b/libcxx/test/libcxx/modules/inttypes_h_exports.sh.cpp new file mode 100644 index 0000000..d1598d7 --- /dev/null +++ b/libcxx/test/libcxx/modules/inttypes_h_exports.sh.cpp @@ -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 + +int main() { + int8_t x; ((void)x); +} diff --git a/libcxx/test/libcxx/modules/stdint_h_exports.sh.cpp b/libcxx/test/libcxx/modules/stdint_h_exports.sh.cpp new file mode 100644 index 0000000..78e1101 --- /dev/null +++ b/libcxx/test/libcxx/modules/stdint_h_exports.sh.cpp @@ -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 + +int main() { + int8_t x; ((void)x); +} diff --git a/libcxx/test/libcxx/test/config.py b/libcxx/test/libcxx/test/config.py index 7a509d3..4734bf4 100644 --- a/libcxx/test/libcxx/test/config.py +++ b/libcxx/test/libcxx/test/config.py @@ -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)) -- 2.7.4