1 // RUN: %clang_cc1 -std=c++2a -verify %s
2 // RUN: %clang_cc1 -std=c++2a -verify %s -DIMPORT_ERROR=1
3 // RUN: %clang_cc1 -std=c++2a -verify %s -DIMPORT_ERROR=2
8 struct import
{ struct inner
{}; };
10 struct module
{ struct inner
{}; };
12 constexpr int n
= 123;
14 export module m
; // #1
16 // Import errors are fatal, so we test them in isolation.
18 import x
= {}; // expected-error {{expected ';' after module name}}
19 // expected-error@-1 {{module 'x' not found}}
21 #elif IMPORT_ERROR == 2
23 template<int> struct import
;
24 template<> struct import
<n
> {
28 // This is not valid because the 'import <n>' is a pp-import, even though it
29 // grammatically can't possibly be an import declaration.
30 struct X
{} import
<n
>::y
; // expected-error {{'n' file not found}}
33 module y
= {}; // expected-error {{multiple module declarations}} expected-error 2{{}}
34 // expected-note@#1 {{previous module declaration}}
39 import::inner xi
= {};
40 module::inner yi
= {};
47 extern "C++" module cxxm
;
48 extern "C++" import cxxi
;
50 template<typename T
> module module_var_template
;
52 // This is a variable named 'import' that shadows the type 'import' above.