1e181de7fSRichard Smith // RUN: %clang_cc1 -std=c++2a %s -verify -pedantic-errors 2e181de7fSRichard Smith 3e181de7fSRichard Smith export module p5; 4e181de7fSRichard Smith 5*f60dc3caSIain Sandoe int a; // expected-note {{target}} 6e181de7fSRichard Smith static int sa; // expected-note {{target}} 7*f60dc3caSIain Sandoe void b(); // expected-note {{target}} 8e181de7fSRichard Smith static void sb(); // expected-note {{target}} 9*f60dc3caSIain Sandoe struct c {}; // expected-note {{target}} 10*f60dc3caSIain Sandoe enum d {}; // expected-note {{target}} 11e181de7fSRichard Smith using e = int; 12e181de7fSRichard Smith using f = c; 13e181de7fSRichard Smith static union { int sg1, sg2; }; // expected-note {{target}} 14e181de7fSRichard Smith namespace NS {} 15e181de7fSRichard Smith 16*f60dc3caSIain Sandoe template<typename> int ta; // expected-note {{target}} 17bb750689SRichard Smith template<typename> static int sta; // expected-note {{target}} 18*f60dc3caSIain Sandoe template<typename> void tb(); // expected-note {{target}} 19e181de7fSRichard Smith template<typename> static void stb(); // expected-note {{target}} 20*f60dc3caSIain Sandoe template<typename> struct tc {}; // expected-note {{target}} 21*f60dc3caSIain Sandoe template<typename> using te = int; // expected-note {{target}} 22*f60dc3caSIain Sandoe template<typename> using tf = c; // expected-note {{target}} 23e181de7fSRichard Smith 24e181de7fSRichard Smith namespace UnnamedNS { 25e181de7fSRichard Smith namespace { 26e181de7fSRichard Smith int a; // expected-note {{target}} 27e181de7fSRichard Smith static int sa; // expected-note {{target}} 28e181de7fSRichard Smith void b(); // expected-note {{target}} 29e181de7fSRichard Smith static void sb(); // expected-note {{target}} 30e181de7fSRichard Smith struct c {}; // expected-note {{target}} 31e181de7fSRichard Smith enum d {}; // expected-note {{target}} 32e181de7fSRichard Smith using e = int; 33e181de7fSRichard Smith using f = c; 34e181de7fSRichard Smith static union { int sg1, sg2; }; // expected-note {{target}} 35e181de7fSRichard Smith namespace NS {} 36e181de7fSRichard Smith 37e181de7fSRichard Smith template<typename> int ta; // expected-note {{target}} 38e181de7fSRichard Smith template<typename> static int sta; // expected-note {{target}} 39e181de7fSRichard Smith template<typename> void tb(); // expected-note {{target}} 40e181de7fSRichard Smith template<typename> static void stb(); // expected-note {{target}} 41e181de7fSRichard Smith template<typename> struct tc {}; // expected-note {{target}} 42e181de7fSRichard Smith template<typename> using te = int; // expected-note {{target}} 43e181de7fSRichard Smith template<typename> using tf = c; // expected-note {{target}} 44e181de7fSRichard Smith } 45e181de7fSRichard Smith } 46e181de7fSRichard Smith 47*f60dc3caSIain Sandoe export { // expected-note 28{{here}} 48*f60dc3caSIain Sandoe using ::a; // expected-error {{using declaration referring to 'a' with module linkage cannot be exported}} 49e181de7fSRichard Smith using ::sa; // expected-error {{using declaration referring to 'sa' with internal linkage}} 50*f60dc3caSIain Sandoe using ::b; // expected-error {{using declaration referring to 'b' with module linkage cannot be exported}} 51e181de7fSRichard Smith using ::sb; // expected-error {{using declaration referring to 'sb' with internal linkage}} 52*f60dc3caSIain Sandoe using ::c; // expected-error {{using declaration referring to 'c' with module linkage cannot be exported}} 53*f60dc3caSIain Sandoe using ::d; // expected-error {{using declaration referring to 'd' with module linkage cannot be exported}} 54e181de7fSRichard Smith using ::e; 55e181de7fSRichard Smith using ::f; 56e181de7fSRichard Smith using ::sg1; // expected-error {{using declaration referring to 'sg1' with internal linkage}} 57e181de7fSRichard Smith 58*f60dc3caSIain Sandoe using ::ta; // expected-error {{using declaration referring to 'ta' with module linkage cannot be exported}} 59bb750689SRichard Smith using ::sta; // expected-error {{using declaration referring to 'sta' with internal linkage}} 60*f60dc3caSIain Sandoe using ::tb; // expected-error {{using declaration referring to 'tb' with module linkage cannot be exported}} 61e181de7fSRichard Smith using ::stb; // expected-error {{using declaration referring to 'stb' with internal linkage}} 62*f60dc3caSIain Sandoe using ::tc; // expected-error {{using declaration referring to 'tc' with module linkage cannot be exported}} 63*f60dc3caSIain Sandoe using ::te; // expected-error {{using declaration referring to 'te' with module linkage cannot be exported}} 64*f60dc3caSIain Sandoe using ::tf; // expected-error {{using declaration referring to 'tf' with module linkage cannot be exported}} 65e181de7fSRichard Smith namespace NS2 = ::NS; 66e181de7fSRichard Smith 67e181de7fSRichard Smith namespace UnnamedNS { 68e181de7fSRichard Smith using UnnamedNS::a; // expected-error {{internal linkage}} 69e181de7fSRichard Smith using UnnamedNS::sa; // expected-error {{internal linkage}} 70e181de7fSRichard Smith using UnnamedNS::b; // expected-error {{internal linkage}} 71e181de7fSRichard Smith using UnnamedNS::sb; // expected-error {{internal linkage}} 72e181de7fSRichard Smith using UnnamedNS::c; // expected-error {{internal linkage}} 73e181de7fSRichard Smith using UnnamedNS::d; // expected-error {{internal linkage}} 74e181de7fSRichard Smith using UnnamedNS::e; // ok 75e181de7fSRichard Smith using UnnamedNS::f; // ok? using-declaration refers to alias-declaration, 76e181de7fSRichard Smith // which does not have linkage (even though that then 77e181de7fSRichard Smith // refers to a type that has internal linkage) 78e181de7fSRichard Smith using UnnamedNS::sg1; // expected-error {{internal linkage}} 79e181de7fSRichard Smith 80e181de7fSRichard Smith using UnnamedNS::ta; // expected-error {{internal linkage}} 81e181de7fSRichard Smith using UnnamedNS::sta; // expected-error {{internal linkage}} 82e181de7fSRichard Smith using UnnamedNS::tb; // expected-error {{internal linkage}} 83e181de7fSRichard Smith using UnnamedNS::stb; // expected-error {{internal linkage}} 84e181de7fSRichard Smith using UnnamedNS::tc; // expected-error {{internal linkage}} 85e181de7fSRichard Smith using UnnamedNS::te; // expected-error {{internal linkage}} 86e181de7fSRichard Smith using UnnamedNS::tf; // expected-error {{internal linkage}} 87e181de7fSRichard Smith namespace NS2 = UnnamedNS::NS; // ok (wording bug?) 88e181de7fSRichard Smith } 89e181de7fSRichard Smith } 90