forked from OSchip/llvm-project
libc++abi: move tests back
These are apparently related to libc++'s unwind personality handler and not unwind core. Move them back to the correct location. llvm-svn: 235765
This commit is contained in:
parent
14a384bee6
commit
ac18e0639f
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -0,0 +1,257 @@
|
|||
//===------------------------- unwind_06.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>
|
||||
#include <stdio.h>
|
||||
|
||||
// Compile with -Os to get compiler uses float registers to hold float variables
|
||||
|
||||
double get_(int x) { return (double)x; }
|
||||
|
||||
double (* volatile get)(int) = get_;
|
||||
|
||||
volatile int counter;
|
||||
|
||||
double try1(bool v) {
|
||||
double a = get(0);
|
||||
double b = get(1);
|
||||
for (counter = 100; counter; --counter)
|
||||
a += get(1) + b;
|
||||
if (v) throw 10;
|
||||
return get(0)+a+b;
|
||||
}
|
||||
|
||||
double try2(bool v) {
|
||||
double a = get(0);
|
||||
double b = get(1);
|
||||
double c = get(2);
|
||||
for (counter = 100; counter; --counter)
|
||||
a += get(1) + b + c;
|
||||
if (v) throw 10;
|
||||
return get(0)+a+b+c;
|
||||
}
|
||||
|
||||
double try3(bool v) {
|
||||
double a = get(0);
|
||||
double b = get(1);
|
||||
double c = get(2);
|
||||
double d = get(3);
|
||||
for (counter = 100; counter; --counter)
|
||||
a += get(1) + b + c + d;
|
||||
if (v) throw 10;
|
||||
return get(0)+a+b+c+d;
|
||||
}
|
||||
|
||||
double try4(bool v) {
|
||||
double a = get(0);
|
||||
double b = get(0);
|
||||
double c = get(0);
|
||||
double d = get(0);
|
||||
double e = get(0);
|
||||
for (counter = 100; counter; --counter)
|
||||
a += get(1) + b+c+d+e;
|
||||
if (v) throw 10;
|
||||
return get(0)+a+b+c+d+e;
|
||||
}
|
||||
|
||||
double try5(bool v) {
|
||||
double a = get(0);
|
||||
double b = get(0);
|
||||
double c = get(0);
|
||||
double d = get(0);
|
||||
double e = get(0);
|
||||
double f = get(0);
|
||||
for (counter = 100; counter; --counter)
|
||||
a += get(1) + b+c+d+e+f;
|
||||
if (v) throw 10;
|
||||
return get(0)+a+b+c+d+e+f;
|
||||
}
|
||||
|
||||
double try6(bool v) {
|
||||
double a = get(0);
|
||||
double b = get(0);
|
||||
double c = get(0);
|
||||
double d = get(0);
|
||||
double e = get(0);
|
||||
double f = get(0);
|
||||
double g = get(0);
|
||||
for (counter = 100; counter; --counter)
|
||||
a += get(1) + b+c+d+e+f+g;
|
||||
if (v) throw 10;
|
||||
return get(0)+a+b+c+d+e+f+g;
|
||||
}
|
||||
|
||||
double try7(bool v) {
|
||||
double a = get(0);
|
||||
double b = get(0);
|
||||
double c = get(0);
|
||||
double d = get(0);
|
||||
double e = get(0);
|
||||
double f = get(0);
|
||||
double g = get(0);
|
||||
double h = get(0);
|
||||
for (counter = 100; counter; --counter)
|
||||
a += get(1) + b+c+d+e+f+g;
|
||||
if (v) throw 10;
|
||||
return get(0)+a+b+c+d+e+f+g;
|
||||
}
|
||||
|
||||
double try8(bool v) {
|
||||
double a = get(0);
|
||||
double b = get(0);
|
||||
double c = get(0);
|
||||
double d = get(0);
|
||||
double e = get(0);
|
||||
double f = get(0);
|
||||
double g = get(0);
|
||||
double h = get(0);
|
||||
double i = get(0);
|
||||
for (counter = 100; counter; --counter)
|
||||
a += get(1) + b+c+d+e+f+g+i;
|
||||
if (v) throw 10;
|
||||
return get(0)+a+b+c+d+e+f+g+i;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
double foo()
|
||||
{
|
||||
double a = get(1);
|
||||
double b = get(2);
|
||||
double c = get(3);
|
||||
double d = get(4);
|
||||
double e = get(5);
|
||||
double f = get(6);
|
||||
double g = get(7);
|
||||
double h = get(8);
|
||||
try {
|
||||
try1(true);
|
||||
}
|
||||
catch (int e) {
|
||||
}
|
||||
assert(a == get(1));
|
||||
assert(b == get(2));
|
||||
assert(c == get(3));
|
||||
assert(d == get(4));
|
||||
assert(e == get(5));
|
||||
assert(f == get(6));
|
||||
assert(g == get(7));
|
||||
assert(h == get(8));
|
||||
|
||||
try {
|
||||
try2(true);
|
||||
}
|
||||
catch (int e) {
|
||||
}
|
||||
assert(a == get(1));
|
||||
assert(b == get(2));
|
||||
assert(c == get(3));
|
||||
assert(d == get(4));
|
||||
assert(e == get(5));
|
||||
assert(f == get(6));
|
||||
assert(g == get(7));
|
||||
assert(h == get(8));
|
||||
|
||||
try {
|
||||
try3(true);
|
||||
}
|
||||
catch (int e) {
|
||||
}
|
||||
assert(a == get(1));
|
||||
assert(b == get(2));
|
||||
assert(c == get(3));
|
||||
assert(d == get(4));
|
||||
assert(e == get(5));
|
||||
assert(f == get(6));
|
||||
assert(g == get(7));
|
||||
assert(h == get(8));
|
||||
|
||||
try {
|
||||
try4(true);
|
||||
}
|
||||
catch (int e) {
|
||||
}
|
||||
assert(a == get(1));
|
||||
assert(b == get(2));
|
||||
assert(c == get(3));
|
||||
assert(d == get(4));
|
||||
assert(e == get(5));
|
||||
assert(f == get(6));
|
||||
assert(g == get(7));
|
||||
assert(h == get(8));
|
||||
|
||||
try {
|
||||
try5(true);
|
||||
}
|
||||
catch (int e) {
|
||||
}
|
||||
assert(a == get(1));
|
||||
assert(b == get(2));
|
||||
assert(c == get(3));
|
||||
assert(d == get(4));
|
||||
assert(e == get(5));
|
||||
assert(f == get(6));
|
||||
assert(g == get(7));
|
||||
assert(h == get(8));
|
||||
|
||||
try {
|
||||
try6(true);
|
||||
}
|
||||
catch (int e) {
|
||||
}
|
||||
assert(a == get(1));
|
||||
assert(b == get(2));
|
||||
assert(c == get(3));
|
||||
assert(d == get(4));
|
||||
assert(e == get(5));
|
||||
assert(f == get(6));
|
||||
assert(g == get(7));
|
||||
assert(h == get(8));
|
||||
|
||||
try {
|
||||
try7(true);
|
||||
}
|
||||
catch (int e) {
|
||||
}
|
||||
assert(a == get(1));
|
||||
assert(b == get(2));
|
||||
assert(c == get(3));
|
||||
assert(d == get(4));
|
||||
assert(e == get(5));
|
||||
assert(f == get(6));
|
||||
assert(g == get(7));
|
||||
assert(h == get(8));
|
||||
|
||||
try {
|
||||
try8(true);
|
||||
}
|
||||
catch (int e) {
|
||||
}
|
||||
assert(a == get(1));
|
||||
assert(b == get(2));
|
||||
assert(c == get(3));
|
||||
assert(d == get(4));
|
||||
assert(e == get(5));
|
||||
assert(f == get(6));
|
||||
assert(g == get(7));
|
||||
assert(h == get(8));
|
||||
|
||||
return a+b+c+d+e+f+g+h;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
}
|
Loading…
Reference in New Issue