[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
This commit is contained in:
Bruno Cardoso Lopes 2016-10-28 02:30:45 +00:00
parent 58fbc916a0
commit 0ac158a528
6 changed files with 46 additions and 0 deletions

View File

@ -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

View File

@ -0,0 +1,14 @@
#ifndef __my_int
#define __my_int
#include <stdint.h>
#ifdef __cplusplus
extern "C"
{
#endif
typedef int_fast32_t myint;
}
#endif

View File

@ -0,0 +1,4 @@
framework module A [extern_c] {
umbrella header "A.h"
export *
}

View File

@ -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 * }
}

View File

@ -0,0 +1,6 @@
#ifndef LIBCXX_STDINT_H
#define LIBCXX_STDINT_H
#include_next "stdint.h"
#endif

View File

@ -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>