You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
1.4 KiB

/*
* Copyright (c) 2016 - present Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#include <exception>
#include <stdexcept>
int deref(int* p) {
if (p == 0) {
throw "Null pointer!";
}
return *p;
}
int deref_null(int* p) {
try {
return *p;
} catch (const char* msg) {
}
}
int call_deref_with_null() { deref_null(nullptr); }
void basic_throw_ok() { throw std::runtime_error("throwing!"); }
int dead_deref_null_after_throw_ok() {
int* i = nullptr;
throw std::runtime_error("throwing!");
return *i;
}
int FN_deref_null_in_catch_bad() {
int* i = nullptr;
try {
throw std::runtime_error("error");
} catch (...) {
return *i;
}
return 0;
}
int FN_deref_null_after_catch_bad(int* i) {
try {
*i = 2;
throw std::runtime_error("error");
} catch (...) {
i = nullptr;
}
return *i;
}
int FN_multiple_catches_bad(bool b) {
int* i = nullptr;
int* j = nullptr;
try {
if (b) {
throw std::length_error("error");
} else {
throw std::range_error("error");
}
} catch (std::length_error& msg) {
return *i;
} catch (std::range_error& msg) {
return *j;
}
return 0;
}
int main() {
try {
return deref(0);
} catch (const char* msg) {
return -1;
}
}