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.
124 lines
1.7 KiB
124 lines
1.7 KiB
4 years ago
|
/*
|
||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||
|
*
|
||
|
* This source code is licensed under the MIT license found in the
|
||
|
* LICENSE file in the root directory of this source tree.
|
||
|
*/
|
||
|
|
||
|
struct s {
|
||
|
int a;
|
||
|
int b;
|
||
|
};
|
||
|
|
||
|
void struct_copy_Ok() {
|
||
|
int a[5];
|
||
|
struct s x, y;
|
||
|
x.a = 3;
|
||
|
x.b = 5;
|
||
|
y = x;
|
||
|
a[y.a] = 0;
|
||
|
}
|
||
|
|
||
|
void struct_copy_Bad() {
|
||
|
int a[3];
|
||
|
struct s x, y;
|
||
|
x.a = 3;
|
||
|
x.b = 5;
|
||
|
y = x;
|
||
|
a[y.b] = 0;
|
||
|
}
|
||
|
|
||
|
struct t {
|
||
|
struct s s;
|
||
|
int c;
|
||
|
};
|
||
|
|
||
|
void nested_struct_copy_Ok() {
|
||
|
int a[7];
|
||
|
struct t x, y;
|
||
|
x.s.a = 3;
|
||
|
x.s.b = 5;
|
||
|
x.c = 7;
|
||
|
y = x;
|
||
|
a[y.s.a] = 0;
|
||
|
}
|
||
|
|
||
|
void nested_struct_copy_Bad() {
|
||
|
int a[3];
|
||
|
struct t x, y;
|
||
|
x.s.a = 3;
|
||
|
x.s.b = 5;
|
||
|
x.c = 7;
|
||
|
y = x;
|
||
|
a[y.s.b] = 0;
|
||
|
}
|
||
|
|
||
|
struct s get_struct() {
|
||
|
struct s x;
|
||
|
x.a = 3;
|
||
|
x.b = 5;
|
||
|
return x;
|
||
|
}
|
||
|
|
||
|
void struct_copy_from_function_call_Ok() {
|
||
|
int a[5];
|
||
|
struct s x;
|
||
|
x = get_struct();
|
||
|
a[x.a] = 0;
|
||
|
}
|
||
|
|
||
|
void struct_copy_from_function_call_Bad() {
|
||
|
int a[3];
|
||
|
struct s x;
|
||
|
x = get_struct();
|
||
|
a[x.b] = 0;
|
||
|
}
|
||
|
|
||
|
struct s get_struct_wrapper() {
|
||
|
return get_struct();
|
||
|
}
|
||
|
|
||
|
void struct_copy_from_wrapper_call_Ok() {
|
||
|
int a[5];
|
||
|
struct s x;
|
||
|
x = get_struct_wrapper();
|
||
|
a[x.a] = 0;
|
||
|
}
|
||
|
|
||
|
void struct_copy_from_wrapper_call_Bad() {
|
||
|
int a[3];
|
||
|
struct s x;
|
||
|
x = get_struct_wrapper();
|
||
|
a[x.b] = 0;
|
||
|
}
|
||
|
|
||
|
void struct_copy_decl_Ok() {
|
||
|
int a[5];
|
||
|
struct s x;
|
||
|
x.a = 3;
|
||
|
x.b = 5;
|
||
|
struct s y = x;
|
||
|
a[y.a] = 0;
|
||
|
}
|
||
|
|
||
|
void struct_copy_decl_Bad() {
|
||
|
int a[3];
|
||
|
struct s x;
|
||
|
x.a = 3;
|
||
|
x.b = 5;
|
||
|
struct s y = x;
|
||
|
a[y.b] = 0;
|
||
|
}
|
||
|
|
||
|
void struct_copy_decl_by_function_Ok() {
|
||
|
int a[5];
|
||
|
struct s x = get_struct();
|
||
|
a[x.a] = 0;
|
||
|
}
|
||
|
|
||
|
void struct_copy_decl_by_function_Bad() {
|
||
|
int a[3];
|
||
|
struct s x = get_struct();
|
||
|
a[x.b] = 0;
|
||
|
}
|