mirror of
https://github.com/github/codeql.git
synced 2026-05-05 13:45:19 +02:00
C++: Add testcase demonstrating unexpectly different value numbers
This commit is contained in:
@@ -850,3 +850,297 @@ test.cpp:
|
||||
# 112| v112_7(void) = UnmodeledUse : mu*
|
||||
# 112| v112_8(void) = AliasedUse : m112_3
|
||||
# 112| v112_9(void) = ExitFunction :
|
||||
|
||||
# 124| void test_read_arg_same(A*, int)
|
||||
# 124| Block 0
|
||||
# 124| v124_1(void) = EnterFunction :
|
||||
# 124| m124_2(unknown) = AliasedDefinition :
|
||||
# 124| valnum = unique
|
||||
# 124| m124_3(unknown) = InitializeNonLocal :
|
||||
# 124| valnum = unique
|
||||
# 124| m124_4(unknown) = Chi : total:m124_2, partial:m124_3
|
||||
# 124| valnum = unique
|
||||
# 124| mu124_5(unknown) = UnmodeledDefinition :
|
||||
# 124| valnum = unique
|
||||
# 124| r124_6(glval<A *>) = VariableAddress[pa] :
|
||||
# 124| valnum = r124_6
|
||||
# 124| m124_7(A *) = InitializeParameter[pa] : &:r124_6
|
||||
# 124| valnum = m124_7
|
||||
# 124| r124_8(A *) = Load : &:r124_6, m124_7
|
||||
# 124| valnum = m124_7
|
||||
# 124| m124_9(unknown) = InitializeIndirection[pa] : &:r124_8
|
||||
# 124| valnum = unique
|
||||
# 124| r124_10(glval<int>) = VariableAddress[n] :
|
||||
# 124| valnum = r124_10
|
||||
# 124| m124_11(int) = InitializeParameter[n] : &:r124_10
|
||||
# 124| valnum = m124_11
|
||||
# 125| r125_1(glval<int>) = VariableAddress[b] :
|
||||
# 125| valnum = unique
|
||||
# 125| r125_2(glval<A *>) = VariableAddress[pa] :
|
||||
# 125| valnum = r124_6
|
||||
# 125| r125_3(A *) = Load : &:r125_2, m124_7
|
||||
# 125| valnum = m124_7
|
||||
# 125| r125_4(glval<int>) = FieldAddress[x] : r125_3
|
||||
# 125| valnum = r125_4
|
||||
# 125| r125_5(int) = Load : &:r125_4, ~m124_9
|
||||
# 125| valnum = r125_5
|
||||
# 125| m125_6(int) = Store : &:r125_1, r125_5
|
||||
# 125| valnum = r125_5
|
||||
# 126| r126_1(glval<int>) = VariableAddress[c] :
|
||||
# 126| valnum = unique
|
||||
# 126| r126_2(glval<A *>) = VariableAddress[pa] :
|
||||
# 126| valnum = r124_6
|
||||
# 126| r126_3(A *) = Load : &:r126_2, m124_7
|
||||
# 126| valnum = m124_7
|
||||
# 126| r126_4(glval<int>) = FieldAddress[x] : r126_3
|
||||
# 126| valnum = r125_4
|
||||
# 126| r126_5(int) = Load : &:r126_4, ~m124_9
|
||||
# 126| valnum = r126_5
|
||||
# 126| m126_6(int) = Store : &:r126_1, r126_5
|
||||
# 126| valnum = r126_5
|
||||
# 128| r128_1(glval<int>) = VariableAddress[n] :
|
||||
# 128| valnum = r124_10
|
||||
# 128| r128_2(int) = Load : &:r128_1, m124_11
|
||||
# 128| valnum = m124_11
|
||||
# 128| r128_3(glval<A *>) = VariableAddress[pa] :
|
||||
# 128| valnum = r124_6
|
||||
# 128| r128_4(A *) = Load : &:r128_3, m124_7
|
||||
# 128| valnum = m124_7
|
||||
# 128| r128_5(glval<int>) = FieldAddress[x] : r128_4
|
||||
# 128| valnum = r125_4
|
||||
# 128| m128_6(int) = Store : &:r128_5, r128_2
|
||||
# 128| valnum = m124_11
|
||||
# 128| m128_7(unknown) = Chi : total:m124_9, partial:m128_6
|
||||
# 128| valnum = unique
|
||||
# 129| r129_1(glval<int>) = VariableAddress[d] :
|
||||
# 129| valnum = unique
|
||||
# 129| r129_2(glval<A *>) = VariableAddress[pa] :
|
||||
# 129| valnum = r124_6
|
||||
# 129| r129_3(A *) = Load : &:r129_2, m124_7
|
||||
# 129| valnum = m124_7
|
||||
# 129| r129_4(glval<int>) = FieldAddress[x] : r129_3
|
||||
# 129| valnum = r125_4
|
||||
# 129| r129_5(int) = Load : &:r129_4, m128_6
|
||||
# 129| valnum = m124_11
|
||||
# 129| m129_6(int) = Store : &:r129_1, r129_5
|
||||
# 129| valnum = m124_11
|
||||
# 130| v130_1(void) = NoOp :
|
||||
# 124| v124_12(void) = ReturnIndirection : &:r124_8, ~m128_7
|
||||
# 124| v124_13(void) = ReturnVoid :
|
||||
# 124| v124_14(void) = UnmodeledUse : mu*
|
||||
# 124| v124_15(void) = AliasedUse : m124_3
|
||||
# 124| v124_16(void) = ExitFunction :
|
||||
|
||||
# 135| void test_read_global_same()
|
||||
# 135| Block 0
|
||||
# 135| v135_1(void) = EnterFunction :
|
||||
# 135| m135_2(unknown) = AliasedDefinition :
|
||||
# 135| valnum = unique
|
||||
# 135| m135_3(unknown) = InitializeNonLocal :
|
||||
# 135| valnum = unique
|
||||
# 135| m135_4(unknown) = Chi : total:m135_2, partial:m135_3
|
||||
# 135| valnum = unique
|
||||
# 135| mu135_5(unknown) = UnmodeledDefinition :
|
||||
# 135| valnum = unique
|
||||
# 136| r136_1(glval<int>) = VariableAddress[b] :
|
||||
# 136| valnum = unique
|
||||
# 136| r136_2(glval<A *>) = VariableAddress[global_a] :
|
||||
# 136| valnum = r136_2
|
||||
# 136| r136_3(A *) = Load : &:r136_2, ~m135_3
|
||||
# 136| valnum = unique
|
||||
# 136| r136_4(glval<int>) = FieldAddress[x] : r136_3
|
||||
# 136| valnum = unique
|
||||
# 136| r136_5(int) = Load : &:r136_4, ~m135_4
|
||||
# 136| valnum = r136_5
|
||||
# 136| m136_6(int) = Store : &:r136_1, r136_5
|
||||
# 136| valnum = r136_5
|
||||
# 137| r137_1(glval<int>) = VariableAddress[c] :
|
||||
# 137| valnum = unique
|
||||
# 137| r137_2(glval<A *>) = VariableAddress[global_a] :
|
||||
# 137| valnum = r136_2
|
||||
# 137| r137_3(A *) = Load : &:r137_2, ~m135_3
|
||||
# 137| valnum = unique
|
||||
# 137| r137_4(glval<int>) = FieldAddress[x] : r137_3
|
||||
# 137| valnum = unique
|
||||
# 137| r137_5(int) = Load : &:r137_4, ~m135_4
|
||||
# 137| valnum = r137_5
|
||||
# 137| m137_6(int) = Store : &:r137_1, r137_5
|
||||
# 137| valnum = r137_5
|
||||
# 139| r139_1(glval<int>) = VariableAddress[global_n] :
|
||||
# 139| valnum = unique
|
||||
# 139| r139_2(int) = Load : &:r139_1, ~m135_3
|
||||
# 139| valnum = r139_2
|
||||
# 139| r139_3(glval<A *>) = VariableAddress[global_a] :
|
||||
# 139| valnum = r136_2
|
||||
# 139| r139_4(A *) = Load : &:r139_3, ~m135_3
|
||||
# 139| valnum = unique
|
||||
# 139| r139_5(glval<int>) = FieldAddress[x] : r139_4
|
||||
# 139| valnum = unique
|
||||
# 139| m139_6(int) = Store : &:r139_5, r139_2
|
||||
# 139| valnum = r139_2
|
||||
# 139| m139_7(unknown) = Chi : total:m135_4, partial:m139_6
|
||||
# 139| valnum = unique
|
||||
# 140| r140_1(glval<int>) = VariableAddress[d] :
|
||||
# 140| valnum = unique
|
||||
# 140| r140_2(glval<A *>) = VariableAddress[global_a] :
|
||||
# 140| valnum = r136_2
|
||||
# 140| r140_3(A *) = Load : &:r140_2, ~m139_7
|
||||
# 140| valnum = unique
|
||||
# 140| r140_4(glval<int>) = FieldAddress[x] : r140_3
|
||||
# 140| valnum = unique
|
||||
# 140| r140_5(int) = Load : &:r140_4, ~m139_7
|
||||
# 140| valnum = r140_5
|
||||
# 140| m140_6(int) = Store : &:r140_1, r140_5
|
||||
# 140| valnum = r140_5
|
||||
# 141| v141_1(void) = NoOp :
|
||||
# 135| v135_6(void) = ReturnVoid :
|
||||
# 135| v135_7(void) = UnmodeledUse : mu*
|
||||
# 135| v135_8(void) = AliasedUse : ~m139_7
|
||||
# 135| v135_9(void) = ExitFunction :
|
||||
|
||||
# 143| void test_read_arg_different(A*)
|
||||
# 143| Block 0
|
||||
# 143| v143_1(void) = EnterFunction :
|
||||
# 143| m143_2(unknown) = AliasedDefinition :
|
||||
# 143| valnum = unique
|
||||
# 143| m143_3(unknown) = InitializeNonLocal :
|
||||
# 143| valnum = unique
|
||||
# 143| m143_4(unknown) = Chi : total:m143_2, partial:m143_3
|
||||
# 143| valnum = unique
|
||||
# 143| mu143_5(unknown) = UnmodeledDefinition :
|
||||
# 143| valnum = unique
|
||||
# 143| r143_6(glval<A *>) = VariableAddress[pa] :
|
||||
# 143| valnum = r143_6
|
||||
# 143| m143_7(A *) = InitializeParameter[pa] : &:r143_6
|
||||
# 143| valnum = m143_7
|
||||
# 143| r143_8(A *) = Load : &:r143_6, m143_7
|
||||
# 143| valnum = m143_7
|
||||
# 143| m143_9(unknown) = InitializeIndirection[pa] : &:r143_8
|
||||
# 143| valnum = unique
|
||||
# 144| r144_1(glval<int>) = VariableAddress[b] :
|
||||
# 144| valnum = unique
|
||||
# 144| r144_2(glval<A *>) = VariableAddress[pa] :
|
||||
# 144| valnum = r143_6
|
||||
# 144| r144_3(A *) = Load : &:r144_2, m143_7
|
||||
# 144| valnum = m143_7
|
||||
# 144| r144_4(glval<int>) = FieldAddress[x] : r144_3
|
||||
# 144| valnum = r144_4
|
||||
# 144| r144_5(int) = Load : &:r144_4, ~m143_9
|
||||
# 144| valnum = r144_5
|
||||
# 144| m144_6(int) = Store : &:r144_1, r144_5
|
||||
# 144| valnum = r144_5
|
||||
# 145| r145_1(glval<int>) = VariableAddress[c] :
|
||||
# 145| valnum = unique
|
||||
# 145| r145_2(glval<A *>) = VariableAddress[pa] :
|
||||
# 145| valnum = r143_6
|
||||
# 145| r145_3(A *) = Load : &:r145_2, m143_7
|
||||
# 145| valnum = m143_7
|
||||
# 145| r145_4(glval<int>) = FieldAddress[y] : r145_3
|
||||
# 145| valnum = r145_4
|
||||
# 145| r145_5(int) = Load : &:r145_4, ~m143_9
|
||||
# 145| valnum = r145_5
|
||||
# 145| m145_6(int) = Store : &:r145_1, r145_5
|
||||
# 145| valnum = r145_5
|
||||
# 147| r147_1(glval<int>) = VariableAddress[global_n] :
|
||||
# 147| valnum = unique
|
||||
# 147| r147_2(int) = Load : &:r147_1, ~m143_3
|
||||
# 147| valnum = r147_2
|
||||
# 147| r147_3(glval<A *>) = VariableAddress[pa] :
|
||||
# 147| valnum = r143_6
|
||||
# 147| r147_4(A *) = Load : &:r147_3, m143_7
|
||||
# 147| valnum = m143_7
|
||||
# 147| r147_5(glval<int>) = FieldAddress[y] : r147_4
|
||||
# 147| valnum = r145_4
|
||||
# 147| m147_6(int) = Store : &:r147_5, r147_2
|
||||
# 147| valnum = r147_2
|
||||
# 147| m147_7(unknown) = Chi : total:m143_9, partial:m147_6
|
||||
# 147| valnum = unique
|
||||
# 149| r149_1(glval<int>) = VariableAddress[d] :
|
||||
# 149| valnum = unique
|
||||
# 149| r149_2(glval<A *>) = VariableAddress[pa] :
|
||||
# 149| valnum = r143_6
|
||||
# 149| r149_3(A *) = Load : &:r149_2, m143_7
|
||||
# 149| valnum = m143_7
|
||||
# 149| r149_4(glval<int>) = FieldAddress[x] : r149_3
|
||||
# 149| valnum = r144_4
|
||||
# 149| r149_5(int) = Load : &:r149_4, ~m143_9
|
||||
# 149| valnum = r149_5
|
||||
# 149| m149_6(int) = Store : &:r149_1, r149_5
|
||||
# 149| valnum = r149_5
|
||||
# 150| v150_1(void) = NoOp :
|
||||
# 143| v143_10(void) = ReturnIndirection : &:r143_8, ~m147_7
|
||||
# 143| v143_11(void) = ReturnVoid :
|
||||
# 143| v143_12(void) = UnmodeledUse : mu*
|
||||
# 143| v143_13(void) = AliasedUse : m143_3
|
||||
# 143| v143_14(void) = ExitFunction :
|
||||
|
||||
# 152| void test_read_global_different(int)
|
||||
# 152| Block 0
|
||||
# 152| v152_1(void) = EnterFunction :
|
||||
# 152| m152_2(unknown) = AliasedDefinition :
|
||||
# 152| valnum = unique
|
||||
# 152| m152_3(unknown) = InitializeNonLocal :
|
||||
# 152| valnum = unique
|
||||
# 152| m152_4(unknown) = Chi : total:m152_2, partial:m152_3
|
||||
# 152| valnum = unique
|
||||
# 152| mu152_5(unknown) = UnmodeledDefinition :
|
||||
# 152| valnum = unique
|
||||
# 152| r152_6(glval<int>) = VariableAddress[n] :
|
||||
# 152| valnum = r152_6
|
||||
# 152| m152_7(int) = InitializeParameter[n] : &:r152_6
|
||||
# 152| valnum = m152_7
|
||||
# 153| r153_1(glval<int>) = VariableAddress[b] :
|
||||
# 153| valnum = unique
|
||||
# 153| r153_2(glval<A *>) = VariableAddress[global_a] :
|
||||
# 153| valnum = r153_2
|
||||
# 153| r153_3(A *) = Load : &:r153_2, ~m152_3
|
||||
# 153| valnum = unique
|
||||
# 153| r153_4(glval<int>) = FieldAddress[x] : r153_3
|
||||
# 153| valnum = unique
|
||||
# 153| r153_5(int) = Load : &:r153_4, ~m152_4
|
||||
# 153| valnum = r153_5
|
||||
# 153| m153_6(int) = Store : &:r153_1, r153_5
|
||||
# 153| valnum = r153_5
|
||||
# 154| r154_1(glval<int>) = VariableAddress[c] :
|
||||
# 154| valnum = unique
|
||||
# 154| r154_2(glval<A *>) = VariableAddress[global_a] :
|
||||
# 154| valnum = r153_2
|
||||
# 154| r154_3(A *) = Load : &:r154_2, ~m152_3
|
||||
# 154| valnum = unique
|
||||
# 154| r154_4(glval<int>) = FieldAddress[x] : r154_3
|
||||
# 154| valnum = unique
|
||||
# 154| r154_5(int) = Load : &:r154_4, ~m152_4
|
||||
# 154| valnum = r154_5
|
||||
# 154| m154_6(int) = Store : &:r154_1, r154_5
|
||||
# 154| valnum = r154_5
|
||||
# 156| r156_1(glval<int>) = VariableAddress[n] :
|
||||
# 156| valnum = r152_6
|
||||
# 156| r156_2(int) = Load : &:r156_1, m152_7
|
||||
# 156| valnum = m152_7
|
||||
# 156| r156_3(glval<A *>) = VariableAddress[global_a] :
|
||||
# 156| valnum = r153_2
|
||||
# 156| r156_4(A *) = Load : &:r156_3, ~m152_3
|
||||
# 156| valnum = unique
|
||||
# 156| r156_5(glval<int>) = FieldAddress[y] : r156_4
|
||||
# 156| valnum = unique
|
||||
# 156| m156_6(int) = Store : &:r156_5, r156_2
|
||||
# 156| valnum = m152_7
|
||||
# 156| m156_7(unknown) = Chi : total:m152_4, partial:m156_6
|
||||
# 156| valnum = unique
|
||||
# 158| r158_1(glval<int>) = VariableAddress[d] :
|
||||
# 158| valnum = unique
|
||||
# 158| r158_2(glval<A *>) = VariableAddress[global_a] :
|
||||
# 158| valnum = r153_2
|
||||
# 158| r158_3(A *) = Load : &:r158_2, ~m156_7
|
||||
# 158| valnum = unique
|
||||
# 158| r158_4(glval<int>) = FieldAddress[x] : r158_3
|
||||
# 158| valnum = unique
|
||||
# 158| r158_5(int) = Load : &:r158_4, ~m156_7
|
||||
# 158| valnum = r158_5
|
||||
# 158| m158_6(int) = Store : &:r158_1, r158_5
|
||||
# 158| valnum = r158_5
|
||||
# 159| v159_1(void) = NoOp :
|
||||
# 152| v152_8(void) = ReturnVoid :
|
||||
# 152| v152_9(void) = UnmodeledUse : mu*
|
||||
# 152| v152_10(void) = AliasedUse : ~m156_7
|
||||
# 152| v152_11(void) = ExitFunction :
|
||||
|
||||
@@ -115,3 +115,45 @@ void test06() {
|
||||
"a";
|
||||
"c";
|
||||
}
|
||||
|
||||
struct A {
|
||||
int x;
|
||||
int y;
|
||||
};
|
||||
|
||||
void test_read_arg_same(A *pa, int n) {
|
||||
int b = pa->x;
|
||||
int c = pa->x;
|
||||
|
||||
pa->x = n;
|
||||
int d = pa->x;
|
||||
}
|
||||
|
||||
A* global_a;
|
||||
int global_n;
|
||||
|
||||
void test_read_global_same() {
|
||||
int b = global_a->x;
|
||||
int c = global_a->x;
|
||||
|
||||
global_a->x = global_n;
|
||||
int d = global_a->x;
|
||||
}
|
||||
|
||||
void test_read_arg_different(A *pa) {
|
||||
int b = pa->x;
|
||||
int c = pa->y;
|
||||
|
||||
pa->y = global_n;
|
||||
|
||||
int d = pa->x;
|
||||
}
|
||||
|
||||
void test_read_global_different(int n) {
|
||||
int b = global_a->x;
|
||||
int c = global_a->x;
|
||||
|
||||
global_a->y = n;
|
||||
|
||||
int d = global_a->x;
|
||||
}
|
||||
Reference in New Issue
Block a user