| // { dg-do run { target c++11 } } |
| |
| // Test throw and catch |
| |
| extern "C" void abort (void); |
| |
| typedef decltype(nullptr) nullptr_t; |
| |
| int result[2]; |
| |
| void __attribute__((noinline)) |
| foo (int i, int j) |
| { |
| result[i] = j; |
| } |
| |
| int main() |
| { |
| try { |
| throw nullptr; |
| } catch (bool) { |
| foo (0, 2); |
| } catch (int) { |
| foo (0, 3); |
| } catch (long int) { |
| foo (0, 4); |
| } catch (nullptr_t) { |
| foo (0, 5); |
| } catch (...) { |
| foo (0, 6); |
| } |
| |
| nullptr_t mynull = 0; |
| try { |
| throw mynull; |
| } catch (bool) { |
| foo (1, 2); |
| } catch (int) { |
| foo (1, 3); |
| } catch (long int) { |
| foo (1, 4); |
| } catch (nullptr_t) { |
| foo (1, 5); |
| } catch (...) { |
| foo (1, 6); |
| } |
| |
| if (result[0] != 5 || result[1] != 5) |
| abort (); |
| } |