aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr21.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr21.C')
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr21.C54
1 files changed, 54 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr21.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr21.C
new file mode 100644
index 0000000..89884b9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr21.C
@@ -0,0 +1,54 @@
+// { 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 (void*) {
+ foo (0, 1);
+ } 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 (void*) {
+ foo (1, 1);
+ } 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 ();
+}