Home | History | Annotate | Download | only in Modules
      1 // RUN: rm -rf %t
      2 // 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
     12 // 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
     14 // 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
     16 
     17 #ifdef INDIRECT
     18 #include "c-header-indirect.h"
     19 #endif
     20 
     21 #ifdef NAMESPACE
     22 namespace M {
     23 #endif
     24 
     25 #ifdef EXTERN_C
     26 extern "C" {
     27 #endif
     28 
     29 #ifdef EXTERN_CXX
     30 extern "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 
     41 #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}}
     47 #endif
     48 
     49 #ifdef EXTERN_CXX
     50 }
     51 #endif
     52 
     53 #ifdef EXTERN_C
     54 }
     55 #endif
     56 
     57 #ifdef NAMESPACE
     58 }
     59 using namespace M;
     60 #endif
     61 
     62 #ifdef __cplusplus
     63 namespace N {
     64 #endif
     65   void g() {
     66     int k = f();
     67   }
     68 
     69 #ifdef __cplusplus
     70   extern "C" {
     71 #endif
     72     int f;
     73 #if !defined(CXX_HEADER) && !defined(NAMESPACE)
     74     // expected-error@-2 {{redefinition of 'f' as different kind of symbol}}
     75     // expected-note (at) c-header.h:1 {{previous}}
     76 #endif
     77 
     78 #ifdef __cplusplus
     79   }
     80 }
     81 #endif
     82 
     83 #if !defined(NAMESPACE)
     84 suppress_expected_no_diagnostics_error error_here; // expected-error {{}}
     85 #endif
     86