Chuanqi Xu 38067c50a9 [C++20] [Modules] [Reduced BMI] Avoid force writing static declarations
within module purview

Close https://github.com/llvm/llvm-project/issues/90259

Technically, the static declarations shouldn't be leaked from the module
interface, otherwise it is an illegal program according to the spec. So
we can get rid of the static declarations from the reduced BMI
technically. Then we can close the above issue.

However, there are too many `static inline` codes in existing headers.
So it will be a pretty big breaking change if we do this globally.
2024-04-30 11:34:34 +08:00

45 lines
858 B
C++

// RUN: rm -rf %t
// RUN: mkdir -p %t
// RUN: split-file %s %t
//
// RUN: %clang_cc1 -std=c++20 %t/mod1.cppm -emit-reduced-module-interface -o %t/mod-mod1.pcm
// RUN: %clang_cc1 -std=c++20 %t/mod.cppm -fprebuilt-module-path=%t \
// RUN: -emit-reduced-module-interface -o %t/mod.pcm
// RUN: %clang_cc1 -std=c++20 %t/use.cpp -fprebuilt-module-path=%t -verify -fsyntax-only
//--- mod1.cppm
export module mod:mod1;
namespace {
int abc = 43;
}
namespace mod {
static int def = 44;
}
export int f() {
return abc + mod::def;
}
//--- mod.cppm
// expected-no-diagnostics
export module mod;
import :mod1;
namespace {
double abc = 43.0;
}
namespace mod {
static double def = 44.0;
}
export double func() {
return (double)f() + abc + mod::def;
}
//--- use.cpp
// expected-no-diagnostics
import mod;
double use() {
return func();
}