This patch tries to make the boundary of clang module and C++20 named module more clear. The changes included: - Rename `TranslationUnitKind::TU_Module` to `TranslationUnitKind::TU_ClangModule`. - Rename `Sema::ActOnModuleInclude` to `Sema::ActOnAnnotModuleInclude`. - Rename `ActOnModuleBegin` to `Sema::ActOnAnnotModuleBegin`. - Rename `Sema::ActOnModuleEnd` to `Sema::ActOnAnnotModuleEnd`. - Removes a warning if we're trying to compile a non-module unit as C++20 module unit. This is not actually useful and makes (the future) implementation unnecessarily complex. This patch meant to be a NFC fix. But it shows that it fixed a bug suprisingly that previously we would surppress the unused-value warning in named modules. Because it shares the same logic with clang modules, which has headers semantics. This shows the change is meaningful.
28 lines
1.0 KiB
C++
28 lines
1.0 KiB
C++
// RUN: %clang_cc1 -std=c++20 %s -verify -o /dev/null
|
|
// RUN: %clang_cc1 -std=c++20 %s -DINTERFACE -verify -emit-module-interface -o %t
|
|
// RUN: %clang_cc1 -std=c++20 %s -DIMPLEMENTATION -verify -fmodule-file=A=%t -o /dev/null
|
|
//
|
|
// RUN: %clang_cc1 -std=c++20 %s -DBUILT_AS_INTERFACE -emit-module-interface -verify -o /dev/null
|
|
// RUN: %clang_cc1 -std=c++20 %s -DINTERFACE -DBUILT_AS_INTERFACE -emit-module-interface -verify -o /dev/null
|
|
// RUN: %clang_cc1 -std=c++20 %s -DIMPLEMENTATION -DBUILT_AS_INTERFACE -emit-module-interface -verify -o /dev/null
|
|
|
|
#if INTERFACE
|
|
// expected-no-diagnostics
|
|
export module A;
|
|
#elif IMPLEMENTATION
|
|
module A; // #module-decl
|
|
#ifdef BUILT_AS_INTERFACE
|
|
// expected-error@-2 {{missing 'export' specifier in module declaration while building module interface}}
|
|
#define INTERFACE
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef INTERFACE
|
|
export int b; // expected-error {{export declaration can only be used within a module purview}}
|
|
#ifdef IMPLEMENTATION
|
|
// expected-note@#module-decl {{add 'export' here}}
|
|
#endif
|
|
#else
|
|
export int a;
|
|
#endif
|