[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