From 645386cf4b27c131730b50a7e503be11eb6f27b8 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Sat, 22 Apr 2017 00:47:53 +0000 Subject: [PATCH] Rearrange some Modules TS testcases into test/CXX/modules-ts. llvm-svn: 301066 --- .../basic/basic.link/module-declaration.cpp} | 65 ++++++++++------------ .../modules-ts/codegen-basics.cppm} | 0 .../dcl.dcl/dcl.module/dcl.module.import/p1.cpp | 41 ++++++++++++++ 3 files changed, 71 insertions(+), 35 deletions(-) rename clang/test/{Parser/cxx-modules-import.cpp => CXX/modules-ts/basic/basic.link/module-declaration.cpp} (50%) rename clang/test/{CodeGenCXX/modules-ts.cppm => CXX/modules-ts/codegen-basics.cppm} (100%) create mode 100644 clang/test/CXX/modules-ts/dcl.dcl/dcl.module/dcl.module.import/p1.cpp diff --git a/clang/test/Parser/cxx-modules-import.cpp b/clang/test/CXX/modules-ts/basic/basic.link/module-declaration.cpp similarity index 50% rename from clang/test/Parser/cxx-modules-import.cpp rename to clang/test/CXX/modules-ts/basic/basic.link/module-declaration.cpp index 98c4838..ee696d1 100644 --- a/clang/test/Parser/cxx-modules-import.cpp +++ b/clang/test/CXX/modules-ts/basic/basic.link/module-declaration.cpp @@ -1,3 +1,5 @@ +// Tests for module-declaration syntax. +// // RUN: rm -rf %t // RUN: mkdir -p %t // RUN: echo 'export module x; int a, b;' > %t/x.cppm @@ -6,55 +8,48 @@ // RUN: %clang_cc1 -std=c++1z -fmodules-ts -emit-module-interface %t/x.cppm -o %t/x.pcm // RUN: %clang_cc1 -std=c++1z -fmodules-ts -emit-module-interface -fmodule-file=%t/x.pcm %t/x.y.cppm -o %t/x.y.pcm // +// Module implementation for unknown and known module. (The former is ill-formed.) +// FIXME: TEST=1 should fail because we don't have an interface for module z. // RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/x.y.pcm -verify %s \ // RUN: -DTEST=1 -DEXPORT= -DPARTITION= -DMODULE_NAME=z // RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/x.y.pcm -verify %s \ // RUN: -DTEST=2 -DEXPORT= -DPARTITION= -DMODULE_NAME=x +// +// Module interface for unknown and known module. (The latter is ill-formed due to +// redefinition.) // RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/x.y.pcm -verify %s \ // RUN: -DTEST=3 -DEXPORT=export -DPARTITION= -DMODULE_NAME=z // RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/x.y.pcm -verify %s \ -// RUN: -DTEST=4 -DEXPORT=export -DPARTITION=partition -DMODULE_NAME=z +// RUN: -DTEST=4 -DEXPORT=export -DPARTITION= -DMODULE_NAME=x +// +// Defining a module partition. +// RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/x.y.pcm -verify %s \ +// RUN: -DTEST=5 -DEXPORT=export -DPARTITION=partition -DMODULE_NAME=z // RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/x.y.pcm -verify %s \ -// RUN: -DTEST=5 -DEXPORT= -DPARTITION=elderberry -DMODULE_NAME=z +// RUN: -DTEST=6 -DEXPORT= -DPARTITION=partition -DMODULE_NAME=z +// +// Miscellaneous syntax. // RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/x.y.pcm -verify %s \ -// RUN: -DTEST=1 -DEXPORT= -DPARTITION= -DMODULE_NAME='z [[]]' +// RUN: -DTEST=7 -DEXPORT= -DPARTITION=elderberry -DMODULE_NAME=z // RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/x.y.pcm -verify %s \ -// RUN: -DTEST=6 -DEXPORT= -DPARTITION= -DMODULE_NAME='z [[fancy]]' +// RUN: -DTEST=8 -DEXPORT= -DPARTITION= -DMODULE_NAME='z [[]]' // RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/x.y.pcm -verify %s \ -// RUN: -DTEST=7 -DEXPORT= -DPARTITION= -DMODULE_NAME='z [[maybe_unused]]' +// RUN: -DTEST=9 -DEXPORT= -DPARTITION= -DMODULE_NAME='z [[fancy]]' // RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/x.y.pcm -verify %s \ -// RUN: -DTEST=8 -DEXPORT= -DPARTITION=partition -DMODULE_NAME=z +// RUN: -DTEST=10 -DEXPORT= -DPARTITION= -DMODULE_NAME='z [[maybe_unused]]' EXPORT module PARTITION MODULE_NAME; -#if TEST == 3 || TEST == 4 -// ok, building object code for module interface -#elif TEST == 5 -// expected-error@-4 {{expected ';'}} expected-error@-4 {{requires a type specifier}} +#if TEST == 4 +// expected-error@-2 {{redefinition of module 'x'}} +// expected-note-re@module-declaration.cpp:* {{loaded from '{{.*}}/x.pcm'}} #elif TEST == 6 -// expected-warning@-6 {{unknown attribute 'fancy' ignored}} +// expected-error@-5 {{module partition must be declared 'export'}} #elif TEST == 7 -// expected-error-re@-8 {{'maybe_unused' attribute cannot be applied to a module{{$}}}} -#elif TEST == 8 -// expected-error@-10 {{module partition must be declared 'export'}} -#endif - -int use_1 = a; -#if TEST != 2 -// expected-error@-2 {{declaration of 'a' must be imported from module 'x' before it is required}} -// expected-note@x.cppm:1 {{here}} +// expected-error@-7 {{expected ';'}} expected-error@-7 {{requires a type specifier}} +#elif TEST == 9 +// expected-warning@-9 {{unknown attribute 'fancy' ignored}} +#elif TEST == 10 +// expected-error-re@-11 {{'maybe_unused' attribute cannot be applied to a module{{$}}}} +#else +// expected-no-diagnostics #endif - -import x; - -int use_2 = b; // ok - -import x [[]]; -import x [[foo]]; // expected-warning {{unknown attribute 'foo' ignored}} -import x [[noreturn]]; // expected-error {{'noreturn' attribute cannot be applied to a module import}} -import x [[blarg::noreturn]]; // expected-warning {{unknown attribute 'noreturn' ignored}} - -import x.y; -import x.; // expected-error {{expected a module name after 'import'}} -import .x; // expected-error {{expected a module name after 'import'}} - -import blarg; // expected-error {{module 'blarg' not found}} diff --git a/clang/test/CodeGenCXX/modules-ts.cppm b/clang/test/CXX/modules-ts/codegen-basics.cppm similarity index 100% rename from clang/test/CodeGenCXX/modules-ts.cppm rename to clang/test/CXX/modules-ts/codegen-basics.cppm diff --git a/clang/test/CXX/modules-ts/dcl.dcl/dcl.module/dcl.module.import/p1.cpp b/clang/test/CXX/modules-ts/dcl.dcl/dcl.module/dcl.module.import/p1.cpp new file mode 100644 index 0000000..aaf43d6 --- /dev/null +++ b/clang/test/CXX/modules-ts/dcl.dcl/dcl.module/dcl.module.import/p1.cpp @@ -0,0 +1,41 @@ +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: echo 'export module x; int a, b;' > %t/x.cppm +// RUN: echo 'export module x.y; int c;' > %t/x.y.cppm +// +// RUN: %clang_cc1 -std=c++1z -fmodules-ts -emit-module-interface %t/x.cppm -o %t/x.pcm +// RUN: %clang_cc1 -std=c++1z -fmodules-ts -emit-module-interface -fmodule-file=%t/x.pcm %t/x.y.cppm -o %t/x.y.pcm +// +// RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/x.y.pcm -verify %s \ +// RUN: -DMODULE_NAME=z +// RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/x.y.pcm -verify %s \ +// RUN: -DMODULE_X -DMODULE_NAME=x + +module MODULE_NAME; + +int use_1 = a; +#if !MODULE_X +// expected-error@-2 {{declaration of 'a' must be imported from module 'x' before it is required}} +// expected-note@x.cppm:1 {{here}} +#endif + +import x; + +int use_2 = b; // ok + +// There is no relation between module x and module x.y. +int use_3 = c; // expected-error {{declaration of 'c' must be imported from module 'x.y'}} + // expected-note@x.y.cppm:1 {{here}} + +import x [[]]; +import x [[foo]]; // expected-warning {{unknown attribute 'foo' ignored}} +import x [[noreturn]]; // expected-error {{'noreturn' attribute cannot be applied to a module import}} +import x [[blarg::noreturn]]; // expected-warning {{unknown attribute 'noreturn' ignored}} + +import x.y; +import x.; // expected-error {{expected a module name after 'import'}} +import .x; // expected-error {{expected a module name after 'import'}} + +int use_4 = c; // ok + +import blarg; // expected-error {{module 'blarg' not found}} -- 2.7.4