mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
115 lines
1.3 KiB
C++
115 lines
1.3 KiB
C++
class X
|
|
{
|
|
public:
|
|
void set();
|
|
};
|
|
|
|
class Y
|
|
{
|
|
public:
|
|
Y* f();
|
|
|
|
const X* get() const { return 0; }
|
|
X* get() { return 0; }
|
|
};
|
|
|
|
Y* Y::f()
|
|
{
|
|
if ( get() )
|
|
get()->set();
|
|
return 0;
|
|
}
|
|
|
|
class Error {
|
|
public:
|
|
Error() {}
|
|
};
|
|
|
|
bool getABool();
|
|
|
|
void doSomething(int x) {
|
|
if (x == -1) {
|
|
throw new Error();
|
|
}
|
|
}
|
|
|
|
void doSomethingElse(int x);
|
|
|
|
bool testWithCatch0(int v)
|
|
{
|
|
try
|
|
{
|
|
if( getABool() )
|
|
{
|
|
doSomething(v);
|
|
return true;
|
|
}
|
|
}
|
|
catch(Error &e)
|
|
{
|
|
doSomethingElse(v);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void use1(int);
|
|
void use2(int);
|
|
void use3(int);
|
|
|
|
void test_switches_simple(int i) {
|
|
switch(i) {
|
|
case 0:
|
|
use1(i);
|
|
break;
|
|
case 1:
|
|
use2(i);
|
|
/* NOTE: fallthrough */
|
|
case 2:
|
|
use3(i);
|
|
}
|
|
}
|
|
|
|
void test_switches_range(int i) {
|
|
switch(i) {
|
|
case 0 ... 10:
|
|
use1(i);
|
|
break;
|
|
case 11 ... 20:
|
|
use2(i);
|
|
}
|
|
}
|
|
|
|
void test_switches_default(int i) {
|
|
switch(i) {
|
|
default:
|
|
use1(i);
|
|
}
|
|
}
|
|
|
|
void use(...);
|
|
|
|
void pointer_comparison(char* c) {
|
|
if(c) {
|
|
use(c);
|
|
}
|
|
}
|
|
|
|
void implicit_float_comparison(float f) {
|
|
if(f) {
|
|
use(f);
|
|
}
|
|
}
|
|
|
|
void explicit_float_comparison(float f) {
|
|
if(f != 0.0f) {
|
|
use(f);
|
|
}
|
|
}
|
|
|
|
void int_float_comparison(int i) {
|
|
if(i != 0.0f) {
|
|
use(i);
|
|
}
|
|
}
|