blob: c072b7e75ab8b926332bd2d022ac88dad71262d2 [file] [log] [blame]
Richard Smith77944862014-03-02 05:58:18 +00001// RUN: rm -rf %t
Richard Smith47972af2015-06-16 00:08:24 +00002// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s
3// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DEXTERN_C
4// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DEXTERN_CXX
5// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DEXTERN_C -DEXTERN_CXX
6// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DEXTERN_C -DNAMESPACE
7// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER
8// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER -DEXTERN_C
9// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER -DEXTERN_CXX
10// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER -DEXTERN_C -DEXTERN_CXX
11// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER -DEXTERN_C -DNAMESPACE
Richard Smithe69bdd12015-10-13 00:39:40 +000012// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER -DEXTERN_C -DNO_EXTERN_C_ERROR -Wno-module-import-in-extern-c
13// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER -DEXTERN_C -DNAMESPACE -DNO_EXTERN_C_ERROR -Wno-module-import-in-extern-c
Richard Smith47972af2015-06-16 00:08:24 +000014// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs -x c %s
15// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs/elsewhere -I %S/Inputs %s -DEXTERN_C -DINDIRECT
Richard Smith9bca2982014-03-08 00:03:56 +000016
17#ifdef INDIRECT
18#include "c-header-indirect.h"
19#endif
Richard Smith77944862014-03-02 05:58:18 +000020
21#ifdef NAMESPACE
22namespace M {
23#endif
24
25#ifdef EXTERN_C
26extern "C" {
27#endif
28
29#ifdef EXTERN_CXX
30extern "C++" {
31#endif
32
33#ifdef CXX_HEADER
34#define HEADER "cxx-header.h"
35#else
36#define HEADER "c-header.h"
37#endif
38
39#include HEADER
40
Richard Smithe69bdd12015-10-13 00:39:40 +000041#if defined(NAMESPACE)
42// expected-error-re@-3 {{import of module '{{c_library.inner|cxx_library}}' appears within namespace 'M'}}
43// expected-note@-21 {{namespace 'M' begins here}}
44#elif defined(EXTERN_C) && !defined(EXTERN_CXX) && defined(CXX_HEADER) && !defined(NO_EXTERN_C_ERROR)
45// expected-error@-6 {{import of C++ module 'cxx_library' appears within extern "C" language linkage specification}}
46// expected-note@-20 {{extern "C" language linkage specification begins here}}
Richard Smith77944862014-03-02 05:58:18 +000047#endif
48
49#ifdef EXTERN_CXX
50}
51#endif
52
53#ifdef EXTERN_C
54}
55#endif
56
57#ifdef NAMESPACE
58}
59using namespace M;
60#endif
61
Richard Smith9bca2982014-03-08 00:03:56 +000062#ifdef __cplusplus
Richard Smith77944862014-03-02 05:58:18 +000063namespace N {
Richard Smith9bca2982014-03-08 00:03:56 +000064#endif
65 void g() {
66 int k = f();
67 }
Richard Smith77944862014-03-02 05:58:18 +000068
Richard Smith9bca2982014-03-08 00:03:56 +000069#ifdef __cplusplus
Richard Smith77944862014-03-02 05:58:18 +000070 extern "C" {
Richard Smith9bca2982014-03-08 00:03:56 +000071#endif
Richard Smith77944862014-03-02 05:58:18 +000072 int f;
Serge Pavlovc4e04a22015-09-19 05:32:57 +000073#if !defined(CXX_HEADER) && !defined(NAMESPACE)
Richard Smith77944862014-03-02 05:58:18 +000074 // expected-error@-2 {{redefinition of 'f' as different kind of symbol}}
75 // expected-note@c-header.h:1 {{previous}}
76#endif
Richard Smith9bca2982014-03-08 00:03:56 +000077
78#ifdef __cplusplus
Richard Smith77944862014-03-02 05:58:18 +000079 }
80}
Richard Smith9bca2982014-03-08 00:03:56 +000081#endif
Richard Smith77944862014-03-02 05:58:18 +000082
Serge Pavlovc4e04a22015-09-19 05:32:57 +000083#if !defined(NAMESPACE)
Richard Smith9bca2982014-03-08 00:03:56 +000084suppress_expected_no_diagnostics_error error_here; // expected-error {{}}
Serge Pavlovc4e04a22015-09-19 05:32:57 +000085#endif