mirror of
https://github.com/github/codeql.git
synced 2026-08-04 17:33:18 +02:00
50 lines
879 B
C++
50 lines
879 B
C++
int add(int x, int y)
|
|
{
|
|
return x + y;
|
|
}
|
|
|
|
int sub(int x, int y)
|
|
{
|
|
return x + y;
|
|
}
|
|
|
|
typedef int(*operator_t)(int, int);
|
|
|
|
operator_t good_get_operator(bool which)
|
|
{
|
|
return which ? add : sub;
|
|
}
|
|
|
|
int (*bad_get_operator(bool which))(int, int)
|
|
{
|
|
return which ? add : sub;
|
|
}
|
|
|
|
typedef operator_t (*good_meta_t)(bool);
|
|
typedef int (*(*bad_meta_t)(bool))(int, int);
|
|
|
|
int good_call(operator_t op, int lhs, int rhs)
|
|
{
|
|
return op(lhs, rhs);
|
|
}
|
|
|
|
int bad_call(int(*op)(int, int), int lhs, int rhs)
|
|
{
|
|
return op(lhs, rhs);
|
|
}
|
|
|
|
typedef int (*good_call_t)(operator_t, int, int);
|
|
typedef int (*bad_call_t)(int(*)(int, int), int, int);
|
|
|
|
void usages()
|
|
{
|
|
operator_t good_op = add;
|
|
int (*bad_op)(int, int) = good_op;
|
|
|
|
good_meta_t good_meta_1 = good_get_operator;
|
|
bad_meta_t good_meta_2 = good_meta_1;
|
|
|
|
good_call_t good_call_1 = good_call;
|
|
bad_call_t good_call_2 = good_call_1;
|
|
}
|