Clang 8的Lambda表达中的双重崩溃

Double-free crash in lambda expression with clang 8

本文关键字:崩溃 Lambda Clang      更新时间:2023-10-16

将std :: vector移动到lambda表达式和lambda表达式上时,我会在Clang 8.0上获得双重崩溃。来自GCC或Clang 7的其他编译器的可执行文件正在运行没有错误。

我在代码中做某事吗?

template<typename F>
void myExecute(F&& f)
{
    f();
}
int main()
{
    try {
        std::vector<double> test = {0.0, 1.0};
        myExecute([v = std::move(test)]() {
            throw std::runtime_error("exception");
        });
    }
    catch (const std::exception& e) {
        std::cout << e.what() << std::endl;
    }
}

在Wandbox中尝试一下

同时,我在llvm bugzilla中找到了匹配的错误报告:

https://bugs.llvm.org/show_bug.cgi?id=41810

我现在相信这是编译器错误,而不是我的代码中的问题。