Skip to content

Commit fdb0c6e

Browse files
authored
Merge pull request #20454 from paldepind/rust/path-resolution-attribute-expansion
Rust: Account for attribute expansions in path resolution
2 parents 523ec9d + afb6d30 commit fdb0c6e

File tree

6 files changed

+147
-87
lines changed

6 files changed

+147
-87
lines changed

rust/ql/lib/codeql/rust/internal/PathResolution.qll

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,24 @@ private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind ki
7878
)
7979
}
8080

81+
/**
82+
* Holds if `n` is superseded by an attribute macro expansion. That is, `n` is
83+
* an item or a transitive child of an item with an attribute macro expansion.
84+
*/
85+
predicate supersededByAttributeMacroExpansion(AstNode n) {
86+
n.(Item).hasAttributeMacroExpansion()
87+
or
88+
exists(AstNode parent |
89+
n.getParentNode() = parent and
90+
supersededByAttributeMacroExpansion(parent) and
91+
// Don't exclude expansions themselves as they supercede other nodes.
92+
not n = parent.(Item).getAttributeMacroExpansion() and
93+
// Don't consider attributes themselves to be superseded. E.g., in `#[a] fn
94+
// f() {}` the macro expansion supercedes `fn f() {}` but not `#[a]`.
95+
not n instanceof Attr
96+
)
97+
}
98+
8199
/**
82100
* An item that may be referred to by a path, and which is a node in
83101
* the _item graph_.
@@ -156,6 +174,11 @@ private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind ki
156174
* - https://doc.rust-lang.org/reference/names/namespaces.html
157175
*/
158176
abstract class ItemNode extends Locatable {
177+
ItemNode() {
178+
// Exclude items that are superseded by the expansion of an attribute macro.
179+
not supersededByAttributeMacroExpansion(this)
180+
}
181+
159182
/** Gets the (original) name of this item. */
160183
abstract string getName();
161184

@@ -660,11 +683,7 @@ final class ImplItemNode extends ImplOrTraitItemNode instanceof Impl {
660683

661684
override Visibility getVisibility() { result = Impl.super.getVisibility() }
662685

663-
TypeParamItemNode getBlanketImplementationTypeParam() {
664-
result = this.resolveSelfTy() and
665-
// This impl block is not superseded by the expansion of an attribute macro.
666-
not exists(super.getAttributeMacroExpansion())
667-
}
686+
TypeParamItemNode getBlanketImplementationTypeParam() { result = this.resolveSelfTy() }
668687

669688
/**
670689
* Holds if this impl block is a blanket implementation. That is, the
@@ -1806,6 +1825,8 @@ private module Debug {
18061825
path = p.toStringDebug()
18071826
}
18081827

1828+
predicate debugItemNode(ItemNode item) { item = getRelevantLocatable() }
1829+
18091830
ItemNode debugResolvePath(RelevantPath path) {
18101831
path = getRelevantLocatable() and
18111832
result = resolvePath(path)

rust/ql/lib/utils/test/PathResolutionInlineExpectationsTest.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ private module ResolveTest implements TestSig {
2525

2626
private predicate item(ItemNode i, string value) {
2727
exists(string filepath, int line, boolean inMacro | itemAt(i, filepath, line, inMacro) |
28-
commmentAt(value, filepath, line) and inMacro = false
28+
commmentAt(value, filepath, line)
2929
or
30-
not (commmentAt(_, filepath, line) and inMacro = false) and
30+
not commmentAt(_, filepath, line) and
3131
value = i.getName()
3232
)
3333
}

rust/ql/test/library-tests/path-resolution/main.rs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -767,6 +767,27 @@ use std::{self as ztd}; // $ item=std
767767

768768
fn use_ztd(x: ztd::string::String) {} // $ item=String
769769

770+
#[rustfmt::skip]
771+
mod impl_with_attribute_macro {
772+
struct Foo; // IFoo
773+
774+
trait ATrait {
775+
type Foo;
776+
} // IATrait
777+
778+
#[proc_macro::identity] // $ item=identity
779+
impl ATrait for i64 { // $ item=IATrait item=i64
780+
type Foo =
781+
i64 // $ item=i64
782+
; // IATrait_i64_Foo
783+
}
784+
785+
pub fn test() {
786+
// This should resolve to the struct, not the associated type.
787+
let _x: Foo; // $ item=IFoo
788+
} // impl_with_attribute_macro::test
789+
}
790+
770791
fn main() {
771792
my::nested::nested1::nested2::f(); // $ item=I4
772793
my::f(); // $ item=I38
@@ -798,8 +819,8 @@ fn main() {
798819
m23::f(); // $ item=I108
799820
m24::f(); // $ item=I121
800821
zelf::h(); // $ item=I25
801-
z_changed(); // $ MISSING: item=I122
802-
AStruct::z_on_type(); // $ MISSING: item=I124
803-
AStruct {} // $ item=I123
804-
.z_on_instance(); // MISSING: item=I125
822+
z_changed(); // $ item=I122
823+
AStruct::z_on_type(); // $ item=I124
824+
AStruct {}.z_on_instance(); // $ item=I123 item=I125
825+
impl_with_attribute_macro::test(); // $ item=impl_with_attribute_macro::test
805826
}

rust/ql/test/library-tests/path-resolution/path-resolution.expected

Lines changed: 86 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ mod
3131
| main.rs:600:1:625:1 | mod m23 |
3232
| main.rs:627:1:695:1 | mod m24 |
3333
| main.rs:712:1:764:1 | mod associated_types |
34+
| main.rs:770:1:789:1 | mod impl_with_attribute_macro |
3435
| my2/mod.rs:1:1:1:16 | mod nested2 |
3536
| my2/mod.rs:18:1:18:12 | mod my3 |
3637
| my2/mod.rs:20:1:21:10 | mod mymod |
@@ -66,7 +67,7 @@ resolvePath
6667
| main.rs:36:17:36:21 | super | main.rs:24:5:42:5 | mod m2 |
6768
| main.rs:36:17:36:24 | ...::f | main.rs:25:9:27:9 | fn f |
6869
| main.rs:39:17:39:17 | f | main.rs:25:9:27:9 | fn f |
69-
| main.rs:46:9:46:13 | super | main.rs:1:1:805:2 | SourceFile |
70+
| main.rs:46:9:46:13 | super | main.rs:1:1:826:2 | SourceFile |
7071
| main.rs:46:9:46:17 | ...::m1 | main.rs:19:1:43:1 | mod m1 |
7172
| main.rs:46:9:46:21 | ...::m2 | main.rs:24:5:42:5 | mod m2 |
7273
| main.rs:46:9:46:24 | ...::g | main.rs:29:9:33:9 | fn g |
@@ -78,7 +79,7 @@ resolvePath
7879
| main.rs:67:17:67:19 | Foo | main.rs:65:9:65:21 | struct Foo |
7980
| main.rs:70:13:70:15 | Foo | main.rs:59:5:59:17 | struct Foo |
8081
| main.rs:72:5:72:5 | f | main.rs:61:5:68:5 | fn f |
81-
| main.rs:74:5:74:8 | self | main.rs:1:1:805:2 | SourceFile |
82+
| main.rs:74:5:74:8 | self | main.rs:1:1:826:2 | SourceFile |
8283
| main.rs:74:5:74:11 | ...::i | main.rs:77:1:89:1 | fn i |
8384
| main.rs:80:13:80:15 | Foo | main.rs:54:1:54:13 | struct Foo |
8485
| main.rs:84:16:84:18 | i32 | {EXTERNAL LOCATION} | struct i32 |
@@ -93,7 +94,7 @@ resolvePath
9394
| main.rs:93:57:93:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g |
9495
| main.rs:93:80:93:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
9596
| main.rs:106:5:106:22 | f_defined_in_macro | main.rs:105:18:105:42 | fn f_defined_in_macro |
96-
| main.rs:123:13:123:17 | super | main.rs:1:1:805:2 | SourceFile |
97+
| main.rs:123:13:123:17 | super | main.rs:1:1:826:2 | SourceFile |
9798
| main.rs:123:13:123:21 | ...::m5 | main.rs:109:1:113:1 | mod m5 |
9899
| main.rs:124:9:124:9 | f | main.rs:110:5:112:5 | fn f |
99100
| main.rs:124:9:124:9 | f | main.rs:116:5:118:5 | fn f |
@@ -303,12 +304,12 @@ resolvePath
303304
| main.rs:693:9:693:47 | ...::call_both | main.rs:659:9:662:9 | fn call_both |
304305
| main.rs:693:25:693:35 | Implementor | main.rs:665:5:665:23 | struct Implementor |
305306
| main.rs:699:3:699:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) |
306-
| main.rs:699:3:699:24 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix |
307+
| main.rs:699:3:699:24 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix |
307308
| main.rs:703:6:703:12 | AStruct | main.rs:702:1:702:17 | struct AStruct |
308309
| main.rs:705:7:705:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) |
309-
| main.rs:705:7:705:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix |
310+
| main.rs:705:7:705:28 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix |
310311
| main.rs:708:7:708:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) |
311-
| main.rs:708:7:708:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix |
312+
| main.rs:708:7:708:28 | ...::add_suffix | proc_macro.rs:4:1:13:1 | fn add_suffix |
312313
| main.rs:713:9:713:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) |
313314
| main.rs:713:9:713:19 | ...::marker | {EXTERNAL LOCATION} | mod marker |
314315
| main.rs:713:9:713:32 | ...::PhantomData | {EXTERNAL LOCATION} | struct PhantomData |
@@ -349,71 +350,81 @@ resolvePath
349350
| main.rs:768:15:768:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) |
350351
| main.rs:768:15:768:25 | ...::string | {EXTERNAL LOCATION} | mod string |
351352
| main.rs:768:15:768:33 | ...::String | {EXTERNAL LOCATION} | struct String |
352-
| main.rs:771:5:771:6 | my | main.rs:1:1:1:7 | mod my |
353-
| main.rs:771:5:771:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
354-
| main.rs:771:5:771:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
355-
| main.rs:771:5:771:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
356-
| main.rs:771:5:771:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
357-
| main.rs:772:5:772:6 | my | main.rs:1:1:1:7 | mod my |
358-
| main.rs:772:5:772:9 | ...::f | my.rs:5:1:7:1 | fn f |
359-
| main.rs:773:5:773:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
360-
| main.rs:773:5:773:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
361-
| main.rs:773:5:773:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
362-
| main.rs:773:5:773:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
363-
| main.rs:774:5:774:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
364-
| main.rs:775:5:775:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
365-
| main.rs:776:5:776:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) |
366-
| main.rs:776:5:776:12 | ...::h | main.rs:56:1:75:1 | fn h |
367-
| main.rs:777:5:777:6 | m1 | main.rs:19:1:43:1 | mod m1 |
368-
| main.rs:777:5:777:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 |
369-
| main.rs:777:5:777:13 | ...::g | main.rs:29:9:33:9 | fn g |
370-
| main.rs:778:5:778:6 | m1 | main.rs:19:1:43:1 | mod m1 |
371-
| main.rs:778:5:778:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 |
372-
| main.rs:778:5:778:14 | ...::m3 | main.rs:35:9:41:9 | mod m3 |
373-
| main.rs:778:5:778:17 | ...::h | main.rs:36:27:40:13 | fn h |
374-
| main.rs:779:5:779:6 | m4 | main.rs:45:1:52:1 | mod m4 |
375-
| main.rs:779:5:779:9 | ...::i | main.rs:48:5:51:5 | fn i |
376-
| main.rs:780:5:780:5 | h | main.rs:56:1:75:1 | fn h |
377-
| main.rs:781:5:781:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
378-
| main.rs:782:5:782:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
379-
| main.rs:783:5:783:5 | j | main.rs:103:1:107:1 | fn j |
380-
| main.rs:784:5:784:6 | m6 | main.rs:115:1:126:1 | mod m6 |
381-
| main.rs:784:5:784:9 | ...::g | main.rs:120:5:125:5 | fn g |
382-
| main.rs:785:5:785:6 | m7 | main.rs:128:1:147:1 | mod m7 |
383-
| main.rs:785:5:785:9 | ...::f | main.rs:139:5:146:5 | fn f |
384-
| main.rs:786:5:786:6 | m8 | main.rs:149:1:203:1 | mod m8 |
385-
| main.rs:786:5:786:9 | ...::g | main.rs:187:5:202:5 | fn g |
386-
| main.rs:787:5:787:6 | m9 | main.rs:205:1:213:1 | mod m9 |
387-
| main.rs:787:5:787:9 | ...::f | main.rs:208:5:212:5 | fn f |
388-
| main.rs:788:5:788:7 | m11 | main.rs:236:1:273:1 | mod m11 |
389-
| main.rs:788:5:788:10 | ...::f | main.rs:241:5:244:5 | fn f |
390-
| main.rs:789:5:789:7 | m15 | main.rs:304:1:373:1 | mod m15 |
391-
| main.rs:789:5:789:10 | ...::f | main.rs:360:5:372:5 | fn f |
392-
| main.rs:790:5:790:7 | m16 | main.rs:375:1:467:1 | mod m16 |
393-
| main.rs:790:5:790:10 | ...::f | main.rs:442:5:466:5 | fn f |
394-
| main.rs:791:5:791:20 | trait_visibility | main.rs:469:1:519:1 | mod trait_visibility |
395-
| main.rs:791:5:791:23 | ...::f | main.rs:496:5:518:5 | fn f |
396-
| main.rs:792:5:792:7 | m17 | main.rs:521:1:551:1 | mod m17 |
397-
| main.rs:792:5:792:10 | ...::f | main.rs:545:5:550:5 | fn f |
398-
| main.rs:793:5:793:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
399-
| main.rs:793:5:793:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
400-
| main.rs:794:5:794:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
401-
| main.rs:794:5:794:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f |
402-
| main.rs:795:5:795:7 | my3 | my2/mod.rs:18:1:18:12 | mod my3 |
403-
| main.rs:795:5:795:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f |
404-
| main.rs:796:5:796:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
405-
| main.rs:797:5:797:7 | m18 | main.rs:553:1:571:1 | mod m18 |
406-
| main.rs:797:5:797:12 | ...::m19 | main.rs:558:5:570:5 | mod m19 |
407-
| main.rs:797:5:797:17 | ...::m20 | main.rs:563:9:569:9 | mod m20 |
408-
| main.rs:797:5:797:20 | ...::g | main.rs:564:13:568:13 | fn g |
409-
| main.rs:798:5:798:7 | m23 | main.rs:600:1:625:1 | mod m23 |
410-
| main.rs:798:5:798:10 | ...::f | main.rs:620:5:624:5 | fn f |
411-
| main.rs:799:5:799:7 | m24 | main.rs:627:1:695:1 | mod m24 |
412-
| main.rs:799:5:799:10 | ...::f | main.rs:681:5:694:5 | fn f |
413-
| main.rs:800:5:800:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) |
414-
| main.rs:800:5:800:11 | ...::h | main.rs:56:1:75:1 | fn h |
415-
| main.rs:802:5:802:11 | AStruct | main.rs:702:1:702:17 | struct AStruct |
416-
| main.rs:803:5:803:11 | AStruct | main.rs:702:1:702:17 | struct AStruct |
353+
| main.rs:778:7:778:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) |
354+
| main.rs:778:7:778:26 | ...::identity | proc_macro.rs:15:1:18:1 | fn identity |
355+
| main.rs:779:10:779:15 | ATrait | main.rs:774:5:776:5 | trait ATrait |
356+
| main.rs:779:21:779:23 | i64 | {EXTERNAL LOCATION} | struct i64 |
357+
| main.rs:781:11:781:13 | i64 | {EXTERNAL LOCATION} | struct i64 |
358+
| main.rs:787:17:787:19 | Foo | main.rs:772:5:772:15 | struct Foo |
359+
| main.rs:792:5:792:6 | my | main.rs:1:1:1:7 | mod my |
360+
| main.rs:792:5:792:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
361+
| main.rs:792:5:792:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
362+
| main.rs:792:5:792:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
363+
| main.rs:792:5:792:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
364+
| main.rs:793:5:793:6 | my | main.rs:1:1:1:7 | mod my |
365+
| main.rs:793:5:793:9 | ...::f | my.rs:5:1:7:1 | fn f |
366+
| main.rs:794:5:794:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
367+
| main.rs:794:5:794:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
368+
| main.rs:794:5:794:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
369+
| main.rs:794:5:794:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
370+
| main.rs:795:5:795:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
371+
| main.rs:796:5:796:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
372+
| main.rs:797:5:797:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) |
373+
| main.rs:797:5:797:12 | ...::h | main.rs:56:1:75:1 | fn h |
374+
| main.rs:798:5:798:6 | m1 | main.rs:19:1:43:1 | mod m1 |
375+
| main.rs:798:5:798:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 |
376+
| main.rs:798:5:798:13 | ...::g | main.rs:29:9:33:9 | fn g |
377+
| main.rs:799:5:799:6 | m1 | main.rs:19:1:43:1 | mod m1 |
378+
| main.rs:799:5:799:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 |
379+
| main.rs:799:5:799:14 | ...::m3 | main.rs:35:9:41:9 | mod m3 |
380+
| main.rs:799:5:799:17 | ...::h | main.rs:36:27:40:13 | fn h |
381+
| main.rs:800:5:800:6 | m4 | main.rs:45:1:52:1 | mod m4 |
382+
| main.rs:800:5:800:9 | ...::i | main.rs:48:5:51:5 | fn i |
383+
| main.rs:801:5:801:5 | h | main.rs:56:1:75:1 | fn h |
384+
| main.rs:802:5:802:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
385+
| main.rs:803:5:803:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
386+
| main.rs:804:5:804:5 | j | main.rs:103:1:107:1 | fn j |
387+
| main.rs:805:5:805:6 | m6 | main.rs:115:1:126:1 | mod m6 |
388+
| main.rs:805:5:805:9 | ...::g | main.rs:120:5:125:5 | fn g |
389+
| main.rs:806:5:806:6 | m7 | main.rs:128:1:147:1 | mod m7 |
390+
| main.rs:806:5:806:9 | ...::f | main.rs:139:5:146:5 | fn f |
391+
| main.rs:807:5:807:6 | m8 | main.rs:149:1:203:1 | mod m8 |
392+
| main.rs:807:5:807:9 | ...::g | main.rs:187:5:202:5 | fn g |
393+
| main.rs:808:5:808:6 | m9 | main.rs:205:1:213:1 | mod m9 |
394+
| main.rs:808:5:808:9 | ...::f | main.rs:208:5:212:5 | fn f |
395+
| main.rs:809:5:809:7 | m11 | main.rs:236:1:273:1 | mod m11 |
396+
| main.rs:809:5:809:10 | ...::f | main.rs:241:5:244:5 | fn f |
397+
| main.rs:810:5:810:7 | m15 | main.rs:304:1:373:1 | mod m15 |
398+
| main.rs:810:5:810:10 | ...::f | main.rs:360:5:372:5 | fn f |
399+
| main.rs:811:5:811:7 | m16 | main.rs:375:1:467:1 | mod m16 |
400+
| main.rs:811:5:811:10 | ...::f | main.rs:442:5:466:5 | fn f |
401+
| main.rs:812:5:812:20 | trait_visibility | main.rs:469:1:519:1 | mod trait_visibility |
402+
| main.rs:812:5:812:23 | ...::f | main.rs:496:5:518:5 | fn f |
403+
| main.rs:813:5:813:7 | m17 | main.rs:521:1:551:1 | mod m17 |
404+
| main.rs:813:5:813:10 | ...::f | main.rs:545:5:550:5 | fn f |
405+
| main.rs:814:5:814:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
406+
| main.rs:814:5:814:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
407+
| main.rs:815:5:815:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
408+
| main.rs:815:5:815:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f |
409+
| main.rs:816:5:816:7 | my3 | my2/mod.rs:18:1:18:12 | mod my3 |
410+
| main.rs:816:5:816:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f |
411+
| main.rs:817:5:817:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
412+
| main.rs:818:5:818:7 | m18 | main.rs:553:1:571:1 | mod m18 |
413+
| main.rs:818:5:818:12 | ...::m19 | main.rs:558:5:570:5 | mod m19 |
414+
| main.rs:818:5:818:17 | ...::m20 | main.rs:563:9:569:9 | mod m20 |
415+
| main.rs:818:5:818:20 | ...::g | main.rs:564:13:568:13 | fn g |
416+
| main.rs:819:5:819:7 | m23 | main.rs:600:1:625:1 | mod m23 |
417+
| main.rs:819:5:819:10 | ...::f | main.rs:620:5:624:5 | fn f |
418+
| main.rs:820:5:820:7 | m24 | main.rs:627:1:695:1 | mod m24 |
419+
| main.rs:820:5:820:10 | ...::f | main.rs:681:5:694:5 | fn f |
420+
| main.rs:821:5:821:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) |
421+
| main.rs:821:5:821:11 | ...::h | main.rs:56:1:75:1 | fn h |
422+
| main.rs:822:5:822:13 | z_changed | main.rs:700:1:700:8 | fn z_changed |
423+
| main.rs:823:5:823:11 | AStruct | main.rs:702:1:702:17 | struct AStruct |
424+
| main.rs:823:5:823:22 | ...::z_on_type | main.rs:706:5:706:16 | fn z_on_type |
425+
| main.rs:824:5:824:11 | AStruct | main.rs:702:1:702:17 | struct AStruct |
426+
| main.rs:825:5:825:29 | impl_with_attribute_macro | main.rs:770:1:789:1 | mod impl_with_attribute_macro |
427+
| main.rs:825:5:825:35 | ...::test | main.rs:785:5:788:5 | fn test |
417428
| my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
418429
| my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
419430
| my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
@@ -434,7 +445,7 @@ resolvePath
434445
| my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g |
435446
| my2/my3/mod.rs:4:5:4:5 | h | main.rs:56:1:75:1 | fn h |
436447
| my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:23:34 | SourceFile |
437-
| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:805:2 | SourceFile |
448+
| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:826:2 | SourceFile |
438449
| my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:56:1:75:1 | fn h |
439450
| my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:23:34 | SourceFile |
440451
| my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g |
@@ -480,4 +491,7 @@ resolvePath
480491
| proc_macro.rs:8:21:8:23 | syn | {EXTERNAL LOCATION} | Crate(syn@2.0.103) |
481492
| proc_macro.rs:8:21:8:30 | ...::Ident | {EXTERNAL LOCATION} | struct Ident |
482493
| proc_macro.rs:8:21:8:35 | ...::new | {EXTERNAL LOCATION} | fn new |
494+
| proc_macro.rs:16:24:16:34 | TokenStream | {EXTERNAL LOCATION} | struct TokenStream |
495+
| proc_macro.rs:16:43:16:53 | TokenStream | {EXTERNAL LOCATION} | struct TokenStream |
496+
| proc_macro.rs:16:59:16:69 | TokenStream | {EXTERNAL LOCATION} | struct TokenStream |
483497
testFailures

rust/ql/test/library-tests/path-resolution/proc_macro.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,11 @@ pub fn add_suffix(attr: TokenStream, item: TokenStream) -> TokenStream {
88
ast.sig.ident = syn::Ident::new(&format!("{}_{}", ast.sig.ident, suff), ast.sig.ident.span());
99
quote! {
1010
#ast
11-
}.into()
11+
}
12+
.into()
13+
}
14+
15+
#[proc_macro_attribute]
16+
pub fn identity(_attr: TokenStream, item: TokenStream) -> TokenStream {
17+
item
1218
}

rust/ql/test/query-tests/security/CWE-696/BadCTorInitialization.expected

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,11 @@ edges
5959
| test.rs:129:4:130:21 | fn bad3_1 | test.rs:130:5:130:19 | call_target3_1(...) |
6060
| test.rs:130:5:130:19 | call_target3_1(...) | test.rs:124:1:126:1 | fn call_target3_1 |
6161
| test.rs:144:1:144:7 | Attr | test.rs:145:4:147:21 | fn bad3_3 |
62-
| test.rs:144:1:148:1 | fn bad3_3 | test.rs:146:5:146:20 | call_target3_1(...) |
6362
| test.rs:145:4:147:21 | fn bad3_3 | test.rs:146:5:146:19 | call_target3_1(...) |
6463
| test.rs:146:5:146:19 | call_target3_1(...) | test.rs:124:1:126:1 | fn call_target3_1 |
65-
| test.rs:146:5:146:20 | call_target3_1(...) | test.rs:124:1:126:1 | fn call_target3_1 |
6664
| test.rs:150:1:150:7 | Attr | test.rs:151:4:152:13 | fn bad3_4 |
6765
| test.rs:151:4:152:13 | fn bad3_4 | test.rs:152:5:152:11 | bad3_3(...) |
68-
| test.rs:152:5:152:11 | bad3_3(...) | test.rs:144:1:148:1 | fn bad3_3 |
66+
| test.rs:152:5:152:11 | bad3_3(...) | test.rs:145:4:147:21 | fn bad3_3 |
6967
| test.rs:168:1:168:7 | Attr | test.rs:169:4:170:16 | fn bad4_1 |
7068
| test.rs:169:4:170:16 | fn bad4_1 | test.rs:168:1:168:7 | ... .write(...) |
7169
| test.rs:169:4:170:16 | fn bad4_1 | test.rs:168:1:168:7 | ...::stdout(...) |

0 commit comments

Comments
 (0)