Skip to content

[clang-cl][crash] Corotutine re-throw in unhandled_exception() in debug mode #121167

Open
@egorpugin

Description

@egorpugin

The following file crashes in runtime in debug mode.

crash.cpp

See lines 11,12,26.

#include <coroutine>
#include <iostream>

struct td_coro {
    struct promise_type {
        auto get_return_object() { return td_coro{}; }
        auto initial_suspend() noexcept { return std::suspend_never{}; }
        auto final_suspend() noexcept { return std::suspend_always{}; }
        void return_void() {}
        void unhandled_exception() {
            throw; // does not work
            //std::rethrow_exception(std::current_exception()); // works
        }
    };
};

td_coro coro() {
    throw std::runtime_error{"123"};
    co_return;
}

void f() {
    try {
        coro();
    } catch (std::exception &e) {
        std::cerr << e.what() << "\n"; // crashes on e.what()
    }
}

int main() {
    f();
}

command

>clang-cl 1.cpp -std:c++latest -EHsc -MDd -v && 1.exe

clang version 20.0.0git (https://github.com/llvm/llvm-project c047a5b3f6e2295dd74f1e8f17f1a023150b246c)
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: D:\dev\llvm\win64_ninja_release\bin
 "D:\\dev\\llvm\\win64_ninja_release\\bin\\clang-cl.exe" -cc1 -triple x86_64-pc-windows-msvc19.43.34604 -emit-obj -mincremental-linker-compatible -dumpdir a- -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name 1.cpp -mrelocation-model pic -pic-level 2 -mframe-pointer=none -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -fms-volatile -funwind-tables=2 -target-cpu x86-64 -mllvm -x86-asm-syntax=intel -tune-cpu generic -D_DEBUG -D_MT -D_DLL --dependent-lib=msvcrtd --dependent-lib=oldnames -stack-protector 2 -fcxx-exceptions -fexceptions -fexternc-nounwind -fdiagnostics-format msvc "-fdebug-compilation-dir=D:\\1" -v "-fcoverage-compilation-dir=D:\\1" -resource-dir "D:\\dev\\llvm\\win64_ninja_release\\lib\\clang\\20" -internal-isystem "D:\\dev\\llvm\\win64_ninja_release\\lib\\clang\\20\\include" -internal-isystem "C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\VC\\Tools\\MSVC\\14.43.34604\\include" -internal-isystem "C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\VC\\Tools\\MSVC\\14.43.34604\\atlmfc\\include" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\ucrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\shared" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\um" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\winrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\cppwinrt" -fdeprecated-macro -ferror-limit 19 -fmessage-length=186 -fno-use-cxa-atexit -fms-extensions -fms-compatibility -fms-compatibility-version=19.43.34604 -std=c++26 -fno-implicit-modules -fskip-odr-check-in-gmf -fcolor-diagnostics -faddrsig -o "C:\\Users\\egorp\\AppData\\Local\\Temp\\1-d0002c.obj" -x c++ 1.cpp
clang -cc1 version 20.0.0git based upon LLVM 20.0.0git default target x86_64-pc-windows-msvc
ignoring nonexistent directory "C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.43.34604\atlmfc\include"
#include "..." search starts here:
#include <...> search starts here:
 D:\dev\llvm\win64_ninja_release\lib\clang\20\include
 C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.43.34604\include
 C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt
 C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared
 C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um
 C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\winrt
 C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\cppwinrt
End of search list.
 "C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\VC\\Tools\\MSVC\\14.43.34604\\bin\\Hostx64\\x64\\link.exe" -out:1.exe "-libpath:C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\VC\\Tools\\MSVC\\14.43.34604\\lib\\x64" "-libpath:C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\VC\\Tools\\MSVC\\14.43.34604\\atlmfc\\lib\\x64" "-libpath:C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.22621.0\\ucrt\\x64" "-libpath:C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.22621.0\\um\\x64" -nologo "C:\\Users\\egorp\\AppData\\Local\\Temp\\1-d0002c.obj"

Works without -MDd flag.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions