86 lines · cpp
1// RUN: rm -rf %t2// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s3// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DEXTERN_C4// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DEXTERN_CXX5// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DEXTERN_C -DEXTERN_CXX6// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DEXTERN_C -DNAMESPACE7// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER8// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER -DEXTERN_C9// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER -DEXTERN_CXX10// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER -DEXTERN_C -DEXTERN_CXX11// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs %s -DCXX_HEADER -DEXTERN_C -DNAMESPACE12// 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-c13// 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-c14// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs -x c %s15// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -verify -fmodules-cache-path=%t -I %S/Inputs/elsewhere -I %S/Inputs %s -DEXTERN_C -DINDIRECT16 17#ifdef INDIRECT18#include "c-header-indirect.h"19#endif20 21#ifdef NAMESPACE22namespace M {23#endif24 25#ifdef EXTERN_C26extern "C" {27#endif28 29#ifdef EXTERN_CXX30extern "C++" {31#endif32 33#ifdef CXX_HEADER34#define HEADER "cxx-header.h"35#else36#define HEADER "c-header.h"37#endif38 39#include HEADER40 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#endif48 49#ifdef EXTERN_CXX50}51#endif52 53#ifdef EXTERN_C54}55#endif56 57#ifdef NAMESPACE58}59using namespace M;60#endif61 62#ifdef __cplusplus63namespace N {64#endif65 void g(void) {66 int k = f();67 }68 69#ifdef __cplusplus70 extern "C" {71#endif72 int f;73#if !defined(CXX_HEADER) && !defined(NAMESPACE)74 // expected-error@-2 {{redefinition of 'f' as different kind of symbol}}75 // expected-note@c-header.h:1 {{previous}}76#endif77 78#ifdef __cplusplus79 }80}81#endif82 83#if !defined(NAMESPACE)84suppress_expected_no_diagnostics_error error_here; // expected-error {{}}85#endif86