From cd8eb659613c528a9f0d0607f0297d46ba3eaf61 Mon Sep 17 00:00:00 2001 From: Bruno Cardoso Lopes Date: Fri, 28 Oct 2016 02:30:45 +0000 Subject: [PATCH] [Modules] Add testcase for builtins used in umbrella headers This used to work before r284797 + r285152, which exposed something interesting; some users include builtins from umbrella headers. Clang should emit a warning to warn users this is not a good practice and umbrella headers shouldn't get the implicitly-add-the-builtin-version behavior for builtin header names. While we're not there, add the testcase to represent the way it currently works. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@285377 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../sysroot/Frameworks/A.framework/Headers/A.h | 15 +++++++++++++++ .../sysroot/Frameworks/A.framework/Headers/int.h | 14 ++++++++++++++ .../A.framework/Modules/module.modulemap | 4 ++++ .../sysroot/usr/include/c++/v1/module.modulemap | 3 +++ .../sysroot/usr/include/c++/v1/stdint.h | 6 ++++++ test/Modules/umbrella-header-include-builtin.mm | 4 ++++ 6 files changed, 46 insertions(+) create mode 100644 test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/A.h create mode 100644 test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/int.h create mode 100644 test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Modules/module.modulemap create mode 100644 test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/stdint.h create mode 100644 test/Modules/umbrella-header-include-builtin.mm diff --git a/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/A.h b/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/A.h new file mode 100644 index 0000000000..2ee00c1129 --- /dev/null +++ b/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/A.h @@ -0,0 +1,15 @@ +#ifndef __my_a +#define __my_a + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +typedef int_fast32_t my_a; +} + +#endif diff --git a/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/int.h b/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/int.h new file mode 100644 index 0000000000..340315ed9f --- /dev/null +++ b/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/int.h @@ -0,0 +1,14 @@ +#ifndef __my_int +#define __my_int + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +typedef int_fast32_t myint; +} + +#endif diff --git a/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Modules/module.modulemap b/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Modules/module.modulemap new file mode 100644 index 0000000000..1e91233a90 --- /dev/null +++ b/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Modules/module.modulemap @@ -0,0 +1,4 @@ +framework module A [extern_c] { + umbrella header "A.h" + export * +} diff --git a/test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/module.modulemap b/test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/module.modulemap index c352f4a617..b06142a61a 100644 --- a/test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/module.modulemap +++ b/test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/module.modulemap @@ -3,5 +3,8 @@ module "libc++" { module stdlib { header "stdlib.h" export * } module stddef { header "stddef.h" export * } module stdio { textual header "stdio.h" export * } + // FIXME: remove "textual" from stdint module below once the issue + // between umbrella headers and builtins is resolved. + module stdint { textual header "stdint.h" export * } module __config { header "__config" export * } } diff --git a/test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/stdint.h b/test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/stdint.h new file mode 100644 index 0000000000..7a68441bc3 --- /dev/null +++ b/test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/stdint.h @@ -0,0 +1,6 @@ +#ifndef LIBCXX_STDINT_H +#define LIBCXX_STDINT_H + +#include_next "stdint.h" + +#endif diff --git a/test/Modules/umbrella-header-include-builtin.mm b/test/Modules/umbrella-header-include-builtin.mm new file mode 100644 index 0000000000..09e1cf98e8 --- /dev/null +++ b/test/Modules/umbrella-header-include-builtin.mm @@ -0,0 +1,4 @@ +// RUN: rm -rf %t +// RUN: %clang -cc1 -fsyntax-only -nostdinc++ -isysroot %S/Inputs/libc-libcxx/sysroot -isystem %S/Inputs/libc-libcxx/sysroot/usr/include/c++/v1 -F%S/Inputs/libc-libcxx/sysroot/Frameworks -std=c++11 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -x objective-c++ %s + +#include -- 2.40.0