mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 23:16:06 +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 ]
|
if [ -z $CC ]
|
||||||
then
|
then
|
||||||
CC=clang++
|
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