Well, it turned out more complicated than i thought. Here is the reduced reproducer: --- cut catch_test.cpp --- #include <stdexcept> #include <iostream> #include <vector> #include <string> #include <fstream>
void from_file(const std::string &filepath, std::vector<int8_t> &data); int main() { try { std::vector<int8_t> data; from_file("no_such_file.bin", data); std::cout << "Success ???" << std::endl; } catch (const std::exception &e) { std::cout << "std::exception: " << e.what() << std::endl; } return 0; } --- cut catch_test.cpp --- --- cut catch_test_2.cpp --- #include <stdexcept> #include <iostream> #include <vector> #include <string> #include <fstream> using namespace std; template <typename T> void from_file_impl(const string &filepath, vector<T> &data) { // data.clear(); std::ifstream ifs(filepath.c_str()); if (ifs.rdstate() & ifstream::failbit) { throw std::runtime_error("Error in reading " + filepath); } /* T buffer; while (ifs.read(reinterpret_cast<char *>(&buffer), sizeof(T))) { data.push_back(buffer); }*/ } void from_file(const string &filepath, vector<int8_t> &data) { from_file_impl(filepath, data); } --- cut catch_test_2.cpp --- --- cut console log --- CORP+p.fedin@P-FEDIN01 /cygdrive/d/Projects/Test $ clang++-8 catch_test.cpp catch_test_2.cpp -g -o catch_test CORP+p.fedin@P-FEDIN01 /cygdrive/d/Projects/Test $ ./catch_test CORP+p.fedin@P-FEDIN01 /cygdrive/d/Projects/Test $ g++.exe catch_test.cpp catch_test_2.cpp -g -o catch_test CORP+p.fedin@P-FEDIN01 /cygdrive/d/Projects/Test $ ./catch_test CORP+p.fedin@P-FEDIN01 /cygdrive/d/Projects/Test $ clang++-5.0 catch_test.cpp catch_test_2.cpp -g -o catch_test CORP+p.fedin@P-FEDIN01 /cygdrive/d/Projects/Test $ ./catch_test std::exception: Error in reading no_such_file.bin CORP+p.fedin@P-FEDIN01 /cygdrive/d/Projects/Test $ --- cut console log --- So, the problem actually reproduces with both clang 8 and gcc (7.4.0 on my system). clang 5 works fine. You could also be interested in strace (here is end of the output only, the beginning is quite long and not very interesting): --- cut --- 22301 238862 [main] catch_test 6078 seterrno_from_nt_status: /home/corinna/src/cygwin/cygwin-3.1.0/cygwin-3.1.0-1.x86_64/src/newlib-cygwin/winsup/cygwin/fhandler.cc:724 status 0xC0000034 -> windows error 2 75 238937 [main] catch_test 6078 geterrno_from_win_error: windows error 2 == errno 2 42 238979 [main] catch_test 6078 fhandler_base::open: 0xC0000034 = NtCreateFile (0x10, 0x80100000, \??\D:\Projects\Test\no_such_file.bin, io, NULL, 0x0, 0x7, 0x1, 0x4020, NULL, 0) 78 239057 [main] catch_test 6078 fhandler_base::open: 0 = fhandler_base::open(\??\D:\Projects\Test\no_such_file.bin, 0x108000) 41 239098 [main] catch_test 6078 fhandler_base::open_fs: 0 = fhandler_disk_file::open(\??\D:\Projects\Test\no_such_file.bin, 0x8000) 99 239197 [main] catch_test 6078 open: -1 = open(no_such_file.bin, 0x8000), errno 2 --- Process 2620 (pid: 6078), exception 20474343 at 00007ff8c73fa388 --- Process 2620 (pid: 6078) thread 12836 exited with status 0x20474343 --- Process 2620 (pid: 6078) thread 3972 exited with status 0x20474343 --- Process 2620 (pid: 6078) thread 15568 exited with status 0x20474343 --- Process 2620 (pid: 6078) thread 5428 exited with status 0x20474343 --- Process 2620 (pid: 6078) thread 2364 exited with status 0x20474343 --- Process 2620 (pid: 6078) thread 16008 exited with status 0x20474343 --- Process 2620 exited with status 0x20474343 --- cut --- So, a Windows exception is reported, then the whole thing silently quits. I have an impression that it has to do with the bug i previously reported (and someone here claimed he could reproduce it) Kind regards, Pavel Fedin Senior Engineer Samsung Electronics Research center Russia > -----Original Message----- > From: cygwin-ow...@cygwin.com [mailto:cygwin-ow...@cygwin.com] On Behalf Of > Brian Inglis > Sent: Wednesday, December 18, 2019 3:05 AM > To: cygwin@cygwin.com > Subject: Re: [BUG] try..catch does not work if compiled with clang 8.0 > > On 2019-12-17 13:51, Csaba Ráduly wrote: > > On 17/12/2019 17:29, Brian Inglis wrote: > >> On 2019-12-17 02:35, Pavel Fedin wrote: > >>> I haven't upgraded for a while and today i finally decided to do so. After > >>> rebuilding by project with clang++ 8.0 i found out that try...catch > >>> construct > >>> doesn't work. The program just gets silently aborted. > >>> Switched back to old clang++ 5.0 and it works. > >>> Also an old bug which i reported some (a while) time ago persists: > >>> uncaught > >>> throw does not print anything. > >>> OS is Windows 10 x86/64. > >> It is unlikely that try/catch does not work in the general case for > >> clang++8, > >> and your post has insufficient information to reproduce the problem. > > > > a.k.a. https://www.chiark.greenend.org.uk/~sgtatham/bugs.html#respect > > Indeed! > > > WJFFM > >> $ cat catcher.cpp > > #include <stdexcept> > > #include <iostream> > > > > int pitcher() > > { > > throw std::runtime_error{"Ouch"}; > > } > > > > int main() > > { > > try { > > return pitcher(); > > } > > catch (std::exception const&e) { > > std::cout << "Caught a " << typeid(e).name() << " - " << e.what() > > << '\n'; > > return 42; > > } > > } > > > > $ g++ -v -Wall -Wpedantic -Wextra -g catcher.cpp > > > $ ./a.exe > > Caught a St13runtime_error - Ouch > > The report was about clang++ 8 vs 5; tweaked source to build under 5 and 8: > ... > #include <typeinfo> > > int pitcher() > { > throw std::runtime_error("Ouch"); > } > ... > > but same WJFFM results: > > $ clang++-5.0 -g -Og -Wpedantic -Wall -Wextra -o try-catch-stc{,.cpp} > $ ./try-catch-stc > Caught a St13runtime_error - Ouch > > $ clang++-8 -g -Og -Wpedantic -Wall -Wextra -o try-catch-stc{,.cpp} > $ ./try-catch-stc > Caught a St13runtime_error - Ouch > > -- > Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada > > This email may be disturbing to some readers as it contains > too much technical detail. Reader discretion is advised. > > -- > Problem reports: > https://protect2.fireeye.com/url?k=b437d571-e9e489fe-b4365e3e- > 0cc47a31ce52-fd9c07d8a89a97f5&u=http://cygwin.com/problems.html > FAQ: > https://protect2.fireeye.com/url?k=2e1da12d-73cefda2-2e1c2a62- > 0cc47a31ce52-67f7089b29388f59&u=http://cygwin.com/faq/ > Documentation: > https://protect2.fireeye.com/url?k=3f2aeb24-62f9b7ab-3f2b606b- > 0cc47a31ce52-9528889b998d683e&u=http://cygwin.com/docs.html > Unsubscribe info: > https://protect2.fireeye.com/url?k=b1682add-ecbb7652-b169a192- > 0cc47a31ce52-e02defedfa7edb6b&u=http://cygwin.com/ml/#unsubscribe-simple -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple