
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.
45 lines
858 B
C++
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();
|
|
}
|