summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>2016-10-28 02:30:45 +0000
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>2016-10-28 02:30:45 +0000
commit0ac158a528d3f490af6e4ed5a7d8ff7f878f9baf (patch)
tree01108c93127c66db79880f0d36917a8c340b05ff
parent58fbc916a0a4ad57ec6d3dd1d1a4f0dd7405f69f (diff)
downloadbcm5719-llvm-0ac158a528d3f490af6e4ed5a7d8ff7f878f9baf.tar.gz
bcm5719-llvm-0ac158a528d3f490af6e4ed5a7d8ff7f878f9baf.zip
[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. llvm-svn: 285377
-rw-r--r--clang/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/A.h15
-rw-r--r--clang/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/int.h14
-rw-r--r--clang/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Modules/module.modulemap4
-rw-r--r--clang/test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/module.modulemap3
-rw-r--r--clang/test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/stdint.h6
-rw-r--r--clang/test/Modules/umbrella-header-include-builtin.mm4
6 files changed, 46 insertions, 0 deletions
diff --git a/clang/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/A.h b/clang/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/A.h
new file mode 100644
index 00000000000..2ee00c1129a
--- /dev/null
+++ b/clang/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/A.h
@@ -0,0 +1,15 @@
+#ifndef __my_a
+#define __my_a
+
+#include <A/int.h>
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+typedef int_fast32_t my_a;
+}
+
+#endif
diff --git a/clang/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/int.h b/clang/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/int.h
new file mode 100644
index 00000000000..340315ed9f5
--- /dev/null
+++ b/clang/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Headers/int.h
@@ -0,0 +1,14 @@
+#ifndef __my_int
+#define __my_int
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+typedef int_fast32_t myint;
+}
+
+#endif
diff --git a/clang/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Modules/module.modulemap b/clang/test/Modules/Inputs/libc-libcxx/sysroot/Frameworks/A.framework/Modules/module.modulemap
new file mode 100644
index 00000000000..1e91233a90c
--- /dev/null
+++ b/clang/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/clang/test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/module.modulemap b/clang/test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/module.modulemap
index c352f4a6177..b06142a61a2 100644
--- a/clang/test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/module.modulemap
+++ b/clang/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/clang/test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/stdint.h b/clang/test/Modules/Inputs/libc-libcxx/sysroot/usr/include/c++/v1/stdint.h
new file mode 100644
index 00000000000..7a68441bc3d
--- /dev/null
+++ b/clang/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/clang/test/Modules/umbrella-header-include-builtin.mm b/clang/test/Modules/umbrella-header-include-builtin.mm
new file mode 100644
index 00000000000..09e1cf98e89
--- /dev/null
+++ b/clang/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 <A/A.h>
OpenPOWER on IntegriCloud