diff options
| author | Eric Fiselier <eric@efcs.ca> | 2016-11-22 20:05:19 +0000 |
|---|---|---|
| committer | Eric Fiselier <eric@efcs.ca> | 2016-11-22 20:05:19 +0000 |
| commit | 7216b6bc3834ff5495d887946f0c5369fb5d27ba (patch) | |
| tree | bbc680109dd253e06e2ea1c09b4afff018c5c386 | |
| parent | 069dd06592104003c934e4aba9533fd30199936c (diff) | |
| download | bcm5719-llvm-7216b6bc3834ff5495d887946f0c5369fb5d27ba.tar.gz bcm5719-llvm-7216b6bc3834ff5495d887946f0c5369fb5d27ba.zip | |
Attempt to fix stdint/cstdint modules try 2
llvm-svn: 287690
| -rw-r--r-- | libcxx/include/module.modulemap | 9 | ||||
| -rw-r--r-- | libcxx/test/libcxx/modules/cinttypes_exports.sh.cpp | 21 | ||||
| -rw-r--r-- | libcxx/test/libcxx/modules/cstdint_exports.sh.cpp | 21 | ||||
| -rw-r--r-- | libcxx/test/libcxx/modules/inttypes_h_exports.sh.cpp | 20 | ||||
| -rw-r--r-- | libcxx/test/libcxx/modules/stdint_h_exports.sh.cpp | 20 | ||||
| -rw-r--r-- | libcxx/test/libcxx/test/config.py | 35 |
6 files changed, 108 insertions, 18 deletions
diff --git a/libcxx/include/module.modulemap b/libcxx/include/module.modulemap index bcf4632d854..ce126609dc0 100644 --- a/libcxx/include/module.modulemap +++ b/libcxx/include/module.modulemap @@ -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 { 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 00000000000..99d20ec6502 --- /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 <cinttypes> re-exports <cstdint> + +// RUN: %build_module + +#include <cinttypes> + +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 00000000000..8ecc1da28f1 --- /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 <cstdint> re-exports <stdint.h> + +// RUN: %build_module + +#include <cstdint> + +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 00000000000..d1598d7eab3 --- /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 <inttypes.h> + +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 00000000000..78e1101383b --- /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 <stdint.h> + +int main() { + int8_t x; ((void)x); +} diff --git a/libcxx/test/libcxx/test/config.py b/libcxx/test/libcxx/test/config.py index 7a509d37b2d..4734bf4b8bb 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)) |

