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
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to