Skip to content

Commit 523aec2

Browse files
authored
Fix shadowed instance fields in dumped points-to set (#188)
1 parent fa1c1ee commit 523aec2

File tree

45 files changed

+147
-116
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+147
-116
lines changed

src/main/java/pascal/taie/analysis/graph/flowgraph/InstanceFieldNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,6 @@ public JField getField() {
4040

4141
@Override
4242
public String toString() {
43-
return "InstanceFieldNode{" + base + "." + field.getName() + "}";
43+
return "InstanceFieldNode{" + base + "." + field.getSignature() + "}";
4444
}
4545
}

src/main/java/pascal/taie/analysis/pta/core/cs/element/InstanceField.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,6 @@ public Type getType() {
6161

6262
@Override
6363
public String toString() {
64-
return base + "." + field.getName();
64+
return base + "." + field.getSignature();
6565
}
6666
}

src/test/java/pascal/taie/analysis/pta/BasicTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public class BasicTest {
5858
"Recursion",
5959
"Cycle",
6060
"ComplexAssign",
61+
"ShadowedFields",
6162
})
6263
void test(String mainClass) {
6364
Tests.testPTA(DIR, mainClass);

src/test/resources/pta/basic/CallField-pta-expected.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ Points-to sets of all variables
2828
Points-to sets of all static fields
2929

3030
Points-to sets of all instance fields
31-
[]:NewObj{<A: void modifyParam()>[3@L21] new B}.c -> [[]:NewObj{<B: void setC(B)>[0@L40] new C}]
32-
[]:NewObj{<A: void setget()>[0@L14] new B}.c -> [[]:NewObj{<A: void setget()>[3@L15] new C}]
31+
[]:NewObj{<A: void modifyParam()>[3@L21] new B}.<B: C c> -> [[]:NewObj{<B: void setC(B)>[0@L40] new C}]
32+
[]:NewObj{<A: void setget()>[0@L14] new B}.<B: C c> -> [[]:NewObj{<A: void setget()>[3@L15] new C}]
3333

3434
Points-to sets of all array indexes
3535
[]:EntryPointObj{alloc=MethodParam{<CallField: void main(java.lang.String[])>/0},type=java.lang.String[] in <CallField: void main(java.lang.String[])>}[*] -> [[]:EntryPointObj{alloc=MethodParam{<CallField: void main(java.lang.String[])>/0}[*],type=java.lang.String in <CallField: void main(java.lang.String[])>}]

src/test/resources/pta/basic/Cycle-pta-expected.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ Points-to sets of all variables
1818
Points-to sets of all static fields
1919

2020
Points-to sets of all instance fields
21-
[]:NewObj{<Cycle: void cycle()>[6@L9] new A}.b -> [[]:NewObj{<Cycle: void cycle()>[0@L7] new B}, []:NewObj{<Cycle: void cycle()>[3@L8] new B}]
22-
[]:NewObj{<Cycle: void cycle()>[9@L10] new A}.b -> [[]:NewObj{<Cycle: void cycle()>[0@L7] new B}, []:NewObj{<Cycle: void cycle()>[3@L8] new B}]
21+
[]:NewObj{<Cycle: void cycle()>[6@L9] new A}.<A: B b> -> [[]:NewObj{<Cycle: void cycle()>[0@L7] new B}, []:NewObj{<Cycle: void cycle()>[3@L8] new B}]
22+
[]:NewObj{<Cycle: void cycle()>[9@L10] new A}.<A: B b> -> [[]:NewObj{<Cycle: void cycle()>[0@L7] new B}, []:NewObj{<Cycle: void cycle()>[3@L8] new B}]
2323

2424
Points-to sets of all array indexes
2525
[]:EntryPointObj{alloc=MethodParam{<Cycle: void main(java.lang.String[])>/0},type=java.lang.String[] in <Cycle: void main(java.lang.String[])>}[*] -> [[]:EntryPointObj{alloc=MethodParam{<Cycle: void main(java.lang.String[])>/0}[*],type=java.lang.String in <Cycle: void main(java.lang.String[])>}]

src/test/resources/pta/basic/InstanceField-pta-expected.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ Points-to sets of all variables
4141
Points-to sets of all static fields
4242

4343
Points-to sets of all instance fields
44-
[]:NewObj{<A: void callField()>[0@L31] new A}.b -> [[]:NewObj{<A: void callField()>[3@L32] new B}]
45-
[]:NewObj{<A: void cycle()>[0@L23] new A}.b -> [[]:NewObj{<A: void cycle()>[3@L24] new B}]
46-
[]:NewObj{<A: void cycle()>[3@L24] new B}.a -> [[]:NewObj{<A: void cycle()>[0@L23] new A}]
47-
[]:NewObj{<A: void longAP()>[0@L15] new A}.b -> [[]:NewObj{<A: void longAP()>[3@L16] new B}]
48-
[]:NewObj{<A: void longAP()>[3@L16] new B}.c -> [[]:NewObj{<A: void longAP()>[7@L17] new C}]
49-
[]:NewObj{<A: void longAP()>[7@L17] new C}.d -> [[]:NewObj{<A: void longAP()>[12@L18] new D}]
44+
[]:NewObj{<A: void callField()>[0@L31] new A}.<A: B b> -> [[]:NewObj{<A: void callField()>[3@L32] new B}]
45+
[]:NewObj{<A: void cycle()>[0@L23] new A}.<A: B b> -> [[]:NewObj{<A: void cycle()>[3@L24] new B}]
46+
[]:NewObj{<A: void cycle()>[3@L24] new B}.<B: A a> -> [[]:NewObj{<A: void cycle()>[0@L23] new A}]
47+
[]:NewObj{<A: void longAP()>[0@L15] new A}.<A: B b> -> [[]:NewObj{<A: void longAP()>[3@L16] new B}]
48+
[]:NewObj{<A: void longAP()>[3@L16] new B}.<B: C c> -> [[]:NewObj{<A: void longAP()>[7@L17] new C}]
49+
[]:NewObj{<A: void longAP()>[7@L17] new C}.<C: D d> -> [[]:NewObj{<A: void longAP()>[12@L18] new D}]
5050

5151
Points-to sets of all array indexes
5252
[]:EntryPointObj{alloc=MethodParam{<InstanceField: void main(java.lang.String[])>/0},type=java.lang.String[] in <InstanceField: void main(java.lang.String[])>}[*] -> [[]:EntryPointObj{alloc=MethodParam{<InstanceField: void main(java.lang.String[])>/0}[*],type=java.lang.String in <InstanceField: void main(java.lang.String[])>}]

src/test/resources/pta/basic/InstanceField2-pta-expected.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ Points-to sets of all variables
1111
Points-to sets of all static fields
1212

1313
Points-to sets of all instance fields
14-
[]:NewObj{<InstanceField2: void entry1()>[0@L11] new InstanceField2}.field -> [[]:NewObj{<InstanceField2: void f()>[0@L19] new java.lang.Object}]
15-
[]:NewObj{<InstanceField2: void entry2()>[0@L15] new InstanceField2}.field -> [[]:NewObj{<InstanceField2: void f()>[0@L19] new java.lang.Object}]
14+
[]:NewObj{<InstanceField2: void entry1()>[0@L11] new InstanceField2}.<InstanceField2: java.lang.Object field> -> [[]:NewObj{<InstanceField2: void f()>[0@L19] new java.lang.Object}]
15+
[]:NewObj{<InstanceField2: void entry2()>[0@L15] new InstanceField2}.<InstanceField2: java.lang.Object field> -> [[]:NewObj{<InstanceField2: void f()>[0@L19] new java.lang.Object}]
1616

1717
Points-to sets of all array indexes
1818
[]:EntryPointObj{alloc=MethodParam{<InstanceField2: void main(java.lang.String[])>/0},type=java.lang.String[] in <InstanceField2: void main(java.lang.String[])>}[*] -> [[]:EntryPointObj{alloc=MethodParam{<InstanceField2: void main(java.lang.String[])>/0}[*],type=java.lang.String in <InstanceField2: void main(java.lang.String[])>}]

src/test/resources/pta/basic/LinkedQueue-pta-expected.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ Points-to sets of all variables
5858
Points-to sets of all static fields
5959

6060
Points-to sets of all instance fields
61-
[]:NewObj{<LinkedQueue: void enqueue(java.lang.Object)>[1@L33] new Node}.item -> [[]:NewObj{<LinkedQueue: void main(java.lang.String[])>[3@L90] new java.lang.Object}, []:NewObj{<LinkedQueue: void main(java.lang.String[])>[6@L91] new java.lang.Object}]
62-
[]:NewObj{<LinkedQueue: void enqueue(java.lang.Object)>[1@L33] new Node}.next -> [[]:NewObj{<LinkedQueue: void enqueue(java.lang.Object)>[1@L33] new Node}]
63-
[]:NewObj{<LinkedQueue: void main(java.lang.String[])>[0@L89] new LinkedQueue}.first -> [[]:NewObj{<LinkedQueue: void enqueue(java.lang.Object)>[1@L33] new Node}]
64-
[]:NewObj{<LinkedQueue: void main(java.lang.String[])>[0@L89] new LinkedQueue}.last -> [[]:NewObj{<LinkedQueue: void enqueue(java.lang.Object)>[1@L33] new Node}]
61+
[]:NewObj{<LinkedQueue: void enqueue(java.lang.Object)>[1@L33] new Node}.<Node: Node next> -> [[]:NewObj{<LinkedQueue: void enqueue(java.lang.Object)>[1@L33] new Node}]
62+
[]:NewObj{<LinkedQueue: void enqueue(java.lang.Object)>[1@L33] new Node}.<Node: java.lang.Object item> -> [[]:NewObj{<LinkedQueue: void main(java.lang.String[])>[3@L90] new java.lang.Object}, []:NewObj{<LinkedQueue: void main(java.lang.String[])>[6@L91] new java.lang.Object}]
63+
[]:NewObj{<LinkedQueue: void main(java.lang.String[])>[0@L89] new LinkedQueue}.<LinkedQueue: Node first> -> [[]:NewObj{<LinkedQueue: void enqueue(java.lang.Object)>[1@L33] new Node}]
64+
[]:NewObj{<LinkedQueue: void main(java.lang.String[])>[0@L89] new LinkedQueue}.<LinkedQueue: Node last> -> [[]:NewObj{<LinkedQueue: void enqueue(java.lang.Object)>[1@L33] new Node}]
6565

6666
Points-to sets of all array indexes
6767
[]:EntryPointObj{alloc=MethodParam{<LinkedQueue: void main(java.lang.String[])>/0},type=java.lang.String[] in <LinkedQueue: void main(java.lang.String[])>}[*] -> [[]:EntryPointObj{alloc=MethodParam{<LinkedQueue: void main(java.lang.String[])>/0}[*],type=java.lang.String in <LinkedQueue: void main(java.lang.String[])>}]

src/test/resources/pta/basic/NativeModel-pta-expected.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ Points-to sets of all static fields
5353
<NativeModel: A staticA> -> [[]:NewObj{<NativeModel$1Anonymous0: A run()>[0@L33] new A}]
5454

5555
Points-to sets of all instance fields
56-
[]:NewObj{<NativeModel: void compareAndSwapObject()>[16@L49] new A}.obj -> [[]:NewObj{<NativeModel: void compareAndSwapObject()>[19@L50] new java.lang.Object}]
57-
[]:NewObj{<NativeModel: void compareAndSwapObject()>[16@L49] new A}.str -> [[]:ConstantObj{java.lang.String: "x"}]
56+
[]:NewObj{<NativeModel: void compareAndSwapObject()>[16@L49] new A}.<A: java.lang.Object obj> -> [[]:NewObj{<NativeModel: void compareAndSwapObject()>[19@L50] new java.lang.Object}]
57+
[]:NewObj{<NativeModel: void compareAndSwapObject()>[16@L49] new A}.<A: java.lang.String str> -> [[]:ConstantObj{java.lang.String: "x"}]
5858

5959
Points-to sets of all array indexes
6060
[]:EntryPointObj{alloc=MethodParam{<NativeModel: void main(java.lang.String[])>/0},type=java.lang.String[] in <NativeModel: void main(java.lang.String[])>}[*] -> [[]:EntryPointObj{alloc=MethodParam{<NativeModel: void main(java.lang.String[])>/0}[*],type=java.lang.String in <NativeModel: void main(java.lang.String[])>}]

src/test/resources/pta/basic/Primitives-pta-expected.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ Points-to sets of all variables
1919
Points-to sets of all static fields
2020

2121
Points-to sets of all instance fields
22-
[]:NewObj{<Primitives: void main(java.lang.String[])>[3@L8] new A}.i1 -> [[]:NumberObj{alloc=333,type=int}]
23-
[]:NewObj{<Primitives: void main(java.lang.String[])>[7@L10] new A}.i1 -> [[]:NumberObj{alloc=333,type=int}]
24-
[]:NewObj{<Primitives: void main(java.lang.String[])>[7@L10] new A}.i2 -> [[]:NumberObj{alloc=666,type=int}]
22+
[]:NewObj{<Primitives: void main(java.lang.String[])>[3@L8] new A}.<A: int i1> -> [[]:NumberObj{alloc=333,type=int}]
23+
[]:NewObj{<Primitives: void main(java.lang.String[])>[7@L10] new A}.<A: int i1> -> [[]:NumberObj{alloc=333,type=int}]
24+
[]:NewObj{<Primitives: void main(java.lang.String[])>[7@L10] new A}.<A: int i2> -> [[]:NumberObj{alloc=666,type=int}]
2525

2626
Points-to sets of all array indexes
2727
[]:EntryPointObj{alloc=MethodParam{<Primitives: void main(java.lang.String[])>/0},type=java.lang.String[] in <Primitives: void main(java.lang.String[])>}[*] -> [[]:EntryPointObj{alloc=MethodParam{<Primitives: void main(java.lang.String[])>/0}[*],type=java.lang.String in <Primitives: void main(java.lang.String[])>}]

0 commit comments

Comments
 (0)