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:
Saleem Abdulrasool 2015-04-24 20:20:54 +00:00
parent 14a384bee6
commit ac18e0639f
6 changed files with 771 additions and 0 deletions

View 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);
}

View 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);
}

View 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);
}

View 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);
}

View 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);
}

View File

@ -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();
}