struct Data1;
struct Data1
{
int val;
Data1 *ptrval;
int arr[3];
};
struct Data2 : public Data1
{
};
int k;
void paranuckerInternalTest(const char *action, const char *collection, const char *values);
class Object1
{
Data1 *tmp1;
Data1 *tmp2;
Data1 *getData()
{
return tmp1;
}
void func1(Data1 *ptr1)
{
paranuckerInternalTest("=", "knownVars", "ptr1");
paranuckerInternalTest("=", "knownNonNullVars", "");
paranuckerInternalTest("=", "knownNullVars", "");
paranuckerInternalTest("=", "needCheckNullVars", "ptr1");
// null || 9 -> return
// null || 10 -> return
// 123 || 9 -> continue
// 123 || 10 -> return
if (!ptr1 || ptr1->val == 10)
{
paranuckerInternalTest("=", "knownVars", "ptr1");
paranuckerInternalTest("=", "knownNonNullVars", "");
paranuckerInternalTest("=", "knownNullVars", "");
paranuckerInternalTest("=", "needCheckNullVars", "ptr1");
return;
}
else
{
paranuckerInternalTest("=", "knownVars", "ptr1");
paranuckerInternalTest("=", "knownNonNullVars", "ptr1");
paranuckerInternalTest("=", "knownNullVars", "");
paranuckerInternalTest("=", "needCheckNullVars", "");
}
paranuckerInternalTest("=", "knownVars", "ptr1");
paranuckerInternalTest("=", "knownNonNullVars", "ptr1");
paranuckerInternalTest("=", "knownNullVars", "");
paranuckerInternalTest("=", "needCheckNullVars", "");
}
void func2(Data1 *ptr1)
{
paranuckerInternalTest("=", "knownVars", "ptr1");
paranuckerInternalTest("=", "knownNonNullVars", "");
paranuckerInternalTest("=", "knownNullVars", "");
paranuckerInternalTest("=", "needCheckNullVars", "ptr1");
// null && 9 -> continue
// null && 10 -> return
// 123 && 9 -> continue
// 123 && 10 -> continue
if (!ptr1 && ptr1->val == 10)
{
paranuckerInternalTest("=", "knownVars", "ptr1");
paranuckerInternalTest("=", "knownNonNullVars", "");
paranuckerInternalTest("=", "knownNullVars", "ptr1");
paranuckerInternalTest("=", "needCheckNullVars", "ptr1");
return;
}
else
{
paranuckerInternalTest("=", "knownVars", "ptr1");
paranuckerInternalTest("=", "knownNonNullVars", "");
paranuckerInternalTest("=", "knownNullVars", "");
paranuckerInternalTest("=", "needCheckNullVars", "ptr1");
}
paranuckerInternalTest("=", "knownVars", "ptr1");
paranuckerInternalTest("=", "knownNonNullVars", "");
paranuckerInternalTest("=", "knownNullVars", "");
paranuckerInternalTest("=", "needCheckNullVars", "ptr1");
}
void func3(Data1 *ptr1)
{
paranuckerInternalTest("=", "knownVars", "ptr1");
paranuckerInternalTest("=", "knownNonNullVars", "");
paranuckerInternalTest("=", "knownNullVars", "");
paranuckerInternalTest("=", "needCheckNullVars", "ptr1");
// null && 9 -> continue
// null && 10 -> continue
// 123 && 9 -> continue
// 123 && 10 -> return
if (ptr1 && ptr1->val == 10)
{
paranuckerInternalTest("=", "knownVars", "ptr1");
paranuckerInternalTest("=", "knownNonNullVars", "ptr1");
paranuckerInternalTest("=", "knownNullVars", "");
paranuckerInternalTest("=", "needCheckNullVars", "");
return;
}
else
{
paranuckerInternalTest("=", "knownVars", "ptr1");
paranuckerInternalTest("=", "knownNonNullVars", "");
paranuckerInternalTest("=", "knownNullVars", "");
paranuckerInternalTest("=", "needCheckNullVars", "ptr1");
}
paranuckerInternalTest("=", "knownVars", "ptr1");
paranuckerInternalTest("=", "knownNonNullVars", "");
paranuckerInternalTest("=", "knownNullVars", "");
paranuckerInternalTest("=", "needCheckNullVars", "ptr1");
}
void func4(Data1 *ptr1, Data1 *ptr2) __attribute__((nonnull (3)))
{
paranuckerInternalTest("=", "knownVars", "ptr1 ptr2");
paranuckerInternalTest("=", "knownNonNullVars", "ptr2");
paranuckerInternalTest("=", "knownNullVars", "");
paranuckerInternalTest("=", "needCheckNullVars", "ptr1");
if (!ptr2)
return;
paranuckerInternalTest("=", "knownVars", "ptr1 ptr2");
paranuckerInternalTest("=", "knownNonNullVars", "ptr2");
paranuckerInternalTest("=", "knownNullVars", "");
paranuckerInternalTest("=", "needCheckNullVars", "ptr1");
}
};