return-stack-addr.cpp [plain text]
int* ret_local() {
int x = 1;
return &x; }
int* ret_local_array() {
int x[10];
return x; }
int* ret_local_array_element(int i) {
int x[10];
return &x[i]; }
int *ret_local_array_element_reversed(int i) {
int x[10];
return &i[x]; }
int* ret_local_array_element_const_index() {
int x[10];
return &x[2]; }
int& ret_local_ref() {
int x = 1;
return x; }
int* ret_local_addrOf() {
int x = 1;
return &*&x; }
int* ret_local_addrOf_paren() {
int x = 1;
return (&(*(&x))); }
int* ret_local_addrOf_ptr_arith() {
int x = 1;
return &*(&x+1); }
int* ret_local_addrOf_ptr_arith2() {
int x = 1;
return &*(&x+1); }
int* ret_local_field() {
struct { int x; } a;
return &a.x; }
int& ret_local_field_ref() {
struct { int x; } a;
return a.x; }
int* ret_conditional(bool cond) {
int x = 1;
int y = 2;
return cond ? &x : &y; }
int* ret_conditional_rhs(int *x, bool cond) {
int y = 1;
return cond ? x : &y; }
void* ret_c_cast() {
int x = 1;
return (void*) &x; }
int* ret_static_var() {
static int x = 1;
return &x; }
int z = 1;
int* ret_global() {
return &z; }
int* ret_parameter(int x) {
return &x; }
void* ret_cpp_static_cast(short x) {
return static_cast<void*>(&x); }
int* ret_cpp_reinterpret_cast(double x) {
return reinterpret_cast<int*>(&x); }
int* ret_cpp_reinterpret_cast_no_warning(long x) {
return reinterpret_cast<int*>(x); }
int* ret_cpp_const_cast(const int x) {
return const_cast<int*>(&x); }