mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 03:16:07 +00:00
Some unwinding test cases
llvm-svn: 149436
This commit is contained in:
parent
eb00284f22
commit
eedecf51bb
@ -8,8 +8,6 @@
|
||||
# //
|
||||
# //===--------------------------------------------------------------------===//
|
||||
|
||||
export DYLD_LIBRARY_PATH=/Users/hhinnant/Development/libcxxabi/lib:/Users/hhinnant/Development/temp_libcxx/lib
|
||||
|
||||
if [ -z $CC ]
|
||||
then
|
||||
CC=clang++
|
||||
|
96
libcxxabi/test/unwind_01.cpp
Normal file
96
libcxxabi/test/unwind_01.cpp
Normal file
@ -0,0 +1,96 @@
|
||||
//===------------------------- unwind_01.cpp ------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
struct A
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
A() : id_(++count) {}
|
||||
~A() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
A(const A&);
|
||||
A& operator=(const A&);
|
||||
};
|
||||
|
||||
int A::count = 0;
|
||||
|
||||
struct B
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
B() : id_(++count) {}
|
||||
~B() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
B(const B&);
|
||||
B& operator=(const B&);
|
||||
};
|
||||
|
||||
int B::count = 0;
|
||||
|
||||
struct C
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
C() : id_(++count) {}
|
||||
~C() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
C(const C&);
|
||||
C& operator=(const C&);
|
||||
};
|
||||
|
||||
int C::count = 0;
|
||||
|
||||
void f2()
|
||||
{
|
||||
C c;
|
||||
A a;
|
||||
throw 55;
|
||||
B b;
|
||||
}
|
||||
|
||||
void f1()
|
||||
{
|
||||
A a;
|
||||
B b;
|
||||
f2();
|
||||
C c;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
try
|
||||
{
|
||||
f1();
|
||||
assert(false);
|
||||
}
|
||||
catch (int* i)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (long i)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (int i)
|
||||
{
|
||||
assert(i == 55);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
assert(A::count == 0);
|
||||
assert(B::count == 0);
|
||||
assert(C::count == 0);
|
||||
}
|
96
libcxxabi/test/unwind_02.cpp
Normal file
96
libcxxabi/test/unwind_02.cpp
Normal file
@ -0,0 +1,96 @@
|
||||
//===------------------------- unwind_02.cpp ------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
struct A
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
A() : id_(++count) {}
|
||||
~A() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
A(const A&);
|
||||
A& operator=(const A&);
|
||||
};
|
||||
|
||||
int A::count = 0;
|
||||
|
||||
struct B
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
B() : id_(++count) {}
|
||||
~B() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
B(const B&);
|
||||
B& operator=(const B&);
|
||||
};
|
||||
|
||||
int B::count = 0;
|
||||
|
||||
struct C
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
C() : id_(++count) {}
|
||||
~C() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
C(const C&);
|
||||
C& operator=(const C&);
|
||||
};
|
||||
|
||||
int C::count = 0;
|
||||
|
||||
void f2()
|
||||
{
|
||||
C c;
|
||||
A a;
|
||||
throw 55;
|
||||
B b;
|
||||
}
|
||||
|
||||
void f1() throw (long, char, int, double)
|
||||
{
|
||||
A a;
|
||||
B b;
|
||||
f2();
|
||||
C c;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
try
|
||||
{
|
||||
f1();
|
||||
assert(false);
|
||||
}
|
||||
catch (int* i)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (long i)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (int i)
|
||||
{
|
||||
assert(i == 55);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
assert(A::count == 0);
|
||||
assert(B::count == 0);
|
||||
assert(C::count == 0);
|
||||
}
|
102
libcxxabi/test/unwind_03.cpp
Normal file
102
libcxxabi/test/unwind_03.cpp
Normal file
@ -0,0 +1,102 @@
|
||||
//===------------------------- unwind_03.cpp ------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include <exception>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
|
||||
struct A
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
A() : id_(++count) {}
|
||||
~A() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
A(const A&);
|
||||
A& operator=(const A&);
|
||||
};
|
||||
|
||||
int A::count = 0;
|
||||
|
||||
struct B
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
B() : id_(++count) {}
|
||||
~B() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
B(const B&);
|
||||
B& operator=(const B&);
|
||||
};
|
||||
|
||||
int B::count = 0;
|
||||
|
||||
struct C
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
C() : id_(++count) {}
|
||||
~C() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
C(const C&);
|
||||
C& operator=(const C&);
|
||||
};
|
||||
|
||||
int C::count = 0;
|
||||
|
||||
void f2()
|
||||
{
|
||||
C c;
|
||||
A a;
|
||||
throw 55;
|
||||
B b;
|
||||
}
|
||||
|
||||
void f1() throw (long, char, double)
|
||||
{
|
||||
A a;
|
||||
B b;
|
||||
f2();
|
||||
C c;
|
||||
}
|
||||
|
||||
void u_handler()
|
||||
{
|
||||
exit(0);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::set_unexpected(u_handler);
|
||||
try
|
||||
{
|
||||
f1();
|
||||
assert(false);
|
||||
}
|
||||
catch (int* i)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (long i)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (int i)
|
||||
{
|
||||
assert(i == 55);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
assert(false);
|
||||
}
|
108
libcxxabi/test/unwind_04.cpp
Normal file
108
libcxxabi/test/unwind_04.cpp
Normal file
@ -0,0 +1,108 @@
|
||||
//===------------------------- unwind_04.cpp ------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include <exception>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
|
||||
struct A
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
A() : id_(++count) {}
|
||||
~A() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
A(const A&);
|
||||
A& operator=(const A&);
|
||||
};
|
||||
|
||||
int A::count = 0;
|
||||
|
||||
struct B
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
B() : id_(++count) {}
|
||||
~B() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
B(const B&);
|
||||
B& operator=(const B&);
|
||||
};
|
||||
|
||||
int B::count = 0;
|
||||
|
||||
struct C
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
C() : id_(++count) {}
|
||||
~C() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
C(const C&);
|
||||
C& operator=(const C&);
|
||||
};
|
||||
|
||||
int C::count = 0;
|
||||
|
||||
void f2()
|
||||
{
|
||||
C c;
|
||||
A a;
|
||||
throw 55;
|
||||
B b;
|
||||
}
|
||||
|
||||
void f1() throw (long, char, double)
|
||||
{
|
||||
A a;
|
||||
B b;
|
||||
f2();
|
||||
C c;
|
||||
}
|
||||
|
||||
void u_handler()
|
||||
{
|
||||
throw 'a';
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::set_unexpected(u_handler);
|
||||
try
|
||||
{
|
||||
f1();
|
||||
assert(false);
|
||||
}
|
||||
catch (int* i)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (long i)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (int i)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (char c)
|
||||
{
|
||||
assert(c == 'a');
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
assert(A::count == 0);
|
||||
assert(B::count == 0);
|
||||
assert(C::count == 0);
|
||||
}
|
112
libcxxabi/test/unwind_05.cpp
Normal file
112
libcxxabi/test/unwind_05.cpp
Normal file
@ -0,0 +1,112 @@
|
||||
//===------------------------- unwind_05.cpp ------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include <exception>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
|
||||
struct A
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
A() : id_(++count) {}
|
||||
~A() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
A(const A&);
|
||||
A& operator=(const A&);
|
||||
};
|
||||
|
||||
int A::count = 0;
|
||||
|
||||
struct B
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
B() : id_(++count) {}
|
||||
~B() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
B(const B&);
|
||||
B& operator=(const B&);
|
||||
};
|
||||
|
||||
int B::count = 0;
|
||||
|
||||
struct C
|
||||
{
|
||||
static int count;
|
||||
int id_;
|
||||
C() : id_(++count) {}
|
||||
~C() {assert(id_ == count--);}
|
||||
|
||||
private:
|
||||
C(const C&);
|
||||
C& operator=(const C&);
|
||||
};
|
||||
|
||||
int C::count = 0;
|
||||
|
||||
void f2()
|
||||
{
|
||||
C c;
|
||||
A a;
|
||||
throw 55;
|
||||
B b;
|
||||
}
|
||||
|
||||
void f1() throw (long, char, double, std::bad_exception)
|
||||
{
|
||||
A a;
|
||||
B b;
|
||||
f2();
|
||||
C c;
|
||||
}
|
||||
|
||||
void u_handler()
|
||||
{
|
||||
throw;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::set_unexpected(u_handler);
|
||||
try
|
||||
{
|
||||
f1();
|
||||
assert(false);
|
||||
}
|
||||
catch (int* i)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (long i)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (int i)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (char c)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
catch (const std::bad_exception& e)
|
||||
{
|
||||
assert(true);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
assert(A::count == 0);
|
||||
assert(B::count == 0);
|
||||
assert(C::count == 0);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user