blob: 7ef4709812917e09463d50e976da95b5eb21c207 [file] [log] [blame]
Richard Smith77944862014-03-02 05:58:18 +00001// RUN: rm -rf %t
2// RUN: %clang_cc1 -fmodules -verify -fmodules-cache-path=%t -I %S/Inputs %s
3// RUN: %clang_cc1 -fmodules -verify -fmodules-cache-path=%t -I %S/Inputs %s -DEXTERN_C
4// RUN: %clang_cc1 -fmodules -verify -fmodules-cache-path=%t -I %S/Inputs %s -DEXTERN_CXX
5// RUN: %clang_cc1 -fmodules -verify -fmodules-cache-path=%t -I %S/Inputs %s -DEXTERN_C -DEXTERN_CXX
6// RUN: %clang_cc1 -fmodules -verify -fmodules-cache-path=%t -I %S/Inputs %s -DEXTERN_C -DNAMESPACE
7// RUN: %clang_cc1 -fmodules -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER
8// RUN: %clang_cc1 -fmodules -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER -DEXTERN_C
9// RUN: %clang_cc1 -fmodules -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER -DEXTERN_CXX
10// RUN: %clang_cc1 -fmodules -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER -DEXTERN_C -DEXTERN_CXX
11// RUN: %clang_cc1 -fmodules -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER -DEXTERN_C -DNAMESPACE
12
13#ifdef NAMESPACE
14namespace M {
15#endif
16
17#ifdef EXTERN_C
18extern "C" {
19#endif
20
21#ifdef EXTERN_CXX
22extern "C++" {
23#endif
24
25#ifdef CXX_HEADER
26#define HEADER "cxx-header.h"
27#else
28#define HEADER "c-header.h"
29#endif
30
31#include HEADER
32
33#if defined(EXTERN_C) && !defined(EXTERN_CXX) && defined(CXX_HEADER)
34// expected-error@-3 {{import of C++ module 'cxx_library' appears within extern "C" language linkage specification}}
35// expected-note@-17 {{extern "C" language linkage specification begins here}}
36#elif defined(NAMESPACE)
37// expected-error-re@-6 {{import of module '{{c_library|cxx_library}}' appears within namespace 'M'}}
38// expected-note@-24 {{namespace 'M' begins here}}
39#endif
40
41#ifdef EXTERN_CXX
42}
43#endif
44
45#ifdef EXTERN_C
46}
47#endif
48
49#ifdef NAMESPACE
50}
51using namespace M;
52#endif
53
54namespace N {
55 int k = f();
56
57 extern "C" {
58 int f;
59#if !defined(CXX_HEADER)
60 // expected-error@-2 {{redefinition of 'f' as different kind of symbol}}
61 // expected-note@c-header.h:1 {{previous}}
62#endif
63 }
64}
65
66suppress_expected_no_diagnostics_error; // expected-error {{}}