From: Chris Lattner Date: Wed, 27 Aug 2003 04:57:33 +0000 (+0000) Subject: New testcases, which WORK with LLVMG++ and the CBE. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=065c0b95a3960f228f8898f520100b053e243fb6;p=oota-llvm.git New testcases, which WORK with LLVMG++ and the CBE. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8158 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/C++Frontend/EH/simple_throw.cpp b/test/C++Frontend/EH/simple_throw.cpp new file mode 100644 index 00000000000..7289c6d065c --- /dev/null +++ b/test/C++Frontend/EH/simple_throw.cpp @@ -0,0 +1,13 @@ +// Test throwing a constant int +#include + +static void foo() { throw 5; } +int main() { + try { + foo(); + } catch (...) { + printf("All ok\n"); + return 0; + } + return 1; +} diff --git a/test/C++Frontend/EH/throw_rethrow_test.cpp b/test/C++Frontend/EH/throw_rethrow_test.cpp new file mode 100644 index 00000000000..cbaaa1bf568 --- /dev/null +++ b/test/C++Frontend/EH/throw_rethrow_test.cpp @@ -0,0 +1,40 @@ +// This tests hard situations for throwing, including the case where an +// exception is active in more than one handler at a time (ie, it needs +// refcounting) +#include + +struct foo { + int i; + foo() : i(1) { } + foo(const foo&) : i(2) {} +}; + +int callee(unsigned i) { + if (i < 3) throw (int)i; + if (i < 6) throw 1.0; + if (i < 9) throw foo(); + return 0; +} + +void rethrow() { + throw; +} + +int main() { + for (unsigned i = 0; i < 10; ++i) { + try { + return callee(i); + } catch (foo &F) { + try { + rethrow(); + } catch (foo &F) { + std::printf("%d: 3\n", i); + } + } catch (int) { + std::printf("%d: 1\n", i); + } catch (...) { + std::printf("%d: 2\n", i); + } + } +} +