[clang] [Clang] Implement P2280R4 Using unknown pointers and references in constant expressions (PR #95474)
Alon Zakai via cfe-commits
cfe-commits at lists.llvm.org
Thu May 15 08:04:08 PDT 2025
kripken wrote:
I am seeing a runtime error after this, when using C++23, which looks like a regression. Testcase:
```cpp
// A.hpp
#include <iostream>
struct MyStruct {
double m0{-9999.0};
int m1{-12345};
};
constexpr MyStruct default_val;
auto compute_area(double l, const MyStruct &val = default_val) -> double {
std::cout << "compute_area : val.m0 : " << val.m0 << "\n";
std::cout << "compute_area : val.m1 : " << val.m1 << " \n";
if (val.m1 != -12345) {
return val.m0 * l;
}
return -9999;
}
// main.cpp
//#include "A.hpp"
#include <cassert>
#include <iostream>
auto main() -> int {
MyStruct in_val{.m0 = 2.0, .m1 = 1};
std::cout << "main : in_val.m0 : " << in_val.m0 << "\n";
std::cout << "main : in_val.m1 : " << in_val.m1 << " \n\n";
double val = compute_area(1.0, in_val);
std::cout << "result = " << val << std::endl;
assert(val == 2.0);
return 0;
}
```
Before this landed, it runs ok:
```
$ build/bin/clang++ a.cpp -std=c++23 && ./a.out
main : in_val.m0 : 2
main : in_val.m1 : 1
compute_area : val.m0 : 2
compute_area : val.m1 : 1
result = 2
```
After this landed, the assert fails:
```
$ build/bin/clang++ a.cpp -std=c++23 && ./a.out
main : in_val.m0 : 2
main : in_val.m1 : 1
compute_area : val.m0 : 2 compute_area : val.m1 : -12345
result = -9999
a.out: a.cpp:30: int main(): Assertion `val == 2.0' failed.
Aborted (core dumped)
```
(original report: https://github.com/emscripten-core/emscripten/issues/24325)
https://github.com/llvm/llvm-project/pull/95474
More information about the cfe-commits
mailing list